第四章、循环控制

4.1 循环控制语句

程序的三种基本结构:

顺序

循环(while当型循环结构/do while直到型循环结构),

选择( if/switch )

本节内容:

4.1.1 goto语句

(1)goto 语句: 无条件转向语句。用来跳转到某个程序位置进行执行。

一般形式:

goto label;  goto 123;  goto int;

goto 语句标号, 其中语句标号是个标识符。 标识符不可以是系统中的保留字(int , float, if,then …) .

goto的用途:

a)与if语句一起构成循环结构。

b)从循环体内跳转到循环体外,(很少使用) 破环了结构化程序设计原则。一般用break, continue ;

**// 从 1+2+3+ ... + 100 总和 

int main(){
int i = 1,sum = 0; 
loop:
if(i<=100)
{
	sum = sum + i;	
	i++;
	goto loop;
}
printf("sum=%d\n",sum); //结果为5050
	return 0; 
}**

注意: goto语句只能在当前函数中才可以使用。

//goto 语句不能够跨函数来使用。

4.1.2 while 语句 (当型)

while 语句 → 当型循环结构

//一般形式:

while(表达式) 要执行的语句 ( 一条或者多条)

图解:

当表达式的值为0时,则此表达式直接退出,其语句不会被执行一次。

请添加图片描述

while循环实现1+2+…+100 求和。

int i = 1, sum = 0;
while(i<=100)
{
	sum = sum + i;
	i++;
}
printf("sum的值=%d",sum);
  1. 有多条语句需要都被执行时,建议使用{} 括起来。
  2. 循环中必须要有条语句促使while循环不成立。这样才能够使程序停止运行,不构成死循环。

4.1.3 do while 语句 ( 直到型)

形式:

do 语句(一条或者多条)

while (条件表达式);

图解:

不管表达式结果如何,其循环体内语句至少被执行一次。

请添加图片描述

先执行循环体语句,然后再判断表达式值,为真(非0)则循环,为假(0)则退出

eg:

int i = 1, sum = 0; 
do
{
	sum = sum + i;
	i++;
} while(i<=100);
printf("sum值%d",sum);

当型循环、直到型循环
eg:

int sum = 0, i = 1;
while(i <=10)
{
	sum = sum + i ;
	i++;
}
printf("while循环sum =%d",sum);  //值为55
int sum, i;
sum = 0, i = 1;
do
{
	sum = sum + i;'
	i++;
}while(i<=10);
printf("do...while循环sum = %d",sum); //值为55

改动版:

int sum = 0; int i = 20;
while(i<=10)
{
	sum = sum + i;
	i++;
}
printf("sum = %d",sum);      //值为0
int sum = 0; int i = 20;
do{
sum = sum + i;
i++;
}while(i<=10);
printf("sum = %d",sum);      //值为20

通过上面两个循环程序能证明 while 和 do…while循环的区别。

如果条件为假更能看出其区别。

4.2 for语句精解

for语句:

for是能够取代while语句的。但是是否取代,则取决于大家的编程习惯。

for语句的一般形式:
for(表达式1;表达式2;表达式3)     
内嵌的语句

for语句的执行过程:
(1)先求解表达式1的值,表达式1只会被执行一次。
(2)再求解表达式2的值。
(2.1) 若表达式2值为真(非0),则执行for语句中指定的内嵌语句,
同时求解表达式3,再反复循环步骤2,一直到表达式2的值为假。
(2.2)若表达式2的值为假(0),则循环结束,跳到整个for语句后边的语句去执行。

//for语句最简单也是最常用的应用形式:
for(循环变量赋初值;循环变量结束条件;循环变量增加值) 内嵌的语句

例如:
1+2+3.... 100 求结果

int i,sum=0;
for(i=1;i<=100;i++)
{
	sum = sum + i;
}
printf("sum=%d",sum);

请添加图片描述

4.2.1 ※ for语句的一些特殊用法说明:

(1) 表达式1可以省略,但后边的;不能省略,应该在for语句之前就给循环变量赋予初值。

int i,sum=0;
i = 1;        //此处需要赋予初值。
for(; i<=100;i++)
{
	sum = sum + i;
}
printf("sum=%d\n",sum);
printf("i=%d\n",i); 

请添加图片描述

(2) 表达式2也能省略(不多见),也就是不判断循环条件,那么循环就会无终止的运行下去。此时,就必须用break语句终止for循环。 表达式2没了相当于一直为真,成为死循环。

解决方法:

int i,sum = 0;
for(i=1; ; i++) 
{
	sum = sum + i;
	if(i<=100)
		break;   //借助if语句来跳出循环体。
}

(3) 表达式3也可以省略,我们也必须借助其他方式来使得循环正常结束,否则会变成死循环。

int i,sum=0;
for(i = 1;i<=100;)
{
	sum = sum + i;
	i++;   //保证循环正常结束的方式.
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);

(4)可以省略表达式1,表达式3,只给表达式2

int i,sum=0;
i=1;     // i必须赋初值
for(; i<=100;)
{
	sum = sum + i; 
	i++;   // 保证循环正常结束的办法。
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);

(5)三个表达式都省略,不设置初值,不判断条件(条件一直为真),循环变量也不增加。这就导致无终止的执行循环体。

int i,sum=0;
i=1;   //i给初值
for(;;)
{
	sum = sum + i;
	if(i>=100)   //结束条件
	{
			break;
	}
	i++;    //增加值
}

printf("sum=%d\n",sum);
printf("i=%d\n",i);

** (6)表达式1可以设置循环变量初值,也可以是与循环变量无关的其他表达式;**

int i,sum;
i = 1;
for(sum=0;i<=100;i++)
{
	sum = sum + i;
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);

(7)表达式1和表达式3可以是简单表达式,也可以是逗号表达式。

逗号表达式格式: (表达式1,表达式2) 整个表达式结果是表达式2的值

int i,j = 10000,sum;
for(sum=0,i=1; i<=100; i++,j--)
{
	sum = sum + i;
}
printf("sum=%d\n",sum);  // sum=5050
printf("i=%d\n",i);   // i=101
printf("j=%d",j);   // j=9900  

(8) 表达式2的值一般是关系表达式,或者逻辑表达式 && || , 但是只要其值非0,就执行循环体。

int i , sum;
sum = 0;
for(i=0; 9999; i++)
{
	sum = sum + i;
	if(i>100)
	{
		break;
	}
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);

//规矩使用:
int i ;
for(i=0;i<100;i++)
{
......
}

4.3 循环嵌套、比较、break、continue语句

  1. 循环的嵌套
  2. 几种循环语句的比较
  3. break语句以及continue语句

练习:

For语句嵌套for语句

9,9乘法表:

int i,j,k;
for(i=1;i<=9;i++)
{
	for(j=1;j<=i;j++)
		{
			k = i*j;
			printf("%d*%d=%d\n",i,j,k);
		}
		printf("\n");
}

几种循环语句的比较:

goto型写法, while型循环, do while型循环 , for循环

//while(表达式) 要执行的语句

do 要执行的语句

while(表达式);

for(表达式1;表达式2;表达式3) 内嵌语句

//对while,do while , for 这三种循环,可以用break语句跳出循环,用continue语句结束本次循环。

4.3.1 break , continue 语句

break 和 continue 不能用于goto循环语句中,因为goto并不是真正的循环语句。

break 语句可以出现任何循环体中,用来跳出此循环

要求1+2+3+......100 = 5050,当和值达到4000的时候退出循环

int i,sum=0;
for(i=1;i<=100;i++)
{
	sum = sum + i;
	if(sum>=4000)
	{
		break;
	}	
}
printf("sum=%d\n",sum);
printf("i=%d\n",i);

在整个c/c++中,break语句不能用于 循环语句和switch语句之外的任何其他语句中。并且break语句出现在switch中时,是用于跳出switch。

int i;
for(i=1;i<=100;i++)
{
	switch(i)
	{
		case 1:
			printf("1");
			break;
	}
	printf("curr i value = %d",i);
}
int i,j,k;
for(int i = 1; i<=9;i++)
{
	for(j=1;j<=i;j++)
		{
			k =  i * j;
			printf("%d*%d",i,j,k);
			break;    //内循环break
		}
	printf("\n");
	break;    //外循环break
}

4.3.2 continue 语句: (结束本次循环)

本语句只能用在三种循环while , do while , for 循环的语句体中。但是continue不用再switch中。

作用: 结束本次循环,跳出循环体中的下面尚未执行的语句。接着进行下一次是否执行循环的判断。

4.3.3 break 与 continue 语句的区别

break :结束整个循环的执行,跳转到整个循环之后的语句。

continue:只结束本次循环,而不是终止整个循环的执行。

while语句之中嵌套break语句:

break :

请添加图片描述

continue :

请添加图片描述

eg:

1-100之间不能被3整除的数字输出。

int i;
for(i=1;i<=100;i++)
{
	if((i%3)==0)
	 {
		continue; 
	//不能被3整除的情况下会执行下面的语句。
		printf("%d ",i);
	 }else if{
		printf(%d ",i);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨优秀&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值