C语言常用的循环控制结构,C语言学习笔记之循环控制结构

循环控制结构

在日常生活中经常会遇到需要重复处理的问题,这就需要用到循环控制结构,通过循环来重复一件事。

C语言中有三大循环:while循环、do while循环、for循环。

while循环

语法:

while(条件判断){

……………………;

……………………;

……………………;

}

大括号内的叫做循环体,是代码重复的事件,while后面接的是条件语句用来判断是否进入循环体,用自然语言表示为当条件语句为真时重复循环体,不成立时跳出循环。这个条件判断语句和if的条件判断是一样的。

一个完整的循环要有入口和出口,入口就是条件判断语句成立的时候,出口是条件语句不成立的时候,如果只有入口没有出口就会变成死循环。比如:

int a = 1;

while(1){

a++;

}

这就只有入口没有出口,while后面的1始终成立a++这句话就会一直运行。

解决办法是条件语句里的变量在循环体内要有变化,要么增大要么减小。

给个例子,求1-100的和。

#include

int main()

{

int i = 1;//定义i的初始值

int sum = 0;//定义sum的初值

while(i<=100){//控制循环的出口,当i大于100时跳出循环

sum += i;//求和

i++;//每次循环使i加1,从而可以跳出循环,并且为下次循环做准备

}

printf("sum = %d",sum);

}

最后结果输出sum = 5050。

注意点:

1、当循环体大于一条语句时必须有大括号,否则循环只会执行到while后面第一个分号处。

2、对于i与sum必须要有初值,否则他们的值是不可预知的,不一定都是0。

3、必须要有i++,否则循环永远不会结束。

do while

语法:

do{

//循环体;

}while(条件判断);

do while语句和while语句的道理其实是差不多的,都要有入口和出口,都要有变量的变化。但是do while要注意在写完while后要加分号,而while语句是不需要分号的。

do while在执行的时候先执行循环体再判断while后面的条件,而while语句是先判断条件再执行循环体。如果条件判断语句一开始为真并且循环体一样的话,两种循环的执行结果则一样,如果条件判断语句一开始为假,则两种循环的结果就不一样。

比如:

while循环

#include

int main()

{

int i,sum = 0;

scanf("%d",i);

while(i<=100){

sum+=i;

i++;

}

printf("%d",sum);

}

do while循环

#include

int main()

{

int i,sum = 0;

scanf("%d",i);

do{

sum+=i;

i++;

}while(i<=100);

printf("%d",sum);

}

对于这两段代码,如果都输入1,在一开始两个判断语句都为真,则输出结果都为5050,如果输入101,一开始的判断语句都为假,那么while语句的输出结果为0,do while的输出结果为101,因为while语句先判断101<=100为假则不会进入循环,直接输出sum为0的值,而do while先执行循环体,然后i变成了102,然后判断102<=100为假,再输出sum为101的值。

for循环

语法:

for(循环变量赋初值;循环条件判断;循环变量增值或减少){

//循环体

}

for循环的语法与while循环的语法不一样,for循环循环变量的初值和变化是写在小括号里的,并且之间用分号隔开,必须用分号,如果循环体的语句大于一条要用大括号括起来,否则只会执行到for后面的第一个分号。

用for实现1-100的和

#include

int main()

{

int i,sum = 0;

for(i = 1;i <= 100;i++){

sum += i;

}

printf("%d",sum);

}

这段代码的执行过程是,先给i赋初值,然后判断i是否小于等于100,然后执行循环体,然后再i++,第一次执行完毕,从第二次开始先判断i是否小于等于100,成立的话就执行循环体,然后i++,不成立就跳出循环,这和while循环有点类似,先判断再执行。

for循环里的三个条件并不是必要的,比如如果没有赋初值,for(;i<=100;i++),赋初值可以省略但是分号不可省略,这时候在for循环外面就需要将i的初值赋好。

int i = 1;

for(;i<=100;i++){

}

这和将赋初值放在小括号里是一个道理。

如果没有循环判断或者循环变量的变化,循环将进入死循环。需要在循环体内控制跳出循环的条件。

也可以三个都没有,for( ; ; ){} 这就是标准的死循环。

循环的嵌套

一个循环体内又包含另一个完整的循环体结构,成为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。但是每嵌套一层循环,程序的时间消耗就会成倍增加,所以在算法的设计是要尽量减少循环的嵌套。

三种循环可以互相嵌套,只要保证每个循环的语法正确,那嵌套后的语法也是正确的。

break

break语句用来提前跳出循环,当循环执行到某个特定条件时需要提前结束循环,就需要用if语句加break来实现。

例:在1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时的捐款人数,以及平均每人捐款数目。

#include

int main()

{

float amount,aver,total = 0;

int i;

for(i = 1;i<=1000;i++{

printf("please enter amount:");

scanf("%d",&amount);

total += amount;

if(total >= 100000) break;

}

aver = total/i;

printf("num=%d\naver=%.2f\n",i,aver);

return 0;

}

这里的break的作用就是当total大于等于10万时跳出循环。要注意的是这个if语句后面只有一个break语句,所以if的条件只对break有效。

continue

continue用来提前提前结束本次循环,接着执行下一次循环。用了continue后,本次循环中continue下面的语句不再执行,直接进入下一次循环。

例:输出100-200不能被三整除的数。

#include

int main()

{

int i = 100;

for(i = 100;i<=200;i++){

if(i%3 == 0) continue;

printf("%d\t",i);

}

return 0;

}

这里当i能被3整除时直接执行下一个循环,不会输出i。

循环举例

求100-200内的全部素数。

#include

int main()

{

int i;

for(i = 100;i<=200;i++){

int j;

for(j = 2;j<=i;j++){

if(i%j == 0) break;

}

if(j == i) printf("%d\t",i);

}

return 0;

}

这个问题用了一个嵌套循环,外循环控制从100-200的数,内循环用来判断这个数是否为素数。内循环从2开始如果i%j为0表名j是i的一个因数,此时i便不是素数,一旦找到一个因数则不再继续执行循环直接跳出,如果内循环一直运行到最后才结束,说明这是个素数,那么判断j是否等于i如果等于就输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值