1、C语言程序设计课程实验报告2课 程 实 验 报 告课程名称: C语言程序设计 专业班级: 信息安全201302班 学 号: 姓 名: 指导教师: 报告日期: 2014年6月16日 计算机科学与技术学院1 实验概述 C 语言是美国的Dennis Ritchie在1972年设计发明的。它由早期的编程语言BCPL( Basic Combined Programming Language) 发展演变而来。C 语言之所以发展迅速,成为最受欢迎的语言之一,主要因为它具有强大的功能。归纳起来,C 语言具有下列特点:1C语言是“中级语言”它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇
2、编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2C语言是结构式语言所谓结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。3C语言功能齐全C 语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C 语言也具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。4C语言适用范围广C 语言还有一个突出的优点就是
3、适合多种操作系统,如DOS、Windows、UNIX,也适用于多种机型。所以作为计算机科学与技术学院的学生,学好C语言绝对是我们义不容辞的责任。在本学期的学习中,为了更好的消化吸收所学知识,共进行了七次上机实验,将这七次的上机所做实验整合汇编到一起,便写出这册实验报告。本实验报告共包含九章60个实验任务。其中第二至第八章为实验的内容,第一次为熟悉C语言程序的开发环境及表达式的标准输入与输出实验,第二次为流程控制实验,第三次也为流程控制实验,第四次为函数与程序结构实验,第五次为编译预处理实验,第六次为数组实验,第七次为指针实验,结构与联合实验及文件实验。每章又包括实验目的、实验内容和实验小结三部
4、分,实验内容中前半部分为word补充题目,后半部分为实验教材第二章必做题。每个实验内容中都包含实验任务内容,源程序及运行结果,部分实验还有亮点,过程记录,及一些程序的解说。所有程序都尽量配有提示性的语句,在运行时能清楚地知道要输入什么。报告中所有图表都按照标准标有编号,图名和表名,排版也比较整齐,整体看起来比较舒服。总之,上机实验是进一步深刻了解C语言的语法、语义,掌握用C语言进行初步程序设计所需要的方法和技能的一个重要环节。优秀的程序员毫无例外地都是在机器上“摸爬滚打”出来的。C语言创始人Dennis Ritchie是如此,C+的创始人Bjarne Stroustrup也是如此。这些语言大师
5、都是在机器上使用当时流行的计算机语言遇到巨大障碍的情况下,才产生了发明新的计算机语言的灵感和动力。 Dennis Ritchie直到20世纪90年代还在他的360机器上编程。因此,作为C语言的初学者,我很重视实验。这是我编程生涯的开始,觉得对编程很感兴趣,衷心希望我将来能够成为编程高手,成为计算机领域的优秀人才,为祖国的信息安全方面做出我的贡献! 编者著 2014年6月于华中科技大学2 第一次实验2.1 实验目的1.掌握C程序的编辑、链接、和运行方法。2.通过运行简单的C程序,学会在集成开发环境中调试程序的方法。3.熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转
6、换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等等;熟记运算符的优先级和结合型。4.掌握getchar,putchar,scanf和printf函数的用法。5.掌握简单的C程序的编写方法。2.2 实验内容 (一)设计一个程序,在字符模式下,以某个字符拼出“王”汉字图形,显示输出。 【源程序2.1】#includeint main(void) puts(oooooooo); puts( oo ); puts( oo ); puts(oooooooo); puts( oo ); puts( oo ); puts(oooooooo); return 0; 运行结果:在显示屏上以字
7、符o的形式输出“王”,如图2.1所示。 图2.1 程序2.1运行结果 (二)输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。 【源程序2.2】 #include int main(void) float f,c; printf(Input the Fahrenheit:); scanf(%f,&f); c=(f-32)*5/9; printf(The Celsius is %f.,c); return 0; 运行结果如表2.1所示。 表2.1 程序2.2测试数据输入输出理论值-13-25.000000-25.0000000-17.777778-17.777778320.00
8、00000.00000049.99.9444459.944445 过程记录:刚开始时“c=(f-32)*5/9;”这个语句写的是“c=5/9*(f-32);”, 发现结果都是0,原来根据运算顺序最先计算5/9,取整后变为0,故需调整一下顺序。 (三)设计3种算法,完成交换整型两个变量值的程序。 【源程序#include int main(void) int a,b,t;printf(Input two integers:); scanf(%d%d,&a,&b); t=a,a=b,b=t; printf(%d,%d,a,b); return 0; 运行结果如表 表2.2.1 程序输入输出理论值0
9、 -1-1,0-1,0-9 00,-90,-9-10 77,-107,-10 【源程序#includeint main(void) int a,b;printf(Input two integers:); scanf(%d%d,&a,&b); a=a+b; b=a-b; a=a-b; printf(%d,%d,a,b); return 0; 运行结果如表 表2.2.2 程序输入输出理论值8 99,89,89 00,90,9-3 -8-8,-3-8,-3 【源程序#includeint main(void) int a,b;printf(Input two integers:);scanf(%d
10、%d,&a,&b); a=ab; b=ab; a=ab; printf(%d,%d,a,b); return 0;运行结果如表 表2.2.3 程序输入输出理论值0 -7-7,0-7,08 -9-9,8-9,89 99,99,9 本实验中分别用中间变量、算术运算和位运算三种方法实现了交换两个整型变量的值。 (四)设计一个程序,完成如下功能:输出一个三位数,将它反向输出。如输入127,输出721。 【源程序2.4】#includeint main(void) int a,b,c,x; printf(Input three figures please!n); scanf(%d,&x); a=x/1
11、00; b=(x-a*100)/10; c=x%10; printf(%d%d%d,c,b,a); return 0;运行结果如表2.3所示 表2.3 程序2.4的测试数据输入输出理论值127721721999999999979979979 (五)设计2种完成计算MAXx,y,z的程序。 【源程序#includeint main(void) float a,b,c,max;printf(Input three integers:); scanf(%f%f%f,&a,&b,&c); if(a=b&a=c)max=a; if(b=a&b=c)max=b; if(c=a&c=b)max=c; pri
12、ntf(max=%f,max); return 0;运行结果如表 表2.4.1 程序输入输出理论值-9 -1 -5-1.000000-1.0000009 0 -79.0000009.000000-9 9 89.0000009.000000 【源程序#includeint main(void) float a,b,c,max;printf(Input three integers:); scanf(%f%f%f,&a,&b,&c); max=ab?(ac?a:c):(bc?b:c); printf(max=%f,max); return 0;运行结果如表 表2.4.2 程序输入输出理论值-9.9
13、 -6 -563846-6.000000-6.0000007 9.0 88.988.90000088.900000-9 -8 -7-7.000000-7.000000 本实验中分别用if语句和条件运算符实现了求三个数中最大值。 (六)设计一个程序,完成计算3个数的居中数。 【源程序2.6】#includeint main(void) float a,b,c,m;printf(Input three integers:); scanf(%f%f%f,&a,&b,&c); m=ab?(ac)?(bc?b:c):a):(ac?a:(bc?c:b); printf(middle=%f,m); retu
14、rn 0;运行结果如表2.5所示 表2.5 程序2.6的测试数据输入输出理论值1 2 32.0000002.000000-8 0 -7-7.000000-7.0000000 9 9.99.0000009.000000 (七)设计计算一元二次方程的根的程序。 【源程序2.7】#include#includeint main(void) float a,b,c; double x,y,m; printf(Input a,b,c please!n); scanf(%f%f%f,&a,&b,&c); m=b*b-4*a*c; if(a!=0) if(m=0) x=(sqrt(m)-b)/2/a; y=
15、(-sqrt(m)-b)/2/a; printf(x=%lf,y=%lfn,x,y); else printf(No answer!); else printf(The equation isnt quadratic.n); return 0;运行结果如表2.6所示 表2.6 程序2.7的测试数据输入输出理论值0 5 6The equation isnt quadratic.The equation isnt quadratic.1 3 2x=-1.000000,y=-2.000000x=-1.000000,y=-2.0000002 5 6No answer!No answer!1 2 1x=
16、-1.000000,y=-1.000000x=-1.000000,y=-1.000000 亮点:能够判断方程是否为二次方程,也能判断有无实根。(八)根据任意三角形的面积公式(海伦公式):S = p (p-a)( p-b)( p-c ), 其中,p=(a+b+c)/2, ,设计一个程序计算任意三角形的面积。 【源程序2.8】#include#includeint main(void) float a,b,c,s,t; double area; printf(Input three edge of the trianglen); scanf(%f%f%f,&a,&b,&c); if(a+bc&a-
17、bc&b-ac) s=(a+b+c)/2; t=s*(s-a)*(s-b)*(s-c); area=sqrt(t); printf(area=%fn,area); else printf(The triangle isnt legal!n); return 0;运行结果如表2.7所示 表2.7 程序2.8的测试数据输入输出理论值3 4 56.0000006.0000001 2 6The triangle isnt legal!The triangle isnt legal!7 8 926.83281626.832816亮点:能够判断输入的三角形是不是合法的。 (九)编写一个程序,输入字符c。如
18、果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。 【源程序2.9】#includeint main(void) char c; printf(Input a letter:); c=getchar(); c=(c=A&c=Z)?(c+a-A):c; putchar(c); return 0;运行结果:输入a时输出a,输入A时输出a。 (十)编写一个程序,输入无符号短整数x,m,n(0m15,1n16-m),取出x从第m位开始向左的n位(m从右至左编号为015),并使其向左端(第15位)靠齐。【源程序2.10】#includeint main(void) unsigned s
19、hort x,m,n,y; printf(Input x,m and n please!n); scanf(%hu%hu%hu,&x,&m,&n); if (m=0&m=1&n=16-m) y=(x16-m-n)&(0xffff16-n); printf(0x%x,y); else printf(error); return 0;运行结果如表2.8所示 表2.8 程序2.10的测试数据 输入 输出 理论值xmn255340xf0000xf00015236460xe0000xe0004546298errorerror亮点:能够判断m,n输入是否合法,若不合法输出提示信息“error”。 (十一)
20、IP地址通常是4个用句点分隔得小整数(即点分十进制),如,以及其存储的形式的形式是读入一个互联网IP地址对其译码,然后用常见的句点分隔的4部分的形式输出。【源程序2.11】#includeint main(void) unsigned long x,a,b,c,d; scanf(%d,&x); d=x&0xff; c=(x&0xff00)8; b=(x&0xff0000)16; a=(x&0xff000000)24; printf(%lu.%lu.%lu.%lun,d,c,b,a); return 0; 运行结果:输入1,输出2.3 实验小结 第一次编程,感觉是挺新奇的,不过毕竟是第一次实践,
21、总是有这样或那样的问题,比如总是忘记在scanf语句中加“&”表示变量的内存地址,时不时少个“;”或“”,这种小毛病还真要上机才能改过来。算法方面也总是有这样那样的问题,不过经过自己的检查和与同学的讨论总算是都解决了,最后看着自己编的程序一个个都能运行时那种欣喜的感觉,我想就像母亲看到孩子成才了一样吧。这是我编程生涯的开始,希望以后能越做越好!3 第二次实验3.1 实验目的1.掌握复合语句、if语句、switch语句的使用;2.熟练运用for、while、do-while语句来编写程序;3.掌握重复循环技术。3.2 实验内容(一)设计一个计算个人所得税的程序。【源程序3.1】#includei
22、nt main(void) double x,y; do printf(Input the amount of your income:); scanf(%lf,&x); y=x-3500; while(y-3500); if (y0) y=0; else if (y1500) y=y*0.03; else if (y4500) y=y*0.1-105; else if (y9000) y=y*0.2-555; else if (y35000) y=y*0.25-1005; else if (y55000) y=y*0.3-2755; else if (y80000) y=y*0.35-550
23、5; else y=y*0.45-13505; printf(The individual income tax is %lf,y); return 0; 运行结果如表3.1所示。 表3.1 程序3.1测试数据输入实际输出理论输出-4000Input the amount of your income:Input the amount of your income:2000The individual income tax is 0.000000The individual income tax is 0.0000004000The individual income tax is 15.00
24、0000The individual income tax is 15.0000006000The individual income tax is 145.0000000The individual income tax is 145.00000009999The individual income tax is 744.800000The individual income tax is 744.80000020000The individual income tax is 3120.000000The individual income tax is 3120.00000046578Th
25、e individual income tax is 10168.400000The individual income tax is 10168.40000079868.8The individual income tax is 21224.080000The individual income tax is 21224.080000100000The individual income tax is 29920.000000The individual income tax is 29920.000000亮点:如果输入收入为负值,则会要求再次输入。(二)计算两个自然数的最大公约数和最小公倍
26、数。【源程序3.2】#includeint main(void) int m,n,i,j,x,y,a,b; printf(Input two natural numbers:); scanf(%d%d,&m,&n); if(m=0|nn)?n:m; j=(mn)?m:n; for(;x|y;-i) x=m%i; y=n%i; for(;a|b;+j) a=j%m; b=j%n; printf(%d and %ds GCD is %d and LCM is %dn,m,n,i+1,j-1); return 0; 运行结果如表3.2所示。 表3.2 程序3.2测试数据输入实际输出理论输出-3 2Input error!Input error!0 3Input error!Input error!100 60100 and 60s GCD is 20 and LCM is 300100 and 60s GCD is 20 and LCM is 3003.5 7Input error!Input error! 亮点:能够判断输入的是否是自然数。(三)输入一个数n(2),判定n是否为素数。【源程序3.3】#includein
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1