内容正文:
单招零距离·计算机专业综合·下册
第五章
循环结构程序设计
大纲要求
1.掌握for循环结构。
2.理解while和do while循环结构。
3.掌握continue语句、break语句。
4.理解循环的嵌套。
第一节while循环
知识体系
while循环的格式、while循环的运行过程
while循环解决实际问题的一般步骤
知识梳理
⊙⑤
一、while循环的格式
1.while语句的一般格式为:
while(表达式)
{循环体;}
2.运行过程:
计算
的值,当值为
时,反复执行
语句,为
时退出循环。
3.说明:
(1)循环体如果
,可以省略大括号,两句以上则应用大括号以
形式
出现。
(2)在循环体中或表达式中应有使循环趋向于结束的语句,即有最终使表达式为
的情况,否则会出现
现象,这在编程中要避免的。另外在条件表达式后千万不能加一
个
,否则极易造成死循环现象,此时循环控制的是分号前的
,控制不到循环
体了。
(3)while循环的特点是先判断表达式的值,如果一开始为假(值为0),则循环体
执行,直接执行while循环的后续语句。
二、while循环解决实际问题的一般步骤
1.设置好循环的
2.确定好循环的
3.把要重复执行的语句部分放在
中:
·78·
总复习方案·第五章循环结构程序设计
4.设法在循环体中或条件表达式中
致使循环能够满足一定的条件后
典例精析
【例1】
(1)写出下列程序的执行结果。
#include "stdio.h"
int main()
int i,sum=0;
i=1;
while(i<5)
(sum=sum+i;
i++;
〉
printf("%d
",sum);
}
(2)写出下列程序的执行结果。
#include "stdio.h"
int main()
int i,sum=0;
i=5;
while(i->0)
sum=sum十i;
printf("%d
",sum);
【分析】(1)i从1变化到5,且全部加到sum中,但最终i为6使循环退出。(2)i一开始
为5,-0,在执行循环体之前要自减一次,所以sum中加的第一个数是4、然后是3、2、1、0、一
1,最终i为一2。
【答案】(1)15(2)9
【例2】如果从健盘上输入4,写出下列程序的运行结果。
#include "stdio.h"
int main()
{
int a=0,n;
printf("
input n:");
scanf("%d",&.n);
while(n-一)
printf("%d",a十+*n);
}
【分析】条件表达式为n一,先是用n的值判断是否循环,再自减一次。
·79·
单招零距离·计算机专业综合·下册
【答案】
程序运行结果:
010
【例3】编程求sum=1十3+5十.十99,请填空:
#include "stdio.h"
int main()
int i,sum=0;
i=1;
while(i<
(sum=sum+i;
i+=
}
printf("%d
",sum);
}
【答案】
(1)99
(2)2
【例4】编程求sum=1+(1+2)+(1+2+3)+..十(1+2+3+.100)。
#include "stdio.h"
int main()
int i,t=0,sum=0;
printf("%d
",sum);
}
【答案】
i=1;
while(i<=100)
t=t+i;
sum=sum+t;
i十+;
巩固练习
©⊙
1.执行如下语句后,a,b的值分别是()。
int a=1,b=10;
while(b--<0)
·80·
总复习方案·第五章循环结构程序设计
b=b-a;
a++;
}
A.1,10
B.2,9
C.1,9
D.2,10
2.和while(!x)中的(!x)等价的是(
)。
A.x==0
B.x!=0
C.x==1
D.x!=1
3.写出下列程序的执行结果:
include "stdio.h"
int main()
int i,sum=0;
i=1;
while(i<=99)
sum=sum+i;
i+=2;
printf("%d
",sum);
}
4.如果从键盘上输入一3,写出下列程序的运行结果:
include "stdio.h"
int main()
int a=0,n;
printf("
input n:");
scanf("%d",&n);
while (++n)
printf("%d ",n+a--*2);
拓展练习
⊙务Y⊙
1.编程求sum=1十(1+3)+(1+3+5)+..+(1+3+5十..99),请填空:
include "stdio.h"
int main()
(int i,t=0,sum=0;
i=1:
while(i<99)
{t=
sum=sum+t;
·81…
单招零距离·计算机专业综合·下册
printf("%d
",sum);
2.程序填空题:对任一实数x,对其进行分半,直到小于0.001为止,输出分半的次数。
#include "stdio.h"
int main()
{float n=0,x;
scanf("%f",&x);
while(
{n十+;
;》
printf("x=%f,n=%.0f",x,n);
}
3.求sum=1一(1+2)+(1+2+3)一…一(1+2+3+…100),请编程实现:
#include "stdio.h"
int main()
{
/*兴头兴关米米¥关米¥米米***BEGIN关并关米兴兴关关关关关关关关关/
/米*米米米米米米米*米米米米米*END关米米米关关米米关米米米*米0/
printf("%d
",sum);
技能实践
C©
1.程序填空题:从键盘上输入两个正整数,求它们的最大公约数和最小公倍数(注:两数
的最小公倍数为两数的积除以两数的最大公约数)。(最大公约数要求用辗转相除法)
#include "stdio.h"
int main()
(int m,n,r,t;
int gbs,gys;
int x,y;
printf("input two integer numbers m,n");
scanf("d%d",&.m,&.n);
if (m<n)(t=m;m=n;n=t;)
x=m;y=n;
r=
·82·
总复习方案·第五章循环结构程序设计
while(r!=0)
(m=n;n=r;r=mn;)
gbs=
gys=n;
printf("gbs=%d,gys=%d
",gbs,gys);
2.程序改错题:计算s=1十1/(1*2)十1/(23)十..十1/(n*(n十1))直到最后一项小
于0.001,编程求出n值,最后一项的值及s值。(要求最后一项的值也加进s中去),调试结果
应为:n=32,k=0.000947,s=1.969697,程序中有三处错误,请改正。
include "stdio.h"
int main()
float n=0;
/米米关*关米米米***米米米关*f0ud*米米***米米兴米米米米*米米米/
float s=0,k=1;
/米米**米米米米米米*米米米**f0und米并米*米***米关米米米关米米米/
while(k>0.001)
{n十+;
/米米米**米米米米*米并米米米*f0ud米米米米**米米米米米米米*米*米/
k=1/n*(n+1):
s=s十k
printf("n=%.0f,k=%f,s=%f",n,k,s);
3.程序设计题:从键盘上输入一个整数,求出它的逆序数。如n=1234,则输出m=4321。
#include "stdio.h"
int main()
int n,m=0;
scanf("%d",&n);
/米米米米米***米米米米米*BEGIN***关米米米米**米米/
/米米米米米米*兴关米米米米**END*米米米****米兴兴米米关兴米米/
printf("m=%d",m);
·83· (3)days+day
5.switch(a)
{ case1:printf("Monday
");break;
case2:printf("Tuesday
");break;
case3:printf("Wednesday
");break;
case4:printf("Thursday
");break;
case5:printf("Friday
");break;
case6:printf("Saturday
");break;
case7:printf("Sunday
");break;
default:printf("Error
");break;
}
【拓展练习】
1.i=8,s=21
2.i=2,n=0
s=0
3.(1)a+b>c&&a+c>b&&b+c>a
(2)a==b&&b==c
(3)a==b||b==c||a==c
4.if(x%3==0)
t=t+3;
if(x%5==0)
t=t+5;
if(x%7==0)
t=t+7;
switch(t)
{ case15:printf("能被3、5、7整除
");break;
case12:printf("能被5、7整除
");break;
case10:printf("能被3、7整除
");break;
case8:printf("能被3、5整除
");break;
case7:printf("能被7整除
");break;
case5:printf("能被5整除
");break;
case3:printf("能被3整除
");break;
case0:printf("不能被3、5、7整除
");break;
}
5.if(x>=1&&x<=126)
t='A';
elseif(x>=128&&x<=191)
t='B';
elseif(x>=192&&x<=223)
t='C';
elseif(x>=224&&x<=239)
t='D';
elseif(x>=240)
t='E';
putchar(t);
【技能实践】
1.(1)r=-1
(2)r=0.70
(3)0.50+weigh∗r
2.(1)if(x>72)或if(x>=73)
(2)elseif(x>=25)
3.gets(word);
for(i=0;word[i];i++)
{ t=toupper(word[i]);
if(t>='A'&&t<='E')weigh+=1;
elseif(t>='F'&&t<='J')weigh+=2;
elseif(t>='K'&&t<='O')weigh+=3;
elseif(t>='P'&&t<='T')weigh+=4;
elseif(t>='U'&&t<='Y')weigh+=5;
else weigh+=6;
}
printf(“weight(“%s”)=%d
”,word,weight);
第五章 循 环 结 构
第一节 while循环
【知识梳理】
一、while循环的格式
2.表达式 真(非0) 循环体 假(0)
3.(1)只有一句 复合语句
(2)假(0) 死循环 分号 空语句
(3)一次也不
二、while循环解决实际问题的一般步骤
1.初始条件
2.条件表达式
3.循环体
4.改变条件 结束循环
【巩固练习】
1.C 2.A
3.2500
4.-2 -3
【拓展练习】
1.(1)t+i (2)i+=2;
2.(1)x>=0.001 (2)x/=2
3.inti,t=0,sum=0,flag=1;
i=1;
while(i<=100)
{t=t+i;
71
总复习方案参考答案
sum=sum+t∗flag;
flag=-flag;
i++;
}
【技能实践】
1.(1)m%n (2)x∗y/n
2.(1)floats=0,k=1;改为floats=1,k=1;
(2)while(k>0.001)改为 while(k>=0.001)
(3)k=1/n∗(n+1);改为k=1/(n∗(n+1));
3.while(n! =0)
{m=m∗10+n%10;
n=n/10;
}
第二节 do-while循环
【知识梳理】
一、do-while循环的格式
2.循环体 计算表达式的值 真 假
3.(1)至少要执行一次 分号 语法
(2)结束 假 死循环
【巩固练习】
1.B 2.A 3.B
4.c,99
5.a=8,b=7
6.digit=x%10;
sum=sum+digit∗digit∗digit;
x=x/10;
【拓展练习】
1.3 4 6 7 9 10
2.a=5,b=13,i=4
3.(1)sum+f3/f2 (2)++i<=8或i++<8
【技能实践】
1.(1)x-y==c (2)n<3&&flag==0
2.(1)r=n%m;改为r=m%n;
(2)gbs=x∗y/n;改为gbs=x∗y/m;
(3)gys=r;改为gys=m;
3.num=num∗2;
d=num;
printf("%d",d);
t++;
num=num-d;
第三节 for循环
【知识梳理】
一、for循环的格式
1.取代 for(表达式1;表达式2;表达式3)循环体
2.(1)表达式1
(2)表达式2 循环体 假(0) 结束循环
(3)表达式3
(4)(2)
3.循环变量赋初值 循环条件 循环变量增量
关系表达式或逻辑表达式 ;
(1)选择项 ;
(2)循环控制变量
(3)死循环
(4)循环控制变量
【巩固练习】
1.B 2.B 3.D
4.1 2 3 4
3 6 9 12
5.sum=9
【拓展练习】
1.结果为:a=2,b=8,c=46,ch=B
2.2 3 5 8 13
3.for(i=1;i<=n;i++)
{p∗=i;
s+=1/p;
}
4.for(i=2;i<=n-1;i++)
if(n%i==0)
{flag=0;
break;
}
【技能实践】
1.(1)k=10 (2)d-t∗k
2.(1)for(i=1;i<10;i++)改为for(i=1;i<=
10;i++)
(2)s=s+h改为s=s+h+r;
(3)h=r/2改为h=r;
3.sum+a/b;
printf("%.3f\t",a/b);
r=b;
b=a;
a=x+a;
第四节 循环结构的嵌套
【知识梳理】
一、循环辅助语句
1.终止并跳出 结束循环 终止并跳出最近一层
2.本次循环 尚未执行 是否执行循环体 判断
81
单招零距离计算机专业综合下册