徐明实验报告_第1页
徐明实验报告_第2页
徐明实验报告_第3页
徐明实验报告_第4页
徐明实验报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、湖南科技大学计算机科学与工程学院C语言程序设计实验报告班级:_计算机2班_学 号:_姓 名:徐明_指导老师:刘敏_完成时间:_2014.12.30_实验五:分支结构与循环结构一、实验目的1. 掌握if语句2. 掌握switch语句3. 掌握for循环结构和灵活运用4. 掌握while和dowhile循环结构和灵活运用二、实验内容(一)问题1:判定三角形问题(1)问题:题目描述This is a magic countryHarmonious societyAnd harmonious peopleThis is a wonderful contestHarmonious studentsAnd

2、 harmonious problems.This is the most harmonious problem, and the question is as following:Given three positive integers A, B and C (0A,B,C=100) which denote the length of three edges, please tell me whether they can make up a legal triangle.输入The first line is an integer T(T=100) which indicates th

3、e number of test cases.Each test case consists of three integers A,B and C in a line.输出For each test case please output the type of triangle(Acute triangle、Right triangle or Obtuse triangle)ifA,B and C can make up a legal triangle, and output NO otherwise.One line per case.样例输入43 4 43 4 53 4 63 4 7样

4、例输出Acute triangleRight triangleObtuse triangleNO分析:我们要知道三种三角形的判断方法,就是看看两边的平方和与第三边的关系,大于就是锐角三角形,等于就是直角三角形,小于就是钝角三角形。首先要对三角形的三条边进行大小排序,用传递的方法,想判断a与b,在判断b与c,最后判断a和b。最后就是判断了。(2)源程序#includeint main(void)int t,n,a,b,c,i;scanf(%d,&n);for(i=1;ib)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

5、+b*b=c*c)printf(Right trianglen);elseif(a*a+b*bc*c)printf(Acute trianglen);elseprintf(Obtuse trianglen);elseprintf(NOn);return 0;(3)调试记录:一开始输入案例,结果我的答案正确了,但是交到VC上却说答案错误,因为我把这题目理解错了,我以为是普通三角形,直角三角形和等腰三角形,谁知是判断锐角直角钝角。后来写出代码之后就用案例实验,然后又加了3 4 5;3 3 7;4 6 8等数据,结果正确。(二)问题2:求水仙花数(1)问题描述问题 C: 实验3-5:水仙花数时间限制

6、:1 Sec内存限制:128 MB提交:1537解决:983提交状态讨论版题目描述求水仙花数。水仙花数是一个3位正整数,其值等于其各个数位的立方之和。输入无输出输出所有水仙花数,每个水仙花数单独占一行。样例输入样例输出153370371407分析:首先要把这个数的个位十位百位都分离出来,就要设置3个变量a,b,c,a是百位数,则需要除以100;b是十位数,就需要先除以100取余,然后才除10;c是各位,直接除以10取余;然后立方和与原来的数是否相等 (2)源程序#includeint main(void)int a,b,c,n;for(n=100;n1000;n+)a=n/100;b=n%10

7、0/10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)printf(%dn,n);return 0;(3)调试记录直接输入题目上的数据,最后正确了。(三)问题3:百马百担问题(1)问题:问题 D: 实验3-6:百马百担问题时间限制:1 Sec内存限制:128 MB提交:2648解决:1501提交状态讨论版题目描述百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马1担,编程计算所有可能的驮法?输入无输出输出所有可能的驮法。每行输出一种驮法,每种驮法依次输出:大马数,中马数,小马数如2,30,68表示大马数为2,中马数为30,小马数为68样例输入样例输出2,

8、30,685,25,708,20,7211,15,7414,10,7617,5,7820,0,80分析:要注意题目的条件:100匹马,100担货,2匹小马1担货;我们要求出只用一种马去运需要的数,这样就不可能超过这些最大值,然后用for循环从1到最大值不断的代入。 (2)源程序#includeint main(void)int a,b,c;for(a=0;a=33;a+)for(b=0;b=50;b+)for(c=0;c=0)来使自己不断的输入分数,然后再自己输入负数的时候结束,然后设置一个max变量,赋值为0,然后不断的比较,比较大小,将值赋给max。(2)源程序#includeint ma

9、in(void)double score,max=0;while(scanf(%lf,&score)&score=0)if(maxb)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:素数判断时间限制:1 Sec内存限制:128 MB提交:4361解决:1509提交状态讨论版

10、题目描述判断正整数x是否为素数。质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。输入先输入一个整数n(表示后面要输入n个测试数据);然后输入n个测试数据,每个测试数据是一个正整数x。输出与n个输入的正整数x相对应,输出判断结果。如果是素数,输出Yes,不是素数,输出No。样例输入578795181888样例输出YesNoNoYesNo分析:要判断一个数到底是不是素数 ,就要看看是否除了1和他本身之外还有其他的数能够整除他,则使用for循环并且设置一

11、个变量flag,一开始为1,如果有数能够整除则flag=0,并结束for循环。(2)源程序#include#includeint main(void)int x,n,t;scanf(%d,&n);for(t=1;t=n;t+)int s,flag=1;scanf(%d,&x);for(s=2;s=1)。若输入的正整数是0,则结束输入。输出与输入相对应,各行对应输出1n中,回文数的个数。样例输入944550样例输出91314分析: 回文数,就是要把各个位数分解,然后再乘10或者什么的,所以我们要想办法分离,我们要设置一个变量temp来存放变换的数,先是原来的数除以10取余,这样就能把个位分离,然

12、后temp就可以变换了。Temp=temp*10+余数;这样就能够不断的分离,然后再重新组成回文数了。然后再进行判断与原来的数是否相同。(2)源程序#includeint main(void)int n,s,temp,sum,x,t;while(scanf(%d,&n)&n!=0)sum=0;for(s=1;s0);if(temp=s)sum+;printf(%dn,sum);(3)调试记录我开始的时候没有设置一个变量来存放s,这样在下面的循环中,s改变,然后就没有办法来算其他的数了。所以经过调试加上了t=s。(三)问题3:斐氏数列问题(1)问题:问题 E: 实验3-7:斐氏数列时间限制:2

13、Sec内存限制:128 MB提交: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(sc

14、anf(%d,&n)&n!=-1)分析: 斐氏函数就是一个值一个值的传递,用数组来做,先把啊a0a1赋值,然后一个一个传下去,需要哪个就输出哪个。(2)源程序#includeint main(void)int f255,i,n;while(scanf(%d,&n)&n!=-1)f0=0;f1=1;for(i=2;i=n;i+)fi=fi-1+fi-2;printf(%dn,fn);return 0;(3)调试记录直接通过,没有进行调试。(四)问题4:编求GCD和LCM的函数(1)问题:问题 H: 实验4-4:编求GCD和LCM的函数时间限制:1 Sec内存限制:128 MB提交:1343解决:

15、762提交状态讨论版题目描述求GCD和LCM,即指求最大公约数和最小公倍数。写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个整数在主函数中从键盘输入。输入每行输入2个正整数。若输入的2个整数中任何一个为0则结束输入。假设这2个正整数的乘积值不会超过4个字节的表示范围。输出每行对应输出最大公约数和最小公倍数。样例输入2,412,427,216,0样例输出GCD=2,LCM=4GCD=6,LCM=84GCD=7,LCM=21分析:此题要用到函数,先求出GCD,先把输入的x,y进行排序,x最大,y最小,然后x/y取余,再拿除数除以余数,这样一直循环,一直到余

16、数为0;此时返回被除数,至于LCM就用x*y/GCD来求。(2)源程序#includeint GCD(int x,int y)int t;dot=x%y;x=y;y=t;while(t0);return x;int main(void)int c,a,b,gcd,lcm;while(scanf(%d,%d,&a,&b)&a!=0&b!=0)if(ab)c=a;a=b;b=c;gcd=GCD(a,b);lcm=a*b/gcd;printf(GCD=%d,LCM=%dn,gcd,lcm);return 0;(3)调试记录第一次运行,经调试在LCM上卡住,原因我也不是很清楚,但是我 把这个删了之后重

17、新打一下就可以显示答案,我想应该我在写代码的时候有问题,我用的数据就是范例给的数据。三、实验总结:本次实验的经验与教训1.在写代码的时候一定要注意变量的设置,尤其是在循环的时候,不能让你的变量既在上一个循环中变又在下一个循环中变,这是我们应该重新设置一个变量。2.经常在if条件中把=和=混淆,导致最后程序能够运行,但是没有办法运行处结果。此情况应该予以高度的重视。实验七 数组一、实验目的1.掌握数组的定义、初始化和引用;2.掌握字符数组和常用字符串操作函数的定义与使用;3.掌握一维数组活字符数组在用做函数参数是的合理运用;二、实验内容(一)问题1:简单选择排序(1)问题:问题 I: 实验6_4

18、:简单选择排序时间限制:40 Sec内存限制:128 MB提交:1955解决:723提交状态讨论版题目描述编一程序用简单选择排序方法对n个整数排序(从大到小)。对n个数进行降序排列,简单选择排序的算法思想如下:1)首先通过n-1次比较,从n个元素中找出值最大的元素,将它与第一个元素交换。(第一趟排序)。2)再通过n-2次比较,从剩余的n-1个元素中找出值次大的元素,将它与第二个元素交换。(第二趟排序)。3)重复上述操作,共进行n-1趟排序后,排序结束。输入先输入整数个数n(n=)然后输入n个整数输出输出排序后的n个整数,整数之间由1个空格隔开。样例输入102 7 12 23 23 34 45

19、56 87 98样例输出98 87 56 45 34 23 23 12 7 2分析:排序问题,就是两个数之间的交换,则我们需要设置变量n,i,j,max,temp,s,当把数组的元素输入过后,我们应该把max=ai;这样保证每一次的循环max开始都是首元素,然后要把i赋值给s,这样就可以避免最后在传递的时候空值传递,即s没有值,然后就一次次的判断,交换。(2)源程序#includeint main(void)int n,i,j,max,temp,s;int a,b;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);for(i=0;in-1;i+)max=ai;s

20、=i;for(j=i+1;jmax)max=aj;s=j;temp=ai;ai=max;as=temp;for(i=0;in-1;i+)printf(%d ,ai);printf(%dn,an-1);return 0;(3)调试记录 此题花费了我很长时间,一开始我没有把s=i;写上去,导致最后在当一个数已经是最大值不需要交换的时候,但是下面还是有交换的代码,运行出错,最后的几个数都是同一个数,后来经过调试发现少s=i;运行成功,运用的数据有所变化,因为范例的数据太特别了,所以我用了,45 83 96 52 43,等一些无序数字。(二)问题2:矩阵转置 (1)问题:问题 L: 矩阵转置时间限制:

21、1 Sec内存限制:128 MB提交:395解决:186提交状态讨论版题目描述输入N*N的矩阵,输出它的转置矩阵。输入第一行为整数N。接着是一个N*N的矩阵。输出转置矩阵样例输入21 21 2样例输出1 12 2分析:此题就是先输入一组数组,然后再输出的时候再反着输出printf(%d ,aji);注意的是我们最后没有空格。(2)源程序L:#includeint main(void)int n,i,j,a100100;scanf(%d,&n);for(i=0;in;i+)for(j=0;jn;j+)scanf(%d,&aij);for(i=0;in;i+)for(j=0;jn-1;j+)pri

22、ntf(%d ,aji);j=n-1;printf(%dn,aji);return 0;(3)调试记录一次性通过,数据就是范例。(三)问题3:函数与二维数组(1)问题:问题 J: 实验7_2:函数与二维数组时间限制:1 Sec内存限制:128 MB提交:857解决:460提交状态讨论版题目描述用3行4列的二维数组存储学生成绩,编写二维数组输入函数input()、二维数组输出函数output()、找最大值函数findMax()、找最小值函数findMin()、求平均值函数findAverage(),实现通过调用函数从键盘输入数组,然后调用函数完成二维数组输出,然后调用函数求最大成绩、最小成绩和平

23、均成绩并输出。输入输入12个成绩(float型数据)输出按3行4列输出成绩,每个数据占10位宽,精确到小数点后面2位。然后按样例输出最大、最小及平均成绩,精确到小数点后面2位。样例输入1 2 3 4 5 6 7 8 9 10 11 12.12样例输出 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 10.00 11.00 12.12max score is:12.12min score is:1.00average score is:6.51分析:这个要用到4个函数,output findmax findmin aver,最大和最小值就是先给最大或最小

24、赋初值,然后依次的进行比较,Acer就是用for循环把数组都加起来,除以个数。(2)源程序#includefloat findmax(float a34)float max;int i,j;max=a00;for(i=0;i3;i+)for(j=0;j4;j+)if(maxaij)max=aij;return max;float findmin(float a34)float min;int i,j;min=a00;for(i=0;i3;i+)for(j=0;jaij)min=aij;return min;void output(float a34)int i,j;for(i=0;i3;i+)for(j=0;j4;j+)printf(%10.2f,aij);printf(n);float aver(float a34)float aver,d=0;int i,j;for(i=0;i3;i+)for(j=0;j4;j+)d=d+aij;aver=d/12;return aver;int main(void)int i,j;float a34,b,c,d;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%f,&aij);outp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论