20吴琛实验三.docx

上传人:b****3 文档编号:13245623 上传时间:2023-06-12 格式:DOCX 页数:19 大小:96.55KB
下载 相关 举报
20吴琛实验三.docx_第1页
第1页 / 共19页
20吴琛实验三.docx_第2页
第2页 / 共19页
20吴琛实验三.docx_第3页
第3页 / 共19页
20吴琛实验三.docx_第4页
第4页 / 共19页
20吴琛实验三.docx_第5页
第5页 / 共19页
20吴琛实验三.docx_第6页
第6页 / 共19页
20吴琛实验三.docx_第7页
第7页 / 共19页
20吴琛实验三.docx_第8页
第8页 / 共19页
20吴琛实验三.docx_第9页
第9页 / 共19页
20吴琛实验三.docx_第10页
第10页 / 共19页
20吴琛实验三.docx_第11页
第11页 / 共19页
20吴琛实验三.docx_第12页
第12页 / 共19页
20吴琛实验三.docx_第13页
第13页 / 共19页
20吴琛实验三.docx_第14页
第14页 / 共19页
20吴琛实验三.docx_第15页
第15页 / 共19页
20吴琛实验三.docx_第16页
第16页 / 共19页
20吴琛实验三.docx_第17页
第17页 / 共19页
20吴琛实验三.docx_第18页
第18页 / 共19页
20吴琛实验三.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

20吴琛实验三.docx

《20吴琛实验三.docx》由会员分享,可在线阅读,更多相关《20吴琛实验三.docx(19页珍藏版)》请在冰点文库上搜索。

20吴琛实验三.docx

20吴琛实验三

实验三循环控制

实验课程名:

高级语言程序设计(C)

专业班级:

电气本二学号:

20姓名:

吴琛

实验时间:

2012-4-18实验地点:

K4-202指导教师:

吴建设

一、实验目的和要求

1.熟练掌握用while语句、dowhile语句和for语句实现循环的方法。

2.掌握在程序设计中用循的方法实现一些常用算法。

并进一步学习调试程序的方法。

二、实验内容

1、任务名称

程序求和:

1+…+100,填空,实现该功能。

源代码:

#include

voidmain()

{

ints,i;

s=0;

for(i=1;i<=100;i++)

s=s+i;

printf("1+...+100=%d\n",s);

printf("学号:

20姓名:

吴琛实验三第一题");

}

思考:

(1)第5行能不能去掉?

其作用是什么?

不能,定义和的初始值。

(2)不用for语句,用while语句改写该程序,实现同样的功能。

#include

voidmain()

{

ints=0,i=1;

while(i<=100)

{

s=s+i;

i++;

}

printf("1+...+100=%d\n",s);

printf("学号:

20姓名:

吴琛实验三第一题");

}

运行结果:

(需要截图)

运行结果分析:

根据for循环的语句形式和while循环语句形式输入即可。

2、任务名称

比较下列两个程序。

(验证)

源代码:

/*第一个程序*/

#include

voidmain()

{inti,n,sum=0;

scanf("%d",&i);

n=i;

while(i<=10)

{sum+=i;

i++;

}

printf("%d+...+10=%d",n,sum);

printf("学号:

20姓名:

吴琛实验三第三题");

}

/*第二个程序*/

#include

voidmain()

{inti,n,sum=0;

scanf("%d",&i);

n=i;

do

{sum+=i;

i++;

}while(i<=10);

printf("%d+...+10=%d",n,sum);

printf("学号:

20姓名:

吴琛实验三第三题");

}

分别运行这两题,若输入7,这两个程序的结果分别是多少?

若输入12,这两个程序的结果又分别是多少?

比较为什么会有这样的区别?

第一个程序循环次数至少零次,即先判断后执行,第二个程序循环次数至少1次,即先执行后判断。

运行结果:

(需要截图)

运行结果:

运行结果:

运行结果:

运行结果分析:

输入程序,区分while和do….while语句的区别。

3、任务名称、

预习下面程序,若输入12345,分析输出结果是多少?

上机验证。

源代码:

#include

voidmain()

{longdata;

scanf("%ld",&data);

while(data)

{printf("%ld,",data%10);

data=data/10;

}

printf("学号:

20姓名:

吴琛实验三第一题");

}

运行结果:

(需要截图)

运行结果分析:

根据程序输入程序即可。

4、任务名称

实现求Fibonacci数列的前n个数。

(验证、调试)

运行程序,写出运行结果;采用单步跟踪技术运行该程序,观察一下变量的变化。

思考:

(1)f1、f2这两个变量为什么定义为longint型?

(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?

(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数字1。

源代码:

#include

voidmain()

{longintf1,f2;

inti,n;

printf("Inputn:

");

scanf("%d",&n);

f1=f2=1;

for(i=1;i

{printf("%ld\t%ld\n",f1,f2);

f1=f1+f2;

f2=f2+f1;

}

printf("学号:

20姓名:

吴琛实验三第四题");

}

运行结果:

(需要截图)

运行结果分析:

利用循环处理问题,重复利用变量名输入程序,运行即可。

5、任务名称

预习下面程序,写出预习结果并上机验证。

(验证)

源代码:

#include

voidmain()

{inti,j,x;

{x++;

for(j=0;j<3;j++)

for(i=0,x=0;i<2;i++)

{if(j%2)continue;

x++;

}

x++;

}

printf("x=%d\n",x);

printf("学号:

20姓名:

吴琛实验三第五题");

}

思考:

用一句话概括if(j%2)语句的作用。

通过选择语句判断下一条语句是否执行,若j除以2的余数为0则跳出循环。

运行结果:

(需要截图)

运行结果分析:

嵌套for循环的执行过程及continue语句的作用。

6、任务名称

.输入一批考试分数,用1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。

请调试、检查程序中的错误,并改正之。

#include

voidmain()

{intmark;

intn=0;sum=0;

intmax=100;min=0;

for(;;);

{scanf("%d",&mark);

if(mark>100)

{printf("Mark>100,Pleasereinput\n");

break;

}

if(mark=-1)

break;

n++;

sum=sum+mark;

if(mark>max)

max=mark;

if(mark

min=mark;

}

sum=sum/n;

printf("max=%d,min=%d,aver=%d\n",max,min,sum);

}

思考:

(1)“一批数据”是几个数据?

输入的数据如何结束?

程序中哪一行是实现结束这个要求的,写出该语句。

通过bresk跳出循环语句。

(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。

if(mark>100)

{printf("Mark>100,Pleasereinput\n");

break;

(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。

改正后的程序:

#include

voidmain()

{intmark;

intn=0,sum=0;

intmax=0,min=100;

for(;;)

{scanf("%d",&mark);

if(mark>100)

{printf("Mark>100,Pleasereinput\n");

continue;

}

if(mark==-1)

break;

n++;

sum=sum+mark;

if(mark>max)

max=mark;

if(mark

min=mark;

}

sum=sum/n;

printf("max=%d,min=%d,aver=%d\n",max,min,sum);

printf("学号:

20姓名:

吴琛实验三第六题");

}

运行结果:

(需要截图)

运行结果分析:

分析if选择和for循环嵌套的语句

7、任务名称

编程:

输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个?

编程点拨:

(1)count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。

(2)用for循环20次实现该程序的功能:

输入一个整数x,判断该数所在的范围,若x是1~30,则count1加1;若x是31~60,则count2加1;若x是61~90,则count3加1。

(3)最后,输出统计的结果。

#include

voidmain()

{intcount1=0,count2=0,count3=0;

inti,x;

printf(“Pleaseinput20numbers:

”);

for(i=0;i<20;i++)

{scanf(“%d”,&x);

………/*补充完成程序*/

}

/*输出统计结果*/

……………

}

 

源代码:

#include

voidmain()

{intcount1=0,count2=0,count3=0;

inti,x;

printf("Pleaseinput20numbers:

\n");

for(i=0;i<20;i++)

{scanf("%d",&x);

if(x>=1&&x<=31)

count1++;

if(x>=31&&x<=60)

count2++;

if(x>=61&&x<=90)

count3++;

}

printf("count1=%d,count2=%d,count3=%d\n",count1,count2,count3);

printf("学号:

20姓名:

吴琛实验三第七题");

}

运行结果:

(需要截图)

运行结果分析:

利用if语句的循环语句套用来编写程序。

8、任务名称

编程:

素数是除了1和其本身以外,不能被其他自然数整除的自然数。

从键盘输入一个数,判断该数是不是素数?

编程点拨:

a)输入这个数x。

b)用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x就是素数。

c)最后,将判断结果输出。

#include

voidmain()

{inti,x;

printf("Enteronenaturalinteger:

");

scanf("%d",&x);

for(i=2;i

……………

}

补充后的程序:

#include

voidmain()

{intn,s,i,k;

printf("n=?

");

scanf("%d",&n);

i=2;

s=1;

while(i<=n)

{for(s=2;s<=i-1;s++)

if(i%s==0)break;

if(s>=i-1)printf("%d",i);

i++;

}

printf("学号:

20姓名:

吴琛实验三第八题");

}

先判断,再用if语句就行了

思考:

其实,只需要判断2~

之间的整数能否整除x就可以判断x是否为素数,此时,如何修改程序?

源代码:

#include

voidmain()

{

inti,j,a;

scanf("%d",&i);

for(j=2;j

{a=i%j;

if(a==0)

{printf("不是素数");

break;

}

if(j==i)

printf("是素数");

}

运行结果:

(需要截图)

运行结果分析:

用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x是素数。

9、任务名称

.编程:

显示所有的水仙花数。

谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。

例,153是水仙花数,因为153=13+53+33。

有两种解题思路,选择其中之一编程实现:

(1)利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。

for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)

注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j和个数位k可以从0开始。

(2)利用一个循环,对100~999范围内的每个3位数逐位分离后进行判断。

for(i=100;i<999;i++)

{a=i/100;

b=(i-a*100)/10;

c=i%10;

………

}

源代码:

(1)

#include

voidmain()

{

inti,j,k;

for(i=1;i<10;i++)

for(j=0;j<10;j++)

for(k=0;k<10;k++)

if((i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k)))

printf("%d%d%d",i,j,k);

getch();

printf("学号:

20姓名:

吴琛实验三第九题\n");

}

(2)#include

voidmain()

{

inti,x,y,z;

for(i=100;i<=999;i++)

{

x=i%10;

y=(i/10)%10;

z=(i/100)%10;

if(x*x*x+y*y*y+z*z*z==i)

printf("%d\n",i);

}

printf("学号:

20姓名:

吴琛实验三第九题\n");

}

运行结果:

(需要截图)

运行结果分析:

利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。

10、任务名称

10.编程:

输出下列图形。

 

分析:

这是由星号构成的5行5列的三角形图形。

每一行的星号数量为:

1、3、5、7、9。

考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。

每一行的星号与行号有关,即2*i+1,其中i是行号;每一行的输出位置比上一行少一个空格,可以这样实现:

for(j=1;j<=40-i;j++)printf(“%c”,‘’),其中i是行号。

源代码:

#include

#defineN5

voidmain()

{inti,j;

for(i=0;i

{

for(j=0;j

{

if(j

elseprintf("*");

}

printf("\n");

}

printf("学号:

20姓名:

吴琛实验三第十题\n");

}

运行结果:

(需要截图)

运行结果分析:

通过数列排列编写图形。

三、结论(写本次实验的收获)

1.掌握用while语句、dowhile语句和for语句实现循环的方法。

2.掌握在程序设计中用循的方法实现一些常用算法。

并进一步学习调试程序的方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2