C语言程序设计——流程控制(C语言第一个重点)

    技术2025-10-14  4

    1. 什么是流程控制

    概念:程序代码执行的顺序

    流程控制的分类

    一、顺序执行

    程序举例

    交换两个数

    t=a; a=b; b=t;

    后两位四舍五入

    原数乘100 加上0.5 取整 除以100输出

    例如将2.437—>2.44 double x; x=x*100; x=x+0.5; x=(int)x; //x的接受类型任然是double类型 x=x/100; //x=2.44

    二、选择执行

    1.概念:某些代码可能执行,也可能不执行,有选择的执行某些代码
    2.分类
    if语句

    if最简单的用法

    格式:if(表达式) 语句 功能:如果表达式为真,执行语句,反之不执行

    if的范围问题

    if(表达式) 语句A; 语句B; 只控制A的执行或不执行,无法控制语句B一定会执行if(表达式) { 语句A; 语句B; } if都控制

    if…else…用法 是一个语句

    if…else if…else…用法 一个语句

    if(1) 成立执行A A; if else(2) 1不成立,2成立执行B B; else 1,2都不成立,执行C C;

    if语句的嵌套

    if() if() 语句1; else() 语句2; else if() 语句3; else 语句4; 注:if与else的配对关系,else总是与它上面的最近的未佩对的if配对 如果if与else的数目不一样,为实现程序设计者的思想,可以加花括号来确定配对关系 if() { if() 语句1; } else 语句2; 这里的else就与第一个if进行配对了

    举例

    90<=score<=100 写法是错误的 因为:90<=score逻辑值永远为1或0,那么1或0永远小于100,所以执行的结果永远为真(1) 正确的写法:90<=score&&score<=100

    两个变量值得互换

    例:int a=3; int b=5; 方法:加一个另外变量 int t; a,b互换如下 t=a; a=b; b=t;

    对三个变量的值进行排序

    编写代码完成:a最大,b中间,c最小 方法:定义一个中间变量t if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=b; b=t; } if(b<c) { t=b; b=a; a=t; }

    if的常见问题

    空语句问题

    if(3>2); 等价于 if(3>2) ; 这是一个空语句

    错误示范

    if(表达式1); 有一个空语句 A; 第二个语句 else else无法与第一个if语句匹配 B;

    语句执行问题

    if(表达式1) A; else if(表达式2) B; else C; 即使表达式1和2都成立也只会执行A语句

    语句逻辑上有漏洞(虽然不会出错)

    if(表达式1) A; else if(表达式2) B; else if(表达式3) C;

    不合法语句

    if(表达式1) A; else(表达式2) 这样写法不正确:要么去掉(表达式2);要么在else后加if B; switch语句

    一般形式:

    switch(控制表达式) { case常量表达式1: 语句1; break; case常量表达式2: 语句2; break; case常量表达式3: 语句3; break; ....... default: 语句n; break; }

    举例

    scanf("%d",&val); switch(val) { case 1: printf("一层开\n"); break; case 2: printf("二层开\n"); break; default : printf("没有这一层\n")break; }break去掉后,输入1 将输出:一层开和二层开 因为:case1和case2都是程序的入口,先找到入口后再自上而下执行,不再进行判断。

    case后面的称为标签:常量表达式 只能是:枚举常量、数值常量、字符、常变量、宏名

    三、循环执行

    1.定义:某些代码会被重复执行
    2.分类

    for语句

    一般形式为:for(表达式1;表达式2;表达式3) 注:for语句中的表达式可以部分或者全部省略,但是两个;不能省略。

    表达式2是一个逻辑表达式,当表达式2为假就跳出for循环 #include <stdio.h> int main(void) { int a=-1,b=2; for(; a++,b--; ) printf("%d %d",a, b); } 程序的输出结果为:-1 1 0 0 注:for循环每次判断表达式a++,b--的值,这是逗号表达式,首先计算a++,再计算b--, 整个表达式的值是b--的值,若逗号表达式值不为0,则执行for循环

    执行过程

    for(i=1; i<4; ++i) 表达式(1,2,3) sum = sum + i; 表达式 4 printf("sum=%d\n", sum); 先执行1,在执行2(2成立的话),执行4,再执行3, 3执行完表示一次循环结束。 i=1,1<=4 成立 sum=1,i=2 第一次循环结束 i=2,2<=4 成立 sum=1+2=3,i=3 第二次循环结束 i=3,3<=4 成立 sum=1+2+3=6, 第三次循环成立 i=4,4<=4 成立 sun=1+2+3+4=10,i=5 第四次循环成立 i=5,5<=4 不成立 执行下一个语句 i的最终值是5

    多个for循环的嵌套使用

    for(1;2;3) for(4;5;6) A; B; 先执行:1->2(成立)->4->5(成立)->A->6 一次循环结束 例如: 内部:6->5(成立)->A->6->5(不成立) 外部:->3->2(成立)->4->5(成立)->A->6 ->5(不成立)->3->2(不成立)->B 结束

    while语句

    一般形式

    while(表达式) { 循环体 }

    执行顺序

    while(表达式) 语句; 表达式成立执行下面语句

    举例

    求回文数 int main(void) { int val; int m; int sum=0; scanf("%d",&val); m=val; while(m); { sum=sum*10+m%10; m=m/10; } if(sum==m) printf("YES\n"); } ``` 整数求逆 对一个整数做%10得到它的个位数 对一个整数做/10,去掉它的个位数

    do…while语句

    一般形式:

    do { 循环体语句 }while(表达式); 先执行循环体里面的语句,然后判断表达式是否成立,如果表达式成立继续执行循环体语句

    do…while并不等价于for,也不等价于while

    主要用于人机交互 例如: char ch; do { ... ... printf("想继续吗?(Y/N)"); scanf("%c",&ch); }while('Y'==ch||'y'==ch);

    break语句和continue语句

    break语句作用

    1. 如果用于循环是用来终止循环的 2. 如果用于switch则用来终止switch break不能直接用于if,除非if属于循环内部的一个字句 举例: for(i=1;i<3;++i) { if(3>2) break; 终止for循环,一次也不输出哈哈 printf("哈哈\n"); } 注:在多层循环中break只能终止距离它最近的循环

    continue语句的作用

    用于跳过本次循环余下的语句,转去判断是否需要执行下次循环 例: for(1;2;3) { A; B; continue; 执行完本语句后会执行语句3,C,D会被跳过去 C; D; } while(表达式) { A; B; continue; C,D会被跳过去,继续判断表达式是否成立 C; D; }
    3. 几种循环语句的比较

    for循环与while循环的相互比较 for( ;条件; ) == while(条件)

    for(1;2;3) A; 等价于 1; while(2) { A; 3; }

    例子:

    for(i=1;i<101;++i) { sum=sum+i; } 等价于 i=1; while(i<101) { sum=sum+i; ++i; }

    for while do…while使用时刻 如果有固定次数使用for 如果必须执行一次用do…while 其他情况用while

    如何看懂一个程序

    分三步:

    流程

    知道程序的流程是如何运行的

    每个语句的功能

    试数

    Processed: 0.015, SQL: 9