《C语言实验指导书》.doc

上传人:飞****2 文档编号:53063004 上传时间:2022-10-24 格式:DOC 页数:36 大小:183KB
返回 下载 相关 举报
《C语言实验指导书》.doc_第1页
第1页 / 共36页
《C语言实验指导书》.doc_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《《C语言实验指导书》.doc》由会员分享,可在线阅读,更多相关《《C语言实验指导书》.doc(36页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计实验指导书(修订1)计算机科学系2007年3 月 1 日目 录实验1 运行简单的C程序2实验2 练习使用基本数据类型和算术运算符6实验3 使用输入、输出函数7实验4 选择结构程序设计10实验5 分支语句的使用-模拟ATM取款机界面13实验6 循环语句的使用猜数字游戏14实验7 一维数组的应用15实验8 二维数组的应用18实验9 建立和使用函数20实验10 函数参数的传递22实验11 嵌套与递归调用的实现24实验12 练习多文件程序的编译和运行25实验13 结构体和共用体27实验14 文件29实验1 运行简单的C程序一 实训目的:1. 熟悉TC运行环境2. 练习简单C程序的编写3.

2、 熟练掌握C程序的上机运行步骤二实训内容:1. 实验要求:编程求37+29的值,熟悉TC运行环境2. 分析与设计: 编写一个main()函数,将数据37和29分别用变量保存,然后用另一个变量存放两个变量的和,最后将和变量的值输出。 3. 源代码:有下面的程序,目的是想计算两个整数的和。:main()int a,b;sum;a=37;b=29;sum=a+bprintf(“sum=%d”,s);调试:、静态地检查上述程序,改正程序中的错误。、在编辑状态下照原样键入上述程序。、编译并运行上述程序,记下所给出的出错信息。、按照事先静态检查后所改正的情况,进行纠错。、再编译执行纠错后的程序。如还有错误

3、,再编辑改正,直到不出现语法错误为止。6、标识符和程序的逻辑错误。修改上面的程序,观察运行结果: 将程序中的表达式“a+b”的“a”改为“A”,然后运行程序。 将程序中的表达式“a+b”修改为“a-b”,然后运行程序。第一项内容用于验证C语言中标识符的特性,当用“A”取代“a”后,程序将不能运行,说明作为标识符“A”和“a”是不等价的。请读者自己进行类似的替换,然后察看程序的运行结果。如,将程序中的“printf”改为“PRINTF”,然后运行程序看结果。第二项实验内容说明了程序的逻辑错误情况。若把“a+b”误写为“a-b”,程序会顺利编译运行,但显然不是加法运算的结果。附Turbo C 2.

4、0集成环境的使用:在主教材的第1章,我们介绍了使用TC2.0上机实现一个C语言程序的一般步骤:编辑-编译-连接-运行。按照所述步骤,操作如下: 启动TC 2.0。 使用“FileNew”命令或直接使用“Edit”命令,使TC 2.0进入编辑状态,录入编辑上面的源程序。 源程序录入完毕后,使用“CompleCompile to OBJ”对源程序进行编译,如果源程序存在语法错误,这时编译系统会把程序中的错误指示出来。发现错误后,需要立即修改源程序,然后重新编译。编译 编译无误后,使用“CompleLink EXE file”连接目标代码,生成可执行文件,这个文件将由运行命令“Run”运行。上面的、

5、两个步骤,也可以使用“CompleBuild all”或“F9”功能键一步完成。连接目标代码 连接完成后,使用“Run”命令,或者使用“Ctrl+F9”组合键运行程序。运行最后程序运行过程瞬间结束,要察看程序运行结果,需要切换到运行屏幕,用组合健“Alt+F5”实现。按Alt+F5后将看到屏幕显示如下结果:按任意键,屏幕返回程序状态。小技巧:对一个未经编译和连接的源程序,TC2.0也可以直接运行它,因此,运行一个C语言程序时,编译和连接的操作步骤可以省略,即编辑好一个源程序后,直接使用Run命令运行它。此时,并非编译、连接过程不存在了,而是“Run”命令运行程序时,因找不到当前程序的可执行文件

6、,而自动启动编译命令和连接命令。只有当编译、连接正常进行后,程序才会被运行。因此,上面的过程可以简化为两个操作步骤: 启动TC2.0,录入编辑源程序。 按“Ctrl+F9”组合键运行程序。特别提示: 保存源程序是一个重要的操作环节。在编辑源程序的过程中或源程序编辑完成后,及时保存源程序是十分必要的,但初学者往往忽视这一环节。操作步骤如下: 按“F2”功能键,出现图1-1所示屏幕。白色背景窗口显示了系统为当前程序设定的默认存储位置(c:myc,该存储位置因系统而异,可以改变),将默认文件名NONAME.C改为自己命名的f1.c。实验2 练习使用基本数据类型和算术运算符一 实训目的:1练习使用基本

7、类型的变量进行编程2练习使用C的运算符二实训内容: 1实验要求 :熟练使用运算符 (%,+,-) 2分析与设计 : 求余运算符要求两个操作数都必须是整数;+和- 要看清是先使用还是先自增(减)3源代码:程序1:取出一个三位整数的各个位,并输出main()int x=123; int c1,c2,c3; c1=x%10;c2=x/10%10;c3=x/100;printf(“%d,%d,%dn”,c3,c2,c1);运行结果为:1,2,3调试:1) 若将最后一句改为printf(“%d%d%d”,c3,c2,c1);结果会是什么?与printf(“%d”,x);输出的结果有什么不同.程序2:练习

8、自增和自减运算符的使用main()int x=2,y,z;y=(+x)+(x+)+(+x);z=(x-)+(-x)+(x-);printf(“x=%d,y=%d,z=%dn”,x,y,z);运行结果:x=2,y=12,z=12调试: 如果再加一句printf(“%d,%d,%dn”,+z,z+,+z);运行结果是什么:这一句用于验证,printf函数输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的实验3 使用输入、输出函数一 实训目的:熟练使用格式输出函数printf()和格式输入函数scanf() 二实训内容:1. 实验要求: 格式

9、输入函数scanf()和格式输出函数printf()的使用2. 分析与设计: 输入函数中的普通字符需要原样输入,并注意分隔符的使用;输出函数中的格式控制符和输出项数要一一对应。3. 源代码:程序1:为使得a=1,b=2,c=A,d=5.5,在键盘上如何输入?#include main()int a,b;char c;float d;scanf(“a=%d b=%d”,&a,&b);scanf(“%c %e”,&c,&d);调试:1) 加上输出函数语句,以帮助核对输出结果,输出语句为:printf(“a=%d,b=%d,c=%c,d=%f”,a,b,c,d);2) 运行程序,输入:a=1 b=2

10、A 5.5 会产生什么结果,和要求值是否相同?3) 若输入 a=1 b=2A 5.5会产生什么结果,和要求值是否相同?程序2:编辑运行下面的程序,并根据执行结果分析程序中各个语句的作用#include main() int a, b; float d, e; char c1, c2; double f, g; long m, n; unsigned int p, q; a=61; b=62; /*第十行*/ c1=a; c2=b; d=5.67; e=-6.78; f=1234.56789; g=0.; m=50000; n=-60000; p=32768; q=40000; printf(a

11、=%d,b=%dnc1=%c,c2=%cn,a,b,c1,c2); printf(d=%6.2f,e=%6.2fn,d,e); printf(f=%15.6f,g=%15.10fn,f,g); printf(m=%ld,n=%ldnp=%u,q=%un,m,n,p,q);调试: 运行所给出的源程序,对照结果分析各语句的作用。 将程序中的第二、第三个printf语句修改为如下形式,然后运 行程序,察看结果。 printf(d=%-6.2f,e=%-6.2fn,d,e); printf(f=%-15.6f,g=%-15.10fn,f,g); 将上述两个printf语句进一步修改为如下形式,然后运行

12、程序, 察看结果。 printf(d=%-6.2fte=%-6.2fn,d,e); printf(f=%-15.6ftg=%-15.10fn,f,g); 将程序的第10-15行修改为如下语句:a=61;b=62;c1=a;c2=b;f=1234.56789;g=0.;d=f;e=g;p=a=m=50000;q=b=n=-60000;运行程序,并分析结果。 修改中的程序,不使用赋值语句,而用下面的scanf语句为a、 b、c1、c2、d、e输入数据:scanf(%d%d%c%c%f%f,&a,&b,&c1,&c2,&d,&e); 请按照程序原来中的数据,选用正确的数据输入格式,为上述 变量提供数

13、据。 使用如下数据输入格式,为什么得不到正确的结果? 输入数据:61 62 a b 5.67 -6.78 进一步修改中使用的程序,使f和g的值用scanf()函数输入。 进一步修改上面的程序,使其他所有变量的值都改用scanf() 函数输入。 参考程序#include void main() int a, b; float d, e; char c1, c2; double f, g; long m, n; unsigned int p, q; printf(Input(a,b,c1,c2,d):); scanf(%d%d%c%c%f%f,&a,&b,&c1,&c2,&d,&e); print

14、f(Input(f,g):); scanf(%lf%lf,&f,&g); printf(Input(m,n,p,q):); scanf(%ld%ld%u%u,&m,&n,&p,&q); printf(a=%d,b=%dnc1=%c,c2=%cn,a,b,c1,c2); printf(d=%-6.2f,e=%-6.2fn,d,e); printf(f=%-15.6f,g=%-15.10fn,f,g); printf(m=%ld,n=%ldnp=%u,q=%un,m,n,p,q); 数据输入格式Input(a,b,c1,c2,d):61 62ab5.67 -6.78 Input(f,g):1234

15、. 0. Input(m,n,p,q):50000 -60000 32678 40000 修改中的程序,使c1、c2的数据用getchar()函数输入,用 putchar()函数输出。 可按照如下方法修改程序:将程序中的“scanf(%d%d%c%c%f%f,&a,&b,&c1,&c2,&d,&e);”语 句用以下四个语句替换:scanf(%d%d% ,&a,&b);c1=getchar();c2=getchar();scanf(%f%f,&d,&e); 使用与相同的数据输入格式输入数据。 请分析:使用如下格式为a、b、c1、c2输入数据时会出现什么结果?运行程序验证所分析的结论。输入数据格式

16、:61 62 a b 程序3:判断下面程序的运行结果。 main()int x=3,y=2,z=1;printf(“%d,%dn”,(+x,y+),z+2);运行结果:2,3分析得到此结果的原因。实验4 选择结构程序设计一、实训目的1学会使用逻辑表达式表示条件的方法。2掌握if语句三种形式的用法。3掌握switch语句的用法。4学会设计有实际价值的分支结构程序。二、实训内容1 实验要求:A) 简单if语句的用法。编写调试程序:从键盘输入一个任意大小的实数x,如果x满足如下条件,则输出x及其绝对值。输出x的条件:-29.5x29.5 ;B) if-else语句的用法。修改上面的程序,使得x满足-

17、29.5x29.5时输出x及其绝对值,否则只输出x。C) switch语句的应用。要求从键盘任意输入两个数值,然后输入一个四则运算符,自动完成运算后输出结果。2分析与设计:A) 简单if语句的用法,正确表示条件,将数学不等式-29.5x29.5表示为如下逻辑表达式:x=-29.5&x=-29.5)&(x=29.5)也可以使用x的绝对值形式表示,如下:fabs(x)=-29.5&x=-29.5&x=-29.5&x=29.5) printf(x=%ft|x|=%fn,x,fabs(x); else printf(x=%fn,x);输入数据时,至少应考虑的几种情况 输入满足输出条件的数,包括正数、负

18、数、零。 输入不满足输出条件的数,包括正数、负数。 输入数据为整数。 输入一个字符数据会是什么结果 参考程序3#include stdio.hvoid main() float x,y; char op; printf(请输入运算数(两个运算数之间以“,”分隔):); scanf(%f,%f,&x,&y); printf(请输入运算符: ); getchar(); op=getchar(); switch(op) case +: printf(%f+%f=%fn,x,y,x+y); break; case -: printf(%f-%f=%fn,x,y,x-y); break; case *:

19、 printf(%f*%f=%fn,x,y,x*y); break; case /: printf(%f/%f=%fn,x,y,x/y); break; default: printf(运算符输入不正确!n); 程序调试 参考程序中使用了中文提示信息,如果使用的C语言系统不支持汉字,应将这些提示信息换用英文信息。 调试程序时,+、-、*、/ 及非四则运算符的情况都应予以调试。实验5 分支语句的使用-模拟ATM取款机界面一 实训目的:1熟练掌握分支结构if语句及其嵌套 2掌握分析具体问题的方法二实训内容:1实验要求 : 利用if语句和scanf函数模拟简单的ATM取款机界面2分析与设计: 用户先

20、输入密码,密码正确后,可以进行帐户的操作,如查询,取款等。2 源代码:#include main()int password,p,number,count=1000;printf(“please input password:”);scanf(“%d”,&password);if(password!=0000)printf(“password errorn”);return;printf(“welcome! Please choice one operate:(1,2,3)n”);printf(“1:count;2:get money;3:returnn”);scanf(“%d”,&p);sw

21、itch(p)case 1:printf(“n%d”,count);break;/*帐户查询*/case 2:printf(“nplease input count that you want to get”);scanf(“%d”,&number);/*取款*/ if(numbercount|number0)printf(“nerror”); printf(“nnow ,you can take money!”); break;case 3:return;/*返回*/default:printf(“nNOthis operate”);调试: 参考程序中使用了中文提示信息,如果使用的C语言系统

22、不支持汉字,应将这些提示信息换用英文信息。 参考程序用switch语句实现,若改用if语句该怎样实现实验6 循环语句的使用猜数字游戏一 实训目的:1熟练掌握各种循环程序设计的方法 2利用循环结构解决一些实际问题二实训内容:1实验要求:利用随机函数rand()产生的一个整数,进行猜数字游戏 2分析与设计:利用循环,不断输入数字,与产生的随机数进行比较,直到猜中为止。3源代码:#include main() int r,x,n=0;r=rand();if(rr) printf(“nbign”);if(xr) printf(“nsmalln”);printf(“please input a numb

23、er again:”);scanf(“%d”,&x);n+;if(n5&n10) printf(“n bad”);调试:输入32765观察n为何值?输入0观察n为何值?输入-20观察n为何值?输入9888观察n为何值?实验7 一维数组的应用一 实训目的:1. 了解数组的特点,掌握一维数组的定义、初始化及其使用方法。2熟练使用一维数组解决实际问题二实训内容:1. 实训要求a)求最大值问题。任意定义一个一维数组,并为其初始化,然后将最大值找出来,并指明它是数组的第几个元素。b)用冒泡法对十个数排序(由小到大)2. 分析与设计: A) 求最大值问题。编程分析: 假设首元素为最大值元素,用max标识。

24、 将其余元素依次与max比较,并将大值保存在max中,将大值元素下标保存在m中。 输出max和m。B) 冒泡法排序算法分析:比较相邻的两个数,将小的调到前面3源代码:参考程序1/* 求最大值问题程序 */#include stdio.h#define N 10void main() int aN=20,9,10,-16,-9,18,96,7,11,33; int i,max=a0,m=0; for(i=1;iN;i+) if(maxai) max=ai; m=i; printf(max=%d,No:%dn,max,m+1);调试:如果数组aN一开始没有初始化,如何使用scanf函数给每一个数组

25、元数读值如果一开始aN为10,9,8,7,6,5,4,3,2,1,语句max=ai;执行多少次?参考程序2#include /* 冒泡法排序 */main() int i,j,t;int a10;printf(shu ru:);for(i=0;i10;i+)scanf(%d,&ai);printf(npaixuqiann);for(i=0;i10;i+)printf(%6d,ai);printf(n);printf(paixuhou );for(i=0;i9;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)printf(%6d,ai);p

26、rintf(n);调试:输入一组数,以空格间隔,如1 -4 56 89 0 -1 43 56 9 10运行程序,观察结果输入一组数,以空格间隔,如1 2 3 4 5 6 7 8 9 10思考t=aj;aj=aj+1;aj+1=t;执行的次数输入一组数,以空格间隔,如11 10 9 8 7 6 5 4 3 2思考t=aj;aj=aj+1;aj+1=t;执行的次数实验8 二维数组的应用一 实训目的:1 掌握二维数组的定义、赋值和输入输出方法2熟练使用二维数组解决实际问题二实训内容:1实验要求: A. 利用二维数组进行矩阵的乘法运算 B. 奇偶数问题。设有一维整型数组共有20个元素,且偶数与奇数各占

27、一半,将该数组变换为210的二维数组且偶数和奇数各成一行。 2 分析与设计: A. 利用二维数组进行矩阵的乘法运算: = B. 奇偶数问题: 分别定义一维数组a和二维数组b。 设偶数存储在二维数组b的0行,奇数存储在二维数组b的1行。则对一维数组a进行一次遍历后,即可实现在二维数组b中按偶数和奇数的分行存储。3源代码:参考程序1main() /* 矩阵乘法 */ int a22=1,2,3,4, b22=5,6,7,8; int c22=0,i,j,k; for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+) cij+=aik*bkj;for(j=0;j2;j+)

28、 for(k=0;k2;k+)printf(“%d”,cjk);printf(“n”); 参考程序2/* 二维数组奇偶数问题 */include stdio.hvoid main() int a20,b210; int i,j,col1=0,col2=0; printf(请输入数据:n); for(i=0;i20;i+) scanf(%d,&ai); for(i=0;i20;i+) f(ai%2=0) b0col1+=ai; /* 偶数存储在b0数组 */ else b1col2+=ai; /* 奇数存储在b1数组 */ for(i=0;i2;i+) for(j=0;jc&a+cb&b+ca&

29、a0.0&b0.0&c0.0) printf(Area=%-7.2fn,area(a,b,c); /* 以下是计算任意三角形面积的函数 */float area(float a,float b,float c) float s,area_s; s=(a+b+c)/2.0; area_s=sqrt(s*(s-a)*(s-b)*(s-c); return(area_s);调试 三角形面积函数area()不能单独调试,需要通过主函数调用来进行调试。 输入边长数据时,应考虑多种情况,如:负数值、零值、构不成三角形的数值等。参考程序2/*“辗转相除法”求最大公约数*/int zdgysfun(int n

30、1,int n2)int temp;if(n1n2) temp=n1;n1=n2;n1=temp;while(n2!=0) temp=n1%n2; n1=n2; n2=temp;return(n1);main()int a,b,result; printf(“please input two integer numbers:”); scanf(“%d,%d”,&a,&b); result=zdgysfun(a,b);printf(“Result is:%dn”,result);调试: 输入数据: 12,18 输入数据:17,19 输入数据:15,3 输入数据:-12,3实验10 函数参数的传递

31、一 实训目的:1理解函数的形参和实参的概念和应用2掌握函数的值调用和引用调用的含义3掌握简单变量、数组和指针作为函数参数进行传递的形式二实训内容:1实验要求: 编写自定义函数:求字符串的长度和字符串的查找 2分析与设计: 利用字符数组保存字符串,然后根据下标解决问题3源代码:程序1:自定义函数求字符串长度int length(char string)int index=0; while(stringindex!=0) index+; return(index);main()char string80; int len;printf(“please input a string:n”);scan

32、f(“%s”,string);len=length(string);printf(“%d”,len);调试 运行程序,输入一个长度不足80的字符串,察看并分析程序运行结果。 运行程序,输入一个长度恰好是80的字符串,察看并分析程序运行结果。 运行程序,输入一个长度超过80的字符串,察看并分析程序运行结果。 运行程序,只输入一个回车符,察看并分析程序运行结果。 程序2:自定义函数字符串的查找int find_string(char string1,char string2)char temp; int index1=0,index2; while(string1index1!=0)index2=

33、0; temp=string1index1+index2; while(string2index2!=0)&(temp=string2index2) temp=string1index1+(+index2);if(string2index2=0) return(index1);index1+;return (0);main()char string180,string280;int findresult;scanf(“%s”,string1);scanf(“%s”,string2);findresult=find_string(string1,string2);if(findresult)pr

34、intf(“Find!n”);printf(“position is :%dn”,findresult+1);else printf(“Not Find!n”);调试:输入两个字符串abcb观察结果输入两个字符串IamagirlGirl观察结果输入两个字符串abcdefgmn观察结果输入两个字符串abcabcdef观察结果实验11 嵌套与递归调用的实现一 实训目的:1掌握函数嵌套调用与递归调用的函数的含义2重点掌握函数嵌套调用与递归调用的实现过程3培养和锻炼解决较复杂C程序设计的能力二实训内容:1实验要求: 利用函数嵌套调用与递归调用求两个数的阶乘和2分析与设计: 先分别求出两个数的阶乘值,然后相加3源代码:#include #include long sum(int a,int b)/*求两个数的阶乘和*/long c1,c2;c1=factorial(a);c2=factorial(b);return(c1+c2);long factorial(int n)/* 求一个数的阶乘*/long rtn=1;int i;for(i=1;i=n;i+)rtn=rtn*i;return rtn;main()int n1,n2;long result; clrcsr();printf(“please input tw

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com