> 文章列表 > C语言基础应用(五)循环结构

C语言基础应用(五)循环结构

C语言基础应用(五)循环结构

引言

如果要求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的数:
C语言基础应用(五)循环结构
我们可以看到,由于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;
}

运行结果:
在这里插入图片描述

91魔方网