零基础C语言之分支结构与循环结构

一、分支结构

1.if语句

2.if-else语句

3.多重if-else语句

4.嵌套if-else语句

二、循环结构

1.while循环

2.do-while循环

for循环

三种循环结构的比较

循环结构之多重循环

三、结束语句

1.break语句

2.continue语句

四、分支结构

1.switch 语句

五、goto 语句

六、多实例测试

—————————————————————————————————————
一、分支结构
1.if语句
if语句的基本结构:
if语句通过对一个条件判断,当条件为真时,执行{}中的语句,否则,则不执行该语句。
if语句的语法格式如下:

if(表达式)
{
    
    
	执行代码块;
}

注意:if()后面不加入分号,在其之后直接加入{}
2.if-else语句
if-else语句通过对一个条件进行判断,当条件为真时,执行一个操作,否则执行另一个不同的操作。
if-else语句的语法格式如下:

if(表达式)
{
    
    
	语句1}
else
{
    
    
	语句2}

注意:
(1)if()后面没有分号!如果不小心在后面加了分号,会有语法错误,错误提示会指向else:非法的else,没有与之匹配的if
(2)如果if和else后的语句只有一句,可以去掉{},当语句超过两句时,必须要加入{}。加入花括号可以明确表示if 或else的控制范围。
3.多重if-else语句
多重if-else语句通过依次判断表达式的值,当出现某个表达式的值为真时,则执行表达式所对应的操作,否则则执行else所对应的操作。
多重if-else语句的语法格式:

if(表达式1{
    
    
	语句1}
else if(表达式2{
    
    
	语句2}
……
else if(语句m)
{
    
    
	语句m;
}
else
{
    
    
	语句n;
}

注意:当某一个表达式为真时,则不会向下执行该分支结构的其他语句。
4.嵌套if-else语句
通常将一个if-else语句放在另一个if-else语句中形成嵌套的if-else语句。
嵌套if-else语句的语法格式:

if(表达式1{
    
    
	if(表达式2{
    
    
		语句2}
	else
	{
    
    
		语句3}
}
else
{
    
    
	语句4}

二、循环结构
在C语言中,反复不停的执行某个动作就是我们常称的循环,C语言提供了循环语句来实现重复处理。在C语言中,每个循环都有一个控制表达式,每执行一次循环体,都对控制表达式进行求值,如果表达式非0,则继续执行循环。C语言有三种循环语句,即while语句,do语句和for语句。while循环再执行循环体之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for循环则非常适合那些指定循环次数的循环。
1.while循环
while循环适用于如果某个条件为真的情况下,希望反复执行一个操作,那么while语句最为简单易用。
while语句的一般格式如下

while(表达式)
{
    
    
	循环体语句;
}

功能:当表达式值非0时,重复执行循环体语句。
执行过程:首先计算圆括号中的表达式的值,如果值非0,则继续执行循环体语句,接着再判定表达式。这个过程持续到表达式值为0时才结束。
下面,看一道经典的使用while循环的题目:
/*程序:使用while循环求10个整数的和*/

#include<stdio.h>
int main(void)
{
    
    
	int i,number,sum;/*number用来暂存读入的整数,sum存储累加和*/
	sum=0;/*sum赋值为0*/
	i=1/*循环变量i赋值为1*/
	printf("请输入10个整数:\n");
	while(i<=10)   /*循环条件是i不大于10*/
	{
    
    
		scanf("%d",&number);/*读入一个整数存入number*/
		sum+=number;/*number累加到变量sum中*/
		i=i+1;/*循环变量i增加1,也可以写成i++*/
	}
	printf("累加和为:%d\n",sum);/*输出累加和*/
	return 0}

注意:
(1)由于计算机的浮点数只是一个近似值,因此,用浮点数来做循环控制变量可能会得到一个不精确的数值,从而导致循环终止条件测试错误,所以要用整数值来控制技术循环。
(2)对控制语句头所控制的内部语句要进行缩进,控制语句的前后都要留出空行,能使程序具有二维的层次感,极大地提高了程序的可读性。
(3)如果while循环的循环体中,没有最终将条件改变为假的操作,那么循环将永远不会终止——这就是所谓的死循环(也就是为无限循环)。
2.do-while循环
do-while循环是先执行循环中的语句,再判断while中的表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
do-while语句的一般格式如下:

do
{
    
    
	语句1}while(表达式);//切记,这里有分号。

注意:当使用do-while语句时,while的括号后面必须加分号。

3.for循环
for循环语句能够处理计数控制的所有细节,是功能最强大的一种循环语句,是编写许多循环的最佳方法。
for语句的标准格式如下:

for(表达式1;表达式2;表达式3{
    
    
	语句;
}

执行过程:
(1)执行表达式1,对循环变量做初始化,只执行一次。
(2)判断表达式2,若其值为真(非0),则执行for循环中的语句,然后向下执行;若其值为假(为0),则结束循环。
(3)每次循环中最后一个被执行的操作。设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。
(4)当循环结束时,程序向下执行。
在绝大多数情况下,上述for语句可以表示成如下的while语句

表达式1
while(表达式2)
{
    
    
	语句;
	表达式3}

在for循环中:
(1)表达式1是一个或多个赋值语句,它用来控制变量的初始值;
(2)表达式2是一个关系表达式,他决定什么时候退出循环;
(3)表达式是循环变量的步进值,定义控制循环变量每循环一次后按什么方式进行变化。
(4)这三个部分用分号隔开;千万记得不要写成逗号。
for语句的注意事项:
(1)for语句头中的三个表达式:初始化,循环继续条件和增量操作都可以包含算术表达式
例如:

for(i=m+1;i<=4*n;i+=n/m)

(2)控制变量的增量可以是负值,在这种情况下,循环计数是递减的。
例如,下面程序段的作用是“倒计数”信息

for(i=10;i>0;i=i-1)
{
    
    
	printf("%d ",i);
}

(3)for语句中的三个表达式是可选的。如果将表达式2省略,则认为循环继续条件总是真,这将导致一个无限循环。如果对循环控制变量的初始化工作已经在程序的其他地方完成了,那么表达式1可以省略。如果循环控制变量的增值工作是由for循环体中的语句完成的,或者根本不需要增量工作,那么表达式3也可以省略。for循环语句中的增量表达式可以用循环体末尾的单独一句来替换。
(4)表达式1和表达式3可以是一个简单的表达式也可以是多个表达式以逗号分隔

int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{
    
    
	sum+=num;
	printf("num=%d,sum=%d\n",num,sum);
}

(5)如果循环范围多于一个语句,必须加{}构成复合语句,初学者很容易忘掉{},结果造成错误。
例如:

for(i=1;i<=n;i++)
	scanf("%d",&number);
	sum+=number;

则等价于如下程序段

for(i=1;i<=n;i++)
{
    
    
	scanf("%d",&number);
}
sum+=number;`

语句sum+=number就在循环体之外了。
(6)
如果不小心在for循环的圆括号后面加上分号,会创造空语句,且会被编译器认为循环的内容就是该空语句。

for(i=1;i<=n;i++)
{
    
    
	scanf("%d",&number);
	sum+=number;
}

该语句等价于:

for(i=1;i<=m;i++)
{
    
    
	;
}
scanf("%d",&number);
sum+=number;

该语句被编译为器理解为循环体,设计者理解中的循环体会被编译器理解为循环语句的后续语句,再循环结束之后,只执行一次。
(7)循环控制变量,除了用于控制循环,还可以用用用于循环体的计算中。不过最好不要在for循环中中改变循环控制变量的值,这样做可能会造成一些隐蔽性错物。

循环结构之三种循环比较
while,do-while和for三种循环在具体使用场景中是有区别的:
1.在知道循环次数的情况下更适合使用for循环
2.在不知道循环次数时适合使用while或do-while
(1)如果有可能一次都不循环应该考虑使用while循环
(2)如果至少有一次循环应考虑使用do-while循环

循环结构之多重循环
多重循环就是在循环结构中又出现循环结构
但是在实际开发中最多使用到三层多重循环

因为循环层数越多,运行时间长,程序就越复杂,所以最多使用到2-3层多重循环。另外,不同循环之间也是可以嵌套的。

多重循环在执行过程中,外层循环为父循环,内层循环为子循环。

父循环执行一次,子循环就要全部执行完,直到跳出子循环。父循环则再进入下一次,子循环则继续执行……

#include<stdio.h>
int main(void)
{
    
    
	int i,j,k;
	for(i=1;i<5;i++)
	{
    
    
	//观察每行空格数量,补全循环条件
		for(j=1;j<5;j++)
		{
    
    
			printf(" ");//输出空格
		}
		for(k=0;k<2*i-1;k++)
		{
    
    
			printf("*");//每行输出*号
		}
		printf("\n");//每次循环之后换行,打印下一行
	}
	return 0;
}

三、结束语句
1.break语句
break语句一般用于提前退出循环或跳出switch语句,执行break语句将导致程序立即从这些语句中跳出,转去执行紧跟的下一条语句。
例如,去操场跑步,计划跑10圈,但在跑步过程中,如果感到身体不适,可以提前结束跑步,回去休息
上述情况可以表现为一下逻辑

for(i=1;i<=10;i++)
{
    
    
	if(感到身体不适)
	break;
}

使用break语句注意以下几点
1.在没有循环结构的情况下,break不能使用在单独的if-else语句中。
2.在多重循环中,一个break语句只能跳出一层循环且只能是当前循环。

2.continue语句
利用continue语句能中断循环体的本次执行(即跳过循环体尚未执行的语句),立即开始新一轮的循环。
break语句和continue语句的区别是:
break语句是跳出当前整个循环,continue语句是结束本次循环开始下一次循环。

四、分支结构
1.switch 语句
当问题需要处理的分支情况比较多时(一般大于3种),通常使用开关语句代替条件语句来简化程序设计。开关语句就像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择一个或几个分支执行。C语言的开关语句也称为switch语句。
switch语句的最常用格式:

switch(表达式)
{
    
    
	case 常量表达式1:语句序列1 break;
	case 常量表达式2:语句序列2 break;
	……
	case 常量表达式n:语句序列n break;
	default : 语句序列 n+1
}

switch 语句往往比多分支if语句更容易阅读。另外,switch语句往往比if语句执行速度快,特别是在有许多情况需要判定的时候。
注意:
(1)在case后的各常量表达式的值不能相同,否则会出现错误
(2)在case后面,如果没有break,会一直执行直到遇见break,才会跳出switch语句
(3)switch后面的表达式语句只能是整形或字符型。
(4)在case后,允许有多个语句,可以不用{}括起来
(5)各case和default语句的先后顺序可以变动,而不会影响程序的执行结果。
(6)default语句可以省略不用。
switch与if语句的应用
计算是该年的第几天

#include<stdio.h>
int main(void)
{
    
    
	int date=0;
	int year=2008;
	int month=8;
	int day=8;
	switch(month)
	{
    
    
		case 12 :date+=30;
		case 11 :date+=31;
		case 10 :date+=30
		case 9 :date+=31
		case 8 :date+=31
		case 7 :date+=30
		case 6 :date+=31
		case 5 :date+=30
		case 4 :date+=31
		case 3 :
		if(year%4==0&&year%100!=0||year%400==0)
		{
    
    
			date+=29;
		}
		else
		{
    
    
			date+=28;
		}
		case 2:date+=31;
		case 1:date+=day;
		printf("%d年%d月%d日是该年的第%d天“,year,month,day,date);
		break;
		default:
		printf("error");
		break;
	}
	return 0;
}

五、goto 语句
C语言中的goto语句是一种无条件分支语句,goto语句可以跳转到函数中任何有标号的语句处。goto语句是一个古老的语句,是循环语句的前身。在计算机发展的早期,程序就是由几个语句+语句标号+跳转语句组成的。
goto语句的格式

goto 语句标号;

语句标号:语句标号由一个标识符加一个冒号组成,它标识程序的一个特定位置,一般放在一段可执行语句的左边。
功能:将程序转换到指定位置继续执行。
goto语句是怎样实现循环的?以求1-100的累加和为例:

sum=0,i=1;
loop:sum=sum+1;
i++;
if(i<=100)//如果i<=100,跳转到loop处,从而实现循环
	goto loop;
printf("%d\n",sum);

goto语句通常不用,主要因为它会破坏程序的结构,且不易读,容易带来隐患。但当需要从多重循环退出,或包含switch语句的循环中退出时,用goto语句比较合理。

以上就是有关C语言的分支结构与循环结构的讲解,希望我的文章能够帮助到正在学习C语言的你。正所谓实践是检验真理的唯一标准,也希望你能够自己尝试去写一些关于分支结构与循环结构的题目,加深对这篇文章的理解。愿你们都能学有所成!希望喜欢我的小伙伴们,点点关注,多多评论,感谢!!!

猜你喜欢

转载自blog.csdn.net/z2004cx/article/details/128196808