版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上C语言程序设计实验指导书(修订3)张红梅 编著安徽电子信息职业技术学院软件学院2008年6 月 1 日目 录实验1 运行简单的C程序一 实训目的:1、熟悉TC运行环境2、练习简单C程序的编写3、熟练掌握C程序的上机运行步骤二实训内容:1实验要求:编程求37+29的值,熟悉TC运行环境2 分析与设计: 编写一个main()函数,将数据37和29分别用变量保存,然后用另一个变量存放两个变量的和,最后将和变量的值输出。 3 源代码:main()int a,b,sum;a=37;b=29;sum=a+b;printf(“sum=%d”,sum);在TC环境中输入上面的代码后,
2、先编译、连接,再保存,然后再运行。具体操作步骤如下所示:(1)编译(2)连接(3)保存F2(4)运行CTRL+F9(5)运行结果ALT+F5按任意键返回注意:1、第(1)步和第(2)步可以合起来操作,使用快捷键F92、程序比较大时,最好边输入代码,边保存,以防止意外情况的发生。选做题:1. 输出字符串main()printf(“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. 求任意两个数中的最
3、大值main()int a,b,max; printf(“Input two numbers:”); scanf(“%d,%d”,&a,&b); max=a;if(max<b)max=b; printf(“max=%d”,max);实验2 练习使用算术运算符一 实训目的:1练习使用基本类型的变量进行编程2练习使用C的运算符二实训内容: 1实验要求 :熟练使用运算符 (%,+,-) 2分析与设计 : 求余运算符要求两个操作数都必须是整数;+和- 要看清是先使用还是先自增(减)3源代码:程序1:取出一个三位整数的各个位,并输出main()int x=123; char c1,
4、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,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);2main()float m,n,k;k=(
5、3.1,m=2.0+2.1);printf(“%f”,k);n=(m=3.8,k);printf(“%f”,n);3.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%=a; printf(“%d”,e);4.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
6、+10的和。2. 利用中间变量,实现两个变量的值互换。实验3 使用输入、输出函数一 实训目的:熟练使用格式输出函数printf()和格式输入函数scanf() 二实训内容:1 实验要求: 格式输入函数scanf()和格式输出函数printf()的使用2分析与设计: 输入函数中的普通字符需要原样输入,并注意分隔符的使用;输出函数中的格式控制符和输出项数要一一对应。3源代码:程序1:为使得a=1,b=2,c=A,d=5.5,在键盘上如何输入?#include <stdio.h>main()int a,b;char c;float d;scanf(“a=%d b=%d”,&a,&
7、amp;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输入一个小写字母,将其改写为大写字母后输出。2设int a,b,c;要使得a=3;b=5;c=6; 问该如何在键盘上输入?并用printf函数输出a,b,c的值。 scanf(“%d,%d%d”,&a,&b,&c);3编程序输出下面的图形* * * * * * * * *
8、 * * * * * * * * * * * * * * * * * * * * * * * * * * * *实验4 模拟ATM取款机界面一 实训目的:1熟练掌握分支结构if语句及其嵌套 2掌握分析具体问题的方法二实训内容:1实验要求 : 利用if语句和scanf函数模拟简单的ATM取款机界面2分析与设计: 用户先输入密码,密码正确后,可以进行帐户的操作,如查询,取款等。3源代码:#include <stdio.h>main()int password,op,number=0,count=1000,n=0;printf("please input password:&q
9、uot;);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("nwelcome! Please choice one
10、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)
11、; if(number>count|number<0)printf("nerror"); else printf("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. 从键盘输入一个字符,如果是小写字
12、母,则输出“small”,如果是大写字母,则输出“big”,如果是数字,则输出“number”,其他字符则输出“other”3. 根据输入的x,输出对应y的值。x x<02x+1 0x<1x-5 x1y=实验5 循环语句的使用猜数字游戏一 实训目的:1熟练掌握各种循环程序设计的方法 2利用循环结构解决一些实际问题二实训内容:1实验要求:先利用randomize()产生一个随机数种子,再利用随机函数random(100)产生的一个0100之间的整数,进行猜数字游戏,最后根据猜的次数给出评语。2分析与设计:利用循环,不断输入数字,与产生的随机数进行比较,直到猜中为止。3源代码:#inc
13、lude <stdlib.h>main()int r,x,n=0;randomize();r=random(100);printf(“Please input a number(0100):”);scanf(“%d”,&x);n=1;while(x!=r)if(x>r)printf(“nbig,input continue:”);if(x<r)printf(“nsmall,input continue:”);scanf(“%d”,&x);n+;if(n<=5)printf(“nvery good”);if(n>5&&n<
14、=10)printf(“ngood”);if(n>10)printf(“nnormal”);选做题:1. 编程:打印出所有的“水仙花数”。所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。例如:153=1+5+3。2. 编程:打印出1000以内所有的“完数”。所谓完数是指一个数恰好等于它的因子之和。 例如:6的因子为1,2,3;而6=1+2+3,因此6是完数。要求:按下面格式输出:6 Its factors are 1,2,33.编写程序输出下面图形 *实验6 一维数组的应用一 实训目的:1 掌握一维数组的定义、赋值和输入输出方法2熟练使用一维数组解决实际问题二实训内容:1实验
15、要求: 从键盘上输入任意10个数,将其按从小到大顺序排列;再输入一个数,将该数插入到数列中,不改变数列的排序规律。2分析与设计: 用一维数组保存输入的数据,然后选择一种排序方法(冒泡排序)进行排序,然后在输入新的数,找到该数在数列中的位置,把从该位置到最后的元素,依次后移一位,再将该数插入数列中。3源代码:#define N 10print(int *a,int n) /*输出数列函数*/int i; printf("n"); for(i=0;i<n;i+) printf("%3d",ai); printf("n");sort(
16、int a)/*冒泡排序函数*/ int i,j,t; printf("n"); for(i=0;i<N-1;i+)/*比较趟数*/ for(j=0;j<N-1-i;j+)/*每趟比较次数*/ if(aj>aj+1) t=aj;aj=aj+1;aj+1=t;/*交换*/insert(int *a,int x)/*插入函数*/int i,j; for(i=0;i<N;i+) if(ai>x) break; /*若ai>x则找到要插入的位置为i*/ for(j=N-1;j>=i;j-) aj+1=aj; /*从ai到aN-1的每个元素都
17、后移一位*/ ai=x; /*在i位置上插入x*/ printf("n"); main()int a11,i,x; printf("please input 10 nums:n"); for(i=0;i<N;i+) scanf("%d",&ai);/*输入*/ sort(a);/*排序*/ print(a,10);/*输出*/printf("please input insert num:");scanf("%d",&x);/*输入要插入的新数*/ insert(a,x);
18、/*插入新数*/print(a,11); /*输出*/选做题:1编程求一个4×4矩阵两条对角线上所有元素之和。2.有一串字符串,最多80个字符。要求统计其中英文大写字母、小写字母、数字、空格以及其他字符的个数。3.自己编写下面的函数:strcat()、strcmp()和strlen(),实现相应的功能。实验7 函数参数的传递一 实训目的:1理解函数的形参和实参的概念和应用2掌握函数的值调用和引用调用的含义3掌握简单变量、数组和指针作为函数参数进行传递的形式二实训内容:1实验要求:编写自定义函数:进行两个数据之间的交换 2分析与设计:使用两种参数传递方法,进行数据的交换,比较下面程序的
19、运行结果有何不同。3源代码:程序1:参数的值传递。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);程序2:参数的地址传递。void swap(int *x,int *y)int t; t=*x; *x=*y; *y=t; printf(“x=%dty=%dn”,*x,*y);main()i
20、nt a,b; printf(“please input a,b:”); scanf(“%d,%d”,&a,&b); swap(a,b); printf(“a=%dtb=%dn”,a,b);选做题:1.编写求两个数中最大值的函数2.编写一个判断某个数是否是素数的函数,要求在主函数中输入一个整数,并输出是否是素数的信息。实验8 嵌套与递归调用的实现一 实训目的:1掌握函数嵌套调用与递归调用的函数的含义2重点掌握函数嵌套调用与递归调用的实现过程3培养和锻炼解决较复杂C程序设计的能力4. 掌握单步运行的调试方法二实训内容:1实验要求: 利用函数嵌套调用与递归调用求两个数的阶乘和2分析
21、与设计: 先分别求出两个数的阶乘值,然后相加3源代码:#include <stdio.h>#include <conio.h>long sum(int a,int b)/*求两个数的阶乘和*/long c1,c2;c1=fact(a);c2=fact(b);return(c1+c2);long fact(int n)/* 利用递归求一个数的阶乘*/long r=1; if(n<0) printf(“n<0,data error!n”); else if(n=0|n=1) r=1; else r=n*fact(n-1);return r;main()int n
22、1,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.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少个桃子。(用递归函数实现)2.年龄问题:一家有4个孩子,已知最小
23、的孩子10岁,若每个孩子的年龄都差2岁,问最大的孩子几岁。(用递归函数实现)实验9 结构体和共用体一 实训目的:1掌握结构体类型变量的定义及使用2掌握结构体变量的引用形式,结构体数组的应用3理解结构体作为不同数据类型的一个整体在实际编程中的应用二实训内容:1实验要求: 输入6名学生的基本信息,每名学生的基本信息包括:学号、姓名、性别、年龄、语文成绩、数学成绩、物理成绩、总分、平均分等数据项。根据各科成绩计算总分和平均分,并输出这6名学生的信息。2分析与设计: 利用结构体类型数组元素存放6名学生的信息,并根据要求求出总分和平均分。3源代码:#define N 6#include “stdio.h
24、”struct student char num8; char name10; char sex; int age; int chi_score,math_score,phy_score; int sum; int average;main() int i; struct student studN;/*输入N名学生的基本信息*/ for(i=0;i<N;i+) printf(“nThe student_number of number %d is: “,i+1); gets(studi.num); printf(“nThe student_name of number %d is: “
25、,i+1); gets(); printf(“nThe student_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:
26、 “,i+1); scanf(“%d”,&studi.math_score); printf(“nThe physics_score of number %d is: “,i+1); scanf(“%d”,&studi.phy_score); /*计算学生的总分和平均分*/for(i=0;i<N;i+) studi.sum=studi.chi_score+studi.math_score+studi.phy_score;studi.average=studi.sum/3;/*输出学生的基本信息情况*/printf(“nNumber Name Sex Age Chinese
27、 Math Physics Sum Average”);printf(“n-”);for(i=0;i<N;i+) printf(n%-8s%-10s%3c%3d”,studi.num,;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型整数,要求将该数的前两个字节和后两个字节的数据分别输出,用十六进制形
28、式输出。2. 口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个球,问得到3种不同色的球的可能取法,打印出每种组合的3种颜色。球只能是5种颜色之一,而且要判断各球是否同色,应使用枚举类型变量处理。实验10 文件一 实训目的:1掌握文件以及缓冲文件系统、文件指针的概念2掌握文件的打开、关闭、读、写等操作3学会用缓冲文件系统对文件进行简单的操作二实训内容:1实验要求:有5个学生,每个学生有3门课的成绩,从键盘输入以下数据(包括学号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分存放在磁盘文件”student”中。学生原有数据:A Wang 89,98,67A Li
29、70,80,90A Sun 78,88,80A Zhang 100,87,91A Zhao 81,64,922分析与设计: 用结构体数组保存学生的基本信息,利用文件的写操作将学生的基本信息写入文件”student.dat”中。3源代码:#include <stdio.h>#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(
30、);for(i=0;i<SIZE;I+) sumi=0;for(i=0;i<SIZE;i+) scanf(“%s %d %d %d %d”,,&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(“
31、-n”);for(i=0;i<SIZE;i+) fread(&studi,sizeof(struct student_type),1,fpt); printf(“%-10s %3d %5d %5d %5d %5dn”,,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); fo
32、r(i=0;i<SIZE;i+) if(fwrite(&studi,sizeof(struct student_type),-1,fp)!=1) printf(“文件写入数据时出错!n”); exit(0); fclose(fp);选做题:编写一个通讯录,要求字段包括:姓名、E-mail、QQ、联系电话。通过键盘输入数据,并把数据存在一个文件中,通过查找显示一个人员的具体信息。课程设计:单链表的操作设计要求本次课程设计的目的是在学习动态分配函数的基础上,利用带指针选项的结构体构造单链表,并实现单链表的插入、删除和查找等操作。所需知识处理动态链表所需的函数:malloc函数函数原型
33、:void *malloc(unsigned int size);作用:在动态区分配一个长度为size的连续空间,函数返回值是一个指向分配域起始地址的指针,如内存空间不足,返回空指针NULL。 (此处:void为无确定类型) calloc函数函数原型:void *calloc(unsigned n,unsigned size);作用:在内存动态区分配n个长度为size的连续空间,函数返回指向分配域起始地址的指针,若分 配不成功,返回NULL值。free函数函数原型:void free(void *p);作用:释放由p指向的内存区,使这部分内存区能被其它变量使用。P所指向的是最近一次calloc
34、或malloc分配的存储区域。 free函数无返回值。 注:旧版本提供的malloc和calloc函数得到的是指向字符型数据的指针。ANSI C提供的malloc和calloc函数规定为void *类型,这并不是说该函数调用后无返回值,而是返回一个结点的地址,该地址的类型为void(无类型或类型不确定),即一段存储区的首址,其具体类型无法确定,只有使用时根据各个域值数据再确定。3系统分析共有以下几大功能模块:主函数:完成对各函数的声明和调用建立函数:完成单链表的建立插入函数:在已有单链表上插入结点删除函数:在已有单链表上删除某个结点输出函数:输出已建立的单链表4.设计程序代码#include
35、"stdio.h"#include "malloc.h"#define NULL 0#define LEN sizeof (struct student)struct student int data; struct student *next; ;/*结点结构*/int n;struct student *creat(void) /*单链表的建立*/ struct student *head; struct student *p1, *p2; n=0; p1=p2=(struct student *) malloc(LEN); scanf("
36、%d",&p1->data); head=NULL; while(p1->data!=0) n=n+1; if(n=1)head=p1; else p2->next=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, t
37、hese %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 student *head,int num)/* 删除一个结点*/ struct student *p1,*p2; if(head=NULL) printf("n list is null ! n"); goto end; p1=head; while(num!=p1-&g
38、t;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",num); end: return(head);struct student *insert(struct student *head, struct student *stud)/*结点的插入*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 慢阻肺抑郁的社区康复干预方案
- 安全防御培训专项练习试卷
- 教育收费自查自纠工作报告经典范文三篇
- 配送服务合同草案
- 食品生产加工合作协议
- 慢病预防的医患沟通策略优化
- 2026年初创企业法律咨询服务协议
- 2026年个人信息保护能力实务题
- 慢病防控:慢性病防控的分级诊疗路径优化
- 中毒窒息处置应急预案演练(3篇)
- 物业设施维护保养计划表
- 质量管理体系内审方法与技巧
- 上海市华二附中2026届化学高二第一学期期末统考试题含答案
- 私募基金管理人-突发事件应急预案管理制度
- 新风机组施工方案(3篇)
- 化学品泄漏应急知识培训课件
- 【《基于PLC的自卸汽车举升机构控制系统设计案例》5100字】
- 《这一次我全力以赴》(2023年广东省中考满分作文13篇附审题指导)
- 空调技师考试题及答案
- 思想道德与法治2023年版电子版教材-1
- 蜜雪冰城加盟合同协议
评论
0/150
提交评论