1、C语言程序设计课程设计评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业: 自动控制 班 级: 控 2 姓 名: 学 号: 指导教师: 一、引言C语言课程设计是为电子科学与技术等专业学生开设的专业基础实践课程,本课程是一门必修课,是在学习C语言程序设计课程之后进行的一个实践教学环节。课程设计的目的是: 1、进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。 2、 针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。 3、掌握C语言的编程技巧和上机调试程序的方法。 4、掌握程序
2、设计的常用算法。二、基础题1题目编写求以下函数。2解题思路用三个for循环先分别计算出m,n.(m-n)的阶乘,然后计算函数。3. 源程序#includeint main()int m,n,i,j,k;int C,C1=1,C2=1,C3=1;printf(输入两个正整数m,n(mn):n);scanf(%d %d,&m,&n);for(i=1;i=m;i+)C1=C1*i;for(j=1;j=n;j+)C2=C2*j;for(k=1;k=(m-n);k+)C3=C3*k;C=C1/(C2*C3);printf(m=%dnn=%dn,m,n);printf(C=%dn,C);return 0;
3、4. 流程图图1.1 基础题流程图5. 运行结果在程序中输入正整数10和8运行结果如图1.2所示。 图1.2二、改错题1题目给定程序MODI1.C中,fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。程序如下:#include int fun ()int a 3 3, sum;int i, j;_;for (i=0;i3;i+) for (j=0;j3;j+) scanf (%d a i j); for (i
4、=0; i3; i+)sum=sum*ai i;printf (Sum=%dn, sum);main () fun (); 2错误分析#include int fun ()int a 3 3, sum;int i, j;_ /sum未附初值for (i=0;i3;i+) for (j=0;j3;j+) scanf (%d a i j); /输入的格式控制符不对,后面的变量未取地址 for (i=0; i3; i+)sum=sum*ai i;printf (Sum=%dn, sum); /换行符缺少“”main () fun (); 3流程图 图2.1 调用函数流程图 图2.2 主函数流程图4改
5、正后的源程序#include int fun ()int a33, sum;int i,j;sum=1;for(i=0;i3;i+) for (j=0;j3;j+) scanf(%d,&aij); for (i=0; i3; i+)sum=sum*ai i;printf (Sum=%dn, sum);main () fun (); 5运行结果该函数的功能是计算一个三阶矩阵的对角线个元素的乘积,输入1、2、3、6、5、4、7、8、9对角线的元素分别为1、5、9,运行结果如图2.3所示。图2.3三、综合题1题目问题描述:对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修
6、改、删除、保存等操作的管理。功能要求:1. 本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。2. 本系统显示这样的菜单:请选择系统功能项:a. 学生基本信息录入b. 学生基本信息显示c. 学生基本信息保存d. 学生基本信息删除e. 学生基本信息修改(要求先输入密码)f. 学生基本信息查询(1) 按学号查询(2) 按姓名查询(3) 按性别查询(4) 按年龄查询g. 退出系统3. 执行一个具体的功能之后,程序将重新显示菜单。4. 将学生基本信息保存到文件中。5. 进入系统之前要先输入密码。算法提示:1 数据结构:结构体类型数组2 数据库结构:下表构成该
7、系统的基本数据库。姓名学号性别年龄备注charcharcharintchar测试数据:学生人数N=10其它:对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。2. 解题思路2.1 程序的模块组成: 本程序由void menu()函数、void input()函数、void save(int)函数、void display()函数、void del()函数、void add()函数、void search()函数、void search_num()函数、void search_name()函数、void search_sex()函数、void search_age()函数void
8、 modify()函数共十二个函数组成。2.2各个调用函数的功能的实现如下:1)信息的录入主要运用循环语句将各个学生的信息依次输入。2)信息的显示主要运用循环语句将各个学生的信息依次显示出来。3)信息的保存是将信息重写到保存文件中,信息保存在c:student.text 中。4)信息的删除是运用字符串运用函数,将空格复印到信息字符上达到删除效果。5)信息的修改是输入学号用循环语句将需修改的信息显示出来,然后再输入新信息。6)信息的查询是通过switch语句将查询方式连接起来,并在各个查询方式中用循环语句将要查询的信息显示出来。3流程图图3.1 主函数模块图图3.2 save函数流程图图3.3
9、del函数流程图4源程序:#include #include #include #define N 100struct student char num10; char name10; char sex; char age10; char beizhu50; char pass10;st100;void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_name();void search_sex();void s
10、earch_age();void modify();void menu() printf(n); printf( *欢*迎*使*用*n); printf(n); printf(n); printf(n); printf( *学生档案管理*n); printf(n); printf( 1.录入学生信息); printf( 2.显示学生信息n); printf( 3.查询学生信息); printf( 4.删除学生信息n); printf( 5.添加学生信息); printf( 6.修改学生信息n); printf( 7.退出n); printf(n); printf( *谢谢使用*n); prin
11、tf(n); printf(n); printf( 自动控制n); printf(n); printf(n); printf( 管理员:马军 马建华 李雪菲n); printf(n); printf(n); void main() menu(); /调用菜单函数/ int n,flag; char a; do printf(请选择你需要操作的步骤(1-7):n); scanf(%d,&n); if(n=1&n=7) flag=1; break; else flag=0; printf(您输入有误,请重新选择!); while(flag=0); while(flag=1) switch(n) c
12、ase 1:printf( 输入学生信息 n);printf(n);input();break; case 2:printf( 显示学生信息 n);printf(n);display();break; case 3:printf( 查询学生信息 n);printf(n);search();break; case 4:printf( 删除学生信息 n);printf(n);del();break; case 5:printf( 添加学生信息 n);printf(n);add();break; case 6:printf( 修改学生信息 n);printf(n);modify();break; c
13、ase 7:printf(欢迎下次光临n);exit(0);break; default :break; getchar(); printf(n); printf(是否继续进行(y or n):n); scanf(%c,&a); if(a=y) flag=1; system(cls); menu(); printf(请再次选择你需要操作的步骤(1-7):n); scanf(%d,&n); printf(n); else exit(0); void input() int i,m; printf(请输入需要创建信息的学生人数(1-100):n); scanf(%d,&m); for (i=0;i
14、m;i+) printf(请输入学号: ); scanf(%s,sti.num); getchar(); printf(请输入姓名: ); scanf(%s,sti.name); getchar(); printf(请输入性别(f-女 m-男): ); scanf(%c,&sti.sex); printf(请输入年龄: ); scanf(%s,&sti.age); getchar(); printf(请输入备注: ); scanf(%s,sti.beizhu); printf(请输入密码: ); scanf(%s,sti.pass); getchar(); printf(n); printf(
15、n创建完毕!n); save(m);void save(int m) int i; FILE*fp; if (fp=fopen(c:student.txt,wb)=NULL) printf (cannot open filen); exit(0); for (i=0;im;i+) if (fwrite(&sti,sizeof(struct student),1,fp)!=1) printf(file write errorn); fclose(fp);int load() FILE*fp; int i=0; if(fp=fopen(c:student.txt,rb)=NULL) printf
16、(cannot open filen); exit(0); else do fread(&sti,sizeof(struct student),1,fp); i+; while(feof(fp)=0); /判断指针是否已经到达文件尾部/ fclose(fp); return(i-1);void display() int i; int m=load();printf(n 学号 姓名 性别 年龄 备注n); for(i=0;im;i+) printf(n%5s %st%8ct%7st %sn,sti.num,sti.name,sti.sex,sti.age,sti.beizhu); void d
17、el() int m=load(); int i,j,n,t,flag; char name20; printf(n 原来的学生信息:n); display(); /调用显示函数/ printf(n); printf(请输入要删除的学生的姓名:n); scanf(%s,name); for(flag=1,i=0;flag&im;i+) if(strcmp(sti.name,name)=0) printf(n已找到此人,原始记录为:n); printf(n 学号 姓名 性别 年龄 备注n); printf(n%5s %st%8ct%7st %sn,sti.num,sti.name,sti.sex
18、,sti.age,sti.beizhu); printf(n确实要删除此人信息请按1,不删除请按0n); scanf(%d,&n); if(n=1 for(j=i;jm-1;j+) strcpy(stj.name,stj+1.name); strcpy(stj.num,stj+1.num); stj.sex=stj+1.sex; strcpy(stj.age,stj+1.age); strcpy(stj.beizhu,stj+1.beizhu); flag=0; if(!flag) m=m-1; else printf(n对不起,查无此人!n); printf(n 浏览删除后的所有学生信息:n
19、); save(m); /调用保存函数/ display(); /调用显示函数/ printf(n继续删除请按1,不再删除请按0n); scanf(%d,&t); switch(t) case 1:del();break; case 0:break; default :break; void add() FILE*fp; int n; int count=0; int i; int m=load(); printf(n 原来的学生信息:n); display(); /调用显示函数/ printf(n); fp=fopen(student_list,a); printf(请输入想增加的学生数:n
20、); scanf(%d,&n); for (i=m;i=1&t=5) flag=1; break; else flag=0; printf(您输入有误,请重新选择!); while(flag=0); while(flag=1) switch(t) case 1:printf(按学号查询n);search_num();break; case 2:printf(按姓名查询n);search_name();break; case 3:printf(按性别查询n);search_sex();break;case 4:printf(按年龄查询n);search_age();break; case 5:m
21、ain();break; default:break; void search_num() char num10; int i,t; int m=load(); printf(请输入要查找的学号:n); scanf(%s,num); for(i=0;im;i+) if(strcmp(sti.num,num)=0) /比较两个字符串/ printf(n已找到此人,其记录为:n); printf(n 学号 姓名 性别 年龄 备注n); printf(n%5s %st%8ct%7st %sn,sti.num,sti.name,sti.sex,sti.age,sti.beizhu); break; i
22、f(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询学号请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2: break; default:break; void search_name() char name10; int i,t; int m=load(); printf(请输入要查找的姓名:n); scanf(%s,name); for(i=0;im;i+) if(strcmp(sti.name,name)=0) printf(n已找到,其记录为:n);
23、 printf(n 学号 姓名 性别 年龄 备注n); printf(n%5s %st%8ct%7st %sn,sti.num,sti.name,sti.sex,sti.age,sti.beizhu); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询姓名请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default :break; void search_sex() char sex; int i,t; int m=lo
24、ad(); printf(请输入要查找的性别:n); scanf(%s,&sex); for(i=0;im;i+) if(sex=sti.sex) printf(n已找到此人,其记录为:n); printf(n 学号 姓名 性别 年龄 备注n); printf(n%5s %st%8ct%7ct %sn,sti.num,sti.name,sti.sex,sti.age,sti.beizhu); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询性别请按2n); scanf(%d,&t); switch(t) ca
25、se 1:search();break; case 2:break; default :break; void search_age() char age10; int i, t; int m=load(); printf(请输入要查找的年龄:n); scanf(%d,&age); for(i=0;im;i+) if(strcmp(sti.age,age)=0) printf(n已找到此人,其记录为:n); printf(n 学号 姓名 性别 年龄 备注n); printf(n%5s %st%8ct%7st %sn,sti.num,sti.name,sti.sex,sti.age,sti.be
26、izhu); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询年龄请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default :break; void modify() char num10; char name10; char sex; char age10; char beizhu50; char pass10; int b,c,i,n,t,flag,w; int m=load(); /导入文件内的信息/ prin
27、tf(n 原来的学生信息:n); display(); /调用显示函数/ printf(n); printf(请输入要修改的学生的姓名:n); scanf(%s,name); for(flag=1,i=0;flag&i6|c1) printf(n选择错误,请重新选择!n); flag=0; w=0; else w=1; flag=0; if(w=1) printf(密码错误!n); printf(按ENTER键返回n); scanf(%d,&c); switch(c) case 1:main();break; default:main();break; if(flag=1) printf(n对
28、不起,查无此人!n); do switch(c) case 1:printf(学号改为: ); scanf(%s,num); strcpy(sti-1.num,num); break; case 2:printf(姓名改为: ); scanf(%s,name); strcpy(sti-1.name,name); break; case 3:printf(性别改为: ); getchar(); scanf(%c,&sex); sti-1.sex=sex; break; case 4:printf(年龄改为: ); scanf(%s,&age); strcpy(sti-1.age,age); br
29、eak; case 5:printf(备注改为: ); scanf(%s,beizhu); strcpy(sti-1.beizhu,beizhu); break; printf(n); printf(n是否确定所修改的信息?n 是 请按1 ; 不,重新修改 请按2: n); scanf(%d,&b); while(b=2); printf(n显示修改后的所有学生信息:n); printf(n); save(m); display(); printf(n继续修改请按1,不再修改请按0n); scanf(%d,&t); switch(t) case 1:modify();break; case 0
30、:break; default :break; 5运行结果图该班级档案管理系统主要由模块化的函数组成,各个函数运用循环以及选择等C语言控制语句来实现各自的功能,然后通过main函数连接起来,在使用过程中通过调用各个函数来实现其功能,输入后的信息以文本文档的形式保存在c:student.text中,各个函数的运行结果图以及保存的文档分别如下图所示。图3.4 input函数运行结果图图3.5 menu函数运行结果图图3.6 add函数运行结果图图3.7 search函数运行结果图图3.8 del函数运行结果图图3.9 search_name函数运行结果图图3.10 saerch_sex函数运行结果
31、图图3.11 display函数运行结果图图3.12 seach_num函数运行结果图图3.13 seach_name函数运行结果图图3.14 search_age函数运行结果图图3.15 student文本文档图四、总结 这次的C语言程序设计课程是对我们进入大学以来学习程序语言结果的一次大检验。自己动手,自己发现和解决问题。通过这次课程设计,发现了自己的许多不足,平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获也是不小的,我不仅对C语言的编程有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式,以及在以后的学习过程中如何解决遇到的问题,通过与同学合作做综合题,锻炼了我的团队合作意识。当我选择班级档案管理系统这个题目时,一开始想运用大量指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用指针,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺