前言:
1 goto语句:
1.1一般形式
1.2使用goto语句和if语句构成的循环结构求1到100的整数和:
1.3逻辑流程图:
2 while语句:
2.1一般形式:
2.2使用while循环结构求1到100的整数和:
2.3逻辑流程图:
3 do while语句:
3.1一般形式
3.2使用do while循环结构求1到100的整数和:
3.3逻辑流程图:
4 while语句和do while语句的比较:
5 for语句:
5.1一般形式
5.2使用for循环结构求10000以内的回文数:
5.3逻辑流程图:
6 break语句:
总结:
循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。
1.1goto语句为无条件转向语句,它的一般形式为
goto 语句标号(标识符)
语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,
其第一个字符必须为字母或下划线。不能用整数来作标号。例如:
goto label_1;
是合法的,
goto 123;
是不合法的。
结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程
序流程无规律、可读性差。但也不是绝对禁止使用goo语句。一般来说,有两种用途:
(1)与if语句一起构成循环结构。
(2)从循环体中跳转到循环体外,但要注意goto语句只能从本函数内跳转。
1.2
下面是使用goto语句和if语句构成的循环结构求1到100的整数和:include
void main()
{
int i,sum = 0;
i = 1 ;
loop: if(i <= 100)
sum = sum + i;
i++;
goto loop;
}
printf("%d\n",sum);
}
运行结果如下:
5050
2.1while语句用来实现“当型”循环结构。其一般形式如下:
while(循环执行条件)
{
循环体;
}
注意:保证while语句和“{ }”循环体之间没有其他语句,while语句后没有“;”。
当表达式为非0值时,执行while语句中的内嵌语句,其特点是:
先判断表达式,后执行语句。
#include
void main()
{
int i,sum = 0;
i = 1;
while (i <= 100)
{
sum=sum十i;
i++
}
printf("%d\n”,sum);
}
运行结果如下:
5050
do...while语句的特点是先执行循环体,然后判断循环条件是否成立。
3.1do while语句一般形式为:
do
{
循环体
}
while(循环执行条件);
注意:do while语句与“{}”循环体之间同样不可以有其他语句,与while语句不同的是,do while 语句中的while语句后面需要加上“;”。
include
void main()
{
int i,sum = 0;
i =1;
do
{
sum = sum + i;
i++;
}
while(i <= 100);
printf("%d\n",sum);
}
运行结果如下:
5050
while 语句:
#include
void main ()
{
int sum = 0,i;
scanf("%d"”,&i);
while (i <= 10)
{
sum = sum + i;
i++;
}
printf("sum=%d\n",sum);
}
输出结果如下:
输入:i = 1
输出:sum = 55
输入:i = 11
输出:sum = 0
do while语句
#include
void main()
{
int sum = 0,i;
scanf("%d”,&i);
do
{
sum = sum + i:
i++;
}
while (i <= 10);
printf("sum=%d\n",sum);
}
输出结果如下:
输入:i = 1
输出:sum = 55
输入:i = 11
输出:sum = 11
可以看到:当输人i的值小于或等于10时,二者得到结果相同。而当i>10时,二者
结果就不同了。这是因为此时对while循环来说,表达式为假(“i<=10”)时,一次也不执行循环体,而对do...while循环语句来说则要执行一次循环体。
可以得到结论:循环体相同时,当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,二者结果不相同。
for(表达式1;表达式2;表达式3;)
{
循环体;
}
for(循环变量赋初值;循环条件;循环变量增值)
{
循环体
}
注意:1 循环变量赋初值中
for(int i = 0;语句2;语句3)
这种形式仅C11支持,C99,C88会编译报错。尽量使用以下形式。
int i = 0;
for ( i = 0; 语句2;语句3)
2 循环变量赋初值可以省略不写
3 循环条件省略不写(永远为真),循环结构将变成死循环。
4循环变量增值可以写在循环体内
for(语句1;语句2;++i)
{
循环体
}
也可以写为:
for(语句1;语句2;)
{
循环体;
++i;
}
1 #include
2
3 int main (void)
4 {
5 int i = 0;
6 int k = 0;
7 for(i = 1; i < 10000;++i)
8 {
9 int j = i;
10 while(j != 0)
11 {
12 k = k * 10 + j % 10;
13 j = j / 10;
14 }
15 if(k == i)
16 {
17 printf("%d ",i);
18 }
19
20 k = 0;
21 }
22 printf("\n");
23 return 0;
24 }
注意:在这段代码中,k为参与循环的全局变量。在这行代码中
k = k * 10 + j % 10;
可以理解为:
k(第二次循环) = k(第一次循环的残余) * 10 + j % 10;
因此需要清理循环残余
20 k = 0;
或者将k定义为循环内的局部变量。对于定义在循环结构中的变量,每次循环结束后,系统将自动销毁该变量的存储空间,并在下一次循环开始时为变量重新开辟新的存储空间。
即
1 #include
2
3 int main (void)
4 {
5 int i = 0;
6
7 for(i = 1; i < 10000;++i)
8 {
9 int j = i;
10 int k = 0;
11 while(j != 0)
12 {
13 k = k * 10 + j % 10;
14 j = j / 10;
15 }
16 if(k == i)
17 {
18 printf("%d ",i);
19 }
20
21 }
22 printf("\n");
23 return 0;
24 }
break语句的一般形式为
break;
break语句不能用于循环语句和switch语句之外的任何其他语句中且只能跳出一层循环。对于跳出多层循环的情况可以使用goto语句,但不推荐。break语句用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
例如:
float pi=3.14159;
for(r=1;r<=10:r++)
{
area=pi *r*r;
if(area > 100)
{
break;
}
printf("r=%f,area=%f\n",r,area);
}
程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的
for循环可以看到:当area>l00时,执行break语句,提前结束循环,即不再继续执行其
余的几次循环。
循环语句主要由循环变量初始化语句,循环执行条件语句和使循环趋于结束的语句构成。对于三种常用的循环语句 while语句,do while语句和for语句,三者的工作效率基本相同。循环结构中的死循环常用于裸机开发中。定义变量时尽量不使用拼音作为标识符,以提高代码的复用性。在循环结束时,循环变量的值一定为循环条件初次为假的值。