您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文档 > 华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)
华中科技大学C语言实验与课程设计实验报告计算机科学与技术学院指导老师:华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁2目录1表达式和标准输入输出实验········32流程控制实验··············113函数程序与结构实验···········204编译预处理实验·············285数组实验················356指针实验················427结构与联合实验·············528文件实验················61华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁31表达式和标准输入与输出实验1.1实验目的(1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。(2)掌握scanf和printf函数的用法。(3)掌握简单C程序(顺序结构程序)的编写方法。1.2实验内容及结果1.2.1.源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度C后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。要求参照2.1.3和2.1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。程序代码:#includestdio.h#definePI3.14159;voidmain(void){intf;shortp,k;doublec,r,s;/*fortask1*/printf(“InputFahrenheit:”);scanf(“%d”,f);c=5/9*(f-32);printf(“\n%d(F)=%.2f(C)\n\n”,f,c);/*fortask2*/printf(inputtheradiusr:);scanf(%f,&r);s=PI*r*r;printf(\nTheacreageis%.2f\n\n,&s);/*fortask3*/printf(inputhexintk,p:);scanf(%x%x,&k,&p);华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁4newint=(p&0xff00)|(k&0xff00)8;printf(newint=%x\n\n,newint);}【分析及改正】本程序共存在9处错误,分析如下:(1)#definePI3.14159;错误原因:宏定义在预处理时会将后续程序中的标示符展开为对应全部字符串,而PI不需要分号。改正:去掉其后分号(2)voidmain(void){错误原因:函数返回值与函数名之间应加空格,C90标准建议main函数应返回一个int作为状态值改正:intmain(void){(3)shortp,k;错误原因:后续用到了newint变量但并未声明改正:shortp,k,newint;(4)scanf(“%d”,f);错误原因:应该把要读入的变量的地址传递给scanf才能正确写入改正:scanf(%d,&f);(5)c=5/9*(f-32);错误原因:5和9是整型常数,相除会截断小数部分,应该将其中任意一个输表示为或转换为浮点数类型改正:c=5.0/9*(f-32);(6)scanf(%f,&r);错误原因:double类型对应的占位符是%lf改正:scanf(%lf,&r);(7)printf(\nTheacreageis%.2f\n\n,&s);错误原因:要输出s的值应该将s作为参数传递给printf,不应传递其地址改正:printf(\nTheacreageis%.2f\n\n,s);(8)scanf(%x%x,&k,&p);printf(newint=%x\n\n,newint);错误原因:k,p为short类型,对应十六进制占位符应为%hx改正:scanf(%hx%hx,&k,&p);printf(newint=%hx\n\n,newint);(9)newint=(p&0xff00)|(k&0xff00)8;错误原因:要求将k的高字节作为结果的低字节,应该将k的高字节提取出后右移至低字节改正:newint=(p&0xff00)|(((k&0xff00)8)&0x00ff);1.2.2源程序修改替换下面的程序利用常用的中间变量法实现两数交换,请改用不使用第3个变量的方法实现。该程序中t是中间变量,要求将定义语句中的t删除,修改下划线华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁5处的语句,使之实现两数对调的操作。程序代码:#includestdio.hvoidmain(){inta,b,t;printf(“Inputtwointegers:”);scanf(“%d%d”,&a,&b);t=a;a=b;b=t;prinf(“\na=%d,b=%d”,a,b);}【分析】将a,b中的任何一个看做原码,另一个当做密钥进行加密,再将加密过的内容与密钥做加密运算即得到原码。由此使用异或运算进行交换。流程图如下:【程序】#includestdio.h#includestdlib.hintmain(){inta,b;printf(inputtwointegers:);scanf(%d%d,&a,&b);a^=b;b^=a;华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁6a^=b;printf(\na=%d,b=%d,a,b);return0;}【测试】如果输入a=1,b=7,应该输出:a=7,b=1,程序运行结果如下,程序正确。1.2.3程序设计1、编写一个程序,输入字符c,如果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。【分析】因为同一个字母的大小写字母的ASCII码值相差32,若ch为大写字母,则ch+32为对应的小写字母。流程图如下:【程序】#includestdio.hintmain(){printf(Inputyourcharx:\n);charx;scanf(%c,&x);if(x='a'&&x='z')华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁7{printf(%c\n,x);}elseif(x='A'&&x='Z'){printf(%c\n,x-'0'+32+'0');}else{printf(Pleaseinputtherightchar.);}return0;}【测试】(1)测试大写变小写。若输入D,应输出d,程序运行结果如下,程序正确。(2)测试其他字符。若输入a,应输出a,程序运行结果如下,程序正确。2、编写一个程序,输入无符号短整数x,m,n(0≤m≤15,1≤n≤16-m),取出x从第m位开始向左的n位(m从右至左编号为0~15),并使其向左端(第15位)靠齐。【分析】将x首先右移m位,再左移(16-n)位,则末尾会补0,即可将第m位开始向左的n位且向最高位靠齐流程图如下:华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁8【程序】#includestdio.hintmain(){unsignedshortx,m,n;puts(Pleaseinputx,m,n:);scanf(%hu%hu%hu,&x,&m,&n);x=m;x=(16-n);printf(%hx\n,x);return0;}【测试】若x=58207,m=4,n=4,因为(58207)10=(1110001101011111)2,处理后为(101000000000000)2=(5000)16,程序应该输出十六进制数:5000,运行结果如下,程序正确。3、IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁9例如,整形676879571二进制表示就是:00101000010110000101110011010011,按照8位一组可表示为:408892211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。【分析】分别利用逻辑尺取出读入的长整形数的四部分,从最低位起每8位(1个字节)为一个部分,然后按照正常顺序输出其对应的十进制IP地址。程序框图如下:【程序】#includestdio.hintmain(){unsignedlongIP;unsignedshortfirst,second,third,fourth;puts(InputtheIPinunsignedlongintform:);scanf(%lu,&IP);first=(IP&0xFF000000)24;second=(IP&0xFF0000)16;third=(IP&0xFF00)8;fourth=IP&0xFF;printf(%hu.%hu.%hu.%hu,fourth,third,second,first);}【测试】若输入676879571,应输出211.92.88.40。运行结果如下,表明程序正确。华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁101.3实验体会在做改错题时,先浏览一遍,找出明显的错误,然后将初步修改后的代码输入编译器并编译,再根据编译器的警告与错误提示修改程序至完全正确,这个过程很需要细心和耐心,这个过程能够很好的帮助我再今后不犯类似错误。源程序修改与替换题锻炼我们举一反三的能力,我们在平时写程序时就应该思考对于一个问题有没有多钟解决方案,不使用中间变量交换两个整数是很常见的问题,我利用一个数异或自身等于0,0异或任意位保留原位的原理来交换。程序设计题提高了我们对所学知识的熟练度和理解程度,只有实践才能学会C语言,在亲手编写代码的过程中发现问题,理解概念。华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁112流程控制实验2.1实验目的(1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。(2)熟练运用for、while、do-while语句来编写程序。(3)练习转移语句和标号语句的使用。(4)使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。2.2实验内容及要求2.2.1.源程序改错下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子源程序进行调试修改,使之能够正确完成指定任务,例如,8!=40320。程序代码:#includestdio.hintmain(){inti,n,s=1;printf(Pleaseentern:);scanf(%d,n);for(i=1;i=n;i++)s=s*i;printf(%d!=%d,n,s);return0;}【分析及改正】本程序共存在3处错误,分析如下:(1)ints=1;错误原因:在计算阶乘的时候,由于阶乘值会上升很快,所以不建议使用int类型,可以改为long或者double型。改正:改为long型变量。(2)scanf(“%d”,n);错误原因:scanf函数获取输入值时,引用的是一个变量地址,而不是变量本身。改正:scanf(“%d”,&n);(3)}return0;错误原因:return返回值应该在main函数内部改正:return0;}2.2.2源程序修改替换(1)修改上述计算s=n!的源程序,要求分别用while和do-while语句替换for语句。(2)修改上述计算s=n!的源程序,要求输入改为“整数S”,输出改为“满足n!=s的
本文标题:华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)
链接地址:https://www.777doc.com/doc-4897193 .html