第六章 循环控制设计本章重点:
循环结束条件设置
for语句、while语句、do-while语句三种循环语句的比较
break语句、continue语句
for 语句
for语句的一般形式
例6.1求1+2+3+….+100
main( )
{
int n,sum;
sum=0;
for (i=1;i<=100;i++) sum=sum+i;
printf(“the sum is %d\n”,sum);
}
2.For语句说明:
赋初值可以省略,但分号不能省略。
如:for (; i<=100;i++) sum=sum+i;
如果循环终止条件省略,则无限循环。
如:for (i=1; ; i++) sum=sum+1;
如果循环变量增量部份省略,必须在程序的其他地方有修改循环变量的语句,否则无法保证循环正常结束
如:for (i=1;i<=100; ) for (i=1;i<=100; ;)
sum=sum+i; {sum=sum+i; i++}
for (; ;) 表示无限循环,相当于while (1)语句
for语句中的第一个表达式可以不是赋初值语句,
如:for (sum=0;i<=100; i++) sum=sum+i;
包含逗号表达式的其它形式的for语句,如:
for (sum=0,i=1; i<=100; i++);
for (i=1,j=100; i<=j; i++,j--)
k=k+i+j;
for (i=1; i<=100; i++,i++);
相当于for (i=1; i<=100; i=i+2);
3.循环终止条件的种类:
关系表达式,如前几例逻辑表达式,for (; a>b && x<y ;)
字符表达式,
for (; (c=getchar()) != ‘\n’;)
printf(“%c”,c);
4)break语句跳出循环。
for (sum=0;; i++)
{
sum=sum+i;
if (i<=100) break;
}
6.2 while 语句
1.while语句用来实现“当循环”
一般形式如下,
while (表达式) 语句表达式为真时(非0值),执行while语句的内嵌语句。
2.说明:
① while循环表示当条件表达式的值为真时,便执行语句。直到条件为假才结束循环。 并继续执行循环程序外的后续语句。
② 语句可以是语句体,此时必须用"{"和"}"括起来。
③条件表达式可为任意式子。在语句体中要有使得条件表达式为假值的语句,否则进入死循环。
[例6.2] 求1+2+3+….+100
6.3 do-while语句
1.do-while 循环的一般格式为,
do
语句;
while(条件);
2.说明,
① 它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环; 如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
②当有许多语句参加循环时,要用"{"和"}"把它们括起来。
例6.3 求 1+2+3+‥‥+100的值。
main()
{
int i,sum=0; i=1;
do {
sum=sum+i; i++;
} while (i<=100);
printf(“%d”,sum)
}
(1) do-while结构至少要执行一次循环体。
(2)一般情况下,处理同一问题时,若二者的循环体部分是一样的,它们的结果也是一样。但若while后面的表达式一开始就为假时,两种循环的结果就不
6.4循环的嵌套
while、do –while,for可以有多层嵌套。
即在while、do –while,for的循环体中可内嵌一个循环语句。
main()
{
int i,j,k;
printf("i j k\n");
for (i=0; i<2; i++)
for(j=0; j<2; j++)
for(k=0; k<2; k++)
printf(%d %d %d\n",i,j,k);
}
输出结果为,
i j k
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
例6.4 打印九九表(三角形)
main()
{ int i,j;
printf("\n");
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%2d ",i,j,i*j);
printf("\n");
}
}
注:程序中用I控件行数,用J控件打印个数。
☆☆只有内循环J循环一遍后,外循环I才改变一次。☆☆
6.5 break语句和ontinue语句
1.break语句
(1)break语句格式,break ;
(2) break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;
(3)当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。
例6.5,统计输入字符个数,直到输入Esc键结束输入。
main()
{
int i=0;
char c;
while(1) /*设置循环*/
{
c='\0'; /*变量赋初值*/
while(c!=13&&c!=27) /*键盘接收字符直到按回车或Esc键*/
{
c=getch();
printf("%c\n",c);
i++;
}
if(c==13) i--;
if(c==27) {i--; break;} *判断若按Esc键则退出循环*/
printf("The No,is %d\n",i);
}
printf("The end");
}
注意,
①,break语句对if-else的条件语句不起作用。
②,在多层循环中,一个break语句只向外跳一层。
2,continue 语句
(1)格式,continue;
(2) continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
(3) continue语句只用在for、while、do-while等循环体中,常与if条件语句一 起使用,用来加速循环。
例6.6 把100-200之间的不能被3整除的数输出
Main()
{ int n;
for (n=100;n<=200;n++)
{
if (n%3==0)
continue;
printf(“%d”,n)
}
本章总结
一、三种循环语句while,do---while和for
二、建立循环通常有以下情况:
1,给定次数,for比较适用 for(i=1;i<100;i++)
2,给定条件,while比较适用 while((x+y)<z)
3,字符的情况通常以回车做结束符
while((c=getchar())!=‘\n’)
4,小经验,将字符变成数字 i=num-’0’;
5,判断字符范围
(c>‘a’ &&c <‘z’)||(c>‘A’&& c<‘Z’)
循环结束条件设置
for语句、while语句、do-while语句三种循环语句的比较
break语句、continue语句
for 语句
for语句的一般形式
例6.1求1+2+3+….+100
main( )
{
int n,sum;
sum=0;
for (i=1;i<=100;i++) sum=sum+i;
printf(“the sum is %d\n”,sum);
}
2.For语句说明:
赋初值可以省略,但分号不能省略。
如:for (; i<=100;i++) sum=sum+i;
如果循环终止条件省略,则无限循环。
如:for (i=1; ; i++) sum=sum+1;
如果循环变量增量部份省略,必须在程序的其他地方有修改循环变量的语句,否则无法保证循环正常结束
如:for (i=1;i<=100; ) for (i=1;i<=100; ;)
sum=sum+i; {sum=sum+i; i++}
for (; ;) 表示无限循环,相当于while (1)语句
for语句中的第一个表达式可以不是赋初值语句,
如:for (sum=0;i<=100; i++) sum=sum+i;
包含逗号表达式的其它形式的for语句,如:
for (sum=0,i=1; i<=100; i++);
for (i=1,j=100; i<=j; i++,j--)
k=k+i+j;
for (i=1; i<=100; i++,i++);
相当于for (i=1; i<=100; i=i+2);
3.循环终止条件的种类:
关系表达式,如前几例逻辑表达式,for (; a>b && x<y ;)
字符表达式,
for (; (c=getchar()) != ‘\n’;)
printf(“%c”,c);
4)break语句跳出循环。
for (sum=0;; i++)
{
sum=sum+i;
if (i<=100) break;
}
6.2 while 语句
1.while语句用来实现“当循环”
一般形式如下,
while (表达式) 语句表达式为真时(非0值),执行while语句的内嵌语句。
2.说明:
① while循环表示当条件表达式的值为真时,便执行语句。直到条件为假才结束循环。 并继续执行循环程序外的后续语句。
② 语句可以是语句体,此时必须用"{"和"}"括起来。
③条件表达式可为任意式子。在语句体中要有使得条件表达式为假值的语句,否则进入死循环。
[例6.2] 求1+2+3+….+100
6.3 do-while语句
1.do-while 循环的一般格式为,
do
语句;
while(条件);
2.说明,
① 它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环; 如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
②当有许多语句参加循环时,要用"{"和"}"把它们括起来。
例6.3 求 1+2+3+‥‥+100的值。
main()
{
int i,sum=0; i=1;
do {
sum=sum+i; i++;
} while (i<=100);
printf(“%d”,sum)
}
(1) do-while结构至少要执行一次循环体。
(2)一般情况下,处理同一问题时,若二者的循环体部分是一样的,它们的结果也是一样。但若while后面的表达式一开始就为假时,两种循环的结果就不
6.4循环的嵌套
while、do –while,for可以有多层嵌套。
即在while、do –while,for的循环体中可内嵌一个循环语句。
main()
{
int i,j,k;
printf("i j k\n");
for (i=0; i<2; i++)
for(j=0; j<2; j++)
for(k=0; k<2; k++)
printf(%d %d %d\n",i,j,k);
}
输出结果为,
i j k
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
例6.4 打印九九表(三角形)
main()
{ int i,j;
printf("\n");
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%2d ",i,j,i*j);
printf("\n");
}
}
注:程序中用I控件行数,用J控件打印个数。
☆☆只有内循环J循环一遍后,外循环I才改变一次。☆☆
6.5 break语句和ontinue语句
1.break语句
(1)break语句格式,break ;
(2) break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;
(3)当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。
例6.5,统计输入字符个数,直到输入Esc键结束输入。
main()
{
int i=0;
char c;
while(1) /*设置循环*/
{
c='\0'; /*变量赋初值*/
while(c!=13&&c!=27) /*键盘接收字符直到按回车或Esc键*/
{
c=getch();
printf("%c\n",c);
i++;
}
if(c==13) i--;
if(c==27) {i--; break;} *判断若按Esc键则退出循环*/
printf("The No,is %d\n",i);
}
printf("The end");
}
注意,
①,break语句对if-else的条件语句不起作用。
②,在多层循环中,一个break语句只向外跳一层。
2,continue 语句
(1)格式,continue;
(2) continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
(3) continue语句只用在for、while、do-while等循环体中,常与if条件语句一 起使用,用来加速循环。
例6.6 把100-200之间的不能被3整除的数输出
Main()
{ int n;
for (n=100;n<=200;n++)
{
if (n%3==0)
continue;
printf(“%d”,n)
}
本章总结
一、三种循环语句while,do---while和for
二、建立循环通常有以下情况:
1,给定次数,for比较适用 for(i=1;i<100;i++)
2,给定条件,while比较适用 while((x+y)<z)
3,字符的情况通常以回车做结束符
while((c=getchar())!=‘\n’)
4,小经验,将字符变成数字 i=num-’0’;
5,判断字符范围
(c>‘a’ &&c <‘z’)||(c>‘A’&& c<‘Z’)