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语言中用啥语句实现循环结构语句的主要内容,如果未能解决你的问题,请参考以下文章

Java中如何实现在HTML中用循环语句显示多张图片。

C语言三种循环结构的完整句子?

C语言循环结构实验报告

C语言分支语句与循环语句

C语言学习顺序结构,选择结构,循环结构

在c语言中 if(0)是啥意思