循环结构程序设计
5.1 while语句
一般形式:
while (表达式)
{
语句
}
特点:先判断表达式,后执行语句。
例,求1到100的和
#include<stdio.h>
int main()
{
int i = 1, sum = 0;
while (i <= 100)
{
sum += i;
i++;
}
printf("sum = %d\n", sum);
return 0;
}
注意:
(1)循环体如果包含一个以上的语句,应该用大括弧括起来,以复合语句的形式出现。
(2)在循环体中应有使循环趋向于结束的语句。
5.2 do-while语句
一般形式:
do
{
循环体语句
} while (表达式);
特点: 先执行循环体,然后判断循环条件是否成立。
例,求1到100的和
#include<stdio.h>
int main()
{
int i = 1, sum = 0;
do
{
sum += i;
i++;
} while (i <= 100);
printf("sum = %d\n", sum);
return 0;
}
5.3 for语句
一般形式:
for(表达式1;表达式2;表达式3)
{
语句
}
最简单的形式:
for(循环变量赋初值;循环条件;循环变量增值)
{
语句
}
注:
(1) 与for语句等价的while语句的形式:
表达式1;
while(表达式2)
{
语句
表达式3;
}
(2) for语句中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。
例如:
for ( ; i <= 100; i++) sum = sum + i;
注意: 表达式1后面的分号不能省略
(3) 如果表达式2省略,即不判断循环条件,循环无终止地进行下去。即认为表达式2始终为真。例如:
for (i = 1; ; i++) sum = sum + i;
(4) 表达式3也可以省略,但应该另外设法保证循环能正常结束。
例如:
for (i = 1; i <= 100; )
{
sum = sum + i;
i++;
}
(5) 可以省略表达式1和表达式3,只有表达式2, 即只给循环条件。
例如:
for (; i<=100; )
{
sum = sum + i;
i++;
}
相当于
while (i<=100)
{
sum = sum + i;
i++;
}
(6) 表达式1和表达式3可以是一个简单的表达式,也可以包含多个简单表达式,中间用逗号间隔。例如
for (sum=0, i=1; i<=100; i++) sum = sum + i;
for (i=1; i<=100; i++, i++) sum = sum + i;
相当于
for (i=1; i<=100; i=i+2) sum = sum + i;
例:
for ( ; (c=getchar()) != ‘\n’; )
printf(″%c″,c);
语句中只有表达式2,而无表达式1和表达式3。作用:每读入一个字符后立即输出该字符,直到遇到“换行”为止。
例,求1到100的和
#include<stdio.h>
int main()
{
int i, sum = 0;
for (i = 1; i <= 100; i++)
sum += i;
printf("sum = %d\n", sum);
return 0;
}
5.4 循环的嵌套
一个循环体内又包含另一个完整的循环结构称为循环的嵌套。
三种循环(while循环、do-while循环和for循环)可以互相嵌套
。
例,输出一个矩阵
[ 2 3 4 5 3 4 5 6 4 5 6 7 ] \left[\begin{matrix} 2 & 3 & 4 & 5\\ 3&4&5&6\\ 4&5&6&7\\ \end{matrix} \right] ⎣⎡234345456567⎦⎤
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 3; i++)
{
for (j = 1; j <= 4; j++)
printf("%d ", i + j);
printf("\n");
}
return 0;
}
5.5 while与do-while的比较
在一般情况下,用while语句和用do-while语句处理同一问题时,它们的结果一样。但是如果while后面的表达式一开始就为假时,两种循环的结果是不同的。
例如下面两个程序
#include<stdio.h>
int main()
{
int i, sum = 0;
printf("please enter i: ");
scanf_s("%d"<