C语言初阶笔记分支和循环语句
Posted Do
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言初阶笔记分支和循环语句相关的知识,希望对你有一定的参考价值。
目录
1.什么是语句?
C语言中由一个分号 ; 隔开的就是一条语句。
比如:
printf("hehe");
1+2;
2.分支语句(选择结构)
(1) if语句
那么If语句的结构是什么呢?
语法结构:
①if(表达式)
语句;
②if(表达式)
语句1;
else
语句2;
③多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
在if表达式中非0为真,则执行语句;0为假则不执行语句。
if语句中的易错点(这里通过截图和讲解的方式):
第一种情况:
在这里我们想要输出的跟实际输出的不一样,他会打印成年,不能谈恋爱,这显然是错的。原因是,if跟else只能控制一条语句。要想控制多条语句,必须用大括号包括语句。
第二种情况:
这种情况下为什么出错呢?大家仔细分析就会发现,age=60,那么18<=age就为真,结果为1,而1<26,为真,最终结果为1,打印为青年。
第三种情况:
如果大家认为会打印haha的话,那么你们就错了,哈哈。
其实什么都不会打印,原因是else只与跟他离得最近的且在同一个语句里没有跟其他的else匹配的if匹配。
那么正确的代码应该是:
If语句书写形式:
//第一种代码风格
if(condition)
return x;
return y;
//第二种代码风格
if(condition)
return x;
else
return y;
这两种代码虽然结果一样,但是风格不同,第二种显然容易理解,尤其是对于编程新手来说。
变量赋值的不同风格:
//第一种代码风格
int num=1;
if(num==5)
printf("hehe\\n");
//第二种代码风格
int num==1;
if(5==num)
printf("hehe\\n");
第二种风格虽然看着不习惯,但是却能很好的防止我们遗漏“=”号。
这里想要说明的是大家在写代码的同时要养成一个良好的代码风格,该加空格的加空格,该加括号的加括号,不该省的别省。
(2)switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期七
这里用 if语句形式太复杂,那我们就得有不一样的语法形式。 这就是 switch 语句。
switch结构:
switch(整型表达式)
语句项;
而语句项是什么呢? 是一些case语句:
如下:
case 整形常量表达式:
语句;
switch表达式必须为整形或者字符型,case也是,另外,case后面必须是整形常量或者整形表达式。
在switch语句中的break:
在switc语句中,我们没办法直接实现分支,搭配break才能真正实现分支。
比如:
int main()
int day = 0;
switch(day)
case 1:
printf("星期一\\n");
break;
case 2:
printf("星期二\\n");
break;
case 3:
printf("星期三\\n");
break;
case 4:
printf("星期四\\n");
break;
case 5:
printf("星期五\\n");
break;
case 6:
printf("星期六\\n");
break;
case 7:
printf("星期天\\n");
break;
return 0;
当我们需求改变时,打印1到5为工作日,6和7为休息日:
#include <stdio.h>
int main()
int day = 0;
switch(day)
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\\n");
break;
case 6:
case 7:
printf("weekend\\n");
break;
return 0;
所以,break语句的实际效果是把语句列表划分为不同的部分。
default子句:
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结果就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把 default 写在任何一个case可以出现的位置。 当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。
这里给大家分享一个关于switch的练习:
#include <stdio.h>
int main()
int n = 1;
int m = 2;
switch (n)
case 1:
m++; //m=3,没有break,继续执行
case 2:
n++; //n=2,没有break,继续执行
case 3:
switch (n) //switch允许嵌套使用
case 1:
n++; //n!=1,不执行,运行到case2
case 2:
m++; //m=4
n++; //n=3
break; //break,跳出本语句的switch,去到case4
case 4:
m++; //m=5
break; //break,跳出第一个switch
default:
break;
printf("m = %d, n = %d\\n", m, n); //m=5,n=3
return 0;
由此可以看出break的重要性。
3.循环语句
(1)while循环
语法结构:
while(表达式)
循环语句;
比如我们实现: 在屏幕上打印1-10的数字:
#include <stdio.h>
int main()
int i = 1;
while(i<=10)
printf("%d ", i);
i = i+1;
return 0;
这个代码已经帮我了解了while语句的基本语法,那我们再了解一下:
while语句中的break和continue
-
break介绍
#include <stdio.h>
int main()
int i = 1;
while(i<=10)
if(i == 5)
break;
printf("%d ", i);
i = i+1;
return 0;
总结: break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环,所以,在while语句中的 break是用于永久终止循环的。
-
continue介绍
举例1:
#include <stdio.h>
int main()
int i = 1;
while(i<=10)
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
return 0;
举例2:
#include<stdio.h>
int main()
int i = 1;
while(i<=10)
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
return 0;
总结: continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接 跳转到while语句的判断部分,进行下一次循环的入口判断。
(2)for循环
语法结构:
for(表达式1;表达式2;表达式3)
循环语句;
这里表达式1为初始化部分,用于初始化循环变量的。 表达式2 为条件判断部分,用于判断 循环时候终止。 表达式3 为调整部分,用于循环条件的调整。
比如:
使用for循环 在屏幕上打印1-10的数字;
#include <stdio.h>
int main()
int i = 0;
for(i=1; i<=10; i++)
printf("%d ", i);
return 0;
这里我们来对比一下for循环和while循环:
int i = 0;
i=1; //初始化部分
while(i<=10) //判断部分
printf("hehe\\n");
i = i+1; //调整部分
for(i=1; i<=10; i++)
printf("hehe\\n");
可以发现在while循环中依然存在循环的三个必须条件,但是由于实际问题使得三个部分很可能偏离 较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高
break和continue在for循环中、
-
break介绍
#include <stdio.h>
int main()
int i = 0;
for(i=1; i<=10; i++)
if(i == 5)
break;
printf("%d ",i);
return 0;
-
continue介绍
#include <stdio.h>
int main()
int i = 0;
for(i=1; i<=10; i++)
if(i == 5)
continue;
printf("%d ",i);
return 0;
总结:我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有一些差异的;
for语句使用的一些建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
这里给大家来一道for循环的题(这道题有点坑大家仔细分析):
#include <stdio.h>
int main()
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
实际上这里并不会进入循环,因为判断部分k=0是赋值,条件就为假,就不进入循环,大家好好分析就会明白。
(3)do while循环
语法结构:
do
循环语句;
while(表达式);
do while语句的特点:
循环至少执行一次,使用的场景有限,所以不是经常使用。
do while循环中的break和continue
-
break介绍:
#include<stdio.h>
int main()
int i=1;
do
if(i==5)
break;
printf("%d",i);
i++;
while(i<=10);
return 0;
-
continu介绍:
#include<stdio.h>
int main()
int i = 1;
do
if (i == 5)
continue;
i++;
printf("%d", i);
while (i <10);
return 0;
总结:do while语句中的breaik,continue使用和while语句,for语句中的是用是一样的;唯一不同的是do while 语句中循环至少执行一次。
4.go to 语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
goto语句可以使程序在没有任何条件的情况下跳转到指定的位置,所以goto语句又被称为是无条件跳转语句。
它的语法如下
goto label;
其中,label为我们自己定义的一个标签,定义的规则与变量的命名相同,它的位置是不固定的,它可以写在goto语句的后面,也可以写在它的前面,然而goto语句只能在一个函数内部跳转,它并不允许跳转出一个函数外部。
int day = 1;
loop:
if (day <= 31)
printf("%d\\n", day);
day++;
goto loop;
上面程序就是利用了goto和if语句来实现了循环功能,它与while实现的循环功能一样,其中loop为我们定义的一个label(标签)。
使用goto语句的建议:
(1) 使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。
(2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。
(3) 不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。
本人能力有限,还请大佬指教!大家的一键三连是对我最大的支持,谢谢!下期为大家更新函数!
以上是关于C语言初阶笔记分支和循环语句的主要内容,如果未能解决你的问题,请参考以下文章