实验六 循环结构程序设计(一)
实验六 循环结构程序设计(一)
【实验目的】
1.熟悉使用while循环语句的结构、执行过程。 2.学会确定循环条件和循环体。 3.理解死循环的概念。
【实验内容】
一、试着编写下列程序
【例6-1】求1+2+3+4+5的和。 源程序: #include \main() { }
运行结果: i=6,sum=15
int i=1,sum=0; /*变量赋初值*/
while(i<=5) /*循环的终止条件,每次进入循环体先判断*/ { }
printf(\
sum+=i;
i++; /*循环变量增量*/
?举一反三
【6-1】求1-2+3-4+5的和。
【例6-2】输入一个正实数eps,计算并输出下式的值,直到最后一项的绝对值小于eps。
s?1?
14?17?110?......(例如程序运行后,eps被输入0.0001)。
24
实验六 循环结构程序设计(一)
源程序: #include \#include \main() { }
运行结果: Enter eps:1e-4 sum=0.835599
double eps,sum=0,f=1,t=1;
int n=1;
printf(\
scanf(\ /*输入一个特别小的数*/ while(fabs(t)>=eps) {
sum=sum+t;
f=-f; /*正负号转变*/ n=n+3; /*控制分母*/ t=f/n;
}
printf(\
?举一反三
【6-2】输入一个正实数eps,计算并输出下式的值,直到最后一项小于eps。
s?11?2?32?3?53?4?......
【例6-3】从键盘输入一批学生的成绩(以负数为结束标志),计算平均分,并统计不及格成绩的个数。 源程序: #include
float grade,ave=0; /*变量ave用来存放总成绩和平均分*/ int n=0,m=0;
25
实验六 循环结构程序设计(一)
}
printf(\
scanf(\ /*输入第一个成绩*/
while(grade>=0) /*输入数据大于等于0时,执行循环*/ { }
ave=ave/n;
printf(\平均分=%f,不及格人数=%d\\n\
ave=ave+grade;
n++; /*统计学生人数*/
if(grade<60)
m++; /*统计不及格人数*/
scanf(\ /*输入一个新数据为下一次循环做准备*/
?举一反三
【6-3】读入一批正整数(以零或负数为结束标志),求其中的奇数和。
二、程序改错
不允许增加行也不允许删除行,也不得更改程序的结构。 1、下述程序按由大到小的顺序输出10以内的正整数。 源程序: main() {
int k=10; while(k>0)
/********found********/ printf(“%d, ”,k);k=k-1; }
2、修改下列程序,使之能够正确输出1~20之间的数的和(输出一次和值)。 源程序: main() {
int i=1,sum=0;
/******found******/ while(i<=20);
{ sum+=i;
26
实验六 循环结构程序设计(一)
i++;
}
printf(“%d\\n, ”,sum);
}
三、程序填空
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1、从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。 源程序: main() {
float x,amax,amin;
scanf(\amax=x; amin=x; while( 【1】 )
{ if(x>amax) amax=x;
if( 【2】 ) amin=x; scanf(\
}
printf(\
}
2、从键盘输入多个字符,直到遇到回车换行符为止,分别统计其中字母、数字字符和其他字符的个数。 源程序:
#include
main( )
{ char ch; int letter=0,digit=0,other=0; while( 【1】 )
if((ch>='a'&&ch<='z')||(ch>=‘A’&&ch<=‘Z’))
letter++; else if(ch>='0'&&ch<='9') digit++; else
other++;
printf(\}
3、输入一个实数x,计算并输出下式的值,直到最后一项的小于10-5(保留两位小数)。
27
实验六 循环结构程序设计(一)
源程序:
#include \main() {
float x,t,s=0; int i=1; scanf(\ t=x;
while(t>=1e-5) { }
s=s+t; i++; t=t*x/i;
printf(\}
【思考题】
1、循环体超过一条语句为什么必须用花括号括起来? 2、while循环的执行过程?
28