第六章 循环结构程序设计第一节 概述
C语言中下列语句实现循环:
1.用 goto语句和 if语句构成循环
2.while语句
3.do-while语句
4.for语句第二节 goto语句构成循环
goto语句的一般形式:
goto 语句标号 ;
……
语句标号,语句 ;
例,goto labe_1;
goto 123;
例,goto语句使用示例,计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
例,goto语句使用示例,计算 1+2+3+4+… +100
流程图:
开始
int sum
int i
if(i<=100)
sum=sum+i
i++
结束
y
n
程序,main()
{
int sum=0,i=1;
loop:if(n<=100)
{ sum=sum+i;
i++;
goto loop;
}
printf(“%d”,sum);
}
例,goto语句使用示例,计算 1+2+3+4+… +100
第三节 while语句构成循环
while语句的一般形式:
while ( 表达式)
循环语句; 表达式循环语句
Y
N
例,用 while语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
main()
{
int sum=0,i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“%d”,sum);
}
开始
int sum
int i
whlie(i<=100)
sum=sum+i
i++
结束
y
n
例,用 while语句编程实现:计算 1+2+3+4+… +100
第四节 do-while语句构成循环
do-while语句的一般形式:
do
循环语句;
while ( 表达式) ;
表达式循环语句
Y
N
例,用 do-while语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3,sum=sum+i
s4,i++
s5,判断 i是否小于等于 100,若是重复执行 s3~ s5 ;
否则程序结束
main()
{
int sum=0,i=1;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf(“%d”,sum);
}
例,用 do-while语句编程实现:计算 1+2+3+4+… +100
开始
int sum
int i
whlie(i<=100)
sum=sum+i
i++
结束
y
n
do
例,用 while和 do-while编程实现,
i+(i+1)+(i+2)… +10的和,要求 i的值从键盘输入。
while和 do-while比较
main()
{
int sum=0,i;
scanf(“%d”,i);
while(i<=10)
{
sum+=i;
i++;
}
printf(“%d\n”,sum);
}
main()
{
int sum=0,i;
scanf(“%d”,i);
do{
sum+=i;
i++;
} while(i<=10);
printf(“%d\n”,sum);
}
第五节 for语句构成循环
1.for语句的一般形式:
for(表达式 1;表达式 2;表达式 3)
循环语句 ; 计算表达式 1
表达式 2
循环语句计算表达式 3
Y
N
退出循环例,用 for语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
例,用 for语句编程实现:计算 1+2+3+4+… +100
main()
{
int sum=0,i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“%d”,sum);
}
while语句 for语句
main()
{
int sum=0,i;
printf(“%d”,sum);
}
for(i=1; i<=100; i++)
sum=sum+i;
for语句与 while比较例,
for(i=1;i<=10,i++)
{ a=a*i;
printf(“%d,%d”,a,i);
}
表达式 1
while( 表达式 2)
{ 循环语句;
表达式 3; }
for(表达式 1;表达式 2;表达式 3)
循环语句;
for语句 while语句
i=1;
while(i<=100)
{ a=a*i;
printf(“%d,%d”,a,i);
i++;
}
2.for语句表达式的进一步说明
( 1) for语句的一般形式中的 表达式 1可以省略。
例,for(i=1; i<=100; i++)
i=1;
for(; i<=100; i++)
即,for(; 表达式 2; 表达式 3)
循环语句 ;
( 2)如果 表达式 2省略即,for(表达式 1;; 表达式 3)
循环语句 ;
例,for(i=1;; i++)
while(1)
i++;
( 3)如果 表达式 3省略即,for(表达式 1; 表达式 2; )
循环语句 ;
例,for(i=1; i<=100; i++)
sum+=i;
for(i=1; i<=100 ; )
{ sum+=i;
i++;
}
( 4)也可以同时省略 表达式 1和 表达式 3
即,for(; 表达式 2; )
循环语句 ;
i=1;
for(; i<=100; )
{ sum+=i;
i++;
}
i=1;
while(i<=100)
{ sum+=i;
i++;
}
( 5)也可以同时省略 表达式 1,表达式 2和 表达式 3
即,for(;; )
循环语句 ;
While(1)
循环语句 ;
( 6)在 for语句中,表达式 1和 3可以是简单的表达式,
也可以使用 逗号表达式 。在逗号表达式内按自左向右求解,整个表达式的值为其中最右边的表达式的值。
例,
for(i=1; i<=100; i++,sum+=i);
( 7)在 for语句中,表达式 2一般为关系表达式
(如 i<=5)或逻辑表达式 (如 x>0||y<4),
但也可以是其他表达式 (如字符表达式,
数值表达式)
( 8) for语句的循环语句可以是空语句。
空语句用来实现延迟。
例,for(i=1; i<=100; i++);
例,for(i=0; (c=getchar())!=?\n?; i++)
第六节 循环结构的嵌套一个循环体内又包含另一个完整的循环结构,
这种循环间的层次关系称为循环嵌套。
被嵌套的内循环中还可以嵌套循环。由此形成多层循环。
3种循环语句 while语句,do-while语句以及 for
语句不仅各自可以嵌套,而且还可以相互嵌套。
第七节 break语句的使用
break语句的一般形式:
break;
例,设计一个程序,求能同时满足以下条件:
除以 3余 1,除以 5余 3,除以 7余 5,除以 9余 7
的最小数。
for(i=9; ;i++)
{
if(i%3==1&&i%5==3&&i%7==5&&i%9==7)
{ printf(“%d”,i);
break; }
}
第八节 continue语句的使用
continue语句的一般形式:
continue;
例,打印出数字 0~10,但跳过(即不输出)数字 5
for(i=0;i<=10 ;i++)
{
if(i==5)
contionue;
printf(“%3d”,i);
}
习题
1,k=1;n=263;
do{ k*=n%10;
n/=10;
} while(n);
问最后 k的值为多少? 36
习题
2,a=10;
b=0;
do{
b+=2;
a-=2+b;
} while(a>0);
问最后 b的值为多少?循环了多少次?
b=4 循环 2次习题
3,i=1;a=0;s=1;
do{ a=a+s*i;
s=-s;
i++;
}
while(i<=10);
printf(“a=%d”,a);
a=0+1-2+3-4+5-6+7-8+9-10
习题
4.运行以下程序,输入 right?则下面程序结果为?
#include <stdio.h>
main()
{ char c;
while((c=getchar())!=)
putchar(++c);
}
sjhiu
习题
5,main()
{ int i,j;
for(i=1;i<=10;i++)
{ if(i%3==0)
continue;
printf(“%3d”,i);
}
printf(“\n”);
}
/*跳过 3的倍数 */
习题
6,main()
{ int a=10,y=0;
do{ a+=2;y+=a;
printf(“a=%d y=%d\n”,a,y);
if(y>50)break;
}
while(a=14);
}
a=12 y=12
a=16 y=28
a=16 y=44
a=16 y=60
/*给 a赋值 */
7,1-
习题
2
1 +
3
1 …
… + 99
1 -
100
1
用三种做法做
for(i=1;i<100 ;i++)
{
sum=sum+t*s;
s=1/i;
t=-t;
}
习题
8.输入两个整数 m,n,求出它们的最小公倍数和最大公约数。
/*先判断 m,n大小,将较大的放在 m中,较小的放在 n中 */
while(n>0)
{
t=m%n;
m=n;
n=t;
}
习题
9.输入两个整数 x,y,求 xy
main()
{
int x,y,i,mul=1;
scanf(“%d,%d”,&x,&y);
for(i=1;i<=y;i++)
mul=mul*x;
printf(“%d”,mul);
}
习题
10.求出 1~100之间的所有素数
main()
{
int i,j,flag;
for(i=2;i<=100;i++)
{ flag=1;
for(j=2;j<=sqrt(i);j++)
if(i%j==0)
{ flag=0;break; }
if(flag==1)
printf(“%5d”,i);
}
}
习题
11.计算 1! +2! +3! +… +100!
main()
{
int i,sum=0,s=1;
for(i=1;i<=100;i++)
{
sum=sum+s;
s=s*i;
}
printf(“%5d”,sum);
}
习题
12.课本 6.3,6.6,6.8
C语言中下列语句实现循环:
1.用 goto语句和 if语句构成循环
2.while语句
3.do-while语句
4.for语句第二节 goto语句构成循环
goto语句的一般形式:
goto 语句标号 ;
……
语句标号,语句 ;
例,goto labe_1;
goto 123;
例,goto语句使用示例,计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
例,goto语句使用示例,计算 1+2+3+4+… +100
流程图:
开始
int sum
int i
if(i<=100)
sum=sum+i
i++
结束
y
n
程序,main()
{
int sum=0,i=1;
loop:if(n<=100)
{ sum=sum+i;
i++;
goto loop;
}
printf(“%d”,sum);
}
例,goto语句使用示例,计算 1+2+3+4+… +100
第三节 while语句构成循环
while语句的一般形式:
while ( 表达式)
循环语句; 表达式循环语句
Y
N
例,用 while语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
main()
{
int sum=0,i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“%d”,sum);
}
开始
int sum
int i
whlie(i<=100)
sum=sum+i
i++
结束
y
n
例,用 while语句编程实现:计算 1+2+3+4+… +100
第四节 do-while语句构成循环
do-while语句的一般形式:
do
循环语句;
while ( 表达式) ;
表达式循环语句
Y
N
例,用 do-while语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3,sum=sum+i
s4,i++
s5,判断 i是否小于等于 100,若是重复执行 s3~ s5 ;
否则程序结束
main()
{
int sum=0,i=1;
do
{
sum=sum+i;
i++;
}
while(i<=100);
printf(“%d”,sum);
}
例,用 do-while语句编程实现:计算 1+2+3+4+… +100
开始
int sum
int i
whlie(i<=100)
sum=sum+i
i++
结束
y
n
do
例,用 while和 do-while编程实现,
i+(i+1)+(i+2)… +10的和,要求 i的值从键盘输入。
while和 do-while比较
main()
{
int sum=0,i;
scanf(“%d”,i);
while(i<=10)
{
sum+=i;
i++;
}
printf(“%d\n”,sum);
}
main()
{
int sum=0,i;
scanf(“%d”,i);
do{
sum+=i;
i++;
} while(i<=10);
printf(“%d\n”,sum);
}
第五节 for语句构成循环
1.for语句的一般形式:
for(表达式 1;表达式 2;表达式 3)
循环语句 ; 计算表达式 1
表达式 2
循环语句计算表达式 3
Y
N
退出循环例,用 for语句编程实现:计算 1+2+3+4+… +100
算法,s1.设一个变量 sum用于存放最后的结果,
初值为 0
s2.设一个循环变量 i,初值为 1
s3.判断 i是否小于等于 100,若是执行 s4 ;
否则程序结束
s4,sum=sum+i
s5,i++
s6,返回 s3
例,用 for语句编程实现:计算 1+2+3+4+… +100
main()
{
int sum=0,i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf(“%d”,sum);
}
while语句 for语句
main()
{
int sum=0,i;
printf(“%d”,sum);
}
for(i=1; i<=100; i++)
sum=sum+i;
for语句与 while比较例,
for(i=1;i<=10,i++)
{ a=a*i;
printf(“%d,%d”,a,i);
}
表达式 1
while( 表达式 2)
{ 循环语句;
表达式 3; }
for(表达式 1;表达式 2;表达式 3)
循环语句;
for语句 while语句
i=1;
while(i<=100)
{ a=a*i;
printf(“%d,%d”,a,i);
i++;
}
2.for语句表达式的进一步说明
( 1) for语句的一般形式中的 表达式 1可以省略。
例,for(i=1; i<=100; i++)
i=1;
for(; i<=100; i++)
即,for(; 表达式 2; 表达式 3)
循环语句 ;
( 2)如果 表达式 2省略即,for(表达式 1;; 表达式 3)
循环语句 ;
例,for(i=1;; i++)
while(1)
i++;
( 3)如果 表达式 3省略即,for(表达式 1; 表达式 2; )
循环语句 ;
例,for(i=1; i<=100; i++)
sum+=i;
for(i=1; i<=100 ; )
{ sum+=i;
i++;
}
( 4)也可以同时省略 表达式 1和 表达式 3
即,for(; 表达式 2; )
循环语句 ;
i=1;
for(; i<=100; )
{ sum+=i;
i++;
}
i=1;
while(i<=100)
{ sum+=i;
i++;
}
( 5)也可以同时省略 表达式 1,表达式 2和 表达式 3
即,for(;; )
循环语句 ;
While(1)
循环语句 ;
( 6)在 for语句中,表达式 1和 3可以是简单的表达式,
也可以使用 逗号表达式 。在逗号表达式内按自左向右求解,整个表达式的值为其中最右边的表达式的值。
例,
for(i=1; i<=100; i++,sum+=i);
( 7)在 for语句中,表达式 2一般为关系表达式
(如 i<=5)或逻辑表达式 (如 x>0||y<4),
但也可以是其他表达式 (如字符表达式,
数值表达式)
( 8) for语句的循环语句可以是空语句。
空语句用来实现延迟。
例,for(i=1; i<=100; i++);
例,for(i=0; (c=getchar())!=?\n?; i++)
第六节 循环结构的嵌套一个循环体内又包含另一个完整的循环结构,
这种循环间的层次关系称为循环嵌套。
被嵌套的内循环中还可以嵌套循环。由此形成多层循环。
3种循环语句 while语句,do-while语句以及 for
语句不仅各自可以嵌套,而且还可以相互嵌套。
第七节 break语句的使用
break语句的一般形式:
break;
例,设计一个程序,求能同时满足以下条件:
除以 3余 1,除以 5余 3,除以 7余 5,除以 9余 7
的最小数。
for(i=9; ;i++)
{
if(i%3==1&&i%5==3&&i%7==5&&i%9==7)
{ printf(“%d”,i);
break; }
}
第八节 continue语句的使用
continue语句的一般形式:
continue;
例,打印出数字 0~10,但跳过(即不输出)数字 5
for(i=0;i<=10 ;i++)
{
if(i==5)
contionue;
printf(“%3d”,i);
}
习题
1,k=1;n=263;
do{ k*=n%10;
n/=10;
} while(n);
问最后 k的值为多少? 36
习题
2,a=10;
b=0;
do{
b+=2;
a-=2+b;
} while(a>0);
问最后 b的值为多少?循环了多少次?
b=4 循环 2次习题
3,i=1;a=0;s=1;
do{ a=a+s*i;
s=-s;
i++;
}
while(i<=10);
printf(“a=%d”,a);
a=0+1-2+3-4+5-6+7-8+9-10
习题
4.运行以下程序,输入 right?则下面程序结果为?
#include <stdio.h>
main()
{ char c;
while((c=getchar())!=)
putchar(++c);
}
sjhiu
习题
5,main()
{ int i,j;
for(i=1;i<=10;i++)
{ if(i%3==0)
continue;
printf(“%3d”,i);
}
printf(“\n”);
}
/*跳过 3的倍数 */
习题
6,main()
{ int a=10,y=0;
do{ a+=2;y+=a;
printf(“a=%d y=%d\n”,a,y);
if(y>50)break;
}
while(a=14);
}
a=12 y=12
a=16 y=28
a=16 y=44
a=16 y=60
/*给 a赋值 */
7,1-
习题
2
1 +
3
1 …
… + 99
1 -
100
1
用三种做法做
for(i=1;i<100 ;i++)
{
sum=sum+t*s;
s=1/i;
t=-t;
}
习题
8.输入两个整数 m,n,求出它们的最小公倍数和最大公约数。
/*先判断 m,n大小,将较大的放在 m中,较小的放在 n中 */
while(n>0)
{
t=m%n;
m=n;
n=t;
}
习题
9.输入两个整数 x,y,求 xy
main()
{
int x,y,i,mul=1;
scanf(“%d,%d”,&x,&y);
for(i=1;i<=y;i++)
mul=mul*x;
printf(“%d”,mul);
}
习题
10.求出 1~100之间的所有素数
main()
{
int i,j,flag;
for(i=2;i<=100;i++)
{ flag=1;
for(j=2;j<=sqrt(i);j++)
if(i%j==0)
{ flag=0;break; }
if(flag==1)
printf(“%5d”,i);
}
}
习题
11.计算 1! +2! +3! +… +100!
main()
{
int i,sum=0,s=1;
for(i=1;i<=100;i++)
{
sum=sum+s;
s=s*i;
}
printf(“%5d”,sum);
}
习题
12.课本 6.3,6.6,6.8