当前位置: 首页 > news >正文

4级流程控制

前情回顾:在3级的时候,我们学习到的技能有:运算符的分类、运算符的优先级...


 

概念

什么是流程控制?

选择语句

if 单分支选择

if...else... 双分支选择

if...else if...else 多分支选择

 switch 多分支选择

循环语句

 for 语句

while 语句

do...while 语句


 

概念

什么是流程控制?

答:在C语言中,流程控制是指通过特定的语句和结构来控制程序的执行顺序,使程序能够按照预定的逻辑顺序运行,而不是简单地从头到尾顺序执行代码。


选择语句

if 单分支选择

基本形式如下:

if(表达式)

{

        语句1;

        语句2;

}

当表达式为真时,将进入if语句的语句块中,从头到尾按顺序执行语句;当表达式为假时,不进入if语句块。现在来写一个程序,了解if语句。

程序:

#include <stdio.h> int main()	
{int a=5;if(a>2){printf("判断条件成立:");printf("a是大于2的数");} printf("\n");if(a) //等价于if(a>0) {printf("判断条件成立:");printf("a是大于0的数");} 
}

结果:

当if语句块中只有一条语句时,简写格式为:

if(表达式)  语句;

#include <stdio.h> int main()	
{int a=5;if(a<0) printf("我可能会出来哦\n");printf("我一定出来哦\n");
}

解析:printf("我可能会出来哦\n");属于if语句范围,而printf("我一定出来哦\n");不属于所以一定会执行

结果: 

if...else... 双分支选择

基本形式如下:

if(表达式)

{

       成立语句1;

       成立语句2;

}else{

       不成立语句1;

       不成立语句2;

}

当表达式为真时,它只会进入第一个花括号{}的语句块里执行;当表达式为假时,它只会进入第二个花括号{}的语句块里执行。现在来写一个程序,来了解if..else语句。

程序:

#include <stdio.h> int main()	
{int a=5;if(a<0){printf("判断条件成立:");printf("a是一个负数");	}else{printf("判断条件不成立:");printf("a是一个正数");	}
}

行结果: 

当语句块中只有一条语句时,也有简写的格式:

if(表达式)  成立语句;

else 不成立语句;

#include <stdio.h> int main()	
{int a=-2;if(a<0) printf("a是一个负数");	else printf("a是一个正数");	return 0;
}

结果: 

if...else if...else 多分支选择

if...else if...else 可以实现多种表达式进行选择,基本形式如下:

if(表达式1)

{

       语句1-1;

       语句1-2;

}else if(表达式2){

       语句2-1;

       语句2-2;

}else{

        全不成立语句;

}

 首先判断表达式1的结果是否成立,成立就执行,不成立就判断下一个表达式....如此往复,直到所有的表达式都不成立时,就执行else。根据这个特性,我们来写一个程序。

目的:输入成绩,查看成绩的评级

程序:

#include <stdio.h> int main()	
{int score;printf("请输入你的成绩:");scanf("%d",&score);if(score>=90){	//当score>=90时成立 printf("优秀的成绩");}else if(score>=80){	//当 80<=score<90 时成立 printf("良好的成绩");}else if(score>=60){	//当 60<=score<80 时成立 printf("中等的成绩");}else{		// 当 score<60 时成立 printf("不及格!");}return 0;
}

结果:

观察每个都只执行一条语句,可以使用简写格式:

#include <stdio.h> int main()	
{int score = 70;if(score>=90) printf("优秀的成绩"); else if(score>=80) printf("良好的成绩");  else if(score>=60) printf("中等的成绩"); else printf("不及格!"); return 0;
}

 switch 多分支选择

switch语句也是一种多分支选择结构,优点是结构清晰,基本格式:

switch (expression) {
    case value1:
        // 代码块1
        break;


    case value2:
        // 代码块2
        break;
    // 可以有多个case


    default:
        // 默认代码块
}

可以看到switch使用了break,而break作用是跳出switch语句。在下面会详细讲解一下不使用break的情况。现在写个练习程序,了解switch语句。

目的:判断今天是星期几

程序:

#include <stdio.h> int main()	
{int day;scanf("%d",&day);switch(day){case 1:printf("今天是星期一");break;case 2:printf("今天是星期二");break;case 3:printf("今天是星期三");break;case 4:printf("今天是星期四");break;case 5:printf("今天是星期五");break;case 6:printf("今天是星期六");break;case 7:printf("今天是星期天");break;default:printf("输入不正规!");}return 0;
}

执行顺序:首先定义一个int类型的变量day,用来存储数字。然后使用scanf函数让用户输入一个数字,并且用day存这个数。紧接着执行switch语句,假设此时day的值是5,则会进入case 5的代码块中执行,执行printf函数输出"今天是星期五",然后遇上了break。跳出了整个switch语句, 程序结束。

结果:

现在我们来了解假如不使用break的情况,如下面格式所示:

switch (expression) {
    case value1: // 代码块1      
    case value2: // 代码块2


    default:
        // 默认代码块
}

假设此时expression值为value1,进入case1里面执行完代码块1,没有遇到break就往下执行代码块2(中间也不会判断expression值),然后一直往下执行,结束有两种情况:1、遇到break跳出2、执行完下面所有代码块。

大多数情况都是会使用break来跳出,而有时不使用break也能使代码更加简洁。现在我们来写一段程序。

目的:输入星期几,判断今天是工作日,还是休息日?

程序:

#include <stdio.h> int main()	
{int day;scanf("%d",&day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("今天是工作日");break;case 6:case 7:printf("休息日!!!");	}return 0;
}

程序思路:目前了解到星期1~星期5都是工作日,星期6~星期7都是休息日。它们之间具有连续共同特性,所以相邻之间可以不写代码,直接在队尾写代码并break跳出,即可使用多个case都执行一段相同代码,这减少了一大部分代码量。

结果:

注意事项:

switch语句中case 后面的常量必须是唯一的,也就是不能还在其他case出现。

case后可跟的常量值:如整型变量(case 1、case 0x01...)、字符常量(case 'a'、case 'A')、枚举常量、常量表达式(case 1+2、case 'b'-'a')


循环语句

 for 语句

for语句用于重复执行一段语句块。通常会使用一个增量计数器递增和终止循环。常用于数组遍历等。其基本格式:

for(表达式1; 表达式2; 表达式3)

{

        语句块

}

for语句的执行过程如下:

        1.先执行表达式1

        2.执行表达式2,若其值为真(非0),则执行 {} 括号中的语句块,否则将结束循环

        3.每一次执行完语句块后,再执行表达式3

        4.重复执行步骤 2 和 3,直到表达式2值为假(0),即循环结束

用流程图表示如下:

现在我们来写一个练习程序,了解一下for语句。

目的:求0~100的数累加的和

#include <stdio.h> int main()	
{int sum=0;for(int i=0;i<=100;i++){sum += i;}	printf("0~100的累加和=%d",sum);return 0;
}

注意:在for的循环过程中,只有当i<=100不成立时才结束循环,也就是i=101时

 运行结果:

观察到for语言循环的语句只有一句,同样有简写格式

#include <stdio.h> int main()	
{int sum=0;for(int i=0;i<=100;i++)sum += i;printf("0~100的累加和=%d",sum);return 0;
}

while 语句

while语句创建了一个循环,重复执行直到测试表达式为假或0。while语句是一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环(这就是和下面do...while的区别)。因此,循环有可能不被执行。其基本格式:

while (表达式)

{

        循环语句;

}

for语句等价while语句。现在我们将上面for语句实现的 求0~100数的累加的和 程序 改成while语句。代码:

#include <stdio.h> int main()	
{int sum=0,i=0;while(i<=100){sum += i;i++;	}printf("while实现:0~100的累加和=%d",sum);return 0;
}

结果: 

执行顺序的流程图如下: 

我们同样可以将其while语句实现的程序,进行简写格式,我们只需要稍微修改一下表达式即可,如下所示:
 

#include <stdio.h> int main()	
{int sum=0,i=0;while(++i<=100)sum += i;printf("while实现:0~100的累加和=%d",sum);return 0;
}

解析:我们可以把i的自增放进while的表达式中,因为每次循环都会执行表达式,达到自增的效果。注意这里要使用前自增,因为我们需要i自增后的值来进行关系(<=100)的运算,而不是使用后自增。

do...while 语句

do...while 语句也是循环语句,对比while语句,只有一个区别:不管是否需要循环,那就是do...while语句中的循环体必定会执行一次!其基本格式:

do

{

     循环体;

}while(表达式);

值得注意的是do...while语句的while后要加分号;

程序:

#include <stdio.h> int main()	
{do{printf("我必定来一次!");}while(0);return 0;
}

结果:

可以看到,哪怕do...while语句的表达式一开始就是假,其循环体还是执行了一次,这也就do的原因。

牢记口诀:do...while语句,不管三七二十一,先do了再说!


        在该系列中,文章的前部分采用简短的白话文讲解用法,而后部分采用更深入的角度讲解原理。思考是人类的结晶~如果你觉得有用,给我个点赞、收藏+关注哦~持续更新

相关文章:

  • 复现:DemoGen 用于数据高效视觉运动策略学习的 合成演示生成 (RSS) 2025
  • Docker 常见问题及其解决方案
  • nginx报错-[emerg] getpwnam(“nginx“) failed in /etc/nginx/nginx.conf:2
  • FastAPI + OpenAI 模型 的 GitHub 项目结构模板
  • 未来软件开发趋势与挑战
  • Python+Selenium爬虫:豆瓣登录反反爬策略解析
  • C#调用C++dll 过程记录
  • 【VS】VS2019中使用rdlc报表,生成之前修改XML
  • 【每天一个知识点】模型轻量化(Model Compression and Acceleration)技术
  • 解释 RESTful API
  • 数据结构学习之链表学习:单链表
  • Linux笔记---信号(中)
  • AIGC与数字媒体实验室解决方案分享
  • LabVIEW在电子电工教学中的应用
  • 腾讯云运营开发 golang一面
  • map和unordered_map
  • 树莓派3B+ wiringPi库安装
  • Gin 框架指南(代码+通俗解析版)
  • linux - 权限的概念
  • 嵌入式开发学习日志(数据结构--单链表)Day20
  • 科普|男性这个器官晚到岗,可能影响生育能力
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检
  • “大鼻子情圣”德帕迪约因性侵被判缓刑,还有新的官司等着他
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念
  • “11+2”复式票,宝山购彩者领走大乐透1170万头奖
  • 刘永明|在从普及到提高中发展新大众文艺