《C语言上机实验报告.doc》由会员分享,可在线阅读,更多相关《C语言上机实验报告.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、青青 岛岛 理理 工工 大大 学学课程实验报告课程实验报告课程名称计算机程序设计 (C)班级软件 111实验日期2011.04.21姓名赵亚东学号20110720 9实验成绩实验名称实验一 C 程序的运行环境和运行 C 程序的方法实 验 目 的 及 要 求1熟悉 Visual C+6.0 环境。 2了解建立控制台应用程序的基本步骤。 3初步了解 Visual C+6.0 的环境设置。 4初步学会简单的程序调试方法。 5学会编写简单的 C 程序。 6初步熟悉 C 语言操输入 scanf 函数、输出 printf 函数的使用。 7掌握 C 语言基本数据类型,熟悉变量的定义及变量的初始化和赋 值操作
2、。 8掌握不同的类型数据之间赋值的规律。 9掌握 C 语言的算术运算符的使用以及算术表达式的使用;掌握自 加自减运算符的特点及使用。实 验 环 境Visual 6.0+ Windows 7实 验 内 容1按照上述步骤,创建一个基于控制台的应用程序,该程序项目中只包含一 个源程序文件。功能为求两个整数的和,数据从键盘输入。 2创建一个基于控制台的应用程序,求一元二次方程的根。使得当输入三个 实数 a,b,c(满足 b*b-4*a*c0) ,能够求出方程 a*x*x+b*x+c=0 的两个实根, 并显示在屏幕上。分析提示: 通过键盘输入方程系数 a,b,c 的值,而后根 据求根公式计算并输出它的两
3、个根。算 法 描 述实验 一 1、先定义两个变量 a,b。2、键入 a 和 b。3、输出两个数的和。 实验 二 1、定义并输入 a b c。2、判断 d=b2-4ac 的大小。3、如果小于零则及 实 验 步 骤无解,等于零有一个解,x1=(-b)/(2*a)。4、大于零有两个解。x1=(- b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);5、输出结果。调 试 过 程 及 实 验 结 果1 2 总结掌握了掌握 C 语言基本数据类型,变量的定义及变量的初始化和赋 值操作,不同的类型数据之间赋值的规律。 了解了 C 语言的算术运算符的使用以及算术表达式的使用,自加自 减运算
4、符的特点及使用。附 录实验一 1 #include void main() int a,b,s; scanf(“%d%d“, printf(“s=%dn“,a+b); 实验一 2 #include #include void main() double a,b,c,d,x1,x2; printf(“a b c :“); scanf(“%lf%lf%lf“, d=b*b-4*a*c; if (d void main() int a; printf(“请输入学生成绩:n“); scanf(“%d“, if (a90) printf(“该学生成绩等级是 An“); else if (a80) pri
5、ntf(“该学生成绩等级是 Bn“); else if (a70) printf(“该学生成绩等级是 Cn“); else if (a60) printf(“该学生成绩等级是 Dn“); else printf(“该学生成绩等级是 En“); 用 switch 语句:#include void main() int a,m;printf(“请输入学生成绩:n“); scanf(“%d“, m=a/10; switch(m) case 9:printf(“该学生的成绩等级是:An“); case 8:printf(“该学生的成绩等级是:Bn“); case 7:printf(“该学生的成绩等级是
6、:Cn“); case 6:printf(“该学生的成绩等级是:Dn“); default:printf(“该学生的成绩等级是:En“); 实验二 4#include void main() float a,b; char c; scanf(“%f%c%f“, switch(c) case +:printf(“%fn“,a+b);break; case -:printf(“%fn“,a-b);break; case *:printf(“%fn“,a*b);break; case /:printf(“%fn“,a/b);break; 青青 岛岛 理理 工工 大大 学学课程实验报告课程实验报告课程
7、 名称计算机程序设 计 (C)班级软件 111实验日 期2012-5-2姓名赵亚东学号201107209实验成 绩 实验 名称实验三实验三 循环结构程序设计循环结构程序设计实 验 目 的 及 要 求1熟练掌握 while、do-while、for 语句的特点,学会设计循环结构程序。 2掌握 break 语句以及 continue 语句的特点及使用范围。 3学会编写循环嵌套程序。 3结合程序掌握一些简单的算法。 4进一步学习调试程序。实 验 环 境Visual 6.0+ Windows 7实 验 内 容4编程练习。求 的部分和。直到最后一项的值小于 1.0e- 4。提示:第 n 项 un=xn/
8、n!, 第 n+1 项 un+1= xn+1/(n+1)!及 un+1 = un(x/(n+1) 5编程练习。有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?分 别是多少?算 法 描 述 及 实 验 步 骤实验四 1、调用函数。2、定义 x s i j。输入 x。3、直到 n 大于 10000。4、 i=i*(x/(j+1); s=s+i; 5、输出 s 实验五 1、定义 i j k fre=0。2、利用三重 for 语句。for(i=1;i #include void main() int x; double s,i,j; scanf(“%d“, s=1,j=0; f
9、or(i=1;i=pow(10,-4);j+) i=i*(x/(j+1); s=s+i; printf(“s=%fn“,s); 实验三 4 #include void main() int i,j,k,fre=0; for(i=1;i void main() int a30,i,j=1;for(i=1;i #include void main() int i,a20; for(i=0;i int isprime(int n) int i; for(i=2;i #include double f(float x) double c; c=(2*pow(x,3)+3*pow(x,2)-4*x+1)
10、/(10*pow(x,2)+3); return c; double q(float x) double c; c=3*pow(f(x),3)+2*pow(f(x),2)+f(x); return c; main() float x; double y; scanf(“%f“, y=q(x); printf(“%lfn“,y); 实验 5 #include int fib(int x) if(x=1|x=2) return 1; else return fib(x-1)+fib(x-2); main() int n,s; for(n=1;n void fu(float *p) int a; a
11、=(int)*p; printf(“整数部分是%d 小数部分是%fn“,a,*p-a); main() float a3; int i; for(i=0;i int dizhi(int *p) int s; p= printf(“地址是:%dn“,p); return p; main() int i,s,a10,*p; for(i=0;i void fu(float *p) int a; a=(int)*p; printf(“整数部分是%d 小数部分是%fn“,a,*p-a); main() float a3; int i; for(i=0;i int dizhi(int *p) int s;
12、 p= printf(“地址是:%dn“,p); return p; main() int i,s,a10,*p; for(i=0;i #define N 5 void input(struct student stud); double av1(struct student stud); double av2(struct student stud); double av3(struct student stud); int max(struct student stud); struct student int no; char name10; double degree1; double
13、 degree2; double degree3; ; void main() struct student studN; double aver3,avg;int a,i; input(stud);aver0=av1(stud); aver1=av2(stud); aver2=av3(stud); a=max(stud); avg=(studa.degree1+studa.degree2+studa.degree3)/3.0; for(i=0;i #include #define N 3 typedef struct stud int no; char name10; char sex10;
14、 int age; struct stud *next; Stud; Stud *create(); void show(Stud *head); void delet(Stud *head); Stud *getnode(Stud *head,int n); void shan(Stud *head); void main()/主函数 Stud *head; int n;do printf(“1-创建链表,2-显示链表,3-删除相同年龄,0-退出操作n“); scanf(“%d“, switch(n) case 1:head=create();break; case 2:show(head)
15、;break; case 3:delet(head);break; default:break; while(n!=0); Stud *create()/创建链表储存学生信息 Stud *p,*head,*r; int i; head=(Stud *)malloc(sizeof(Stud); r=head; printf(“输入学生信息格式:学号、姓名、性别、年龄n“); for(i=1;ino,p-name,p-sex, r-next=p; r=p; r-next=NULL; return head; void show(Stud *head)/显示学生信息 int i=0; Stud *p
16、=head-next; printf(“学生信息如下:n“); while(p!=NULL) printf(“第%d 个学生信息:nn“,i+1); printf(“%dt%st%st%dn“,p-no,p-name,p-sex,p-age); p=p-next; i+; Stud *getnode(Stud *head,int n) int i=1;Stud *p=head; if(nnext; i+; if(p!=NULL) return p; else return NULL; void delet(Stud *head)/删除与输入年龄相同的学生信息 int year,i=1,k=1;
17、 Stud *p=head-next,*q; printf(“输入要删除的年龄n“); scanf(“%d“, while(p!=NULL) if(year=p-age) if(k=1) head-next=p-next; free(p);p=head; else q=getnode(head,k); q-next=p-next; free(p); p=q; else k+; p=p-next; printf(“相同年龄已删除n“);青青 岛岛 理理 工工 大大 学学课程实验报告课程实验报告课程名称计算机程序设计 (C)班级软件 111实验日期2012-6-8姓名赵亚东学号20110720 9
18、实验成绩实验名称 实验八 综合程序设计实 验 目 的 及 要 求1.掌握文件以及缓冲文件系统、文件指针的概念。 2.学会使用文件打开、关闭、读、写等文件操作函数。 3.通过一个综合程序,使学生对综合运用 C 语言程序设计语言有初步的认识。实 验 环 境VC+6.0实 验 内 容一、学生管理系统 1、学生基本信息的管理,包括添加、修改、删除、查找、全删等 操作; 2、课程数据的管理,包括添加、修改、删除、查找、全删等操作;3、学习成绩数据的管理,包括添加、修改、删除、查找、全删等 操作; 4、学生成绩查询系统,包括按学号、按课程号、按班号统计学生 的成绩。算 法 描 述 及 实 验 步 骤首先自
19、定义学生信息、课程数据、学生成绩的结构体,定义这些变 量的链表, 一边对这些数据进行操作。 一、在写主函数时,先把数据从文件中提取到链表中,操作后再写 入文件中进行保存。 二、在学生信息管理系统中,添加,即是判断是否存在相同学号, 没有通过链表进行添加操作,有的话进行提示 ,修改时只改对应学 号的信息,学号不需要修改,但需要同时修改成绩管理系统中的对 应 学号的学生姓名,在进行删除操作时,先查找是否有和需要修改 的学号相对应的学生信息,有的话则按照链表删除操作进行删除, 查找时判断是否有需要查找的学号,若有,输出对应的学生信息, 进行全删操作时,和链表的释放操作差不多,但是要注意的是不能 释放
20、头结点的地址,它是一个全局变量,释放后不能进行其他操作。在课程数据、学习成绩数据的处理时,采取同样的处理方式; 三、学生成绩查询系统分按学号、按课程号、按班号三种方式来统 计学生的成绩。调 试 过 程 及 实 验 结 果总结可以熟练地进行文件操作,打开文件,写文件,向文件中添加内容,以及文件的读取等操作进行编写小型程序。附 录Student 文件#include #include #include #include #include“school.h“ void addstudent(); void displaystudent(); void alterstudent(); void cha
21、ngename(int no,char name); void findstudent(); void deletstudent();void deleallstu(); extern StudNode *studenthead; extern ScoreNode *scorehead; void student() int x; do printf(“1-添加,2-修改,3-显示,4-查找,5-删除,6-全删,0-返回n“); scanf(“%d“, switch(x) case 1:addstudent();break; case 2:alterstudent();break; case
22、3:displaystudent();break; case 4:findstudent();break; case 5:deletstudent();break; case 6:deleallstu();break; case 0:break; default :printf(“选择错误n“);break; while(x!=0); void addstudent()/添加一个学生信息 StudNode *p=studenthead-next,*s,*q=studenthead; int no;StudType st; printf(“输入添加的学生学号n“); scanf(“%d“, wh
23、ile(p!=NULL p=p-next; if(p=NULL)/学号不重复 s=(StudNode *)malloc(sizeof(StudNode); printf(“输入学生信息格式:姓名、年龄、班号n“); scanf(“%s%d%s“,st.name, st.no=no; s-data=st; s-next=q-next; q-next=s; elseprintf(“学号重复n“); void displaystudent() StudNode *p=studenthead-next; if(p!=NULL) printf(“学生信息如下:n“); printf(“学号 姓名 年龄
24、班号n“); while(p!=NULL) printf(“%3d%8s%5d%8sn“,p-data.no,p-data.name,p-data.age,p- data.classno); p=p-next; printf(“学生信息输出完毕n“); else printf(“无学生信息n“); void alterstudent() /修改一个学生的信息,但是学号不改变,同时改变成绩管理文件的 姓名 StudNode *p=studenthead-next; int no;StudType st; if(p!=NULL) printf(“输入要修改的学生学号n“); scanf(“%d“,
25、 while(p!=NULL if(p!=NULL) printf(“输入修改学生信息,格式:姓名、年龄、班号n“); scanf(“%s%d%s“,st.name, st.no=no; p-data=st; changename(st.no,st.name); else printf(“未查到要修改信息的学生n“); void changename(int no,char name)/修改学生成绩管理系统中的名字 ScoreNode *p2=scorehead-next; while(p2!=NULL if(p2!=NULL) strcpy(p2-data.name,name); else
26、printf(“在成绩管理系统中未发现要修改的学生资料n“); void findstudent()/根据学号查找学生信息并输出 StudNode *p=studenthead; int no; printf(“输入要查找的学生学号n“); scanf(“%d“, while(p!=NULL if(p!=NULL) printf(“要查找的学生信息如下:n“); printf(“%3d%8s%5d%8sn“,p-data.no,p-data.name,p-data.age,p- data.classno); else printf(“未找到该学号的学生信息n“); void deletstud
27、ent()/根据学号删除学生信息 StudNode *p=studenthead,*q; int no; printf(“输入要删除的学生学号n“); scanf(“%d“, while(p!=NULL p=p-next; if(p!=NULL) q-next=p-next; free(p); printf(“学号对应学生信息已删除n“); else printf(“要删除的学生信息不存在n“); void deleallstu()/删除全部学生信息 StudNode *p=studenthead-next,*q; if(studenthead-next!=NULL) q=p-next; wh
28、ile(q!=NULL) free(p); p=q; q=q-next; free(p); studenthead-next=NULL; printf(“文件已全删n“); else printf(“不存在学生信息n“); Score 文件 #include #include #include“school.h“ #define N 100 void addscore(); void showscore(); void alterscore(); void findscore(); void delescore(); void deleallsc(); extern CourseNode *c
29、oursehead; extern ScoreNode *scorehead; void score() int x; do printf(“1-添加,2-修改,3-显示,4-查找,5-删除,6-全删,0-返回n“); scanf(“%d“, switch(x) case 1:addscore();break; case 2:alterscore();break; case 3:showscore();break; case 4:findscore();break; case 5:delescore();break; case 6:deleallsc();break; case 0:break
30、; default:printf(“选择错误n“);break; while(x!=0); void addscore()/添加一个分数记录 ScoreNode *p2=scorehead-next,*r2=scorehead,*s2,*tN;ScoreType sc;int n=0,i;printf(“输入添加学生学号n“);scanf(“%d“,while(p2!=NULL)if(p2-data.no=sc.no) tn=p2;n+; r2=p2;p2=p2-next;if(n=0)/学号不重复,可以添加s2=(ScoreNode *)malloc(sizeof(ScoreNode);pr
31、intf(“输入要添加的学生信息格式:名字、课程号、课程名、分 数n“);scanf(“%s%d%s%lf“,sc.name,s2-data=sc;s2-next=r2-next;r2-next=s2;else if(n0)/学号重复要考虑课程号是否重复,不重复就添加printf(“输入想要添加的课程号n“);scanf(“%d“,for(i=0;o=o)printf(“该学生的此课程分数信息已存在n“);return; if(i=n) s2=(ScoreNode *)malloc(sizeof(ScoreNode);printf(“输入要添加的学生信息格式:名字、课程名、分数n“);scan
32、f(“%s%s%lf“,sc.name,ame,s2-data=sc;s2-next=r2-next;r2-next=s2;printf(“学生信息已添加n“); void alterscore()/修改分数信息 ScoreNode *p2=scorehead-next; ScoreType sc; printf(“输入想要修改的学生学号和课程号n“); scanf(“%d%d“, if(p2!=NULL) while(p2!=NULL)if(p2-data.no=sc.no)if(p2-o=o)printf(“输入学生信息格式:姓名、课程名、分数n“);scanf(“%s%s%lf“,sc.
33、name,ame,p2-data=sc;printf(“该生的该课程成绩已修改n“);return;p2=p2-next;printf(“不存在需要修改的学生信息n“); else printf(“不存在任何可以修改的信息n“); void showscore()/显示分数信息 ScoreNode *p2=scorehead-next; ScoreType sc; if(p2=NULL) printf(“无学生分数信息n“); return; printf(“学号 姓名 课程号 课程名t 分数n“); while(p2!=NULL) sc=p2-data; printf(“%4d%8s%5d%
34、10st%gn“,sc.no,sc.name,o,ame,sc.degr ee); p2=p2-next; printf(“分数文件显示完成n“); void findscore()/查找一个学生成绩信息 ScoreNode *p2=scorehead-next; ScoreType sc; printf(“输入需要查找的学生成绩学号和课程号n“); scanf(“%d%d“, if(p2!=NULL) while(p2!=NULL)if(p2-data.no=sc.no)if(p2-o=o)sc=p2-data;printf(“学号 姓名 课程号 课程名t 分数n“);printf(“%4d
35、%8s%5d%10st%gn“,sc.no,sc.name,o,ame,sc.degr ee);return; p2=p2-next;printf(“未查到该学生的该课程成绩n“); else printf(“无任何学生成绩信息n“); void delescore()/删除一个学生信息 ScoreNode *p2=scorehead-next,*q2=scorehead; int no,cno; if(p2!=NULL) printf(“输入要删除的学生成绩信息的学号、课程号n“);scanf(“%d%d“,while(p2!=NULL) if(p2-data.no=no)if(p2-o=c
36、no)q2-next=p2-next;free(p2);printf(“该生成绩信息已删除n“);return;q2=p2;p2=p2-next;printf(“文件中无要删除的学生成绩信息n“); else printf(“无任何成绩信息可删除n“); void deleallsc()/全删 ScoreNode *p2=scorehead-next,*q2;if(scorehead-next!=NULL) q2=p2-next;while(q2!=NULL) free(p2);p2=q2;q2=q2-next; free(p2);scorehead-next=NULL;printf(“文件已全删n“);elseprintf(“文件为空 n“);