《华中科技大学c语言实验报告.docx》由会员分享,可在线阅读,更多相关《华中科技大学c语言实验报告.docx(203页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、译中科技大孚课程实验报告课程名称:C语言程序设计专业班级:计算机科学与技术1234班学号:U123412345姓名:O O O指导教师:O。O报告日期:OOOO年。月O日计算机科学与技术学院目录实验1表达式和标准输入与输出实验11.1 实验目的11.2 实验内容及要求11.3 自设题121.4 实验小结14实验2流程控制实验152.1 实验目的152.2 实验内容及要求152.3 自设题292.4 实验小结34实验3函数与程序结构实验353.1 实验目的353.2 实验内容及要求353.3 自设题493.4 实验小结53实验4编译预处理实验544.1 实验目的544.2 实验内容及要求544.
2、3 自设题674.4 实验小结69实验5数组实验705.1 实验目的705.2 实验内容及要求705.3 自设题965.4 实验小结97实验6指针实验986.1 实验目的986.2 实验内容及要求986.3 自设题1236.4 实验小结127实验7结构与联合实验1287.1 实验目的1287.2 实验内容及要求1287.3 自设题1717.4 实验小结177实验8文件实验1788.1 实验目的1788.2 实验内容及要求1788.3 自设题1888.4 实验小结190参考文献191实验1表达式和标准输入与输出实验1.1实验目的(1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运
3、算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。(2)掌握 getchar, putchar, scanf 和 printf 函数的用法。(3)掌握简单C程序(顺序结构程序)的编写方法。(4)掌握书写实验报告的格式与基本要求。1.2实验内容及要求1.2.1 源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度C后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例
4、子程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。1 #include2 #define PI 3.14159;3 intmain( void)45 int f;6 short p, k ;7 double c , r, s ;8 /* for task 1*/9 printf(Input Fahrenheit:);10 scanfT%d,f);11 c =5/9*(f-32);12 print“n %d (F)=%.2f (C)nn ”, f, c );13/* for task2*/14 printfpinput the radius r:
5、n);15 scanf(n%ff,&r);16 s = PI * r * r;17 printf(MnThe acreage is %.2fnnM,&s);18 /* for task 3*/19 printfpinput hex int k, p :);20 scanf(n%x %x”,&k,&p );21 newint =(p&0xff00)|(k&0xfTO0)8;22 printf(Mnew int =%xnn,newint);23 return 0;24解答:(1)错误修改:1)第2行的符号常量定义后不能有分号,正确形式为:#define PI 3.141592)第3行的intmai
6、n( void )返回值类型和函数名应分开,正确形式为:int main( void )3)第10行的scanf(d”, f);在输入内容时指向地址应使用&,正确形式为:scanf(d”,&f)4)第11行的c =5/9*(f-32);由于f是int型,在运算时右侧表达式会被截去小数部分,正确形式为:c =5.0/9*(&32);5)第12行的 printf(41n %d (F)=%.2f(C)nn ”, f, c );由于 c 被定义为双精度浮点数应使用占位符If,正确形式为:prints n %d (F)=%.21f(C)nn ”, f, c );6)第15行的scanf(%f,&r);由
7、于r被定义为双精度浮点数应使用占位符If,正确形式为: scanfi%lf,&r);7)第17行的 printsnThe acreage is %.2fnn,&s);由于 s 被定义为双精度浮点数应使用占位符If,正确形式为:printflnThe acreage is %.21fnn,&s);8)第17行的 printf(nThe acreage is %.2fnn,&s);在 printf 中不涉及对 s 的修改,应不用&,正确形式为:printsnThe acreage is %.21fnn,s);9)第20行的scanf(%x %x,&k,&p );由于k,p被定义为短整数,占位符应使
8、用hx,正确形式为:scanff%hx %hx,&k,&p );10)第21行的 newint =(p&0xfR)0)|(k&0xflro0)8中使用了一个未声明的变量newint,应在使用前声明,正确形式为:(6) short p, k,newint;(注意,改动针对第六行)11)第21行的 newint =(p&0xfTO0)|(k&0xffD0)8忽略了运算顺序,应恰当使用括号改变运算顺序,正确形式为:newint =(p&0xflTO0)|(k&0xflTO0)8);12)第21行的newint =(p&0xfTO0)|(k&0xflTO0)8位运算逻辑有误,应恰当改变运算方式,正确形
9、式为:newint =(p&0x1TO0)|(k&0x1TO0)8);13)第22行的 printffnew int =%xnn,newint);由于 newint 被定义为短整数,占位符应使用hx,正确形式为:printf(new int =%hxnn,newint);(2)错误修改后运行结果:见图1-1(查阅资料知1华氏度确为-17.22摄氏度;半径为2的圆面积在保留2位小数且n取3.14159时面积确为12.57;将a2cd的高字节作为结果的低字节,a3a3的高字节作为结果的高字节,拼成一个新的整数,这样的确得到a3a2,其中采用16进制是为了表达与验证方便)I nput Pahrenh
10、e it :11-17.22input the radius i*:2The acreaye is 12.57input hex int k. p :a2cd a3a3 new int - a3a2图1-1源程序改错的运行结果1.2.2源程序修改替换下面的程序利用常用的中间变量法实现两数交换,请改用不用第三个变量的交换法实现。#includeint main()int a, b, t;print/Input two integers:);scanfT%d %d,&a,&b);t=a, a=b, b=t;prinfCna=%d,b=%d”,a,b);return 0;解答:由于只能使用两个变量,
11、我们需要利用一个变量来保存两个数的一些共同特征,而这些特征要能通过一定的运算返回初始的数,而若把两数之和存放于第一个数中,通过依次均减去第二个数,可在恢复原来的数的同时将它们交换顺序。替换后的程序如下所示:#includeint main()(int a, b;printffTnput two integers :);scanfs(n%d %dn,&a,&b);a = a 4- b;b = a - b;a = a - b;printf(na =%d, b =%d, a, b);return 0;运行结果见图1-2(1,2交换位置后确为2,1)Input tMo integers :12a -2
12、,!-1图1-2源程序修改替换题的运行结果1.2.3程序设计(1)编写一个程序,输入字符C,如果C是大写字母,则将C转换成对应的小写,否则C的值不变,最后输出C。解答:首先,无论输入什么字符,这个字符均具有相应的ASCII码,所以我们无需检测输入是否合理,而在接受这个输入之后,我们需要根据它的ASCII 码来判断它是否为大写字母,如果它是大写字母,那么就把它变为小写字母(减去A与a的ASCH码值之差即可实现这个要求),而若该字符不满足该要求,直接原样输出即可,算法见流程图1-1,其余细节见程序注释,程序如下。流程图1-1程序设计题1的算法#include int main()int c;pri
13、ntf(输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:);c=getchar ();通过getchar()来获得字符对应的ASCII码if(c=A)判断是否为大写字母c=c-(A-a);大写字母变小写printf (处理结果是:%c,c);return 0;)测试:由于本题不涉及无效输入,所以我们只需分析程序的几种运行情况,其中可分为对大写字母进行转化为相对应的小写字符;而对于小写字母而言,程序不应该将其进行任何转化;此外,对于非字母输入我们也不应该转化,具体测试数据见表1-1,测试结果见图1-31-5。表1-1编程题1的测试数据测试用例程序输入理论结果运行结果用例1Eee
14、用例2eee用例3111对应测试测试用例1的运行结果如图1-3所示输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:E 见或结果是:e图1-3编程题1的测试用例一的运行结果对应测试测试用例2的运行结果如图14所示。盘翥矗如既是大写字母则将垂挨成对应的小弓否则原样输出一图1-4编程题1的测试用例二的运行结果对应测试测试用例3的运行结果如图1-5所示。输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:1七里结果是:1图1-5编程题1的测试用例三的运行结果说明上述的运行结果与理论分析吻合,验证了程序的正确性。(2)编写一个程序,输入无符号短整数x, m, n (0m1
15、5,1 n16-m),取出x从第m位开始向左的n位(m从右至左编号为015),并使其向左端(第15位)靠齐。解答:由于题目中明确要求输入无符号短整数,且目前我们缺少检查输入是否为整数的手段,所以本题并不检查输入的x是否合理;不过以我们目前的知识,我们可以根据题目要求对输入的m,n是否合理进行检查(仅检查它们是否在合理范围内,默认其为整数)。而在确认输入合理之后,我们着手开始对问题进行处理,由于这是一个涉及到计算机内部数据的二进制运算的问题,相应地,我们在解决这个问题时也要利用C语言提供的位运算来完成相应的操作,首先,由于我们只需要x从第m位开始向左的n位,所以我们需要去掉x的其余部分(第 m位
16、之前的内容),同时从第m位开始向左的n位之后的内容也不再被需要,所以我们也将其去除。至于这去除的实现,为防止数据的丢失,我们不应直接对x 进行操作,而应对我们之后会用到的逻辑尺进行操作,而有关逻辑尺的操作,我们可先使用十六进制数对其赋值,使其全为KOxffff,这样较将0取反更方便),再进行相应的左移与右移(注意在移动时要分开进行,否则会由于编译器对运算的简化使部分该被清0的位保留为1),而后,我们再用我们取得的逻辑尺与x 进行按位与运算,即可取出x中相应的二进制位,之后,再根据题目的要求,把 x移动到指定的位置,最后,由于题目中使用的数字均为十进制数,所以我们的输入与输出均采用十进制数进行。
17、其余细节见程序注释,算法见流程图1-2,程序如下。#include int main()unsigned short int x, m, n, i;printf(输入 x (10进制)、m (0-15)和 n (116-m):”);scanf( n%hu%hu%huH,&x,&m,&n);if(m=0&m=1&n=l 6-m)判断输入是否合理i = Oxffff;准备位运算所需逻辑尺i= m;/确定变换起始位置i =16- n;确定变换作用长度i =16- m - n;进入变换位置/*注意在移动时要分开进行,否则会由于编译器对运算的简化使部分该被清。的位保留为1*/x &= i;x =16-
18、m - n;左移printf(经过变换得到:%hu, x);else printf(输入错误,请检查您的输入)提示输入不合理return 0;流程图1-2程序设计题2的算法测试:由于本题中涉及了对错误输入的排除,所以我们需要对程序能否正确排除这些错误的输入进行测试,同时,我们也需要对程序的基本功能进行检查,不过由于本题涉及到位运算,这使得对结果的验证较为困难,我们需要合理的设计测试数据并将其转化二进制数以供验证,再将所得的二进制数转为十进制数并程序输出的十进制数进行比对,以验证程序的正确性(即使采用十六进制输入输出也不够结果也不是十分显然,故不采用),测试数据见表1-2,测试结果见图161-8
19、。表1-2编程题2的测试数据或试厚孑物入3论逑累运行逑MSWXmNumi0000000000011001(25)3,H-MigMllOOOeOOOOOO 0000 K49152的1521101010110000011(54659)161勒入槽次:m(aeTs3?检资脸入用的31101010110000011 C 54659)135输入Cn(ft3)位交帔入对应测试测试用例1的运行结果如图1-6所示输入x (10进制)、m 15)和n (16-e):2532遂过变换得至49152图1-6编程题2的测试用例一的运行结果对应测试测试用例2的运行结果如图1-7所示。输入X(10进制)、m(015)和n
20、 (116-m):54659161输入错误,请密查您的输入图1-7编程题2的测试用例二的运行结果对应测试测试用例3的运行结果如图1-8所示。输入x (1。进制)、m(015)和n (116-m):54659135强入错误,请愈查您的输入图1-8编程题2的测试用例三的运行结果说明上述的运行结果与理论分析吻合,验证了程序的正确性。(3)IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102o 这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网1P地址,对其译码,然后用常见的句点分隔的4部分的形式输出。例如,整形676879571二进制表示就是:
21、00101000010110000101110011010011,按照8位一组可表示为:408892211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。解答:首先,这依然是一个涉及到位运算的题目,所以我们依然会用到按位操作与逻辑尺,而逻辑尺的制备与使用均与我们在程序设计题2中所使用的方法大体相同,例如我们使用十六进制数制取逻辑尺,同时尽管从原理上说,我们只需要一个逻辑尺(在每次使用后对其进行移动即可),但这样写成的程序不够明 To而在取得了逻辑尺之后,我们再进行按位与运算,以达到取出各二进制位的效果。不过,本题与程序设计题2的不同之处在于,我们需把取出的
22、数进行移动的位数是固定的,但需要注意的时,正如题目中所提到的由于CPU处理数据的差异,我们需要将我们取出的数据进行重新排序,而且,由于我们输出的是IP 地址,所以我们需要在输出中添加相应的句点。此外,尽管本题中可能出现非数字输入,但由于我们目前没有有效的手段进行检测,所以我们默认所有的输入都是合理的。其余细节见程序注释,算法见流程图1-3,程序如下。输入无符e长整形数中流程图1-3程序设计题3的算法#include int main()iounsigned long int ip,m 1,m2,m3,m4,p 1,p2,p3,p4;printf(输入长整数形式的ip地址:);scanf(%lu
23、,&ip);ml = OxflTOOOOOO;各分段逻辑尺m2= OxOOffDOOO;/各分段逻辑尺m3= OxOOOOfTOO;/各分段逻辑尺m4= OxOOOOOOff;各分段逻辑尺pl =(ip&ml)24;/取出各部分二进制数p2=(ip&m2)16;取出各部分二进制数p3=(ip&m3)8;/取出各部分二进制数p4=(ip&m4);取出各部分二进制数printf(这个 ip 地址常规形式为:lu.%lu.%lu.%lu, p4,p3,p2,pl);/按要求格式输出return 0;)测试:由于本题默认所有的输入都是合理的,所以我们不对输入的数据是否位整数进行检查(尽管这是必要的,我
24、们会在以后的实验提到如何实现)。同时,我们注意到本题的可能执行情况在正常情况下只有一种(但为了使验证结果具有说服力,我们依然需要数组测试数据),且本题的测试数据相当庞大(特别是将其转化为二进制后),所以我们需要借助计算机将其转化为二进制数并进行相应的人工转化并验证。此外,本题的验证还有一个关键之处,即IP地址的输出顺序是否符合要求,具体测试数据见表1-3,运行结果见图1-91-11。表1-3编程题3的测试数据测试用例程序输入理论结果运行结果长整形形式二进制(十进制)用例1456456130000001010111000(184)01111111(127)00101101(45)45.127.1
25、84.245.127.184.2用例212345678900000111(7)01011011(91)11001101(205)00010101(21)21.205.91.721.205.91.7用例378965432100101111(47)00010001(17)00101011(43)00110001(49)49.43.17.4749.43.17.47对应测试测试用例1的运行结果如图1-9所示输入长整数形式的iP地址:45645613这个ip姬址常规形式为:45.127.184.2图1-9编程题3的测试用例一的运行结果对应测试测试用例2的运行结果如图1-10所示。黔球错勰拶巴;梵宽7图1
26、-10编程题3的测试用例二的运行结果对应测试测试用例3的运行结果如图1-11所示。麟球赛勰拜址鳖舐7图1-11编程题3的测试用例三的运行结果说明上述的运行结果与理论分析吻合,验证了程序的正确性。1.3自设题问题:仿照程序设计题3,设计一段程序,当我们输入一段IP地址(常规形式)时,输出其长整数形式的IP地址。解答:本题中由于需要输入IP地址,而IP地址是由句点分隔的,所以我们需要对格式化输入函数进行相应设置,使之能正常输入IP地址(否则会造成输入域混乱,导致不可预知的错误),而当我们按格式输入了 IP地址之后,我们只需要将程序设计题3的程序中的处理顺序逆转即可(由于我们可以先进行按位与运算,再
27、进行移动,所以我们可以只使用一个逻辑尺;此外,关于CPU处理数据顺序的差异,可以在输入时即交换顺序,即用户按实际顺序输入数据,而程序按CPU处理顺序接受数据)。算法见流程图1-4,其余细节见程序注释,程序如下。#includeint main()unsigned long ip4, ip3, ip2, ipl, ip;会发生移动,故其最大值并非128,不采用char型ip =0;使用前需按需初始化为0printf(请输入常规形式的1P地址:);scanfs(%lu.%lu.%lu.%lu,&ip4,&ip3,&ip2,&ipl);再输入时即按 CPU顺序交换了存储顺序unsigned long
28、 m;m = OxOOOOOOfF;在移动之前,仅有前8位需取出由于已经发生移动,故此处无需交换顺序ip +=(ipl&m)24;ip +=(ip2&m)16;ip +=(ip3&m)8;ip +=(ip4&m);printf(该IP地址的长整数形式为:%lun, ip); return 0;流程图1-4自设题的算法测试:本题的测试只需将程序设计题中的测试数据输入输出逆转即可(理论分析由于与程序设计题3完全相同,故略去),测试数据见表1-4,程序运行结果见图1-12,程序运行结果与理论相符,验证了程序的正确性。表1-3编程题3的测试数据测试用例程序输入理论结果运行结果用例145.127.184
29、.24564561345.127.184.2用例221.205.91.712345678921.205.91.7用例349.43.17.4778965432149.43.17.47理论分析由于与程序设计题3完全相同,故略去I测试用例1请输入常规形式的IP地址:45.127.184.2该IP地址的长整数形式为:45645613测试用例2请输入常规形式的IP地址:21.205.91.7该IP地址的长整数形式为:123456789测试用例3请输入常规形式的IP地址:49.43.17.47该IP地址的长整数形式为:789654321图1-12自设题程序的运行结果1.4实验小结这是我第一次撰写的实验报告
30、,自然,会有很多的不完善之处,由于目前的知识有限,诸如流程控制,数组,编译预处理等编程技术都无法使用,而这些技术的使用无疑会给本次实验程序的编制带来极大的方便。诚然,不使用这些手段进行编程的能力也是十分重要的,而本次实验恰好锻炼了我们的此种能力,使我们使用简单而基本的运算与流程,去实现一些稍复杂的程序。而即使是这样较为基本的编程实践中,我也发现了很多自己平时并不注意的问题。比如在最开始我的部分返回值类型不为void的main函数却没有返回值,这使得我的程序在逻辑上并不完整(尽管运行结果看上去是对的)。而除了在编程上的体会之外,我对实验报告的书写也略有感触。这是我第一次书写实验报告,在书写实验报
31、告的过程中,我遇到了很多困难,比如流程图的绘制和图与表格的命名,但在指导老师与助教热心帮助下,我逐一克服了这些困难,并在解决这些困难的同时使自己的能力也得到了相应的提高。实验2流程控制实验2.1实验目的(1)掌握if-else, do-while, switch-case等流程控制语句之用法。(2)能正确理解各流程控制语句所包含的逻辑关系。(3)能正确理解各流程控制语句之间不同,并用这些不同优化自己的程序。(4)能用流程控制语句编写简单的C语言程序。2.2实验内容及要求2.2.1源程序改错下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改
32、,使之能够正确完成指定任务。例如,8!=403201 #include 2 int main(void)3 (4 int i,n,s=l;5 printfnPlease enter n:n);6 scanfifM%dn, n);7 fdr(i=l,i=n,i-H-)8 s=s*i;9 printff%d!=%dn,n,s);10 return 0;II解答:(1)错误修改:1), scanf在输入时应指向单元地址而非单元名称,正确形式为:scanf(%d,&n);2), fbr语句表达式1,2,3之间应用;分隔,正确形式为:(2)错误修改后运行结果:见图2-1(8的阶乘确为40320)Plea
33、se enter n:8 Bt -40320图2-1修改后的运行结果2.2.2源程序修改替换(1)修改第1题,分别用while和do-while语句替换for语句。解答:在使用while语句时,其与for语句的主要差异在于没有一个专门的语句为i赋予初值,所以需要在进入循环之前,为i赋予初值1。而在其他的地方,则与经ibr语句的处理基本一致,替换后的程序如下所示:#include int main(void)(int i=l,n,s=l;/相较于for语句的关键printf(Please enter n:);scanfi(%d,&n);while(i=n)(s=s*i;iH;)printf(%d
34、!=%d,n,s);return 0;运行结果见图2-2(8的阶乘确为40320)Please enter n:77!5040图2-2 while结构下的运行结果在使用do-while语句时,其与while语句的差异特别体现在无论n的值为何值,其都会进行一次循环,但值得注意的是,这一次额外的循环(发生于输入 n=0时)在i的初值为1时,并不会改变s的值,从而并不需要进行额外的处理,调换循环体与条件的位置即可,替换后的程序如下所示:#include int main(void)int i=l,n,s=l;printf(Please enter n:);scanfi(%d,&n);dos=s*i;
35、i+;while(i=n);交换条件与循环体的位置 printf(%d!=%d,n,s);return 0;)运行结果见图2-3(6的阶乘确为720)Please enter n:66?=720图23 do-while结构的运行结果(2)修改第1题,要求输入改为“整数s”,输出改为“满足n!s的最小整数 nwo例如,输入整数为40310,输出结果为n=8。解答:这个问题,从本质上来说,是要找到一个数,使它的阶乘的值大于等于所输入的n的值,且要求这个数的值最小。阶乘的实现,可借助之前编写的程序,并将它作为一个子函数进行调用,使主函数更加简明,数的寻找可借助简明的while循环来实现,程序如下所示
36、,#include int f (int p)int d=l;int i;fbr(i=l;is)比较n+;s=f(n);计算阶乘printf(n =%dn,n);return 0;运行结果见图2-4(40320=8!403127!=5040)Please enter s:40312 m =8图2-4第2题程序的运行结果2.2.3程序设计(1)假设工资税金按以下方法计算:x 1000元,不收取税金;1000 Wx 2000,收取5%的税金;20000x 3000,收取10%的税金;30000x 4000,收取15%的税金;4000 x 5000,收取25%的税金。编写一个程序,输入工资金额,输出
37、应收取税金额度,要求分别用if语句和switch语句来实现解答:首先对输入的x进行判断,判断其是否是一个合理的工资数目,如果不合理(比如说是负数),就输出提示输入不合理的内容。而如果其输入合理,则通过对x值的判断,决定其对应的税收方式,而后进行计算。需要注意的是,在if-else结构下,对x的区间划分比较显然,但由于switch 语句只能选择整数,结合x的分段区间宽度均为1000,于是将x除以1000后再强制转换类型为int在进入各case进行运算,同样重要的是,注意到switch语句的特点,我们可以巧妙的利用其特性,简化程序语句。其余细节见程序注释,算法见流程图2-1与2-2,程序如下。#i
38、nclude int main(void)double x, tax;printf(请输入您的工资金额:, scanf_s(%lf,&x);if (x 0) printf(您输入了错误的工资,请检查您的输入H);检查输入是否合理else(if(x1000) tax =0;else if(x 2000) tax =(x -1000)*0.05;else if(x 3000) tax =(x -2000)*0.10+1000*0.05;else if(x 4000) tax =(x -3000)*0.15+1000*(0.10+0.05);else if(x 5000) tax =(x -4000
39、)*0.20+1000*(0.05+0.10+0.15);else tax =(x -5000)*0.25+1000*(0.05+0.10+0.15+0.20);printf(IF ELSE 方式)您须交税:%.21f 元n, tax);tax =0;为利用switch语句的特点,会进行累加运算,此处需将tax清零switch (int)x)/1000)/对switch仅能选择整数的处理(default: tax +=(x -5000)*0.25; x =5000;注意到 switch 的特点case 4: tax +=(x -4000)*0.20; x =4000;case 3: tax +
40、=(x -3000)*0.15; x =3000;case 2: tax +=(x -2000)*0.10; x =2000;case 1: tax +=(x -1000)*0.05; x =1000;此处的 x=1000并不是必要的case 0:;printf(SWITCH 方式)您须交税:%.21f 元5, tax);)return 0;流程图2-1见下一页。流程图2-1程序设计题1的算法(if-else结构)流程图2-2见下一页。流程图2-2程序设计题1的算法(switch结构)测试:测试数据:见表2-1,在选取测试数据时,我们注意到,首先应检测程序能否正确判断输入的正确性,故我们输入-
41、1(负数)与.(非数字)。其次,我们在各数据段中选取具有代表性且易于人工验算的数据,因此,我们在此处在各工资段中选取了500,1500,2500,3500,4500,5500.同时,选取边界数据0,1000,2000,3000,4000,防止程序无法正常处理边界值,图2-5的运行结果说明结果与理论分析吻合,验证了程序的正确性。表2-1编程题1的测试数据测试用例1i疗输入您的1:保金额:1错识的I:俗.清依:令您的输入道输入您的I.货金额:+您检入rtrt设的 :资.谪检化您的蛤入 测试川例3晴瑜入您的I:洗金制I: O(IF ELSE方式)您须交税:0. 00元(SWITCH方式)您须交币兑:
42、0. D。元测试川例4i卉蛤入您的工资金额:500(IF ELSE 方式)您须交: 0.00元(SWITCH 方式)您须交税:0.00元测I试用例5入您的工资金额:1000(IF ELSE方式)您须交税:0.00元(SWITCH方式)您须交税:0.00元测试用例6储检入您的I:资金额:1500(IF ELSE方式)您须交税:25. 00元(SWITCH方式)您须交税:25. 00元测试川例7i.i除入您的工资金额:2000(IF ELSE 方式)您须交税:50. 00元(SWITCH方式)您须交税:50. 00元测试用例8i行输入您的工资金额:2500(IF ELSE 方式)您须交税:100.
43、 00元(SWITCH 方式)色;须爻税 :106 00元测试用例9疗输入您的1:资金额:3C00:IF ELSE方式)您须交税:150. 00元(SWITCH方式)您须交税:150. 00元测试用例10疗输入您的1:资金额:3500:IF ELSE方式)您须交税:225. 00元:SWITCH方式)您须交税:225. 00元测试用例11次输入您的工费金额:4C00:IF ELSE方式)您须交税:300. 00元:SWITCH方式)您须交税:300. 00元测试用例12青输入您的工资金额:4500:IF ELSE方式;)您须交税:400. 00元:SWITCH方式)您须交税:400. 00元测试用例13青输入您的工资金额:5C00:IF ELSE方式)您须交税:500. 00元:SWITCH方式)您须交税:500. 00元则试用例14音输入您的工资金额:5500:IF ELSE方式)您须交税:625. 00元 :SWITCH方式)你须学税:625.0071-测试用例.程序输入.理论若果运行结果用例1.提示幻误.提示错误.用例2.4-提示命误.提示错误.用例3.0.00元.0.00元.照例4.5co0.00元.0.00元.用例5.10000.00元.0.007C用例6.150025.0(元25.00元.H例7.20005
限制150内