您好,欢迎访问三七文档
湖南科技大学计算机科学与工程学院C语言程序设计实验报告班级:____计算机2班__________学号:1405010228_________姓名:徐明__________指导老师:刘敏______________完成时间:___2014.12.30_______实验五:分支结构与循环结构一、实验目的1.掌握if语句2.掌握switch语句3.掌握for循环结构和灵活运用4.掌握while和do~while循环结构和灵活运用二、实验内容(一)问题1:判定三角形问题(1)问题:题目描述ThisisamagiccountryHarmonioussocietyAndharmoniouspeopleThisisawonderfulcontestHarmoniousstudentsAndharmoniousproblems.Thisisthemostharmoniousproblem,andthequestionisasfollowing:GiventhreepositiveintegersA,BandC(0A,B,C=100)whichdenotethelengthofthreeedges,pleasetellmewhethertheycanmakeupalegaltriangle.输入ThefirstlineisanintegerT(T=100)whichindicatesthenumberoftestcases.EachtestcaseconsistsofthreeintegersA,BandCinaline.输出Foreachtestcasepleaseoutputthetypeoftriangle(Acutetriangle、RighttriangleorObtusetriangle)ifA,BandCcanmakeupalegaltriangle,andoutputNOotherwise.Onelinepercase.样例输入4344345346347样例输出AcutetriangleRighttriangleObtusetriangleNO分析:我们要知道三种三角形的判断方法,就是看看两边的平方和与第三边的关系,大于就是锐角三角形,等于就是直角三角形,小于就是钝角三角形。首先要对三角形的三条边进行大小排序,用传递的方法,想判断a与b,在判断b与c,最后判断a和b。最后就是判断了。(2)源程序#includestdio.hintmain(void){intt,n,a,b,c,i;scanf(%d,&n);for(i=1;i=n;i++){scanf(%d%d%d,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(bc){t=b;b=c;c=t;}if(ab){t=a;a=b;b=t;}if(a+bc){if(a*a+b*b==c*c)printf(Righttriangle\n);else{if(a*a+b*bc*c)printf(Acutetriangle\n);elseprintf(Obtusetriangle\n);}}elseprintf(NO\n);}return0;}(3)调试记录:一开始输入案例,结果我的答案正确了,但是交到VC上却说答案错误,因为我把这题目理解错了,我以为是普通三角形,直角三角形和等腰三角形,谁知是判断锐角直角钝角。后来写出代码之后就用案例实验,然后又加了345;337;468等数据,结果正确。(二)问题2:求水仙花数(1)问题描述问题C:实验3-5:水仙花数时间限制:1Sec内存限制:128MB提交:1537解决:983[提交][状态][讨论版]题目描述求水仙花数。水仙花数是一个3位正整数,其值等于其各个数位的立方之和。输入无输出输出所有水仙花数,每个水仙花数单独占一行。样例输入样例输出153370371407分析:首先要把这个数的个位十位百位都分离出来,就要设置3个变量a,b,c,a是百位数,则需要除以100;b是十位数,就需要先除以100取余,然后才除10;c是各位,直接除以10取余;然后立方和与原来的数是否相等(2)源程序#includestdio.hintmain(void){inta,b,c,n;for(n=100;n1000;n++){a=n/100;b=n%100/10;c=n%10;if(a*a*a+b*b*b+c*c*c==n)printf(%d\n,n);}return0;}(3)调试记录直接输入题目上的数据,最后正确了。(三)问题3:百马百担问题(1)问题:问题D:实验3-6:百马百担问题时间限制:1Sec内存限制:128MB提交:2648解决:1501[提交][状态][讨论版]题目描述百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马1担,编程计算所有可能的驮法?输入无输出输出所有可能的驮法。每行输出一种驮法,每种驮法依次输出:大马数,中马数,小马数如2,30,68表示大马数为2,中马数为30,小马数为68样例输入样例输出2,30,685,25,708,20,7211,15,7414,10,7617,5,7820,0,80分析:要注意题目的条件:100匹马,100担货,2匹小马1担货;我们要求出只用一种马去运需要的数,这样就不可能超过这些最大值,然后用for循环从1到最大值不断的代入。(2)源程序#includestdio.hintmain(void){inta,b,c;for(a=0;a=33;a++)for(b=0;b=50;b++)for(c=0;c=100;c=c+2)if((a+b+c==100)&&(3*a+2*b+c/2==100))printf(%d,%d,%d\n,a,b,c);return0;}(3)调试记录一开始用题目给的数据得出的数据如图所示原因是我的小马条件是c++;所以经过调试得知后改正得到正确答案。(四)问题4:循环打擂问题(1)问题:问题F:实验3-9:循环打擂时间限制:1Sec内存限制:128MB提交:1367解决:783[提交][状态][讨论版]题目描述从键盘输入若干学生的成绩,输出其中的最高成绩。输入输入若干学生的成绩,输入负数时结束输入。输出输出最高成绩。样例输入834345353.8823-2样例输出353.880000分析:用while(scanf(%lf,&score)&&score=0)来使自己不断的输入分数,然后再自己输入负数的时候结束,然后设置一个max变量,赋值为0,然后不断的比较,比较大小,将值赋给max。(2)源程序#includestdio.hintmain(void){doublescore,max=0;while(scanf(%lf,&score)&&score=0){if(maxscore)max=score;}printf(%6.6lf\n,max);return0;}(3)调试记录这个直接通过,输入的是题目所给的数据。三、实验总结:本次实验的经验与教训1.做题目的时候一定要看清楚题目再做,然后才不会出错;2.三个数的排序是用着个if(ab){t=a;a=b;b=t;}if(bc){t=b;b=c;c=t;}if(ab){t=a;a=b;b=t;}这个一定要记住,不然就没有办法进行排序。实验六函数一、实验目的1.掌握函数的定义方法,函数的类型和返回值;2.掌握库函数及自定义函数的正确调用。3.掌握函数形参与实参的传递关系;4.掌握递归函数的定义与调用二、实验内容(一)问题1:素数问题(1)问题:问题B:实验3-2:素数判断时间限制:1Sec内存限制:128MB提交:4361解决:1509[提交][状态][讨论版]题目描述判断正整数x是否为素数。质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。输入先输入一个整数n(表示后面要输入n个测试数据);然后输入n个测试数据,每个测试数据是一个正整数x。输出与n个输入的正整数x相对应,输出判断结果。如果是素数,输出Yes,不是素数,输出No。样例输入578795181888样例输出YesNoNoYesNo分析:要判断一个数到底是不是素数,就要看看是否除了1和他本身之外还有其他的数能够整除他,则使用for循环并且设置一个变量flag,一开始为1,如果有数能够整除则flag=0,并结束for循环。(2)源程序#includestdio.h#includemath.hintmain(void){intx,n,t;scanf(%d,&n);for(t=1;t=n;t++){ints,flag=1;scanf(%d,&x);for(s=2;sx-1;s++)if(x%s==0)flag=0;if(flag==1)printf(Yes\n);elseprintf(No\n);}return0;}(3)调试记录一开始我的if条件写成了if(flag=1)则,在执行的时候就没有任何的反应,误解了=与==,所以改过后通过了OJ。(二)问题2:回文问题(1)问题:问题H:实验3-8:回文数的个数时间限制:1Sec内存限制:128MB提交:1370解决:785[提交][状态][讨论版]题目描述求1-n中回文数的个数。回文数指正读和反读相同的整数,即该数和它的逆序数相等。如535,282等。输入输入包括多行,每行输入一个正整数n(n=1)。若输入的正整数是0,则结束输入。输出与输入相对应,各行对应输出1-n中,回文数的个数。样例输入944550样例输出91314分析:回文数,就是要把各个位数分解,然后再乘10或者什么的,所以我们要想办法分离,我们要设置一个变量temp来存放变换的数,先是原来的数除以10取余,这样就能把个位分离,然后temp就可以变换了。Temp=temp*10+余数;这样就能够不断的分离,然后再重新组成回文数了。然后再进行判断与原来的数是否相同。(2)源程序#includestdio.hintmain(void){intn,s,temp,sum,x,t;while(scanf(%d,&n)&&n!=0){sum=0;for(s=1;s=n;s++){temp=0;t=s;do{x=t%10;temp=temp*10+x;t=t/10;}while(t0);if(temp==s){sum++;}}printf(%d\n,sum);}}(3)调试记录我开始的时候没有设置一个变量来存放s,这样在下面的循环中,s改变,然后就没有办法来算其他的数了。所以经过调试加上了t=s。(三)问题3:斐氏数列问题(1)问题:问题E:实验3-7:斐氏数列时间限制:2Sec内存限制:128MB提交:1671解决:974[提交][状态][讨论版]题目描述斐波那契数列为:0、1、1、2、3、5、8、13、21、34、55、……,根据该数列总结出的规律为:f(0)=0f(1)=1f(n)=f(n-1)+f(n-2)(当n1时)求斐氏数列的f(n)。假设f(n)的值所占内存不会超过4个字节。输入输入包括若干行,每行输入一个正整数n,若输入-1则结束。输出对于每行输入的n的值,对应输出f(n),每个输出单独占一行。若输入是-1,则不输出任何结果。样例输入6789-1样例输出8132134提示本题由实验指导书实验题第7题改编而成。难度系数为4。本题循环的条件可以写成:while(scanf(%d,&n)&&n!=-1)分析:斐氏函数就是一个值一个值的传递,用数组来做,先把啊a[0]a[1]赋值,然后一个一个传下去,需要哪个就输出哪个。(2)源程序#includestdio.hintmain(void){intf[255],i,n;while(scanf(%d,&n)&&n!=-1){f[0]=0;f[1]=1;for(i=2
本文标题:徐明,实验报告1
链接地址:https://www.777doc.com/doc-3297584 .html