通过前面的学习,想要解决更多高质量的问题,必须要有使用循环结构。在C语言中,常见的循环语句有三种:while语句、do-while语句和for语句。
while循环
while语句的一般形式为:
while(表达式)语句;
其中,表达式是循环条件,语句为循环体。while语句的语义是计算表达式的值,当值为真(非0)时,执行循环语句,然后在判断表达式,直到表达式为假(0)时结束循环。
我们来看这样一个求取两数的最大公约数例子。思路如下:
第一步:令m为两个整数中的较大者,n为两个整数中的较小者;
第二步:用m除以n,用r表示余数;
第三步:若r不等于0,则令m=n,n=r,返回步骤二继续;若r等于0,则n 中的数值就是其最大公约数。
算法如下:
#include <stdio.h>
int main(){
int m;
int n;
int r;
int min;
printf("请输入一个数字:");
scanf("%d",&m);
printf("请输入一个数字:");
scanf("%d",&n);
if(m<n){
min=m;
m=n;
n=min;
}
r=m%n;
while(r!=0){
m=n;
n=r;
r=m%n;
}
printf("最大公约数:%d",n);
}
do-while循环
do-while 语句的一般形式为:
do语句;while (表达式);
其中,语句是循环体,表达式是循环条件。
do-while 语句的语义是,先执行循环语句一次,在判别表达式的值,若为真,则继续循环;否则中止循环。
do-while 语句和while语句和while语句的区别在于do-while 是先执行后判断,因此do-while 至少要执行一次循环体。而while是先判断后执行,如果条件不满足,则一次循环语句也不执行。
对do-while 语句还应注意一下几点:
- 在if和while语句中,表达式后面附不能加分号,在do-while 语句的表达式后必须要有分号;
- do-while 语句也可以组成多种循环,而且也可以和while语句互相嵌套;
- 在do 和while之间的循环体由多个语句组成时,也必须用{}括起来组成一个符合语句;
- do-while 和while语句相互替换时,要注意修改循环条件。
如下面的例子,讲一个正整数按反向输出。
#include <stdio.h>
int main(){
int n;
int r;
printf("请输入整数:");
scanf("%d",&n);
do{
r=n%10;
printf("%d",r);
n=n/10; //n/=10;
}while(n);
printf(" ");
}
for()循环
for语句的基本表达形式如下:
for(表达式一;表达式二;表达式三)
<语句s>
其中,表达式一给环境变量赋初值;
表达式二确定循环条件;
表达式三改变循环变量;
在使用for()循环时,应注意以下几点:
-
for语句个表达式都可以省略,但分号间隔符都不能少:for(;?;
-
在循环变量已赋初值时,第一个表达式可省去;
-
循环语句可以是空语句。
如下例列出的9X9乘法表。
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<=9;i++){for(j=1;j<=i;j++){ printf("%dx%d=%2d\t",i,j,i*j); //\t是水平制表符 } printf("\n");
}
}