三大控制结构与循环

c语言有三大控制结构 顺序结构选择(分支)结构循环结构

分支结构语句:
    if

    if~else

    if~else if

    switch

if 语句 (三种基本类型)

if (表达式) {
    语句
}

作用:当表达式的值为真(非0),就执行语句
“表达式”:任意的C语言合法的表达式都可以
“语句”:
        单语句:只有一条语句
        复合语句:用 {} 把多条语句括起来

eg:
int a = 200, b = 100;                                                                      if (a < b) { // 出现的括号一定要成双成对
    a = 250; // 代码缩进 一般缩进大小(四个空格)是一个 tab 
    printf("%a\n", a);
}

编程建议:不管if后面是单语句,还是复合语句,请先写 {},再到里面补充语句
                   具有良好编程风格

if (表达式) {
    语句1
} else {
    语句2
}

作用:当表达式的值为真(非0)时,就执行语句1,否则就执行语句2
“表达式”:任意合法的C语言表达式都可以
“语句”:   
        单语句:只有一条语句
        复合语句:用 {} 把多条语句括起来

if (表达式1) {
    语句1
} else if (表达式2) {
    语句2
} else if (表达式n) {
    语句n
} ......
  else {
    语句n+1
}

if~else if用来把整个的条件域分多个连续的区间讨论

if语句的嵌套“条件里面分条件”

if () {
    if () {
        语句
    } else {
        语句
    }
} else {
    if () {
    语句
    } else { 
        语句 
    }
    if () {
    语句
        if () {
            语句
        } else {
            语句
        }
    } else {
        if () {
            语句
        } else {
            语句
        }
    }

else匹配问题:
        else 总是与它上面的最近的、未匹配(同级)的if语句匹配

switch语句(开关语句) 

形式:

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

(1) ”表达式“的值必须为整数值(整型、字符型、枚举、有确定值的变量及表达式),即可以列        举的值
(2) ”
常量表达式“的值也必须为整数值(只能是常量或常量表达式,不能是有确定值的变量          及表达式)且每个 case 后面的常量表达式的值必须不相同
(3) 判断顺序是上到下,当某个case后面的常量表达式的值与switch的表达式的值
     相同时,就会开打”开关“,会执行冒号后面的语句,直到有break语句就会提前
     结束switch语句,否则就会轮到下一个case,且不会比较常量表达式的值就直
     接执行冒号后面的语句,直到所有语句执行完毕

(4) break 语句用来提前跳出switch语句。常用的用法时每个case后面都会有一个break
(5) 当所有的case后面的常量表达式都不匹配,这时就会执行default后面的语句,
且也会打       开”开关“

C语言循环种类:
        while
        do~while
        for
        goto语句与if语句构成循环

goto语句:无条件跳转语句

goto 语句标号;
     

"语句标号":在C语言中,把以无符号与某一行的地址相关联
                     格式为在某一行的开始处定义一个符号,然后再加上一个冒号

eg:
        loop:
                n++;
                goto loop;

eg:
                goto loop;
  // 跳过中间部分
                n++;                                                                                                                                  loop:


作用:
(1)与if语句向上跳转构成循环结构,但是我们不要用goto来实现循环
(2)向后跳转可以跳出多重循环结构,linux内核驱动源码用goto跳转
         硬件的反初始化是很常用的用法

(3)如果在goto语句跳过的这个代码段中存在变量定义的话,不影响后续对于相应变                     量的使用。主要影响的是跳过的这段代码中如果有对于相关变量初始化的一个                       操作,那么这个初始化操作它是不生效的

 

注意:goto是无条件跳转语句,导致程序的可读性变差,要慎重使用goto

goto语句模拟if~else

#include <stdio.h>
int main(int argc, char *argv[]) {
    int n;
    scanf("%d", &n);
    n % 2 == 0 && ({goto if_stmt; 1;}); 
    //():把{}变成一个具有返回值的表达式,返回值是{}中最后一个表达式的值,{}把多条语句合并成一个复合语句
    !(n % 2 == 0) && ({goto else_stmt; 1;});
if_stmt:
    printf("%d是偶数\n", n);
    goto if_end;
else_stmt:
    printf("%d是奇数\n", n);
if_end:
    return 0;
}

goto语句模拟while

#include <stdio.h>
int main(int argc, char *argv[]) {
    int n, i = 1;
    scanf("%d", &n);
judge:
    if (i < n) {
        goto stmt;
    } else {
        goto while_end;
    }
stmt:
    printf("%d ", i);
    i++;
    goto judge;
while_end:
    printf("\n");
    return 0;
}

goto语句模拟for

#include <stdio.h>
int main(int argc, char *argv[]) {
    int n, i;
    scanf("%d", &n);
for_1:
    i = 1;
    goto for_2;
for_2:
    if (i <= n) { 
        goto for_4;
    } else {
        goto for_end;
    }
for_3:
    i++;
    goto for_2;
for_4:
    if (i % 3 == 0) { 
        goto for_3;
    }
    printf("%d ", i);
    goto for_3;
for_end:
    printf("\n");
    return 0;
}

while

while (表达式) {
        语句

}

     

作用:当表达式的值为真(非0),就执行”语句“,否则就结束while循环体
           当进入循环体执行完”语句“后,再重复判断表达式的值...

”表达式“:所有合法的表达式都可以

”语句“:
        单语句
        复合语句

编写建议:不管while后面有没有语句,请先写 {},再到里面补充语句

do~while

do {
        语句

} while (表达式);                                                                                                                                         
作用:先无条件执行一次语句,再判断表达式的值,如果表达式的值为真(非0),
           就再执行循环体语句,...直到表达式的值为假(0),那么就结束循环。
"表达式":所有合法的表达式都可以
"语句":
        单语句
        复合语句

   

do~while语句的意义:just do it!

   

编程建议:不管do后面没有语句,请先写 {},再到里面补充语句

for

for (表达式1; 表达式2; 表达式3) {
        语句

}

⭐执行流程:首次进入for循环体先无条件执行一次表达式1,再判断表达式2
                的值,若为真,就执行循环语句,最后执行表达式3,一个循环结束。
                从第二次循环起就不再执行表达式1了,直接判断表达式2的值的真假,
                若为真,就继续循环,若为假,就结束for循环

 "语句":
         单语句
         复合语句

for循环体完全等效于如下的while循环体:

        表达式1;
        while (表达式2) {
            语句
            表达式3;
        }
   

唯一的区别是for循环体中的表达式123都可以为空(表达式2为空,意思判断条件为真),
但是while里的表达式2不能为空

⭐while循环和for循环的区别:一般来说,while更注重循环条件,for更注重循环次数
                                                   当然啦,它俩是可以相互替换

break语句

(1) 用于switch语句中,用于跳出switch语句

(2) 用于循环体中(while/do~while/for),用于跳出它所属的循环

continue语句

continue语句只能用于循环体中(while/do~while/for),用来提前结束本次循环,进入下次循环

注意:for循环中使用continue在提前进入下次循环前,会执行表达式3!

补充

for ( ; y>0; y--)  ; y先--再代入判断

while(y--) ;             先把y代入判断再--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值