c语言中用啥语句实现循环结构语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中用啥语句实现循环结构语句相关的知识,希望对你有一定的参考价值。
在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while循环和for循环都是先判断表达式,后执行循环体;而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while
循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和
continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序。但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将c程序设计成模块化结构。
模块化程序结构c语言的模块化程序结构用函数来实现,即将复杂的c程序分为若干模块,每个模块都编写成一个c函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的c程序编写。因此常说:c程序=主函数+子函数。
因此,对函数的定义、调用、值的返回等要尤其注重理解和应用,并通过上机调试加以巩固。 参考技术A C语言循环控制语句提供了
while语句、do-while语句和for语句来实现循环结构。
while循环语句
一般形式如下:
while(表达式)
语句;
其中执行过程如下:
while语句
(1)计算while后面括号里表达式的值,若其结果非0,则转入(2),否则转(3)
(2)执行循环体,转(1)
(3)退出循环,执行循环体下面的语句。
由于是先执行判断后执行循环体,所以循环体可能一次都不执行。
循环体可以为空语句“;”。
do-while语句
一般形式如下:
do
语句;
while(表达式);
(1)执行循环体,转(2)
do...while语句
(2)计算while后面括号里表达式的值,若其结果非0,则转入(1),否则转(3)
(3)退出循环,执行循环体下面的语句。
注意:do……while语句最后的分号(;)不可少,否则提示出错。循环体至少执行一次。
for语句
for语句是循环控制结构中使用最广泛的一种循环控制语句,特别适合已知循环次数的情况。
一般形式如下:
for
(
[表达式
1];
[表达式
2
];
[表达式3]
)
语句
其中:
表达式1:一般为赋值表达式,给控制变量赋初值;
for语句
表达式2:关系表达式或逻辑表达式,循环控制条件;
表达式3:一般为赋值表达式,给控制变量增量或减量;
语句:循环体,当有多条语句时,必须使用复合语句。
其执行过程如下:首先计算表达式1,然后计算表达式
2。若表达式2为真,则执行循环体;否则,退出
for循环,执行for循环后的语句。如果执行了循环体,则循环体每执行一次,都计算表达式3,然后重新计算表达式2,依此循环,直至表达式
2的值为假,退出循环。
C语言分支语句与循环语句
分支语句和循环语句
此篇重点介绍分支语句和循环语句的使用方法
分支语句
if
switch
循环语句
while
for
do while
goto语句
分支语句(选择结构)
if语句
下面展示 if基本语法结构
。
if语句的语法结构
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
注意:
1、if else if else 语句的执行步骤是:前判断括号里的表达式的真值,进而再判断if条件语句是否满足(0为假,非零为真)
2、if else if else 后的语句并不一定只有一条,建议不论有几条都带上花括号!
代码演示
代码1:单分支语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age<18)
{
printf("未成年");
}
return 0;
}
代码2:双分支语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age<18)
{
printf("未成年");
}
else
{
printf("成年");
}
return 0;
}
代码3:多分支语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age<18)
{
printf("少年");
}
else if(age>=18&&age<=30)
{
printf("青年");
}
else if(age>=30&&age<50)
{
printf("中年");
}
else
{
printf("老年");
}
return 0;
}
当然,这段代码这样写更简洁,也更符合多分支语句的一般构造
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age>=60)
{
printf("老年");
}
else if(age>=30)
{
printf("中年");
}
else if(age>=18)
{
printf("青年");
}
else
{
printf("未成年");
}
return 0;
}
悬空else
代码1:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
if(b==2)//此条if语句与else对应
printf("hehe\\n");
else
printf("hahha\\n");
return 0;
}
我们预期的结果是if(a== 1)与else相对应,但实际上是距离else最近的if(b== 2)语句与它相对应
结论:悬空else与if配对遵循“就近原则”,即与它最近的if配对
下面对上份代码进行改正,注意体会要点与代码风格
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
{
if(b==2)
{
printf("hehe\\n");
}
}
else
{
printf("hahha\\n");
}
return 0;
}
不难发现,“{ }”将代码划分的很清楚,增强了代码的逻辑性。强烈建议使用“{ }”
下面来一个练习
要求:
1、判断一个数是否是奇数
2、输出1-100之间的奇数
分析:
1、问题的要求重点在于如何判断一个数为奇数:只需要用该数%2判断余数即可。
2、输出1-100的奇数就是循环,对每个数用1的方法
实现:
#include <stdio.h>
int main()
{
int i = 0;
for(i ==1;i<=100;i++)
{
if(i%2==1)//这个数是奇数
{
printf("%d\\t",i);
}
}
return 0;
}
switch语句
switch语句也是一种分支语句,常常用于多分支的语句
比如:
输入1–7的某一个数,输出对应的星期
这个问题也可以用if else if else if …else的方式实现,但是形式上太复杂,这时就需要用到switch语句!
下面展示 switch基本语法结构
。
switch(整型或整形表达式)
{
case 整型常量表达式:
语句;
...
defalut 整型常量表达式:
语句;
}
break 在switch语句中的使用:
在switch语句中,无法直接实现分支功能,搭配break使用才能实现真正的分支
比如:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
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、输入1–5输出的是“weekday”
2、输入6–7输出的是“weekend”
所以代码就变成了
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
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语句的实际效果是把语句列表划分为不同的部分。
细心的朋友会发现前面switch结构中我写了default,但并未提及它,现在就单独谈谈:
default子句:
当switch表达式的值与case都不匹配时,就要有default子句,程序会执行default子句之后退出switch结构。
每个switch语句中只能有一条default子句,但是default子句的位置是任意的
**建议:**在每个switch语句中都放一条default子句,甚至可以在后面再加一个break;
读者可根据下面的练习来检测自己的掌握情况:
#include <stdio.h>
int main()
{
int n=1;
int m=2;
switch(n)
{
case 1:
m++;
case 2:
n++
case 3:
switch(n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m=%d n=%d",m,n);
return 0;
}
结果:m=5,n=3
你做对了吗?我们评论区见!
循环语句
while循环
下面展示 while 语法结构
。
while(表达式)
{
循环语句;
}
例如:打印输出1–10
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
printf("%d\\t",i);
i++;
}
return 0;
}
while语句中的break和continue
break介绍
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(i==5)
{
break;
}
printf("%d ",i);
i++;
}
return 0;
}
输出结果:1 2 3 4
总结:break在while循环中的作用
在循环中只要碰到break,就停止后期所有循环,直接终止循环,所以:while循环中的break是用于永久终止循环的
continue介绍
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(i==5)
{
continue;
}
printf("%d ",i);
i++;
}
return 0;
}
输出结果:1 2 3 4 死循环
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
i++;
if(i==5)
{
continue;
}
printf("%d ",i);
}
return 0;
}
输出结果:2 3 4 6 7 8 9 10 11
**总结:**continue在while循环中的作用是
continue是用于终止本次循环,也就是本次循环continue后边的代码不会执行,而直接跳转到while语句的判断部分。进行下一次的循环入口判断
for循环
下面展示 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循环对比:
两个循环都存在循环的三个必要条件,但是由于风格的问题,while循环的三个部分偏离较远,这样查找修改不够集中和方便。所以,for循环的风格更胜一筹,for循环的使用频率也最高
注意:这并不是意味着while循环就不用了,具体情况具体选择
break和continue在for循环中的应用
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
{
break;
}
printf("%d ",i);
}
return 0;
}
输出结果:1 2 3 4
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
{
continue;
}
printf("%d ",i);
}
return 0;
}
输出结果:1 2 3 4 6 7 8 9 10
for语句的循环控制变量
一些建议
1、不要在for循环的循环体内改变循环变量,防止for循环失去控制
2、建议for语句的循环控制变量的取值采用“前闭后开区间”写法
int i = 0;
//前闭后开的写法
for(i=0;i<10;i++)
{
循环体;
}
//两边都是闭区间(效果一样,但不推荐)
for(i=0;i<=9;i++)
{
循环体;
}
do…while 循环
下面展示 do...while 循环的语法
do
{
循环体;
}
while(表达式);
do 语句的特点
循环至少执行一次,使用的场景有限,所以不经常使用
#include <stdio.h>
iint main()
{
int i =10;
do
{
printf("%d ",i);
}while(i<10);
return 0;
}
do while循环中的break和continue
#include <stdio.h>
iint main()
{
int i =10;
do
{
if(i==5)
{
break;
}
printf("%d ",i);
}while(i<10);
return 0;
}
输出结果 10
#include <stdio.h>
iint main()
{
int i =10;
do
{
if(i==5)
{
continue;
}
printf("%d ",i);
}while(i<10);
return 0;
}
输出结果 10
注意:continue调到do…while 的循环检测处
goto 语句
C语言中提供了可以随意滥用的goto语句和标记跳转的标号
从理论上goto 语句是没有要的,实验中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的方法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出多层循环
这种情况break是达不到目的的,因为break只能从内层循环退出到上一层的循环
下面是使用goto语句的一个例子
一个简单的关机程序
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将会在1分钟内关机,如果输入:我是猪,就取消关机!\\n");
scanf("%s",input);
if(strcmp(input,"我是猪")==0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
说明:此代码只有主体框架,目的是说明goto语句也能够实现循环,具体关机恶搞代码详见我的另一篇博客!
goto语言真正适合的场景如下:
for(...)
{
for(....)
{
for(...)
{
for(....)
{
for(...)
{
if(disaster)
{
goto err0r;
}
}
}
}
}
}
error:
if(disaster)
//处理错误情况!
以上是关于c语言中用啥语句实现循环结构语句的主要内容,如果未能解决你的问题,请参考以下文章