2023年华中科技大学计算机学院C语言与程序设计实验报告含源代码.pdf
《2023年华中科技大学计算机学院C语言与程序设计实验报告含源代码.pdf》由会员分享,可在线阅读,更多相关《2023年华中科技大学计算机学院C语言与程序设计实验报告含源代码.pdf(133页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程实验报告课程名称:C语言程序设计实验_ _ _ _ _ _ _ _ _专业班级:计算机1709班学 号:U姓 名:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _指导教师:甘早斌报告日期:2023/1/10计算机科学与技术学院目录1 表达式和标准输入输出实验.21.1 实验目的.21.2 实验内容.21.3 实验小结.112 流程控制实验.1错误!未定义书签。2.1实 验目的.错误!未定义书签。22.2实 验内容.错误!未定义书签。22.3 实验小结.253 函数与程序结构实验.263.1 实验目的.263.2 实验内容.263.3 实验小结.37
2、4 编译预解决实验.384.1 实验目的.384.2 实验内容.384.3 实验小结.465 数组实验.475.1 实验目的.475.2 实验内容.475.3 实验小结.606 指针实验.616.1实 验目的.6错误!未定义书签。6.2实 验内容.6错误!未定义书签。6.3 实验小结.777结构与联合实验错误!未定义书签。87.1 实验目的.787.2 实验内容.787.3 实验小结.11错误!未定义书签。8 文献实验.1128.1 实验目的.错误!未定义书签。128.2 实验内容.错误!未定义书签。128.3 实验小结.错误!未定义书签。17参考文献1181表达式和标准输入与输出实验1.1
3、实验目的(1)纯熟掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C 语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。(2)S getchar,putchar,scanf 和 printf 函数的用法。(3)掌握简朴C 程序(顺序结构程序)的编写方法。1.2实验内容1.2.1 源程序改错下面给出了一个简朴C语言程序例程,用来完毕以下工作:(1)输入华氏温度f,将它转换成摄氏温度c 后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将 k 的高字节作为结果的低字节,p 的高字节作为结果的高字节,
4、拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。规定参照1.3和 1.4的环节对下面程序进行调试修改,使之可以对的完毕指定任务。1#include2#define PI 3.14159;3 voidmain(void)45 int f;6 short p,k;7 double c,r,s;8/*for task 1 */9 printfCInput Fahrenheit:);10 scanf(d”,f);11 c=5/9*(f-32);12 printf(n%d(F)=%.2f(C)nn”,f,c);13/*for task 2*/14 printf(input the r
5、adius r:);15 scanf(%f,&r);16 s=PI*r*r;17 printf(nThe acreage is%.2fnn,&s);18/*for task 3*/19 printf(input hex int k,p20 scanf(%x%x,&k,&p);21 newint=(p&0 xff00)|(k&0 xff00)8;22 printf(new int=%xnn,newint);)解答:(1)错误修改:1)第2行的符号常量定义后不能有分号,对的形式为:#define PI 3.141592)第3行的voidmain(void)的返回类型和函数名应分开,对的形式为:in
6、t main(void)3)第10行的scanf(%d”,f);在输入内容时指向地址应使用&,对的形式为:scanf(%d,&f);4)第11行的c=5/9*(f-32);由于f是int型,在运算时右侧表达式会被截去小数部分,对的形式为:c=5.0/9*(f-32);5)第12行的printf(n%d(F)=%.2f(C)nn”,f,c);由于c是双精度浮点型变量应使用占位符I f,对的形式为:printf(n%d(F)=%.21f(C)nn,f,c);6)第 15行的scanf(%f,&r);由于r 是双精度浮点型变量应使用占位符If,对的形式为:scanf(%lf,&r);7)第 17行的
7、printf(nThe acreage is%.2fnn,&s);变量s 为长浮点型,且输出不需要取址符,对的形式为:printf(nThe acreage is%.21fnn,s);8)第 21行 newint变量未声明,且数学表达式错误,对的形式为:short newint;newint=(p&0 xff00)|(k&0 xff00)8);9)第 20行、第 22行的变量为短整型,x 应为hx,对的形式为:20 scanf(%hx%hx,&k,&p);22 printf(new int=%hxnn,newint);(2)错误修改后运营结果:C:UsersMLDesktopMy filesE
8、X001binDebugEX001.exeI n p u t F a h r e n h e i t:8 08 0(F)=2 6.6 7 (C)i n p u t t h e r a d i u s r:1T h e a c r e a g e i s 3.1 4i n p u t h e x i n t k,p :2 0 0 2 0 0n e wi n t =2 0 2P r o c e s s r e t u r n e d 0 (0 x 0)e x e c u t i o n t i m e :7.6 4 7 sP r e s s a n y k e y t o c o n t i n
9、u e.1.2.2源程序修改替换下面的程序运用常用的中间变量法实现两数互换,请改用不使用第3个变量的方法实现。该程序中t是中间变量,规定将定义语句中的t删除,修改下划线处的语句,使之实现两数对调的操作。#includevoid main()int a,b,t;printffInput two integers:);scanf(u%d%d,&a,&b);t=a;a=b;b=t;prinfif4tna=%d,b=%d,a,b);解答:替换后的程序如下所示:#includevoid main()(int a,b;printffInput two integers:,9);scanf(6%d%d,&a
10、,&b);a=a+b;b=a-b;a=a-b;printfC4na=%d,b=%d,a,b);I n p u t t wo i n t e g e r s:4 6a=6,b=41.2.3程序设计(1)编写一个程序,输入字符C,假如C是大写字母,则将C转换成相应的小写,否则C的值不变,最后输出C。解答:1)算法流程如图1.1所示。2)程序清单#includeint main()int c;printf(输入字符,假如它是大写字母,则将它转换成相应的小写,否则原样输出:);c=getchar();通过getchar()来获得字符相应的ASCII码if(c=A)判断字符c 是否为大写字母c=c-(A
11、-a);将大写字母变为小写printf(解决结果是:%c,c);return 0;3)测试(a)测试数据:表 1-1编程题1的测试数据测试用例程序输入理论值运营结果用例1Bbb用例2bbb用例3111(b)用例1 的运营结果如图1.2所示输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:B处理结果是:b图 1.2用例2 的运营结果如图1.2所示输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:b处理结果是:b图 1.3用例3 的运营结果如图1.2所示输入字符.如果 匕是大q 字母,则将它转换成对座的小3,否则原样输出:1I 处理结果是:1图 1.4运营结果与理论
12、分析结果一致,验证了程序的对的性。(2)编写一个程序,输入无符号短整数x,m,n(0m 15,1 n 16-m),取出x 从第m位开始向左的n 位(m从右至左编号为0 1 5),并使其向左端(第15位)靠齐。1)解题思绪:A输入 x,m,nB.假如输入合理,转 a,否则转Ca 准备使用位运算,先准备逻辑尺b 为运用按位与计算,将非预变换位变为0c 使用生成的逻辑尺与预变换数进行按位与运算,达成取出所需部分的目的d 将取出的部分向左靠齐e 输出结果C.提醒输入错误D.结束2)程序清单#includeint main()(unsigned short x,m,n,i;printf(输入 x(10
13、进制)、m(0-1 5)和 n(1-16-m):);scanf(,%hu%hu%huM,&x,&m,&n);if(m=0&m=1&n=16-m)/判断输入是否合理(i=Oxflfff;准备位运算所需逻辑尺i =m;/拟定变换起始位置i=16-n;拟定变换作用长度i =1 6 -m -n;进入变换位置x&=i;x =1 6 -m-n;左移p r i n t f(通过变换得到:%h u ,x);e l s e p r i n t f(输入错误,请检查您的输入)提醒输入不合理r e t u r n 0;3)测试(a)测试数据:测试S;驯程 K 歌耍 论 堇 鼻L 二军XmX用例10000 0000
14、0001 1001(25)3计算垄果1100 0000 00000000 虻491524915月例21101 0101 1000 0011(5459)161晚入榜澳检查崭弓例31101 0101 1000 0011 C 54659)135勒入错误Cn值超范考)(b)相应测试测试用例1的运营结果如图2-2所示。输入x (1 0进 制)、m (0 1 5)和n :2 5 3 2经过变换得到:4 9 1 5 2图2-2编程题2的测试用例一的运营结果相应测试测试用例2的运营结果如图2-3所示。1 入x (1 0进 制)、m (0 1 5)和n (1 1 6-m):5 4 6 5 9 1 6 16入错误
15、,请检查您的输入图2-3编程题2的测试用例二的运营结果相应测试测试用例3的运营结果如图2-4所示。输入x (1 0进 制)、m (0 1 5)和n (1 1 6-m):5 4 6 5 9 1 3 5施入错误,请检查您的输入图2-4编程题2的测试用例三的运营结果运营结果与理论分析结果一致,验证了程序的对的性。(3)I P地址通常是4个用句点分隔的小整数(即点分十进制),如3 2.5 5.L 1 0 2。这些地址在机器中用无符号长整形表达。编写一个程序,以机器存储的形式读入一个互联网I P地址,对其译码,然后用常见的句点分隔的4部分的形式输出。解答:1)解题思绪:A.输入变为整型数的IPB为4个b
16、 yt e准备4个逻辑尺C.用这4个逻辑尺分别取出各b yt e中二进制数D将二进制数统一移到最低八位E按规定的格式与顺序输出i p地址2)程序清单#i n c l u de i n t m a i n()u n s i g n e d l o n g i n t i p,m l ,m 2,m 3,m 4,p 1 ,p 2,p 3,p 4;p r i n t f(输入 IP 地址:);s c a n f(%l u ,&i p);m l =Oxf f OOOOOO;/各分段逻辑尺m 2 =OxOOf f OOOO;/各分段逻辑尺m 3 =OxOOOOf f OO;/各分段逻辑尺m 4 =OxOO
17、OOOOf f;/各分段逻辑尺p l =(i p&m l)24;/取出各部分二进制数p2=(ip&m2)16;/取出各部分二进制数p3=(ip&m3)8;/取出各部分二进制数p4=(ip&m4);取出各部分二进制数printf(这个 IP 地址常规形式为:%lu.%lu.%lu.%lu,p4,p3,p2,pl);/按规定格式输出return 0;3)测试(a)测试数据:测试用例程 序 输 入理 论 结 果运 行 结 果用例14564561345.127.184.245.127.184.2用例221.205.91.721.205.91.7用例349.43.17.4749.43.17.47(b)相
18、应测试测试用例1的运营结果如图3-2所示。输入IP地址:45645613这个IP地址常规形式为:45.127.184.2图3-2编程题3 的测试用例一的运营结果相应测试测试用例2 的运营结果如图1-3所示。输入IP地址:123456789这个IP地址常规形式为:21.205.91.7图3-3编程题3 的测试用例二的运营结果相应测试测试用例3 的运营结果如图3-4所示。输入IP地址:78 9 65 4 321这个IP地址常规形式为:4 9.4 3.1 7.4 7图3-4编程题3的测试用例三的运营结果运营结果与理论分析结果一致,验证了程序的对的性。1.3实验小结(1)对基本集成开发环境的运用更加纯
19、熟;(2)体会到写程序前先理清思绪的重要性;(3)体会到了判断输入值对程序的重要性;(4)掌握了书写实验报告的基本方法。实验2流程控制实验2.1实验目的(1)掌握i f-e l s e,do-wh i l e,s wi t c h-c a s e等流程控制语句之用法。(2)能对的理解各流程控制语句所包含的逻辑关系。(3)能对的理解各流程控制语句之间不同,并用这些不同优化自己的程序。(4)能用流程控制语句编写简朴的C语言程序。2.2实验内容及规定2.2.1源程序改错下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。规定在计算机上对这个例子程序进行调试修改,使之可以对的完毕指定任务
20、。例如,8!=4 0 320。1#i n c l u de 2 int main(void)34 int i,n,s=l;5 printf(HPlease enter n:);6 scanf(n%dH,n);7 for(i=l,i=n,i+)8 s=s*i;9 printf(n%d!=%d,n,s);10)11 return;解答:(1)错误修改:1)第 6 行的scanf在输入时应指向单元地址而非单元名称,对的形式为:scanf(n%dn,&n);2)第 7 行的for语句表达式之间应用;分隔,对的形式为:for(i=l;i=n;i+)3)第 10行的return 0;和第11行的 位置错误
21、,大括号应当在整段代码的末尾,对的形式为:10 return 0;11(2)错误修改后运营结果:见图2-1Please enter n:88!=40320图2-1修改后的运营结果2.2.2源程序修改替换(1)修改第1题,分别用while和 do-while语句替换for语句。解答:在使用while语句时,将 for语句中赋i 初值的语句放到while循环之前,每次改变i 的值的语句放在循环的最后一条语句即可,而在其他的地方,则与经for语句的解决基本一致,替换后的程序如下所示:#include int main(void)(int i=l,n,s=l;printf(Please enter n
22、:);scanf(%d,&n);while(i=n)(s=s*i;i+;)printf(%d!=%d,n,s);return 0;)运营结果见图2-2Please enter n:88!=40320图2-2 while结构下的运营结果在使用do-while语句时,其与while语句的差异特别体现在无论n 的值为什么值,其都会进行一次循环,但值得注意的是,这一次额外的循环(发生于输入n=0时)在 i 的初值为1时,并不会改变s 的值,从而并不需要进行额外的解决,调换循环体与条件的位置即可,替换后的程序如下所示:#include int main(void)int i=l,n,s=l;printf
23、(nPlease enter n:n);scanf(d”,&n);dos=s*i;i+;)while(i=n);printf(H%d!=%dn,n,s);return 0;)运营结果见图2-3Please enter n:88!=40320图 2-3 do-while结构的运营结果(2)修 改 第 1 题,规定输入改为“整 数 s,输出改为“满 足 n!N s 的最小整数暧。例如,输入整数为40310,输出结果为n=8。解答:这个问题,从本质上来说,是要找到一个数,使它的阶乘的值大于等于所输入的n 的值,且规定这个数的值最小。阶乘的实现,可借助之前编写的程序,只需修改一下输入和输出,及增长一个
24、输出条件。程序如下所示:#includeint main()(int j,n=0,s,m=l;printf(Please enter s:);scanf(%d,&s);for(j=l;j+)m=m*j;n+;if(m=s)printf(nn=%dn,n);break;)return 0;)运营结果见图2-4Please enter s:40320n=8图2-4第2题程序的运营结果2.2.3程序设计(1)假设工资税金按以下方法计算:x 1000元,不收取税金;1000 Wx 2 0 2 3,收取 5%的税金;2023 W x 3000,收取 10%的税金;3000 W x5000,收取25%的税
25、金。编写一个程序,输入工资金额,输出应收取税金额度,规定分别用if语句和switch语句来实现解答:在if-else结构下,对x的区间划分比较显然,但由于switch语句只能选择整数,结合x的分段区间宽度均为100 0,于是将x除以1000后再强制转换类型为int类型在进入各个case语句进行运算,流程图如下:开始程序如下所示:(if)#include float tax(float x);int main(void)(float x;printf(nPlease input your salary:0);scanf(n%fr,&x);printf(You should pay%f yuan.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 年华 科技大学 计算机 学院 语言 程序设计 实验 报告 源代码
限制150内