概述
在学习c将近30天后,我对于c语言的基础的一些知识也有了一些了解,同时加入c站有40多天,也拜读过多位大佬写过的文章,总觉得自己也该行动起来,写一些自己在学习中对c语言的理解。
于是,便有了此篇文章,望一起学习的同学们能现在就开始行动起来。????????
目录
分支
if-else
switch
switch多个标签执行一条语句
if-else与switch语句多重镶嵌形式的比较
循环
while语句
for语句
使用continue关键字while与for的区别
do while语句
总结
分支
if-else
首先先大概了解一下if语句的作用。
if语句的通用形式我就不写出来了,因为我想接下来我画的图可能更有帮助
if语句最简单的形式
图画形式:
代码形式:
if(expression)
statement
表达式为真,执行语句;
表达式为假,按顺序执行后面的代码
if-else
图画形式:
代码形式:
if(expression)
statement
else
statement
表达式为真,执行下面的语句;
表达式为假,执行else控制的语句。
if语句的上述这两种形式是最常用的,但同时还有一种句式
多重if-else语句镶嵌
图画形式:
代码形式:
if(expression)
statement
else if(expression)
statement
else if(expression)
statement
......
else
statement
这是一个多分支的if语句,看起来跟后面要学的switch语句作用类似,但其实它们各有各的优点。
其实上面那些看起来有点长的if语句,我们皆可以看成是一条语句,或者说是一条复合语句
if(expression)
statement
else
{
if(expression)
statement
}
//其实跟下面的代码表达效果一样
if(expression)
statement
else if(expression)
statement
//因为if语句可以看成是一个看起来很大的复合语句
当然我建议使用第二个写法,因为它更加美观
if语句就讲到这些,用法还是得看实际情况
switch
switch语句是一条多分支语句,跟多重镶嵌的if语句类似,老样子还是先用图画的形式表现出来
图画形式:
代码形式:
switch(expression){
case label1:
statement
break;
case label2:
statement
break;
case label3:
statement
break;
......
case labeln:
statement
break;
default:
statement
}
这里有几个非常要注意的点
1.expression必须是整型表达式,也就是int、short、long、long long、char这几个类型
2.label也就是常量的意思,标签必须是常量,否则会出错
switch的用法比较单一,但是不可否认的是它确实要比if语句的多重镶嵌形式要更加简洁明了,代码可读性也更高
大家可能看到case、break、default这三个关键字,由于这篇文章是详谈分支与循环,我就不多加解释了,只要知道case在这里是检查标签的用处
break是跳出的意思(等下这个重点讲)
default用于处理其他未定义的标签
switch多个标签执行一条语句
有的时候要令一条命令符合多个标签中的任一一个就能输出,那此时我们应该用switch语句怎么去写?(我的语言表达可能不能完全表达我的意思,十分抱歉????)
图画形式:
代码形式:
switch(expression){
case label1:
case label2:
statement
break;
case label3:
case label4:
statement
break;
case label5:
case label6:
statement
break;
......
default:
statement
}
当满足label1或label2时第一条语句就会执行
如果要问这是为什么,我们就应该了解到
在switch语句中,当一个标签后的语句执行后,计算机如果没有检查到break以跳出switch语句的话,它会接着向下执行,即使不满足下面的标签,直到遇到一个break或者switch语句执行到结尾
如
switch(expression){
case label1:
statement1
case label2:
statement2
case label3:
statement3
case label4:
statement4
}
***********************
如果满足label1标签,计算机会将
statement1、statement2....
都执行
所以在使用switch语句是一定要检擦,是否有漏掉break
除非你是故意的!
if-else与switch语句多重镶嵌形式的比较
要对比这两种多分支语句的适用情景,我举两个例子来更直观的展示
例子一:
假设S市的一个月水费规则如下:
居民用水不超过5吨,每吨3元
居民用水超过5吨低于9吨,每吨4.5元
居民用水超过9吨后,每吨5元
如何知晓某居民一个月水费为多少呢?
通过上面的规则我们可以先列一个方程
设:x为用水吨数,fx为水费
现在要求我们用代码的形式表现出来,我们应该用那种语句来表现它呢?
是的,只能是if-else的多重镶嵌形式来表现,因为switch语句分支只能判断整数,而不能是一个数的范围
if(x>=0&&x<=5)
fx=3*x;
else if(x<=9)
fx=4.5*(x-5)+15;
else
fx=5*(x-9)+23;
例子二:
如果我们要写一个用户交互的菜单,对用户输入的一个选择进行判定,用哪种形式更好呢
菜单如下
****************************
* 1 进入游戏 *
* 2 选项 *
* 3 设置 *
* 0 退出游戏 *
****************************
用户选择输入{1、2、3、0}其中任一数以供程序判断
那我们该如何设置使用哪种形式呢?
其实都可以,只是用switch更加简洁,且计算机运行更快,当然以我们人的感知来说,这两者的运行速度几乎是没有区别的
两种代码:
//input为int型,接受用户输入
//startgame()实现“开始游戏”功能
//choice()实现“选择”功能
//set()实现“设置”功能
//if-else形式
if(input==1)
startgame();
else if(input==2)
choice();
else if(input==3)
set();
else if(input==0)
printf("退出游戏");
else
printf("选择错误");
//switch形式
switch(input)
{case 1:{
startgame();
break;}
case 2:{
choice();
break;}
case 3:{
set();
break;}
case 0:{
printf("退出游戏");
break;}
default :
printf("选择错误"); //default关键字用于处理其他非法输入
}
可以清楚看到下面switch句式更清楚美观!
goto语句这个分支语句其实在c中的运用不多,因为它能干的,循环能干,而且更加规范,所以我就不写这个语句了,想了解的话去百度一下(绝对不是因为我懒????)
循环
while语句
如果你想写一个从一到十依次打印在屏幕上的程序,你该怎么办?
没错,写一个循环!
这是一个从1打到10的循环语句
int i = 1 //从1开始
while(++i<=10)
printf("%d",i);
***************************
屏幕显示:
1 2 3 4 5 6 7 8 9 10
这是while语句的通用形式
while(expression)
statement
是否感觉到跟if语句的通用形式相似
只不过if语句中的statement只执行一次
而while却是多次
当然,这里要注意的是一定要给控制表达式进行迭代,否则可能会产生死循环
for语句
for语句可以是看作while语句的加强版,因为在你写下for循环时,它的格式要求你把初始化,测试条件,更新放在一起,这样你写出循环能够尽可能的避免出现死循环的现象
图画形式:
代码形式:
for(initialize;test;update)
statement
程序进入for循环,先初始化,然后进行测试
测试的值为真,进入循环
运行一遍,再更新,再测试
循环往复
当然,for()中可以不依初始化,测试.....来写程序
比如说
for(;test;)
statement
这样写跟单纯的while语句形式上几乎一模一样,可能只是关键字不一样,且多了两个‘ ; ’而已
当然,其他想怎么写都可以(尽量不要太长,否则可读性就不高了)
使用continue关键字while与for的区别
continue关键字用于处理继续循环却不继续运行接下来的代码
while循环使用continue ,如:
while(test_1){
statement1
if(test_2)
continue;
statement2
}
如果满足test_1,进入循环 ………………步1
运行statement1……………………………步2
如果满足test_2…………………………….步3
continue,回到test_1,再次循环,statement2就不执行了
for循环使用continue ,如:
for(initialize;test_1;update){
statement1
if(test_2)
continue;
statement2
}
先初始化,再进入test_1
值为真,进入循环,执行statement1
如果满足test_2
continue,直接更新,再进行test_2
要说有什么不同的话,只有初始化和更新了
如果说有什么用处的话,看你自己有什么想法喽
在此,我也不多加赘述了
do while语句
这也是一个循环
不过这个循环和上面两个不一样的一点在于
它的测试环节在进行一次循环后
也就是说,不管怎样,只要进入了这个循环,无论如何
循环必定进行一次
图画形式:
代码形式:
do
statement
while(expression);
记得do while中while(expression)后必须加‘ ; ’
总结
在此,分支与循环该讲的已经差不多都讲到
读者请注意,goto语句尽量避免使用,它会让你写的代码混乱不堪
同时,我也希望看过此文的诸位能共同进步
文章错误的地方欢迎大家指正
谢谢!
作于2022/2/23
21:50
最后
以上就是幸福月饼为你收集整理的C语言——详谈分支与循环(初学者感到极度舒适^_^)的全部内容,希望文章能够帮你解决C语言——详谈分支与循环(初学者感到极度舒适^_^)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复