问:求1-100的所有自然数之和。
生活中看到这个问题我们会用数学老师教的简便计算:1+2+...+100=(1+100)(2+99)+(50+51)=50*101=5050;但是计算机并不会简便计算,它只会单纯的1+2+3+...+100,但我们敲代码的时候不可能一个一个数敲进去让计算机计算,此时我们就可以用到循环结构。
循环结构可以多次重复地执行固定的语句,这些固定语句称为循环体,而判定循环是否继续进行的条件就叫做循环条件,我们可以通过循环变量来控制循环条件是否成立。
在C语言中,有三种循环结构,分别是:while循环、do...while循环和for循环,下面结合开头的例子来分析每一种循环的特点。
---------------------------------------------------------------------------------------------------------------------------------
while循环
循环结构:
while(循环条件){
循环体
}
结构分析:
while循环第一次进入循环体之前会先判断一次循环条件,循环条件成立则执行循环体,循环条件不成立直接结束循环语句;当第一次循环体执行完毕后会再次进行循环条件判断成立就继续执行,直到循环条件不成立就结束循环。
例题实现:
#include<stdio.h>
int main(){
int sum=0,i=1; //i=1用于给循环变量赋初值
while(i<=100){ //i<=100是循环条件,当满足时进行循环体,不满足时就结束循环
sum+=i; //{}号中的内容都是循环体,而i++就是用来使循环变量i值
i++; //产生变化,当i到达某个值时循环条件不成立while循环结束
}
printf("while:1-100的自然数和:%d",sum);
return 0;
}
代码测试:
---------------------------------------------------------------------------------------------------------------------------------
do...while循环
循环结构:
do{
循环体
}while(循环条件);
结构分析:
do...while循环直接进入循环体,当第一次循环体执行完毕后才会进行循环条件判断,成立就继续执行,直到循环条件不成立就结束循环。
例题实现:
#include<stdio.h>
int main(){
int sum=0,i=1; //i=1用于给循环变量赋初值
do{ //{}号中的内容都是循环体,而i++就是用来使循环变量i值
sum+=i; //产生变化,当i到达某个值时循环条件不成立while循环结束
i++;
}while(i<=100); //i<=100是循环条件,当满足时进行循环体,不满足时就结束循环
printf("do...while:1-100的自然数和:%d",sum);
return 0;
}
代码测试:
---------------------------------------------------------------------------------------------------------------------------------
for循环
循环结构:
for(循环变量初值; 循环条件; 循环变量增减操作){
循环体
}
结构分析:
for循环第一次进入循环体之前会先判断一次循环条件,循环条件成立则执行循环体,循环条件不成立直接结束循环语句;当第一次循环体执行完毕后会先进行循环变量增减操作然后进行循环条件判断,成立就继续执行,直到循环条件不成立就结束循环。
例题实现:
#include<stdio.h>
int main(){
int sum=0;
for(int i=1;i<=100;i++){//定义了i作为循环变量赋初值为0,i++作为循环变量的操作,
//i<=100作为循环条件
sum+=i; //{}中的内容为循环体
}
printf("for:1-100的自然数和:%d",sum);
return 0;
}
代码执行:
---------------------------------------------------------------------------------------------------------------------------------
关键:
while 和 do-while 循环,循环体中应包含用于控制循环结束的语句(例如循环变量);for循环本身就可以通过循环变量控制是否结束。
while 和 do-while 循环,循环变量的初始化操作应该在 while 和 do-while 语句之前完成 ;for 循环可以在内部实现循环变量的初始化。
---------------------------------------------------------------------------------------------------------------------------------
跳出循环
使用循环结构时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue。
break
作用:
break 会终止循环直接执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。(注:一个break只能跳出一层循环)
例:
//通过while循环求1-100累加和,当和首次超过4500时,累加了多少次
#include<stdio.h>
int main(){
int sum=0,i=0;
while(i<=100){
sum+=i;
if(sum>4500) break;
i++;
}
printf("当累加了%d次时,值超4500,此时sum=%d",i,sum);
return 0;
}
代码分析:
根据题意,求累加到sum>4500时累加了多少次,当满足sum>4500时break结束循环,此时求i的值就是累加的次数。
代码执行:
continue
作用:
continue 会跳过本次循环体中剩余的语句而强制进入下一次循环,判断循环条件是否成立。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,即满足条件则跳过本次循环。
例:
//通过while循环求1-100的偶数和
#include<stdio.h>
int main(){
int sum=0,i=0;
while(i<=100){
i++;
if(i%2==1) continue ;
sum+=i;
}
printf("while:1-100的偶数和:%d",sum);
return 0;
}
代码分析:
求偶数和,那么奇数就不需要累加到总和中,循环体内判断i是否是奇数,如果是就跳过后面的累加操作,进入下一次循环先判断i<=100,成立则进入循环体否则直接结束循环。
代码执行:
--------------------------------------------------------------------------------------------------------------------------------
例:循环输入一个数字,输入数字只能在1~9的范围内,并计算数字的和,最多输入 15次,最后输入的和不能超过100,超过100则此次游戏失败并结束,只有正好等 于100游戏胜利。
//代码实现
#include<stdio.h>
#define max 15
int main(){
int a,sum=0,i;
for(i=0;i<max;i++){ //初始化循环变量,用于记录输入的第几个数
printf("请输入第%d个数:",i+1);
scanf("%d",&a);
if(a>9||a<1){ //判断输入的数是否合法,若不合法则重新提示
printf("请重新输入!\n"); //输入该次序的数,同时i--;否则会少计算一个数
i--;
continue;
}
sum+=a;
if(sum>100) break; //当sum>100时游戏结束直接结束循环即可
}
if((i>=max) && (sum==100)) printf("胜利!\n");
else printf("失败!");
return 0;
}
运行结果: