收藏 分销(赏)

华中科技大学C语言实验与课程设计上机实验报告汇总(1-8全部).docx

上传人:二*** 文档编号:4517858 上传时间:2024-09-26 格式:DOCX 页数:52 大小:303.22KB
下载 相关 举报
华中科技大学C语言实验与课程设计上机实验报告汇总(1-8全部).docx_第1页
第1页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、华中科技大学C语言实验与课程设计实验报告电脑科学与技术学院指导老师:Input the IP in unsigned long int form:i768795713rocess returned 0 execution tine : 24.738 s 5ress any key to continue.1.3实验体会在做改错题时,先浏览一遍,找出明显的错误,然后将初步修改后的代码输 入编译器并编译,再根据编译器的警告与错误提示修改程序至完全正确,这个过 程很需要细心和耐心,这个过程能够很好的帮助我再今后不犯类似错误。源程序修改与替换题锻炼我们举-反三的能力,我们在平时写程序时就应该 思考对于

2、一个问题有没有多钟解决方案,不使用中间变量交换两个整数是很常见 的问题,我利用一个数异或自身等于0, 0异或任意位保存原位的原理来交换。程序设计题提高了我们对所学知识的熟练度和理解程度,只有实践才能学会 C语言,在亲手编写代码的过程中发现问题,理解概念。2流程控制实验2.1实验目的(1) 掌握复合语句、if语句switch语句的使用,熟练掌握forwhile do-while 三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。(2) 熟练运用for、while、do-while语句来编写程序。(3) 练习转移语句和标号语句的使用。(4) 使用集成开发环境中的调试功能:单步

3、执行、设置断点、观察变量值。 2. 2实验内容及要求2.2.1.源程序改错下面是计算s=n!的源程序,在这个源程序中存在假设干语法和逻辑错 误。要求在电脑上对这个例子源程序进行调试修改,使之能够正确完成指 定任务,例如,8!=40320o程序代码:#includeint mainfl(int Ln,s=l;printffPlease enter n:;scanf(%d,n); for(i=l;i=s的最小整数n” 。例如,输入整数40310,输出结果为n=8.【分析】(1)相同循环内容利用不同循环结构实现,需要注意不同语句的 格式及根据循环方式对循环体做些许变动。流程图如下:while 型do

4、-while 型开始输入n计数变量i=l 累兼变量s=l当(while) i=n时执行循环体 s=s*l i+输出s结束开始输入n(2)同样计算n!并将n!赋值给不是s的值比方说m),然后令m和sYlYl输出sU结束比拟大小,找到符合条件的第一个m值,并返回n值。流程图如下:【程序】(1) while型#include int mainQ(int i=l,n,s=l; printffPlease enter n:); scanf(%d,&n); while(i=n)s=s*i;i+;printf(H%d!=%d,n,s); return 0;do-while 型#include int mai

5、n()(int i=l,n,s=l; printffPlease enter n:); scanf(%d,&n);do(s=s*i;i+;)while(i=n); printf(%d!=%d,n,s); return 0;(2)#include int mainQ(int tn=0,s,m=l; printffPlease enter s:); scanf(%d,&s); for(i=l;i+)n+;if(m = s) printf(n=%d,n); break;return 0;【测试】1)如果输入8,应该输出:40320,程序运行结果如下, 程序正确。Please enter n:88?=

6、40320Process returned 0 execution tine : 4.985 s Press any key to continue. 如果输入40310,应该输出:8,程序运行结果如下,程序正确。Please enter s:40310n=8Process returned 0 execut ion t ine : 4.938 s Press any key to continue.2. 2. 3程序设计编写并上机调试运行能实现以下功能的程序:(1) 假设工资税金按以下方法计算:x1000元,不收取税金;1000=x2000, 收取5%的 税金;2000=x3000,收取10

7、%的税金;3000=x4000,收取15%的税 金;4000=x5000,收取25%的税金。编写一个程序, 输入工资金额,输出应收取税金额度,要求分别用if语句呵switch语句来实现。(2) 编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以 上的空格字符用一个空格代替。(3) 编写一个程序,打印如下的杨辉三角形。11 112113311464115101051161520156117213535217118285670562881193684126126843691(4) 编写一个程序,将用户输入的任意正整数逆转。例如,输入1234,输 出 4321o【分析】(1)数学中的分段函

8、数问题,可以用if-else-if结构进行控制。在应用 switch语句的时候,结合分段区间的特点设置合适的间断点。流程图分别 如下:if型开始(2)使用状态机通过判断空格的个数选择不同状态,从而实现消去空格的作用。 流程图如下:(3)根据所给公式利用循环实现杨辉三角数的计算,注意题目中特别提到 的输出格式,将每个数字设置为四个字符位,并循环输出空格符,实现金字塔效 果。(4屡次除10取余,每次都分别输出余数,然后除以10并赋给原数重复 计算,流程图如下:【程序】if型#include float taxffloat x);int mainQ(float x;printffPlease inp

9、ut your salary:; scanf(%f,&x);printffYou should pay %fyuan.n,tax(abs(x); return 0;)float taxffloat x)(float n;if(x1000)(n=0;else if(x2000)(n=0.05;else if(x3000)(n=0.1;)else if(x4000)(n=0.15;)else if(x5000)(n=0.2;)elsen=0.25; return n*x;)switch 型#include float taxffloat x);int mainfl(float x;printffP

10、lease input your salary:); scanf(F,&x);printffYou should pay %fyuan.n,tax(abs(x); return 0;float taxffloat x)(float n;switch(int(x/1000)(case 0:n=0;break;case l:n=0.05;break;case 2:n=0.1;break;case 3:n=0.15;break;case 4:n=0.2;break;default:n=0.25;return n*x;)(2)#include enum COPY,START,SPACE;int mai

11、nQ(char c;int state=COPY; printffPlease input a char:n); while(c=getcharO)!=n) switch (state) ( case COPY:if(c=, )state=START;else putchar(c); break;case START:putchar();if(c=r )state二SPACE; else(state=COPY;putchar(c); break;case SPACE:if(c= )state=COPY; putchar(c);else state=SPACE; break;)return 0;

12、(3)#include #define n 10int main(void)(int i,j,k,c,m;for(i=0;in;i+)for(m=0;m=n-i;m+( printfC );forQ=0;j=i;j+)( if(j=O)c=l; elsec=c*(i+l-j)/j; printf(%4d,c);printf(”n”);)return 0;)(4)#include int mainQ(long n,m;printffPIease input an integer n(n0):); scanf(”ld”,&n);printf(nThe new integer is:); while

13、(n=10)m=n%10; printf(%ld,m); n/=10;printf(”ld”,n);return 0;)【测试】Please input your salary:6000You should pay 1500.000000 yuan.Process returned 0 execution tine : 10.547 s Press any key to continue.Please input a char: huj iJ laj if 1huji jlajif 1 da Process returned Press any key to(2)da a fdjjfaos;a

14、h af a aa fdj Jfaos; ah af a a k0 execution tine : 28.345 s continue.11 112113311464115 10105116 152015611721 3535217118 :28 5670 !56 :2881193684 126126843691Process returned 0 execution tine : 0.203 s Press any key to continue.Please input an integer n0:123456The new integer is:654321Process return

15、ed 0 execution tine : 6.109 s Press any key to continue.2. 3实验体会源程序改错中,依赖于平时良好的输入习惯,在输入过程中己经可以检查出 大多数语法错误,或者拼写错误。接下来再检查一下逻辑是否有误,无误那么进行 多组数据的编译检验,确认最终无误。源程序修改与替换题锻炼我们举一反三触类旁通的能力,在平时写程序时就 应该思考对于一个问题有没有多钟解决方案,使用不同的逻辑结构多种尝试寻求 最优解。程序设计题那么是自主的设计实践,在练习中获得进一步提升,增强对于所学 知识的熟练度和理解程度,锻炼能力。目录1表达式和标准输入输出实验 32流程控制

16、实验113函数程序与结构实验204编译预处理实验285数组实验356指针实验427结构与联合实验528文件实验613函数与程序结构实验2.1实验目的(1) 熟悉和掌握函数的定义、声明,函数调用与参数传递方法,以及函数 返回值类型的定义和返回值使用。(2) 熟悉和掌握不同存储类型变量的使用。(3) 熟悉多文件编译技术。(4) 使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。 2. 2实验内容及要求2.2.1.源程序改错下面是计算s = 1 !+2!+3!+n!的源程序,在这个源程序中存在假设干 语法和逻辑错误。要求在电脑上对这个例子源程序进行调试修改,使之能 够正确完成指定任务。程

17、序代码:#includeint main(void)int k;for(k=1 ;kv6;k+)printf(k=%dtthe sum is %ldn, k, sum_fac(k);)return 0;longsum_fac(int n)long s = 0;inti;long fac;for(i=1; i=n; i+) fac *= i;s += fac; return s;)【分析及改正】本程序共存在3处错误,分析如下:(1) return 0;错误脉因:return返值应该在main函数内部改正:return 0; long fac;错误原因:fac未赋予初始值,会导致接下来计算错误。改

18、正:long fac=1;3) s += fac;错误原因:语句s+=fac;不在函数for内部,逻辑出错。改正:for(i=1;iv=n;i+)fac*=i;s+=fac; )源程序修改替换(1)修改上术源程序中的sumjac函数,使其计算量最小。2)修改上述源程序中的sumjac函数,计算s =1+1/(21)+1/(3!)+1/(n!)【分析】(1)利用static变量类型对循环进行化简,保存上一个值,防止屡次重复循环。流程图如下:(2) 相比拟于源程序,变动之处在于求的是阶乘的倒数和,那么在循环中多 步求倒数的过程,并对倒数求和。流程图如下:开始k=l,s=O,fac=lJ=l【程序】

19、1)#include long sum_fac();int main()(int k;for(k=l;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k); return 0;static long s=O,fac=l;long sum_fac(int n)(fac*=n;s+=fac;return s;#include float sum_facQ;int main。(int k;for(k=l;k6;k+) printf(k=%dtthe sum is %fn,k,sum_fac(k);return 0;)float sum_fac(int n)(

20、long fac=l;inti;float x,s=0;for(i=l;i=n;i+) fac*=i;x=1.0/fac;s+=x;)return s;C=1thesunis1c=2thesunis3c=3thesunis9c=4thesunis33c=5thesunis153cessreturned0【测试】1)程序运行结果如下,程序正确。execution tine : 0.151 s Tess any key to continue.(2)程序运行结果如下,程序正确。=1thesunis1.000000=2thesunis1.500000=3thesunis1.666667=4thesu

21、nis1.708333=5thesunis1,716667rocess returned0ressany key tocontinue.execution tine : 0.441 s2. 2. 3跟踪调试下面是计算fabonacci数列前n项和的源程序,现要求单步执行该程序,并 观察p, i, sum, n的值,即:(1) 刚执行完“scanf(”d”,&k);”语句时,p,i值是多少?Function aLocalsj57k2sum0P0x28ff00nNot available(2) 从fabonacci函数返回后,光条停留在哪个语句上?11 sum+=fabonacci(i);(3)进

22、入fabonacci函数时,watches窗口显示的是什么?n=l到n不存在;n=l到n=2到n不存在;n=l到n=2到n=3到n不存在。【源程序】#include long fabonacci(int);int mainQint i,k;long sum=0,*p=∑scanf(d”,&k);for(i=l;i=4 is the sum of two primes.10=3+712=5+720=3+17【分析】(1)用辗转相除法求最大公约数,程序框图如下:开始取两个数中的较大 数除以较小数得到假设余数不为零,去余数 和被除数,重复上一步 操作余数为零后,取被 除数,即为最大公 约数结

23、束(2) 首先判断一定范围内的素数比方100以内),然后判断一个偶数能 否表示为两个素数之和。程序框图如下:判断素数W(3) 和第二题类似,只不过加上一个范围控制,设置循环处于最大值和最 小值之间。程序框图如下:【程序】#include int GCD(int m,int n);int mainQ(int m,n,r;printffPlease input two integers:、); scanf(%d%d,&m,&n);printffThe greatest common divisor is %d,GCD(m,n); return 0;int GCD(m,n)( if(m%n=O&m=

24、n)return n; else if(m%n=O&mn)return m;else(int r;r=m%n;m=n;n=r;return GCD(m,n);)#include #define N 100static int aN;int primeQ;int mainQ(int x,i;printffPlease input an even x(x=4):n);scanf(%d,&x);if(x%2!=0|x4)printf(,ERROR!);prime。; for(i=2;i=N&ix/2;i+) if(ai)if(axi)printf(%d=%d+%dn,x,i,xi);return 0

25、;int primeQ(int i,j;for(a0=al=0,i=2;iN;i+)ai=l;for(i=2;iN/2;i+)if(ai) for(j=i*i;jN;j+=iaj=0;return 0;)(3)#include #define N100#define BEGIN 10#define END 20static int aN;int prime();int main()(int x,i,j;printffGOLDBACHS CONJECTURE:nEvery even number n=4 is the sum of two prime.n);primeQ;for(i=BEGIN;

26、i=END;i+)(for(j=2;jvi/2;j+)if(aj) if(ai-j)printf(%d=%d+%dn”,i,j,i-j);)return 0;)int primeQ(int i,j;for(a0=al=0J=2;iN;i+)ai=l; for(i=2;iN/2;i+)if(ai)for(j=i*i;jN;j+=i)aj=0;)return 0;)【测试】(1)输入24和16求最大公约数,最大公约数为8,结果正确:Please input two integers:2416The greatest common diuisor is 8(2)验证哥德巴赫猜测,输入98,返回素数和

27、,结果正确:Please input an euen x=4: 9898=19+7998=31+6798=37+61(3) 验证一定范围内的哥德巴赫猜测,输入14,返回素数和,结果正确:Please input an euen x=4:1414=3+112. 3实验体会源程序改错中,依赖于平时良好的输入习惯,在输入过程中己经可以检查出 大多数语法错误,或者拼写错误。接下来再检查一下逻辑是否有误,无误那么进行 多组数据的编译检验,确认最终无误。源程序修改与替换题锻炼我们优化算法的能力,在平时写程序时就应该思考 对于一个问题有没有最优解决方案,使用不同的语句在空间和时间中寻求平衡点, 尽可能的控制

28、好占用的时间空间范围。程序设计题那么是自主的设计实践,在练习中获得进一步提升,增强对于所学 知识的熟练度和理解程度,锻炼编写代码的能力以及并通过问题的进一步引申锻 炼思维的灵活性。4编译预处理实验4.1实验目的(1) 掌握文件包含、宏定义、条件编译、assert宏的使用(2练习带参数的宏定义、条件编译的使用。(3) 练习assert宏的使用。(4) 使用集成开发环境中的调试功能:单步执行,设置断点,观察变量值。4. 2实验内容及要求2.1.源程序改错下面是用宏来计算平方差和交换两数的源程序。在这个源程序中,存 在假设干语法和逻辑错误,要求在电脑上对这个源程序进行调试修改,使 之能够正确完成计算

29、平方差和交换两数的任务。程序代码:#include#define SUM a+b#define DIF a-b#define SWAP(a,b) a=b,b=aint main(void)(int b, t;printffInput two integers a,b:);scanf(d, %d”,&a, &b);printf(HnSUM=%dn the difference between square of a and square of b is:%d”,SUM,SUM*DIF);SWAP(a,b);printf(nNow a=%d, b=%dn a, b); return 0;【分析及改

30、正】本程序共存在3处错误,分析如下:1) #define SUM a+b #define DIF a-b错误原因:在宏定义中,在引用时直接将表达式带入之后的表达式应 用,由于不了解在之后的应用中采用的运算符,所以优先级无法确定,因 此需要在宏定义中对变量即表达式中加上括号。改正:#define SUM (a)+(b)#define DIF (a)-(b)(2) #define SWAP(a,b) a=b,b=a错误原因:带参数的宏定义逻辑错误,无法有效实现两个数的交换。改正:#define SWAP(a,b,t) t=b,b=a,a=t(3) intb,t;错误原因:未完整声明所有参数,导致局

31、部参数不识别。改正:inta,b,t;(4) scanf(%d, %d, &a, &b);错误原因:scanf函数中类型声明中,两个(1符号中间不加符号。 改正:scanf(%d%d, &a, &b);(5) SWAP(a,b);错误原因:与宏定义相对应的更改为三个参数。改正:SWAP(a,b,t);源程序修改替换下面是用函数实现求三个数中最大数、计算两数之和的源程序。在这个源程 序中存在假设干语法和逻辑错误,要求:(1) 对这个例子源程序进行调试修改,使之能够正确完成指定任务。(2) 用带参数的宏替换函数max,实现求最大数的功能。程序代码:void main(void)(int a, b,

32、 c;float d, e;printf(Enter three integers:);scanf(%d, %d, %d”, &a, &b, &c);printf(nthe maximum of them is %dn, max(a,b,c); printf(Enter two floating point numbers:);scanf(%f, %f, &d, &e);printf(nthe sum of them is%fn,sum(d,e); return 0;int max(int x, int y, int z)(int t;if (x y) t = x;else t = y;if

33、(t z) t = z;return t;float sum(float x, float y)(return x + y;【分析】(1)修改如第一题,出现的问题有:scanf函数的参数变量类型间 的格式问题与函数声明问题。(2)将函数max用带参数的宏定义表示,利用语句“?: ”表示if选择语 句。【程序】1#include int max(int x,int yjnt z);1表达式和标准输入与输出实验1.1实验目的(1) 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类 型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符, 问号运算符,逗号运算符等;熟记运算符的优先

34、级和结合性。2)掌握scanf和printf函数的用法。3)掌握简单C程序顺序结构程序)的编写方法。1.2实验内容及结果1.2.1,源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:1)输入华氏温度匚 将它转换成摄氏温度C后输出;2)输入圆的半径值r,计算并输出圆的面积s;3)输入短整数k、P,将k的高字节作为结果的低字节,p的高 字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在假设干语法和逻辑错误。要求参照和 2. 1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。程序代码:#include#define PI 3.14159;voidmain(

35、 void)(int f;short p, k;double c, r, s ;/* for task 1 */printfflnput Fahrenheit:);scanf(d,f);c = 5/9*(f-32);printff n %d (F) = %.2f (C)nn ”, f, c);/* for task 2 */printffinput the radius r:); scanf(n%f &r);s = PI * r * r;printf(nThe acreage is %.2fnn,&s);/* for task 3 */ printffinput hex int k, p :)

36、;float sum(float x,float y); int mainQint a,b,c;float d,e;printfCEnter three integers:n); scanf(d%d%d”,&a,&b,&c);printf(nthe maximum of them is %dn”,max(a,b,c); printf(Enter two float point numbers:n); scanf(”f%F,&d,&e);printf(nthe sum of them is %fn,sum(d,e); return 0;int max(int x,int y,int z)int

37、t;if(xy)t=x;else t=y;if(tvz)t=z;return t;float sum(float x,float y)(return x+y;)#include #define max(x,y,z) (x)(y)?(x):(y)(z)?(x)(y)?(x):(y):(z) float sum(float x,float y);int main()int a,b,c;float d,e;printffEnter three integers:n); scanf(d%d%d”,&a,&b,&c);printf(nthe maximum of them is %dn”,max(a,b

38、,c); printf(Enter two float point numbers:nH); scanf(f%F,&d,&e);printf(nthe sum of them is %fn,sum(d,e); return 0;float sumffloat x,float y)(return x+y;)【测试】1)程序运行结果如下,程序正确。inter three integers: the maximum of then is 9 Enter two float point numbers:he sum of them is 9.000000(2) 程序运行结果如下,程序正确。Enter

39、three integers: the maximum of them is 4 Enter two float point numbers: he sun of then is 14.0000004. 2. 3跟踪调试下面程序的功能是利用R计算圆的面积s,以及面积s的整数局部。现要 求:(1) 修改程序,使程序编译通过且能运行。修改过的源程序见下面局部。(2) 单步执行。进入函数integerjraction时,watches窗口中为何值? 在返回main时,watch窗口中i为何值?如图:WatchesXX3)排除错误,使程序能正确输出面积S值的整数局部,不会输出错误信 息 asserti

40、on failed o题目程序代码:#define Rint main(void)(float r, s;int sjnteger = 0; printffinput a number:); scanf(%f &r);#ifdef Rs = 3.14159 *r*r;printf(area of round is:%fn, s); sjnteger = integer_fraction(s);printffthe integer fraction of area is %dn, sjnteger); assert(s-s_integer) 1.0);#endifreturn 0;)int integer_fraction(float x)(i

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服