引言
如果要求1+2+3+…+100,你会怎么求解呢?
如果按照常规代码
int main() {
int sum =0;
sum += 1;
sum += 2;
sum += 3;
...
sum += 100;
printf("The value of sum is %d\n",sum);
return 0;
}
就会特别麻烦,并且代码过于冗长。下面将引入循环的概念,将更合理地解决此类问题。
一、while语句实现循环
while语句的一般形式:
while(表达式) 语句
注:
循环体:while后面的语句称为循环体。
针对while循环,我们可以简易地记成 只要循环条件表达式为真,就可以执行循环体语句。
针对引言的问题,现给出用whlie语句实现的代码:
int main() {
int sum,i = 1;
while(i <= 100) {
sum += i;
i++;
}
printf("The value of sum is %d\n",sum);
return 0;
}
运行结果:
需要注意的是:
1、循环体如果是多个语句,则需要用花括号括起来作为复合语句使用。如果不加花括号,while语句的范围就只到while后面第一个分号处。
2、循环体中应该有让循环结束的语句。就如上述代码的i++;
while循环是由i进行控制,当i不超过100时,继续执行循环体代码;每次循环结束前,i都会加一;当i超过100时,则循环结束。
二、do…while语句实现循环
2.1 do…while的一般实现
do…while的一般形式为:
do
语句
while(表达式);
同样我们也可以用do…while来实现上述问题
int main() {
int sum,i = 1;
do{
sum += i;
i++;
} while (i <= 100);
printf("The value of sum is %d\n",sum);
return 0;
}
运行结果:
2.2do…while与while的区别
我们以具体的问题进行分析。
Q:要求输入一个整数i,求i到10的和。
2.2.1用while进行实现
A:
int main() {
int sum = 0,i;
printf("Input a number:\n");
scanf("%d",&i);
while(i <= 10) {
sum += i;
i++;
}
printf("The value of sum is %d\n",sum);
return 0;
}
先输入一个小于10的数:
再输入一个大于10的数:
我们可以看到,由于i值大于10,所以并没有执行循环体语句。
2.2.2用do…while进行实现
A:
int main() {
int sum = 0,i;
printf("Input a number:\n");
scanf("%d",&i);
do {
sum += i;
i++;
} while (i <= 10);
printf("The value of sum is %d.\n",sum);
return 0;
}
运行结果:
先输入一个小于10的数:
再输入一个大于10的数:
可以看到,这时输出的sum值为11,这是因为在do…while中,是先执行循环体语句,再进行条件判断。
三、for语句实现循环
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
语句
表达式1:设置初始条件,只执行1次。可以为0个(即没有)、一个或者多个变量设置初值。
表达式2:循环条件的表达式,用来判断是否还需要继续循环。在每次执行循环体之前先执行此表达式。
表达式3:作为循环的调整,如可以使循环变量增值,该表达式是在执行完循环体后才进行的。
for语句的常用形式为:
for(循环变量赋初值;循环条件;循环变量增值)
语句
针对引言的问题,现给出用for语句实现的代码:
int main() {
int sum = 0,i;
for(i=1;i <= 100;i++) {
sum += i;
}
printf("The value of sum is %d.\n",sum);
return 0;
}
for语句里面的三个表达式均可省略。
四、break和continue语句
我们以一个具体问题进行分析
Q:找出0-10的偶数。
4.1 break
break语句可以提前终止循环。
A:
int main() {
int sum = 0,i = 0;
while(i <= 10) {
if(i % 2 == 0) {
printf("%d\t",i);
i++;
break;
}
i++;
}
return 0;
}
运行结果:
运行结果并不符合我们对0-10之间的偶数的认知,说明break语句用在此处不合理(此处代码并不符合题目要求,此处使用break旨在区分break与continue的区别)
i从0开始执行,在执行循环体语句时,i可以整除2,执行了break。当执行break语句后,该循环就没在继续执行,如果继续执行了,后面应该还会输出2,4,6…
所以break就直接结束了最近的一次循环。
4.1 continue
continue结束是本次循环,而不是整个循环。
A:
int main() {
int sum = 0,i = 0;
while(i <= 10) {
if(i % 2 == 0) {
printf("%d\t",i);
i++;
continue;
}
i++;
}
return 0;
}
运行结果: