博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C语言》-(流程控制:顺序结构、选择结构、循环结构)
阅读量:5901 次
发布时间:2019-06-19

本文共 7129 字,大约阅读时间需要 23 分钟。

一、顺序结构

  • 默认的流程结构,按照书写的顺序执行;

二、选择结构

  • 概念:对给定的条件进行判断,根据判断结果来决定执行那一段代码;

1. if语句

  • if语句的基本使用

/* 1.if的第一种结构 if(条件) {    语句1;    语句2;    ...... }  2.if的第2种结构 if(条件1) {    语句1;    语句2;    ...... } else {    语句3;    语句4;    ....... }  3.if的第3种结构(按顺序判断条件,遇到某个条件成立就执行其代码(也说明该条件前的所有条件都不成立),执行完不再对条件进行判断)  if(条件1) {    语句1;    语句2;    ....... } else if(条件2) {    语句3;    语句4;    ....... } else if(条件3) {    语句5;    语句6;    ....... } else {  // 前面条件都不成立就来到这里    语句7;    语句8;    ....... }   4.if的第4种结构 if(条件)    语句1; // 条件成立就执行语句1    语句2; // 语句2与if语句没有关系,必然执行    ....... */#include 
int main(){ /* // 练习1 int count = 40; if (count > 50) { printf("开班!!!\n"); printf("准备机器!!!\n"); } else { printf("不开班!!!\n"); printf("不准备机器!!!\n"); }*/ /* // 练习2 int a = 5; if (a==10) { printf("a=10\n"); } else if(a==5) { printf("a=5\n"); } else if(a==3) { printf("a==3\n"); } else { printf("a=其他值\n"); }*/ /* //练习3 int a = 10; if (a++ > 10) // 先将a=10 与 10 比较判断(假),再加1 即 a=11 { printf("A\n"); } else if(a++ > 5) // 此时a=11,先将a=11 与 5 比较判断(真,下面的条件就不再进行运行、判断,) 再让a加1 即a=12 { printf("B\n"); } else if(a++ > 3) // 由于条件2成立了,一下代码不再进行运行、判断,a不会再进行加1操作 { printf("C\n"); } else { printf("D\n"); } printf("a的值是%d\n", a); // 运行结果为:B a的值是12 */ // 练习4 int a = 10; if(a > 11) // 条件没有成立,不会执行哈哈哈哈,但还是会执行嘿嘿嘿嘿 printf("哈哈哈哈\n"); printf("嘿嘿嘿黑\n"); // 此语句与if语句没有关系,必然会执行 // 运行结果为: 嘿嘿嘿嘿 return 0;}
  • if语句的陷阱

陷阱一:比较大小时,常量放在左边,变量放在右边

int a = 10431;if (a == 0) // 如果少写了一个 =  ,即:a = 0; 相当于赋值操作,而且不会报错,没有提醒!!!{  语句1;}else{  语句2;}/* 总结:比较大小时,常量放在左边,变量放在右边即:if (0 == a)  如果少写一个 = ,即:0 = a; 此时由于常量不能被赋值,会报错提醒!!!*/

 

陷阱二:注意赋值运算符 = 不要写成了 ==

int a = 10;a = 15; // 如果多写了一个 = ,即:a == 15; 此时有一个警告,并不会报错,但是并没有对a再次赋值为15,a还是等于10;printf("%d", a);/*总结:注意赋值运算符 = 不要写成了 == ,后果很严重!*/

 

陷阱三:if后面不要随便写分号

if (5 > 6); // 多写了一个分号; 导致大括号里面的代码成了一个代码块,必然会执行{  printf("A");}// 总结:if后面不要随便写分号   ;

 

陷阱四:作用域问题

if (10 > 6);{  int a = 5; // 变量a的作用域为if后面的大括号内}         // 变量a再内存中被销毁了printf("%d", a);// 解释:作用域问题:a只在大括号内有效,执行到printf函数时,变量a已经被回收,就会报错:(error: use of undeclared identifier 'a'),使用了未定义的标识符;

 

陷阱五:作用域不明确

#include 
int main() {
  if (10 > 6)    int a = 5; }// 解释:从整个代码来看,变量a是属于main函数,但是对于if语句来讲,变量a的作用域只在if语句内有效,会造成变量a的作用域不明确问题;// 报错信息:error: expected expression// 总结:如果要在if语句后面的代码中定义新的变量,必须用大括号扩住
  •  if语句代码练习:

/*输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)A:90~100B:80~89C:70~79D:60~69E:0~60 */#include 
int main(){ /* 方式1:性能差 每个if语句都要进行判断 // 1.提示用户输入一个分数 printf("请输入一个分数:\n"); // 2.接受用户输入的分数 int score = 0; scanf("%d", &score); // 3.判断等级 if(score >= 90 && score <= 100){ //不能写成 if(90 <= score <= 100),这种写法是从左向右执行,即先运算 90 <= score ,再运算 score <= 100; printf("A\n"); } if(score >= 80 && score <= 89){ printf("B\n"); } if(score >= 70 && score <= 79){ printf("C\n"); } if(score >= 60 && score <= 69){ printf("D\n"); } if(score <= 59){ printf("E\n"); } */ /* 方式2:性能中等 // 1.提示用户输入一个分数 printf("请输入一个分数:\n"); // 2.接受用户输入的分数 int score = 0; scanf("%d", &score); // 3.判断等级 if(score >= 90 && score <= 100){ //不能写成 if(90 <= score <= 100),这种写法是从左向右执行,即先运算 90 <= score ,再运算 score <= 100; printf("A\n"); } else if(score >= 80 && score <= 89){ printf("B\n"); } else if(score >= 70 && score <= 79){ printf("C\n"); } else if(score >= 60 && score <= 69){ printf("D\n"); } else { // 此句代码也可以省略条件,因为代码能来到这里说明前面的条件都不成立 printf("E\n"); } */ // 方式3:性能最优 // 1.提示用户输入一个分数 printf("请输入一个分数:\n"); // 2.接受用户输入的分数 int score = 0; scanf("%d", &score); // 3.判断等级 if(score >= 90 && score <= 100){ //不能写成 if(90 <= score <= 100),这种写法是从左向右执行,即先运算 90 <= score ,再运算 score <= 100; printf("A\n"); } else if(score >= 80){ // 代码能来到这里说明前面的条件不成立,即score < 90 printf("B\n"); } else if(score >= 70){ printf("C\n"); } else if(score >= 60){ printf("D\n"); } else { // 此句代码也可以省略条件,因为代码能来到这里说明前面的条件都不成立 printf("E\n"); } return 0;}

 

2.switch语句

  • 格式:

switch (数值/变量)

{

  case 数值1:

    语句1;

    break;

  case 数值2:

    语句2;

    break;

  ... ...

  default:

    语句8;

    break;

}

注意:1.break是推出整个switch语句的标志

     2.如果case后面没有写break;就会执行后面的所有case中的语句,不再判断,知道遇到break为止,但是有时候故意不掉了break。

 

  •  switch语句的注意点:

#include 
int main(){ char a = '+'; int b = 10; int c = 15; // 注意点1:如果要再case后面定义新的变量,必须用大括号扩住 /* // 错误写法:变量sum和minus作用域不明确,看着是switch后面的大括号,其实是case后面的大括号,此时要在case后面加大括号扩住 switch (a) { case '+': int sum = b + c; printf("和是%d\n", sum); break; case '-': int minus = b - c; printf("差是%d\n", minus); break; }*/ switch (a) { case '+': { int sum = b + c; printf("和是%d\n", sum); break; } case '-': { int minus = b - c; printf("差是%d\n", minus); break; } } return 0;}

 

 三、循环结构

 1.while语句

  • 格式:

while (条件)

{

  语句...;

  ...

}

注:1.如果一开始条件就不成立,就永远不会执行循环体;

  2.条件成立就执行,执行完就再次判断,如果还成立就再次执行;

    3.大括号内的内容较循环体;
 
  •  continue:直接结束本次循环,进入下次循环

例:
while (count < 50)
{
  count ++;
  if (count % 10 == 0)
{
  continue;
}
printf("%d", count);
}
 
解释:count % 10 == 0时,即count为10的整数倍时,就会执行continue(结束本次循环,不再输入,而直接进入下次循环)
 
  • break:结束整个while循环

例:

while (count < 50)

{

  count ++;

  printf("%d", count);

  if (count == 20)

  {

    break;

  }

}

解释:当count == 20时,直接结束整个while循环

 

  • while代码练习一:

 运行结果:

 

  • while语句练习二

 

运行结果:

 

  • while语句总结:

1.运行原理:

    • 如果一开始条件就不成立,永远不会执行循环体
    • 如果条件成立,就会执行一次循环体,执行完毕后,再次判断条件是否成立........

2.continue

    • 结束本次循环直接进入下次循环;

3.break

    • 直接结束整个while循环。
 

2.do while循环语句

  • 格式:

do
{
  循环体;
} while (条件);
 
  • while和do while的区别:

1.while语句和do while语句有时候可以互换

2.while语句在执行时,第一次就会判断条件是否成立;

 do while语句在执行时,第一次不管条件是否成立,都会执行(至少执行一次);

 

3.for循环语句

  • 格式:

for (语句1; 条件; 语句2)
{
  循环体;
}
 
说明:语句1:初始化语句;
     语句2:增量语句;(执行完循环体后,再执行的语句)
 
  • 运行原理:

    1.for循环一开始就会执行一次语句1,并且整个for循环只会执行一次;

    2.判断条件是否成立,如果成立,就会执行循环体,然后就会执行语句2,再次判断条件是否成立..........

 
  • for循环使用注意:

  注意点一:不要随便在for()后面写分号;

for (int i = 10; i < 5; i++);{  printf("哈哈"); // 加上分号后,大括号里面的内容就成了一个独立的代码块,与for循环没有关系;}

 

  注意点二:作用域不明确(错误)

for (int i = 0; i < 5; i ++)  int a = 10;
 

  注意点三:作用域错误

for (int i = 0; i <5; i++){  int a = 20;}printf("%d", a);

 

  注意点四:

int a = 10;for (int i = 0, a = 9; i < 5; i++){  int i = 10; // 这里不会报错,两个变量i的作用域是不一样的  int a = 11;  printf("a = %d", a); // 首先在{}内找,没有找到就会去for()循环内找,还没有找到就会去for循环外招}

 

  注意点五:最简单的利用for循环实现的死循环

for( ; ;);    // 条件默认为真!

 

四、break和continue的区别

1.break

  • 使用场合:

  1. switch语句:退出整个switch循环;
  2. 循环语句:退出整个循环   (while循环、do while循环、for循环)
  • 注意点:

在嵌套循环中,只对最近的循环结构有效。
 

2.continue

  • 使用场合:

循环结构:结束当前这次循环,直接进入下一次循环   (while循环、do while循环、for循环)
  • 注意点:

在嵌套循环中,只对
最近的循环结构有效。
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/unique-ios/p/4266601.html

你可能感兴趣的文章
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
在 SELECT 查询中使用表表达式
查看>>
静态路由和默认路由
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
数据批量导入Oracle数据库
查看>>
调用lumisoft组件发邮件 不需要身份验证 不需要密码
查看>>
DW 正则
查看>>
抓屏原理
查看>>
UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出
查看>>
扩展 DbUtility (1)
查看>>
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
查看>>