循环结构程序设计.docx
《循环结构程序设计.docx》由会员分享,可在线阅读,更多相关《循环结构程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
循环结构程序设计
实验四循环结构程序设计
一•【实验目的】
1、熟练使用for、while和do…while语句实现循环结构程序设计。
2、理解循环条件和循环体,以及for、while和do…while语句的相同及不同之处。
3、熟练掌握break和continue语句的使用。
4、掌握使用“debug”菜单调试程序的方法。
二.【实验内容和步骤】
1、程序调试题
A•目标:
进一步学习掌握程序调试的方法和技巧。
(注:
程序
B•内容:
参照《实验指导》教材P38“1•调试示例”,改正程序中的错误,使其实现程序的功能。
文件保存在“调试示例”文件夹中,文件名为error04_1.cpp)
①调试正确的源程序清单
#include
intmain(void)
{
intm,n,j,k;
do{
printf("Inputm:
");
scanf("%d",&m);
printf("Inputn:
");
scanf("%d",&n);
}while(m<0||n<0);
j=m;
while(j%n!
=0)
j=j+m;
k=(m*n)/j;
return0;
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
2、完善程序,并调试运行程序
题目
(1)求1+1/2+1/3+?
?
+1/n。
程序功能:
从键盘上输入一个正整数repeat(0下列运算:
读入1个正整数n(*=50),计算并输出1+1/2+1/3+?
?
+1/n(保留3位小数)。
(注:
程序文件保存在"第1题”文件夹中)打开proj1.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#include
intmain()
{
intri,repeat;
inti,n;
floatsum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++){sum=sum+1.0/i;
}
printf("%.3f\n",sum);
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目
(2)求n!
。
程序功能:
从键盘上输入一个正整数repeat(0读入1个
正整数n(*=50),计算并输出n!
。
(注:
程序文件保存在"第2题”文件夹中)打开proj2.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#ineludeintmain()
{
intri,repeat;
inti,n;
doublefact;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
fact=1;
for(i=1;i<=n;i++){fact=fact*i;
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(3)求x的n次幕(即:
xn)。
程序功能:
从键盘上输入一个正整数repeat(0列运算:
读入1个正实数x和1个正整数n(*=50),计算并输出x的n次幕(即:
xn,保留2位小数)。
(注:
程序文件保存在“第3题”文件夹中)打开proj3.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#ineludeintmain()
{
intri,repeat;
inti,n;
doublex,mypow;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%lf%d",&x,&n);mypow=1;
for(i=2;i<=n;i++)
mypow=mypow*x;
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(4)求1—1/2+1/3—1/4+…+1/n。
程序功能:
从键盘上输入一个正整数repeat(0次下列运算:
读入1个正整数n(*=100),计算并输出1—1/2+1/3—1/4+?
?
的前n项和(保留3位小数)。
(注:
程序文件保存在"第4题”文件夹中)打开proj4.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#ineludeintmain()
{
intri,repeat;
inti,n,flag;
floatsum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
sum=0;
flag=1;
for(i=1;i<=n;i++){sum=sum+flag*1.0/i;
flag=-flag;
}
printf("%.3f\n",sum);
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
\Docu*entsandSett
0.617
r
e
r
Pres^ankeytocontinue
题目(5)求1+1/3+1/5+1/7+…。
程序功能:
从键盘上输入一个正整数repeat(0下列运算:
读入1个正整数n(*=100),计算并输出1+1/3+1/5+1/7+?
?
的前n项和(保留3位小数)。
(注:
程序文件保存在“第5题”文件夹中)打开proj5.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#includeintmain()
{
intri,repeat;
inti,n,temp;
floatsum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{scanf("%d",&n);
temp=1;
sum=O;
for(i=1;i<=n;i++){
sum=sum+1.0/temp;
temp=temp+2;
}
printf("%.3f\n",sum);
}
}
题目(6)求1-1/3+1/5-1/7+…。
程序功能:
从键盘上输入一个正整数repeat(0列运算:
读入1个正实数eps,计算并输出1—1/3+1/5—1/7+?
?
直到最后一项的绝对值小于eps(保留6
位小数)。
(注:
程序文件保存在"第6题”文件夹中)打开proj6.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
#include
#include
intmain()
intri,repeat;
inttemp,flag;
doubleeps,item,sum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%le",&eps);
flag=1;
sum=0;
temp=1;
item=1.0;
while(fabs(item)>=eps){
item=flag*1.0/temp;
sum=sum+item;
temp=temp+2;
flag=-flag;
}
printf("%.6f\n",sum);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(7)求1-1/3+1/5-1/7+…。
程序功能:
从键盘上输入一个正整数repeat(0运算:
输入2个整数begin和end,分别代表摄氏温度的起止值,输出该范围内(步长为1)摄氏温度C和华氏
温度F的转换表。
转换计算公式:
F=32+C*9/5,输出语句:
printf("%d%10.2f\n",c,f);。
(注:
程序文件保
存在"第7题”文件夹中)打开proj7.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
1调试正确的源程序清单
#include
intmain()
{
intri,repeat;
intbegin,c,end;
doublef;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%d%d",&begin,&end);
printf("CelsiusFahrenheit\n");
for(c=begin;c<=end;c++){
f=32+c*9/5;
printf("%d%10.2f\n",c,f);
}
}
}
2运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(8)求奇数和。
程序功能:
从键盘上输入一个正整数repeat(O读入一
批正整数(以零或负数为结束标志),求其中的奇数和。
(注:
程序文件保存在"第8题”文件夹中)打开proj8.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#ineludeintmain()
{
intri,repeat;
intx,sum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%d",&x);
sum=0;
while(x>0){
if(x%2==1)sum=sum+x;
seanf("%d",&x);
}
printf("%d\n",sum);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(9)求最大值和最小值。
程序功能:
从键盘上输入一个正整数repeat(0输入一个正整数n,再输入n个整数,输出这n个整数中的最大值、最小值、累加和与平均值。
(注:
程序文
件保存在“第9题”文件夹中)打开proj9.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#includeintmain()
{
intri,repeat;
inti,max,min,n,x;
for(ri=1;ri<=repeat;ri++)
{
scanf("%d",&n);
scanf("%d",&x);
sum=x;
max=x;
min=x;
for(i=2;i<=n;i++){
scanf("%d",&x);
if(max>=x)
max=max;
else
max=x;
if(min<=x)
min=min;
else
min=x;
sum=sum+x;
}
avg=sum/n;
printf("TheMaxis%d.\n",max);
printf("TheMinis%d.\n",min);
printf("TheSumis%f.\n",sum);
printf("TheAvgis%f.\n",avg);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
吋"C:
XDocuAontsandSettingsVAdainistratorV^而*实^04衙环-
题目(10)求整数的位数以及各位数之和。
程序功能:
从键盘上输入一个正整数repeat(0次下列运算:
输入一个整数,输出它的位数以及各位数之和。
(注:
程序文件保存在“第10题”文件夹中)
打开proj10.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#include
intmain()
{
intri,repeat;
intnumber,sum;
longintin;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%ld",&in);
number=1;
if(in<0)
in=-in;
sum=in%10;
while(in/10>0){
in=in/10;
sum=sum+(in%10);
number++;
}
printf("number=%d,sum=%d\n",number,sum);
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(11)求2/1+3/2+5/3+8/5+...之和。
程序功能:
从键盘上输入一个正整数repeat(0次下列运算:
输入一个正整数n,输出2/1+3/2+5/3+8/5+...的前n项之和,保留2位小数。
(该序列从第2项
起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)(注:
程序文件保存在“第11题”文件
夹中)打开proj11.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#includeintmain()
intri,repeat;
inti,n;
floata,b,s,t;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){scanf("%d",&n);s=0;
a=2;
b=1;
for(i=1;i<=n;i++){s=s+a/b;
t=b;
b=a;
a=a+t;
}
printf("%.2f\n",s);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(12)求a+aa+aaa+aa…a之和。
程序功能:
从键盘上输入一个正整数repeat(0输入2个正整数a和n,输出a+aa+aaa+aa…a(n个a)之和。
(注:
程序文件保存在"第12题”文件夹中)打开proj12.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#include
voidmain()
{
intri,repeat;
inti,n;
longinta,sn,tn;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++)
{
scanf("%ld%d",&a,&n);
sn=0;
tn=0;for(i=1;i<=n;i++){tn=10*tn+a;
sn=sn+tn;
}
printf("%ld\n",sn);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
continue
XDocmentsandSettin^sAAd*
题目(13)判断素数。
程序功能:
从键盘上输入一个正整数repeat(O输入一
个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
(注:
程序文件保存在"第13题”文件夹中)打开proj13.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(14)统计字符。
程序功能:
从键盘上输入一个正整数repeat(0输入一
行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
(注:
程序文件保存在“第14题”文
件夹中)打开proj14.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
#include
intmain()
{
intri,repeat;
intblank,digit,letter,other;
charc;
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++)
{c=getchar();
blank=0;
digit=0;
letter=0;
other=0;
while((c=getchar())!
='\n'){
if(c>='a'&&c<='z'||c<='Z'&&c>='A')
blank++;
elseif(c=='')
digit++;
elseif(c>='0'&&c<='9')
letter++;
else
other++;
}
printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);
}
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(15)【水平考试题】程序文件保存在“第15题(水平考试题)”文件夹中,打开proj15.cpp,编程实现,任输入一个正整数num,求1+2+3+…+num勺和。
在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(16)【水平考试题】程序文件保存在“第16题(水平考试题)”文件夹中,打开proj16.cpp,编程实现输入一个长整数,求各位数字的平方和。
例如输入-123,输出sum=14在两条星线之间填入相应的代码,使程
序完成该功能。
①调试正确的源程序清单
#inelude
voidmain()
{
intdigit;
longin,s;
cout<<"请输入一个长整数:
";
cin>>in;
if(i*0)
in=-in;
s=0;
while(in>0)digit=in%10;s=s+digit*digit;in=in/10;
}
cout<<"sum="<
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(17)【水平考试题】程序文件保存在“第17题(水平考试题)”文件夹中,打开proj17.cpp,程序的功能是计算1~100以内所有含5的数之和。
删除程序代码里面的下划线并补充相应的代码。
(注意:
不得改动其它代码,不得增、删行,不得更改程序结构。
)
①调试正确的源程序清单
#ineludevoidmain()
{
inti,s=0;
for(i=1;i<=100;i++)
if((i/10==5)||(i%10==5))〃删除下划线并填入答案
s=s+i;
cout<<"Thsresultis"<
}
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
题目(18)【水平考试题】程序文件保存在“第18题(水平考试题)”文件夹中,打开proj18.cpp,程序的功能是计算某数组中前n个数组元素的乘积。
删除程序代码里面的下划线并补充相应的代码。
(注意:
不得改动其
它代码,不得增、删行,不得更改程序结构。
)
①调试正确的源程序清单
②运行结果:
(提示:
通过屏幕截图,贴粘程序运行界面)。
三•【实验总结】
本次实验,涵盖的知识点很多,而且很全面,与课本内容联系紧密。
通过实验,通过自己动手操作,让我发
现了不少细节问题,对循环结构程序有了更深刻的认识,特别是对while语句的运用和其与for语句的同异点。
不过自己对C语言程序设计的一些常识认识还是不全面,还有一些规定也认识不足,导致在这一方面有时很迷惘。
同时,自己对于cout、cin的运用不熟悉。
以后自己会多花点时间在这些方面上。