第三次实验报告
Posted gnxyxlzj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次实验报告相关的知识,希望对你有一定的参考价值。
C程序设计实验报告
实验项目:循环结构实验
姓名:罗子健 实验地点:第一教学楼514实验室 实验时间:2019年4月17号
一、实验目的与要求
(1)熟练掌握while、do_while及for语句实现循环的方法。
(2)了解3种循环语句的区别和转换、各自的适应性、循环嵌套的使用。
(3)掌握如何在循环语句中使用break和continue语句,改变程序流程。
(4)掌握在程序设计中用循环的方法实现各种算法。
二、实验内容
5.3.1 用for语句实现循环
实验练习1 求数列前n项。
1、问题的简单描述:编写一程序,求出1,1+2,1+2+3···数列中前n项的值。
2、实验代码及结果:
1 #include<stdio.h> 2 #include<conio.h> 3 main() 4 { 5 int i,j=0,k,s=0; 6 printf("Enter a number:"); 7 scanf("%d",&k); 8 for(i=1;i<=k;i++) 9 { 10 s=s+i; 11 printf("%d ",s); 12 j++; 13 } 14 }
3、问题分析:求的是数列的前N项的和,在高中学过这样的式子,这里i代表的是数列中第i项的数,而s代表的是前n项的和。因为是公差为1的数列,所以前n项的和等于前(n-1)项的和+i。
实验练习2 求数列前n项的和。
1、问题的简单描述:编写一程序,求数列1,-3!,5!,-7!……(-1)^(n-1)*(2n-1)前n项的和。n的值由键盘输入。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 int n,i,j,sign=1; 5 float fac,sum; 6 printf("please input value of n:"); 7 scanf("%d",&n); 8 sum=0.0; 9 for(i=1;i<=2*n-1;i=i+2) 10 { 11 fac=1.0; 12 for(j=1;j<=i;) 13 { 14 fac=fac*j; 15 j=j+1; 16 } 17 fac=fac*sign;/*计算第n项*/ 18 sum=sum+fac;/*求前n项的和*/ 19 sign=-sign; 20 } 21 printf("sum=%.0f\\n",sum); 22 }
3、问题分析:对于书上的程序图给的并不正确,需要根据流程图来写出程序。要理解各个部分的含意。
5.3.2 用while循环语句实现循环
实验练习1 统计学生的最高最低成绩。
1、问题的简单描述:从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
2、实验代码及结果:
1 #include<conio.h> 2 #include<stdio.h> 3 main() 4 { 5 float x,max,min; 6 printf("please input scores:"); 7 scanf("%f",&x); 8 max=min=x; 9 while(x>0)/*分数应该满足的条件*/ 10 { 11 if(x>max) 12 max=x; 13 if(x<min) 14 min=x; 15 scanf("%f",&x); 16 } 17 printf("\\nmax=%f\\nmin=%f\\n",max,min); 18 }
3、问题分析:这个题目要输入负数时输出,我开始并不理解,所以一直无法输出,后面经同学提醒,才知道应该怎么输出。
实验练习2 求水仙花数。
1、问题的简单描述:求所有的水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数1*1+5*5+3*3=153)。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 int x,y,z; 5 int k=100; 6 while(k<=999)/*while循环条件,水仙花数是一个3位数*/ 7 { 8 x=k/100; 9 y=(k/10)%10; 10 z=k%10; 11 if(k==x*x*x+y*y*y+z*z*z)/*水仙花数应当满足的条件*/ 12 printf("%d\\n",k); 13 k++; 14 } 15 }
3、问题分析:需求百位数的个位、十位和百位,再通过if语句来进行判断。
5.3.3 用do_while语句实现循环
实验练习 求不等式。
1、问题的简单描述:求满足下列不等式的n的最小值。其中,value是大于1的任何数。1+1/2+1/3+……+1/n>value。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 float sum,value; 5 int n; 6 printf("Input value:"); 7 scanf("%f",&value); 8 sum=0.0; 9 n=0; 10 do 11 { 12 ++n; 13 sum+=1.0/(float)n; 14 } 15 while(sum<value);/*不等式成立的条件*/ 16 printf("n=%d",n); 17 }·
3、问题分析:要注意do_while语句中while后面有分号,而while后面没有分号。w
5.3.4 用while语句和for语句配合实现循环
实验练习 十进制转换。
1、问题的简单描述:输入4个字符,并把其转换为4位十进制整数后显示出来。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 char c; 5 int k,data; 6 data=0; 7 for(k=0;k<4;k++) 8 { 9 while(1) 10 { 11 c=getchar(); 12 if (c>=‘0‘ && c<=‘9‘) 13 break; 14 } 15 /*将数字字符转化为对应的十进制整数,并形成4位数*/ 16 if(k==0) 17 data+=(c-‘0‘)*1000; 18 if(k==1) 19 data+=(c-‘0‘)*100; 20 if(k==2) 21 data+=(c-‘0‘)*10; 22 if(k==3) 23 data+=(c-‘0‘); 24 } 25 printf("Data=%d ",data); 26 }
3、问题分析:要运用if的分支选择结构来对目标进行判断。
5.3.5 用for语句嵌套实现循环
实验练习1 百马百担问题。
1、问题的简单描述:有100匹马,要驮100担货物,其中,1匹大马可以驮3担,1匹中马可以驮2担,两匹小马可以驮1担,请问,大马、中马和小马可以有多少种组合。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 int m,n,k; 5 int sum=0; 6 printf("各种驮法如下:\\n"); 7 for(m=1;m<=100;m++) 8 for(n=1;n<=100-m;n++) 9 { 10 k=100-m-n;/*大马、中马、小马满足的总匹数*/ 11 if((k%2==0)&&(3*m+2*n+(1/2)*k==100))/*大马、中马、小马托货物满足的关系*/ 12 { 13 printf("大马%3d匹;中马%3d匹;小马%3d匹.\\n",m,n,k); 14 sum++; 15 } 16 } 17 printf("共有%d种驮法.\\n",sum); 18 }
3、问题分析:要写成 k=100-m-n,而不能写出100=k+m+n。
实验练习2 求等差数列。
1、问题的简单描述:编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是880.
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 int a,b,c,d,i,sum=0; 5 for(a=1;a<=26;a++) 6 for(d=1;d<=26;d++) 7 { 8 b=4*a+6*d;/*等差数列前4项之和*/ 9 if(b!=26) 10 continue; 11 else 12 { 13 c=a*(a+d)*(a+2*d)*(a+3*d);/*等差数列前4项之积*/ 14 if(c!=880) 15 continue; 16 else 17 for(i=0;i<6;i++) 18 { 19 printf("%d,",a+i*d); 20 sum=sum+(a+i*d); 21 } 22 } 23 } 24 printf("\\n数列的前6项的和:%d\\n",sum); 25 }
3、问题分析:b是求和,c是求积。要理解和与积是怎么求出来的,并且要在for语句中嵌套if语句进行分支选择。
实验练习3 食品分配问题。
1、问题的简单描述:有30个学生一起买小吃,共花钱50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?。
2、实验代码及结果:
1 #include<stdio.h> 2 main() 3 { 4 int x,y,z,sum; 5 sum=0; 6 for(x=1;x<30;x++) 7 { 8 for(y=1;y<30;y++) 9 { 10 z=30-x-y; 11 if((z!=0)&&(3*x+2*y+z==50))/*三类学生花钱满足的关系式*/ 12 { printf("大学生%3d\\t中学生%3d\\t小学生%3d\\n",x,y,z); 13 sum=sum+1; 14 } 15 else 16 continue; 17 } 18 } 19 printf("sum=%d\\n",sum); 20 }
3、问题分析:这和之前百马百担问题相似。
三、实验小结(在本次实验中收获与不足)
学会了如何运用语句之间的嵌套去解决一些生活中的数学问题,加深了“=”是赋值的意思,“==”才是等于的意思。每次练习,都是加深印象。
以上是关于第三次实验报告的主要内容,如果未能解决你的问题,请参考以下文章