[高等教育]0614111、2班C语言实验指导书

上传人:仙*** 文档编号:75280120 上传时间:2022-04-15 格式:DOC 页数:31 大小:213KB
收藏 版权申诉 举报 下载
[高等教育]0614111、2班C语言实验指导书_第1页
第1页 / 共31页
[高等教育]0614111、2班C语言实验指导书_第2页
第2页 / 共31页
[高等教育]0614111、2班C语言实验指导书_第3页
第3页 / 共31页
资源描述:

《[高等教育]0614111、2班C语言实验指导书》由会员分享,可在线阅读,更多相关《[高等教育]0614111、2班C语言实验指导书(31页珍藏版)》请在装配图网上搜索。

1、C语言程序设计实验指导书C语言程序设计实验指导书河南城建学院测绘与城市空间信息系目 录实验1 运行简单的C程序2实验2 练习使用算术运算符5实验3 使用输入、输出函数7实验4 模拟ATM取款机界面9实验5 循环语句的使用猜数字游戏11实验6 一维数组的应用13实验7 函数参数的传递15实验8 嵌套与递归调用的实现17实验九 指针19实验10 结构体和共用体20实验11 文件22课程设计:单链表的操作24实验1 运行简单的C程序一、 实验目的:1、熟悉TC运行环境2、练习简单C程序的编写3、熟练掌握C程序的上机运行步骤二、实验内容:1实验要求:编程求37+29的值,熟悉TC运行环境2 分析与设计

2、: 编写一个main()函数,将数据37和29分别用变量保存,然后用另一个变量存放两个变量的和,最后将和变量的值输出。 3 源代码:main()int a,b,sum;a=37;b=29;sum=a+b;printf(“sum=%d”,sum);在TC环境中输入上面的代码后,先编译、连接,再保存,然后再运行。具体操作步骤如下所示:(1)编译(2)连接(3)保存F2(4)运行CTRL+F9(5)运行结果ALT+F5按任意键返回注意:1、第(1)步和第(2)步可以合起来操作,使用快捷键F92、程序比较大时,最好边输入代码,边保存,以防止意外情况的发生。选做题:1. 输出字符串main()print

3、f(“C programn”);printf(“Hello World!n”);2. 已知圆的半径,求圆的面积#define PI 3.14main() int r=5; float s; s=PI*r*r; printf(“area=%fn”,s);3. 求任意两个数中的最大值main()int a,b,max; printf(“Input two numbers:”); scanf(“%d,%d”,&a,&b); max=a;if(maxb)max=b; printf(“max=%d”,max);实验2 练习使用算术运算符一、 实验目的:1练习使用基本类型的变量进行编程2练习使用C的运算符

4、二、实验内容: 1实验要求 :熟练使用运算符 (%,+,-) 2分析与设计 : 求余运算符要求两个操作数都必须是整数;+和- 要看清是先使用还是先自增(减)3源代码:程序1:取出一个三位整数的各个位,并输出main()int x=123; char c1,c2,c3; c1=x%10;c2=x/10%10;c3=x/100;printf(“%d,%d,%dn”,c3,c2,c1);运行结果为:1,2,3程序2:练习自增和自减运算符的使用main()int x=2,y,z;y=(+x)+(x+)+(+x);z=(x-)+(-x)+(x-);printf(“x=%d,y=%d,z=%dn”,x,y

5、,z);运行结果:x=2,y=12,z=12选做题:一、分析下面程序运行结果产生的原因。1.main()int x, y;char c;x=y=5;ch=a;printf(“%d,%d,%c”,x+,+y,ch);结果:5,6,a2main()float m,n,k;k=(3.1,m=2.0+2.1);printf(“%f”,k);n=(m=3.8,k);printf(“%f”,n);结果:2.210003.main()int a=2,b=1,c=1,d=6,e=9;b+=a; printf(“%d”,b);c*=a; printf(“%d”,c);d/=a; printf(“%d”,d);e

6、%=a; printf(“%d”,e);结果:32314.main()int a1,a2;float b,c;b=5.425;c=52.954;a1=(int)(b+c);a2=(int)b+(int)c;printf(“a1=%d,a2=%d”,a1,a2);二、编程题1求1+2+3+4+5+6+7+8+9+10的和。2. 利用中间变量,实现两个变量的值互换。实验3 使用输入、输出函数一、 实验目的:熟练使用格式输出函数printf()和格式输入函数scanf() 二、实验内容:1 实验要求: 格式输入函数scanf()和格式输出函数printf()的使用2分析与设计: 输入函数中的普通字符

7、需要原样输入,并注意分隔符的使用;输出函数中的格式控制符和输出项数要一一对应。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 %en”,&c,&d);程序在运行时,输入:a=1 b=2A 5.50程序2:判断下面程序的运行结果。 main()int x=3,y=2,z=1;printf(“%d,%dn”,(+x,y+),z+2);运行结果:2,3分析得到此结果的原因。选做题:1输入一个小写字母,将其改写为大写字母后输出。

8、2设int a,b,c;要使得a=3;b=5;c=6; 问该如何在键盘上输入?并用printf函数输出a,b,c的值。 scanf(“%d,%d%d”,&a,&b,&c);3编程序输出下面的图形* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *实验4 模拟ATM取款机界面一、 实验目的:1熟练掌握分支结构if语句及其嵌套 2掌握分析具体问题的方法二、实验内容:1实验要求 : 利用if语句和scanf函数模拟简单的ATM取款机界面2分析与设计: 用户先输入密码,密码正确后,可以进行帐户的操作,如查询,

9、取款等。3源代码:#include main()int password,op,number=0,count=1000,n=0;printf(please input password:);scanf(%d,&password);while(password!=1234)/*有三次输入密码的机会*/n+; if(n=3)printf(you have input 3,can not input again!n); getch();return;printf(password error!please input again:);scanf(%d,&password);loop:printf(n

10、welcome! Please choice one operate:(1,2,3)n);printf(1:countn2:get moneyn3:returnn);scanf(%d,&op); /*输入一种操作*/switch(op)case 1:printf(nyour count is %d.n,count);goto loop;/*帐户查询*/case 2:printf(n please input count that you want to get:); scanf(%d,&number); if(numbercount|number0)printf(nerror); else p

11、rintf(nnow ,you can take money!);count-=number; goto loop; /*取款*/case 3:break;/*返回*/default:printf(n operate error!);goto loop;选做题:1. 从键盘输入学生成绩分数,输出对应的等级。(100-90分为A, 75-89为B ,60-74为C,小于60为D)2. 从键盘输入一个字符,如果是小写字母,则输出“small”,如果是大写字母,则输出“big”,如果是数字,则输出“number”,其他字符则输出“other”3. 根据输入的x,输出对应y的值。x x02x+1 0x

12、1x-5 x1y=实验5 循环语句的使用猜数字游戏一、 实验目的:1熟练掌握各种循环程序设计的方法 2利用循环结构解决一些实际问题二、实验内容:1实验要求:先利用randomize()产生一个随机数种子,再利用随机函数random(100)产生的一个0100之间的整数,进行猜数字游戏,最后根据猜的次数给出评语。2分析与设计:利用循环,不断输入数字,与产生的随机数进行比较,直到猜中为止。3源代码:#include main()int r,x,n=0;randomize();r=random(100);printf(“Please input a number(0100):”);scanf(“%d

13、”,&x);n=1;while(x!=r)if(xr)printf(“nbig,input continue:”);if(xr)printf(“nsmall,input continue:”);scanf(“%d”,&x);n+;if(n5&n10)printf(“nnormal”);选做题:1. 编程:打印出所有的“水仙花数”。所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例如:153=1+5+3。2. 编程:打印出1000以内所有的“完数”。所谓完数是指一个数恰好等于它的因子之和。 例如:6的因子为1,2,3;而6=1+2+3,因此6是完数。要求:按下面格式输出:6 Its

14、factors are 1,2,33.编写程序输出下面图形 *实验6 一维数组的应用一、 实验目的:1 掌握一维数组的定义、赋值和输入输出方法2熟练使用一维数组解决实际问题二、实验内容:1实验要求: 从键盘上输入任意10个数,将其按从小到大顺序排列;再输入一个数,将该数插入到数列中,不改变数列的排序规律。2分析与设计: 用一维数组保存输入的数据,然后选择一种排序方法(冒泡排序)进行排序,然后在输入新的数,找到该数在数列中的位置,把从该位置到最后的元素,依次后移一位,再将该数插入数列中。3源代码:#define N 10print(int *a,int n) /*输出数列函数*/int i; p

15、rintf(n); for(i=0;in;i+) printf(%3d,ai); printf(n);sort(int a)/*冒泡排序函数*/ int i,j,t; printf(n); for(i=0;iN-1;i+)/*比较趟数*/ for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t;/*交换*/insert(int *a,int x)/*插入函数*/int i,j; for(i=0;ix) break; /*若aix则找到要插入的位置为i*/ for(j=N-1;j=i;j-) aj+1=aj; /*从ai到aN-1的每个元素都后移一位*/ ai=x; /*在i位置上

16、插入x*/ printf(n); main()int a11,i,x; printf(please input 10 nums:n); for(i=0;iN;i+) scanf(%d,&ai);/*输入*/ sort(a);/*排序*/ print(a,10);/*输出*/printf(please input insert num:);scanf(%d,&x);/*输入要插入的新数*/ insert(a,x);/*插入新数*/print(a,11); /*输出*/选做题:1编程求一个44矩阵两条对角线上所有元素之和。2.有一串字符串,最多80个字符。要求统计其中英文大写字母、小写字母、数字、

17、空格以及其他字符的个数。3.自己编写下面的函数:strcat()、strcmp()和strlen(),实现相应的功能。实验7 函数参数的传递一、 实验目的:1理解函数的形参和实参的概念和应用2掌握函数的值调用和引用调用的含义3掌握简单变量、数组和指针作为函数参数进行传递的形式二、实验内容:1实验要求:编写自定义函数:进行两个数据之间的交换 2分析与设计:使用两种参数传递方法,进行数据的交换,比较下面程序的运行结果有何不同。3源代码:程序1:参数的值传递。void swap(int x,int y)int t; t=x; x=y; y=t; printf(“x=%dty=%dn”,x,y);ma

18、in()int a,b; printf(“please input a,b:”); scanf(“%d,%d”,&a,&b); swap(a,b); printf(“a=%dtb=%dn”,a,b);程序2:参数的地址传递。void swap(int *x,int *y)int t; t=*x; *x=*y; *y=t; printf(“x=%dty=%dn”,*x,*y);main()int a,b; printf(“please input a,b:”); scanf(“%d,%d”,&a,&b); swap(a,b); printf(“a=%dtb=%dn”,a,b);选做题:1.编写求

19、两个数中最大值的函数2.编写一个判断某个数是否是素数的函数,要求在主函数中输入一个整数,并输出是否是素数的信息。实验8 嵌套与递归调用的实现一、 实验目的:1掌握函数嵌套调用与递归调用的函数的含义2重点掌握函数嵌套调用与递归调用的实现过程3培养和锻炼解决较复杂C程序设计的能力4. 掌握单步运行的调试方法二、实验内容:1实验要求: 利用函数嵌套调用与递归调用求两个数的阶乘和2分析与设计: 先分别求出两个数的阶乘值,然后相加3源代码:#include #include long sum(int a,int b)/*求两个数的阶乘和*/long c1,c2;c1=fact(a);c2=fact(b)

20、;return(c1+c2);long fact(int n)/* 利用递归求一个数的阶乘*/long r=1; if(n0) printf(“n0,data error!n”); else if(n=0|n=1) r=1; else r=n*fact(n-1);return r;main()int n1,n2;long result; clrcsr();printf(“please input two number:n”);scanf(“%d,%d”,&n1,&n2);result=sum(n1,n2);printf(“Result=%ld”,result);getch();选做题:1.猴子

21、吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少个桃子。(用递归函数实现)2.年龄问题:一家有4个孩子,已知最小的孩子10岁,若每个孩子的年龄都差2岁,问最大的孩子几岁。(用递归函数实现)实验九 指针 一、实验目的 1掌握指针变量的定义与引用。 2熟练使用函数指针、数组指针、字符串指针编写应用程序。 二、实验内容 1、写一函数,求一个字符串的长度。 2、编写一个函数,将数组中n个数按反序存放。 3、设一个函数,调用它时,

22、每次实现不同的功能:(1)求两个数之和;(2)求两个数之差;(3)求两个数之积。 三、实验指导 1、分析: (1) 本部分习题要求全部用指针完成; (2) 在main函数中输入字符串,并输出其长度; (3) 本题不能使用strlen()函数; 方法说明: 在主函数中定义一个指向字符串的指针变量pstr,并将输入的字符串的首地址赋值给pstr,然后调用求字符串长度的函数strlenth(char*p),得到字符串的长度。在函数strlenth(char *p)中,判断*p是否为 0 ,如果不为 0 ,则进行len+的操作,直到遇到 0 为止。然后返回len值。 求字符串长度的函数strlenth

23、(char *p)算法如下: (1)定义int len=0; (2)当*p!= 0 时,重复执行(2.1)(2.2),否则算法终止。 len=len+1 p+ (3)return(len) 2、分析: (1) 在主函数中输入10个数,并输出排好序的数。 (2) 编写函数invert()将10个数按反序存放。 3、分析: (1)在主函数中输入2个数a,b,并输出a,b的和、差和乘积。 (2)分别编写函数add()、sub()、mul()计算两个数的和、差、积。(3) 编写函数process(),分别调用函数add()、sub()、mul()。 四、实验思考题 实现指针移动的几种方法。 实验10

24、结构体和共用体一、实验目的:1掌握结构体类型变量的定义及使用2掌握结构体变量的引用形式,结构体数组的应用3理解结构体作为不同数据类型的一个整体在实际编程中的应用二、实验内容:1实验要求: 输入6名学生的基本信息,每名学生的基本信息包括:学号、姓名、性别、年龄、语文成绩、数学成绩、物理成绩、总分、平均分等数据项。根据各科成绩计算总分和平均分,并输出这6名学生的信息。2分析与设计: 利用结构体类型数组元素存放6名学生的信息,并根据要求求出总分和平均分。3源代码:#define N 6#include “stdio.h”struct student char num8; char name10; c

25、har sex; int age; int chi_score,math_score,phy_score; int sum; int average;main() int i; struct student studN;/*输入N名学生的基本信息*/ for(i=0;iN;i+) printf(“nThe student_number of number %d is: “,i+1); gets(studi.num); printf(“nThe student_name of number %d is: “,i+1); gets(studi.name); printf(“nThe student

26、_sex of number %d is: “,i+1); studi.sex=getchar(); printf(“nThe student_age of number %d is: “,i+1); scanf(“%d”,&studi.age); printf(“nThe Chinese_score of number %d is: “,i+1); scanf(“%d”,&studi.chi_score); printf(“nThe math_score of number %d is: “,i+1); scanf(“%d”,&studi.math_score); printf(“nThe

27、physics_score of number %d is: “,i+1); scanf(“%d”,&studi.phy_score); /*计算学生的总分和平均分*/for(i=0;iN;i+) studi.sum=studi.chi_score+studi.math_score+studi.phy_score;studi.average=studi.sum/3;/*输出学生的基本信息情况*/printf(“nNumber Name Sex Age Chinese Math Physics Sum Average”);printf(“n-”);for(i=0;iN;i+) printf(n%

28、-8s%-10s%3c%3d”,studi.num,studi.name;studi.sex,studi.age); printf(%6d%6d%6d”,studi.chi_score,studi.math_score, studi.phy_score); printf(“%6d%6d”,studi.sum,studi.average);printf(“n-”);选做题:1.有一个long型整数,要求将该数的前两个字节和后两个字节的数据分别输出,用十六进制形式输出。2. 口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个球,问得到3种不同色的球的可能取法,打印出每种组合的3种颜

29、色。球只能是5种颜色之一,而且要判断各球是否同色,应使用枚举类型变量处理。实验11 文件一、 实验目的:1掌握文件以及缓冲文件系统、文件指针的概念2掌握文件的打开、关闭、读、写等操作3学会用缓冲文件系统对文件进行简单的操作二、实验内容:1实验要求:有5个学生,每个学生有3门课的成绩,从键盘输入以下数据(包括学号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分存放在磁盘文件”student”中。学生原有数据:A2005001 Wang 89,98,67A2005002 Li 70,80,90A2005006 Sun 78,88,80A2005012 Zhang 100,87,91

30、A2005020 Zhao 81,64,922分析与设计: 用结构体数组保存学生的基本信息,利用文件的写操作将学生的基本信息写入文件”student.dat”中。3源代码:#include #dedine SIZE 5struct student_type char name10; int num; int score3; int ave;struct student_type studSIZE;main() void save(); int i,sumSIZE; FILE *fpt; clrscr();for(i=0;iSIZE;I+) sumi=0;for(i=0;iSIZE;i+) sc

31、anf(“%s %d %d %d %d”,studi.name,&studi.num,&studi.score0,&studi.score1,&studi.score2); sumi=studi.score0+studi.score1+studi.score2; studi.ave=sumi/3;save();fpt=fopen(“student.dat”,”rb”);printf(“n 姓名 学号 成绩1 成绩2 成绩3 平均分n”);printf(“-n”);for(i=0;iSIZE;i+) fread(&studi,sizeof(struct student_type),1,fpt);

32、 printf(“%-10s %3d %5d %5d %5d %5dn”,studi.name,studi.num,studi.score0,studi.score1,studi.score2,studi.ave);fclose(fpt);void save() FILE *fp; int i; if(fp=fopen(“student.dat”,”wb”)=NULL) printf(“本文件不能打开,出错n”); exit(0); for(i=0;idata); head=NULL; while(p1-data!=0) n=n+1; if(n=1)head=p1; else p2-next=

33、p1; p2=p1; p1=(struct student *)malloc (LEN);scanf(%d,&p1-data); p2-next=NULL; return(head);void print( struct student *head) /*输出链表*/ struct student *p; printf(n Now, these %d records are :n, n); p=head; if(head!=NULL) do printf(%dn, p-data); p=p-next; while(p!=NULL);struct student *del(struct stud

34、ent *head,int num)/* 删除一个结点*/ struct student *p1,*p2; if(head=NULL) printf(n list is null ! n); goto end; p1=head; while(num!=p1-data & p1-next!=NULL) p2=p1; p1=p1-next; if(num=p1-data) if(p1=head) head=p1-next; else p2-next=p1-next; printf(delete: %dn,num); n=n-1; else printf(%d not been found ! n,

35、num); end: return(head);struct student *insert(struct student *head, struct student *stud)/*结点的插入*/ struct student *p0, *p1, *p2; p1=head; /*使p1指向第一个结点*/ p0=stud; /*p0指向要插入的结点*/ if(head=NULL) /*原来的链表是空表*/ head=p0; p0-next=NULL; /*使p0指向的结点作为头结点*/ else while(p0-datap1-data) & (p1-next!=NULL) p2=p1; /*

36、使p2指向刚才p1指向的结点*/ p1=p1-next; /*p1后移一个结点*/ if(p0-datadata) if(head=p1) head=p0; /*插到原来第一个结点之前 */ else p2-next=p0; /*插到p2指向的结点之后*/ p0-next = p1; else p1-next=p0; p0-next=NULL; /*插到最后的结点之后*/ n=n+1; /*结点数加1*/ return(head);void main( ) /*主函数*/ struct student *head, *stu; int del_num; printf(input records

37、: n); head=creat(); /*建立链表,返回头指针*/ print(head); /*输出全部结点*/ printf(n input delete number:); scanf(%d, &del_num); /*输入要删除的学号*/ while(del_num !=0) head=del(head,del_num); /*删除后链表的头地址*/ print(head); /*输出全部结点*/ printf(input the delete number:); scanf(%d, &del_num); /*输入要删除的学号*/ printf(n input the inserte

38、d record:); stu=(struct student *) malloc(LEN); scanf(%d, &stu-data); /*输入要插入的结点*/ while(stu-data!=0) head=insert(head,stu); /*插入新结点,返回地址*/ print(head); /*输出全部结点*/ printf(input the inserted record:); stu=(struct student *) malloc(LEN); scanf(%d, &stu-data); 小学生测验#include #include #include void makep

39、roblem();int m,n,res;int main() int num=10,trylimit=3; int score=0; int i; for (i=0;i0) scanf(%d,&ans); if(ans=res) break; else printf(try again: ); trylimit-; if (trylimit=3) score+=10; else if(trylimit=2) score+=7; else if(trylimit=1) score+=5; trylimit=3; if (score=90) printf(SMARTn); else if (sc

40、ore=80) printf(GOODn); else if (score=70) printf(OKn); else if (score=60) printf(PASSn); else printf(TRY AGAINn); void makeproblem() int isAdd; srand(time(0); isAdd=rand()%2; if (isAdd) m=rand()%51; n=rand()%(51-m); res=m+n; printf(%d + %d = ,m,n); else m=rand()%51; n=rand()%(m+1); res=m-n; printf(%d - %d = ,m,n); 30

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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