概述
文章目录
- 顺序结构
- 分支结构
- 1.if语句
- 2.switch语句
- (1)switch语句中的break
- (2)switch中的default子句
- 循环结构
- 1.while循环
- (1)语法
- (2)while循环中的break和continue
- 2.for循环
- (1)语法
- (2)for循环中的break和continue
- (3)笔试题
- 3.do while循环
- (1)语法和特点
- (2)do while中的break和continue
- 4.goto语句
初识C语言已经结束,感谢大家的支持,接下来为大家介绍一下C语言的三大基本结构——顺序结构、分支结构和循环结构。
顺序结构
顺序结构,顾名思义,顺序结构就是按顺序写的C语言程序,所有的语句都是按照线性的顺序执行。例如
#include <stdio.h>
int main()
{
int a = 0;
printf("a = %dn",a);
a = a + 1;
printf("a = %dn");
return 0;
}
我们定义一个整型变量a并赋值 0 ,打印 a 的值,然后给 a 加 1,再打印 a 的值,得到结果
程序从第一行开始,一行行依次编译并执行,这就是顺序结构。
分支结构
生活中我们处处面临选择,C语言也衍生了分支结构,我们可能会用到单分支,也可能用到多分支。
1.if语句
if (表达式)
语句1;
else
语句2;
这是一个单分支,若满足if 后的条件表达式,则执行语句1,若不满足,则执行语句2。
if (条件表达式)
语句1;
else if(条件表达式)
语句2;
else
语句3;
这是一个多分支,若满足第一个 if 后的条件表达式,则执行语句1;若不满足,则进入下一个 if 后的条件表达式进行判断,若满足执行语句2,不满足则执行语句3。
在 if (条件表达式)中,括号中为判断条件,判断条件也可以为赋值语句,例如
此代码中,若 if 后条件表达式中为真,则打印 123456 ,否则打印 789 。但是 if 后条件表达式为赋值语句,对 a 赋值 1,说明此条件表达式一直为真,一直打印 123456。【在 if ()的条件表达式中,0 是表示假,非 0 则表示真】
此代码中,第七行定义了 a = 0,进入 if 条件表达式的判断,a = 0,所以为假,执行第11行内容,打印 789。(a = 0 的意思是把 0 赋给变量 a)
再来看一段代码
此代码中,判断条件为 a == 1,意思为:判断变量 a 是否等于 1,若等于则执行第9行代码,否则执行第11行代码。(== 是判断两个变量是否相等, = 是为变量赋值)
2.switch语句
(1)switch语句中的break
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
switch (a)
{
case 1:
printf("周一n");
case 2:
printf("周二n");
case 3:
printf("周三n");
default:
printf("输入错误,请重新输入!m");
}
return 0;
}
我们想 输入一个值,若输入 1,打印周一;输入 2,打印周二;输入 3,打印周三,输入别的值,则打印 输入错误。运行结果是这样的:
我们发现,输入 1后将所有要打印的内容都输出了一遍,这是因为缺少了break语句。我们在每句case和default的最后都加上一个break,重新测试一下。
由此可知,若没有break,输入 1,决定了程序从case1进入,但是没有出口,所以会一直执行,直到结束。加上break后,再输入 1,程序会从case1开始,遇到第一个break结束,break会让程序跳出switch。
注意:case后面只能跟整型常量表达式,若写成case 1.1 ,这是错误的。
如果我们要让case 1,case 2, case 3都打印同样的值,如图
对每一个case后面的语句都进行修改,在数量少的时候是可以的,如果数量多,一个个修改就显得尤为繁琐,这时候我们该怎么办呢?
这时候我们可以进行“干掉”,如图,将前6个case每一个后面的内容都“干掉”,只在case 7后面写上打印周一,这时候我们输入 1~7 中任意值,都会打印周一。
(2)switch中的default子句
在switch中,如果表达的值与所有的case都不匹配时,switch中所有的语句都会被跳过。(除了default)但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?学会使用default子句。当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch中这能出现一条default子句。
default子句可以放在switch中的任意位置,如图
如图,这样也是正确的,不过我们一般放在最后。
循环结构
1.while循环
(1)语法
while(表达式)
循环语句;
比如我们想要实现,在屏幕上打印1~10的数字。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
这段代码会打印 1~10数字。
(2)while循环中的break和continue
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ",i);
i = i + 1;
}
return 0;
}
这段代码会打印什么呢?如图
我们发现只打印了1 2 3 4,这是因为break。
在while循环中,如果遇到break,直接终止循环跳出。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ",i);
i = i + 1;
}
return 0;
}
我们会发现,此代码结果还是打印 1 2 3 4,但是这个1234与之前break的1234不同。接下来我们一点点分析。
先从1打印到4,当 i 增加到 5 时,if语句中条件表达式成立,再执行continue,continue的作用是:跳过本次循环,直接进入while的判断环节,判断下次能否执行,i = 5时,一直在if 和while的条件之间跳转,陷入了一个死循环。所以输出 1 2 3 4。
注意:continue是终止本次循环,跳过continue后面的语句,直接进入下次循环的条件判断。
2.for循环
(1)语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
开头我们定义了一个整型变量 i 赋值0,在for循环的开始,我们初始化变量 i ,若开始定义 i 时初始化过了,for循环中 i 的初始化可以省略,但要加分号,如图
for()中 i 的初始化有时可以省略,但后面的循环条件和迭代不可写错,更不能省略,否则会陷入死循环,或不能运行。(下面我们省略一下迭代)
可以看到,程序陷入了死循环。
(2)for循环中的break和continue
for循环中的break和continue与while循环中的相似,但也是有些许的差异。
我们先来看break:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 0;i < 5;i++)
{
if (i == 3)
break;
printf("好好学习,天天向上n");
}
return 0;
}
我们可以看出,for循环中的break和while中的break相差不大,都是终止循环。
再来看continue:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (i == 3)
continue;
printf("好好学习,天天向上n");
}
return 0;
}
这时候就与while循环中的break有些许差异了。进入循环,i = 1, i = 2时各打印一遍内容,到i = 3时,跳过本次循环,然后进行 i++,再正常打印 i = 4 和 i = 5时的内容,这不是死循环,只是跳过循环体中的内容,进入到循环的迭代,然后重新进行条件的判断。这就是for循环中continue和while循环continue的差异。
(3)笔试题
让我们来看一道真实的笔试题。
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}
请问此循环要循环多少次?
此循环中,先对 i 和 k 进行初始化,再进入判断条件,发现判断条件为赋值语句 k = 0,将 0 赋给变量 k,0为假,所以不会进入循环,答案就是,此循环执行了0次。
3.do while循环
(1)语法和特点
do
循环语句;
while(表达式);
注意:在do while循环中,最后while()后的分号一定不要漏掉!!!
此代码中,我们观察一下,定义整型变量 i 并赋值 0,循环体中每次循环都给 i 加1,后面又发现while循环的条件为 i < 0,条件根本不满足,这时候会先执行一次循环体中的内容,也就是先在屏幕上打印一行数据,再根据条件判断是否循环。
也就是说 do while循环能使循环体至少执行一次。
(2)do while中的break和continue
我们先说break:
我们可以看到,在do while中,break也是用来终止循环的。
再来看continue:
我们可以看出,在 i = 0, i = 1, i = 2时,程序都可以正常打印,当 i = 3时,满足了if语句中的条件表达式,执行continue,此时会跳过后面的printf 和 i++迭代,直接进入判断条件,i 的值还是3,没有进行迭代,所以又回到了if中的条件表达式,又遇到continue,依次往复,形成了死循环。
4.goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。当有多层循环时,break只能跳出本层循环(一层),而goto语句可以随意跳转。
此程序中,先打印两次hello world,然后利用goto语句跳转至开头,再打印两次,依次往复,形成死循环。
我们可以看出,break只能跳出一层循环。
我们可以看出,goto语句直接跳出了两层循环,陷入了死循环,由此可见,goto语句是个双刃剑,用好了会事半功倍,用不好会产生很多bug。
注:本次列车暂时到站啦,文章中有错误、不足之处欢迎大佬指正,让我们共同学习,共同进步,一切成功的秘诀,都在于我们不懈的追求,加油!
最后
以上就是简单大象为你收集整理的C语言三大结构顺序结构分支结构循环结构的全部内容,希望文章能够帮你解决C语言三大结构顺序结构分支结构循环结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复