美文网首页
C语言流程控制

C语言流程控制

作者: Cc_5691 | 来源:发表于2018-08-30 23:14 被阅读0次
  • 顺序结构:

    • 按书写顺序从上至下依次执行
  • 选择结构

    • 对给定的条件进行判断,再根据判断结果来决定执行代码
  • 循环结构

    • 在给定条件成立的情况下,反复执行某一段代码

选择结构if

- if选择结构格式

 -  第一种格式:
  if(条件表达式){
       条件成立执行的语句
 }
  其它语句
 
 第二种格式:
  if(条件表达式){
      条件成立执行的语句
  }else{
 条件不成立执行的语句
 }
 第三种格式:
  if(条件表达式1){
       条件满足执行的语句
  }else if(条件表达式2){
      条件满足执行的语句
  }else if(条件表达式3){
       条件满足执行的语句
  }else{
      条件不成立执行的语句
 }

if注意点

  • 1.if可以省略大括号
    • 如果if省略大括号, 那么只有紧随其后的那条语句受到控制

int age = 17;
if(age >= 18)
printf("开网卡\n");//条件不满足,不执行
printf("买饮料\n");

  • 2.{}可以单独出现, {}出现的时候代表是一个代码块
  • {
    int age = 88;
    printf("age = %i\n", age);
    }
    printf("age = %i\n", age);
  • 3.如果if省略了大括号, 那么不能再后面直接定义变量

    从表面上, num的作用域是从定义的那一行开始, 直到遇到}结束或者return为止
    但是从实际上而言, num只有if的条件满足才会执行, 所以两者冲突

int age = 18;
if(age >= 18)
int num = 666;
printf("开网卡\n");

  • 4.除了if以外elseif还有else也可以省略大括号
    省略大括号之后的特点和if省略之后一样
    只有紧随其后的语句受到控制
    也不可以直接定义变量

    int age = 41;
    if(age >= 40)
    printf("40\n");
    else if(age >= 30)
    printf("30\n");
    else
    printf("other\n");
    printf("40 2222\n");

    • 5.任何数值都有真假性

    if(0){
    printf("abc");
    }
    int age = 3;
    if(age = 18){
    printf("被执行了\n");
    }

    if(18 == age){ // 在企业开发中如果要判断是否相等, 建议把常量写在起那么, 把变量写在后面
    printf("被执行了\n");
    }

    double num = 3.14;
    // 在企业开发中一定不要使用==来判断两个小数是否相等
    // 因为小数可能出现精度问题
    // 如果在企业开发中要判断两个小数是否相等, 那么建议使用 >= <=
    if(3.14 == num){
    printf("是3.14\n");
    }

  • 6.如果if else省略大括号的时, else会自动匹配距离自己最近的那个if
    // 但是有一个前提条件, 就是这个if没有被其它的else匹配
    // 注意点: 编译器会把if else看做是一个整体

// if(0)
// if(1)
// printf("A\n");
// else // 和if(1)匹配
// printf("B\n");
// else // 和if(0)匹配, 因为if(1)已经被匹配过了
// if (1)
// printf("C\n");
// else // 和if(1)匹配
// printf("D\n");

一般企业开发中不会省略

// if(0)
// if(1)
// printf("A\n");
// else if(1) // 和if(1)匹配
// printf("B\n");
// else
// printf("c\n");
// else // 和if(0)匹配, 因为if(1)已经被匹配过了
// if (1)
// printf("D\n");
// else if(1) // 和if(1)匹配
// printf("F\n");
// else
// printf("G\n");

  • 7.if可以嵌套if

// if(1){
// if(0){
// printf("A\n");
// }else{
// printf("B\n");
// }
// }else{
// if(1){
// printf("C\n");
// }else{
// printf("D\n");
// }
// }

选择结构switch

  • switch选择结构的格式:
    switch(表达式){
    case 表达式1: // 相当于else if
    被表达式1控制的语句;
    break;
    case 表达式2: // 相当于else if
    被表达式2控制的语句;
    break;
    default: // 相当于else
    被default控制的语句;
    break;
    }

    • 执行流程:
      1.计算switch后面()中表达式的结果
      2.利用计算的结果从上至下的和switch后面{}中的case的表达式的值一次比较
      3.一旦发现switch表达式的值和case表达式的值相同, 就执行该case后面的语句
      4.一旦某个case被执行了, 其它的case就不会执行了
      5.如果所有case表达式的值和switch表达式的值都不相等, 那么就执行default后面的语句
int day = 3;
switch(day){
case 1:
    printf("星期一\n");
    break;
case 2:
    printf("星期二\n");
    break;
default:
    printf("Other\n");
    break;
}
  • 注意点
    • switch条件表达式的类型必须是整型, 或者可以被提升为整型的值(char、short)


  • default书写的位置, 可以随便写
    // 无论default是否是写在switch语句的最后, 都会最后执行
    // 如果default不是写在最后的, 那么break不能省略, 省略就会发生穿透问题
    // 记住一点: 永远把default写在最后
  • switch后面的()中只能表达式/变量/常量, 并且必须是整型或者能够被提升为整型的

// int num = 1;
// switch(num){ // 放一个变量
// switch(2){ // 放一个常量
// switch(1 + 1){ // 放一个表达式
// switch(1.1){ // 会报错, 小数不能提升为整型
// 不会报错, char类型可以提升为int类型
// char类型底层的本质存储的是ASCII码, 而ASCII码就是整型
// switch('a'){
// case 1:
// printf("A\n");
// break;
// case 2:
// printf("B\n");
// break;
// default:
// printf("Other\n");
// }

  • switch的case后面只能放常量和表达式, 并且必须是整型或者能够被提升为整型的

// int num = 1;
// switch(2){
// case 1: //常量
//// case num: // 变量, 会报错
// printf("A\n");
// break;
// case 1 + 1: // 表达式
// printf("B\n");
// break;
// default:
// printf("Other\n");
// }

  • switch的case后面的值不能重复

// int num = 1;
// switch(2){
// case 2:
// printf("A\n");
// break;
//// case 1: // 会报错
// case 1 + 1: // 会报错
// printf("B\n");
// break;
// default:
// printf("Other\n");
// }

  • switch的case后面不能定义变量
    如果要在case后面定义变量, 必须在case后面加上{}

switch(1){
case 1:{
int num = 666; // 会报错
printf("A\n");
break;
}
case 2:
printf("B\n");
break;
default:
printf("Other\n");
}
return 0;
}

循环结构

  • C语言中提供了三大循环结构, 分别是while、dowhile和for

循环结构while

  • 格式:
    while ( 循环控制条件 ) {
    循环体中的语句;
    能够让循环结束的语句;
    ....
    }
  • 示例

int count = 0;
while (count < 3) { // 循环控制条件
printf("发射子弹~哔哔哔哔\n"); // 需要反复执行的语句
count++; // 能够让循环结束的语句
}

whlie循环注意点
  • 任何数值都有真假性

int count = 0;
while (count < 3) { // 循环控制条件
printf("发射子弹~哔哔哔哔\n"); // 需要反复执行的语句
count++; // 能够让循环结束的语句
}

  • 当while后面只有一条语句时,while后面的大括号可以省略


  • 如果while省略了大括号, 那么后面不能定义变量

int main(){
while (1) // 死循环
int num = 10; // 报错
// 没有能够让循环结束的语句
}

  • while循环和if一样, 可以嵌套其它合法代码
    • while(条件表达式){
      被控制的语句;
      }
      特点: 会先判断条件是否满足, 满足就执行{}中的代码

    • do{
      被控制的语句;
      }while(条件表达式);
      特点: 不会像判断条件是否满足, 会先执行一次{}中的代码, 然后再判断条件

 while和dowhile的区别:
 while会先判断条件再执行循环体
 dowhile会先执行循环体再判断条件
while(0){
    printf("被控制的语句\n");
}

do{
    printf("被控制的语句\n");
}while (0);

// 在大部分的情况下while和dowhile是可以互换的
// 在企业开发中如果能够互换, 一般我们会使用while

循环结构for

  • 格式

for(初始化表达式;循环条件表达式;循环后的操作表达式) {
循环体中的语句;
}

  • 实例

for(int i = 0; i < 10; i++){
printf("发射子弹~哔哔哔哔\n");
}

  • for循环执行流程
    +首先执行"初始化表达式",而且在整个循环过程中,只会执行一次初始化表达式

    • 接着判断"循环条件表达式"是否为真,为真执行循环体中的语句
    • 循环体执行完毕后,接下来会执行"循环后的操作表达式",然后再次判断条件是否为真,为真继续执行循环体,为假跳出循环
    • 重复上述过程,直到条件不成立就结束for循环
  • for循环注意点:

    • 和while一模一样
    • 最简单的死循环for(;;);
  • for和while应用场景

    • while能做的for都能做, 所以企业开发中能用for就用for, 因为for更为灵活
    • 而且对比while来说for更节约内存空间

四大跳转

  • C语言中提供了四大跳转语句, 分别是return、break、continue、goto

  • break:

    • 立即跳出switch语句或循环
    • 应用场景:
      • switch
      • 循环结构
  • 注意点

    • break离开应用范围,存在是没有意义的
  • continue

    • 结束本轮循环,进入下一轮循环
    • 应用场景:
      • 循环结构
  • continue注意点:

    • continue离开应用范围,存在是没有意义的
  • goto

    • 这是一个不太值得探讨的话题,goto 会破坏结构化程序设计流程,它将使程序层次不清,且不易读,所以慎用
    • goto 语句,仅能在本函数内实现跳转,不能实现跨函数跳转(短跳转)。但是他在跳出多重循环的时候效率还是蛮高的
  • return

    • 结束当前函数,将结果返回给调用者
    • 不着急, 放一放,学到函数我们再回头来看它

循环嵌套

  • 循环结构的循环体中存在其他的循环结构,我们称之为循环嵌套
    • 注意: 一般循环嵌套不超过三层
    • 外循环执行的次数 * 内循环执行的次数就是内循环总共执行的次数
  • 循环优化
    • 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 跨切循环层的次数

for (col=0; col<5; col++ ) {
// 高效率:长循环在最内层
for (row=0; row<100; row++) {
sum = sum + a[row][col];
}
}

for(int i = 0; i< 5; i++) {
for(int j = i; j < 5; j++) {
printf("*");
}
printf("\n");
}

相关文章

  • 09-Go语言流程控制-指趣学院

    Go语言流程控制基本概念 Go语言流程控制和C语言一样, 也有三大流程控制结构顺序结构(默认结构)选择结构(if ...

  • C语言流程控制-----if

    循环结构的种类 顺序结构 选择结构 循环结构 顺序结构 从上到下依次执行 选择结构 if条件循环 三种格式第一种格...

  • C语言流程控制-----for

    for 循环结构 for循环各部分作用初始化表达式:当循环开始时定义并赋值,会且只会被执行一次循环条件表达式:1、...

  • C语言流程控制

    顺序结构:按书写顺序从上至下依次执行 选择结构对给定的条件进行判断,再根据判断结果来决定执行代码 循环结构在给定条...

  • C语言流程控制☀️

    版权声明:本文为博主原创文章,未经博主允许不得转载。 一、流程控制结构 (1)顺序结构:按书写顺序执行每一条语句。...

  • 控制程序流程

    title: c++之控制程序流程tags: 语言工具 c++categories: c++date: 2019-...

  • Swift—分支

    *分支if* * Swift 提供了类似 C 语言的流程控制结构(if/switch/for/while/dowh...

  • C语言流程控制-----while

    while循环结构 格式while(条件表达式){语句}构成循环结构的几个条件循环控制条件循环退出的主要依据,来控...

  • C语言流程控制-----switch

    switchswitch是一种选择结构switch格式:switch (条件表达式/常量/变量){case 常量/...

  • C语言流程控制语句

    C语言系列目录 C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语...

网友评论

      本文标题:C语言流程控制

      本文链接:https://www.haomeiwen.com/subject/cecjwftx.html