通信工程C语言课程设计报告.docx
- 文档编号:27483568
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:19
- 大小:771.47KB
通信工程C语言课程设计报告.docx
《通信工程C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《通信工程C语言课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
通信工程C语言课程设计报告
通信工程C语言强化训练实验报告
学号:
4090831
姓名:
李惠
提交日期:
2010-6-27
成绩:
评语:
教师签字:
东北大学秦皇岛分校计算机工程系
动态建立学生成绩管理程序
1、强化训练目的
a)C语言基本知识的巩固和综合运用。
基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体。
b)C语言高级编程。
链表基本操作、文件的基本操作、图形和声音制作。
c)程序的结构化设计。
d)编辑、设置、编译、调试、执行。
e)C语言结合实际问题的综合设计。
2、设计题目功能
(1)、可以在计算机上输入n个学生的学号、姓名、m门课程的成绩并存档,并能够打印(显示)出学生信息;
(2)、能够自动计算出每个学生的总分和平均分,能按总分由大到小统计出总名次并打印;
(3)、可以自动找出成绩在全班平均分及平均分之上的学生名单和某门课不及格的学生名单并打印。
3、设计题目要求
从键盘输入一个班n(未知)个学生的学号、姓名、m(未知)门课的成绩,分别统计下列内容:
1.统计每个学生的总分和平均分;
2.按总分由大到小排出名次;
3.打印出成绩在全班平均分及平均分之上的学生名单;
4.打印出某门课不及格的学生名单
4、程序流程图
传统程序流程图如下:
<1>算法函数流程图:
(1)
(2)
(3)(4)
(5)(6)
<2>主函数流程图:
5、主要代码
#include
#include
#include
#include
#defineM15/*宏定义*/
#defineN80
intm;/*用于记录科目数*/
/******************************************************************/
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学生学号*/
charname[20];/*学生姓名姓名*/
intscore[M];/*单科成绩*/
intall_score;/*总分*/
intaver_score;/*平均分*/
}Student;
Studentstud[N];/*结构体数组变量*/
/*******************************************************************/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");/*运行前清屏*/
printf("\t\t*****学生成绩管理系统*******************\n");/*菜单选择*/
printf("\t\t1.输入学生信息\n");
printf("\t\t2.打印(显示)学生信息\n");
printf("\t\t3.统计每个学生的总分和平均分并打印(显示)\n");
printf("\t\t4.按总分由大到小排出名次并打印(显示)\n");
printf("\t\t5.打印(显示)出成绩在全班平均分及平均分之上的学生名单\n");
printf("\t\t6.打印(显示)出某门课不及格的学生名单\n");
printf("\t\t0.退出系统\n");
printf("\t\t*****************************************\n");
printf("\t\t请从0到6选择操作");
c=getchar();/*读入选择*/
}while(c<'0'||c>'9');
return(c-'0');/*返回选择*/
}
/**************************************************************************/
intInput(Studentstud[],intn)/*输入若干个学生数据*/
{
inti=0,j;
charsign,x[16];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\t\t该学生学号:
");/*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t该学生姓名:
");
scanf("\t\t\t%s",stud[n+i].name);
charc='y';
for(j=1;j<=M;j++){
if(c!
='n'&&c!
='N'){
printf("\t\t该学生的第%d科成绩(若输入完成,直接输入-1结束):
",j);
m=j;
scanf("\t\t%d",&stud[n+i].score[j-1]);
if(stud[n+i].score[j-1]==-1)break;
}
}
gets(x);/*清除多余的输入*/
printf("\t\t还要输入其他学生数据吗?
(Y/N)");
scanf("\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
/**************************************************************************/
voidDisplay(Studentstud[],intn){/*显示所有学生的信息*/
inti;
printf("\t\t-----------------------------------\n");/*格式头*/
printf("\t\t学号姓名成绩123...\n");
printf("\t\t-----------------------------------\n");
for(i=1;i { printf("\t\t%-15s%-16s",stud[i-1].num,stud[i-1].name); intj=1; do{ printf("%d",stud[i-1].score[j-1]); j++;} while(stud[i-1].score[j-1]! =-1); printf("\n"); } printf("\t\t"); system("pause"); } /******************************************************************/ voidall(Studentstud[],intn){/*统计每个学生的总分*/ inti; for(i=1;i stud[i-1].all_score=0; intj=0; while(stud[i-1].score[j]! =-1){ stud[i-1].all_score+=stud[i-1].score[j]; j++;} } } /********************************************************************/ intall_aver(Studentstud[],intn){/*全班平均分*/ inta=0,b=0; all(stud,n); for(inti=1;i a+=stud[i-1].all_score; b=a/n; } returnb; }/**************************************************************/ voidaver(Studentstud[],intn){/*每个学生的平均分*/ inti; all(stud,n); for(i=1;i stud[i-1].aver_score=stud[i-1].all_score/m;} } /********************************************************************/ voidsort(Studentstud[],intn){/*按总分排序*/ inti,j,*p,*q,s; chart[20]; for(i=0;i for(j=0;j if(stud[j].all_score {strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=&stud[j+1].all_score; q=&stud[j].all_score; s=*p; *p=*q; *q=s; p=&stud[j+1].aver_score; q=&stud[j].aver_score; s=*p; *p=*q; *q=s; for(intk=1;k s=stud[j+1].score[k-1]; stud[j+1].score[k-1]=stud[j].score[k-1]; stud[j].score[k-1]=s; } } } /****************************************************************/ voidhigh(Studentstud[],intn){/*输出总分在全班平均分及平均分之上的学生名单*/ inti; all(stud,n); printf("\t\t-----------------------------------\n");/*格式头*/ printf("\t\t学号姓名总分全班平均分\n"); printf("\t\t-----------------------------------\n"); for(i=1;i {if(stud[i-1].all_score>=all_aver(stud,n)) printf("\t\t\t%-16s%-15s%d%d\n", stud[i-1].num,stud[i-1].name,stud[i-1].all_score,all_aver(stud,n)); if(i>1&&i%10==0)/*每十个暂停*/ {printf("\t\t-----------------------------------\n");/*格式*/ printf("\t\t"); system("pause"); printf("\t\t-----------------------------------\n"); } } printf("\t\t"); system("pause"); }/********************************************************************/ voidunpass(Studentstud[],intn){/*输出某门课程不及格学生名单*/ intj,i; printf("\t\t你要查看哪一科不及格的学生名单? \n\t\t请输入课程号"); scanf("%d",&j); printf("\t\t不及格学生名单: \n"); printf("\t\t-----------------------------------\n");/*格式头*/ printf("\t\t学号姓名课程号分数\n"); printf("\t\t-----------------------------------\n"); for(i=1;i if(stud[i-1].score[j-1]<60){ printf("\t\t%-16s%-15s%d%d\n", stud[i-1].num,stud[i-1].name,j,stud[i-1].score[j-1]); }} printf("\t\t"); system("pause"); } /****************************************************************************/ voidmain(){/*主函数***********************************************************/ intn=0; for(;;) {inti; switch(menu_select())/*选择判断*/ { case1: printf("\t\t下面进行学生信息输入: \n");/*输入若干条记录*/ n=Input(stud,n); break; case2: printf("\t\t所有学生信息如下: \n");/*显示所有记录*/ Display(stud,n); break; case3: printf("\t\t每个学生的总分和平均分: \n"); all(stud,n);/*求每个学生的总分*/ aver(stud,n);/*求每个学生的平均分*/ printf("\t\t-----------------------------------\n");/*格式头*/ printf("\t\t学号姓名总分平均分\n"); printf("\t\t-----------------------------------\n"); for(i=1;i printf("\t\t%-10s%-20s%d%d\n", stud[i-1].num,stud[i-1].name,stud[i-1].all_score,stud[i-1].aver_score); printf("\t\t"); system("pause"); break; case4: printf("\t\t按总分由大到小排名: \n"); all(stud,n); sort(stud,n); printf("\t\t-----------------------------------\n");/*格式头*/ printf("\t\t学号姓名总分\n"); printf("\t\t-----------------------------------\n"); for(i=1;i printf("\t\t%s%s%d\n", stud[i-1].num,stud[i-1].name,stud[i-1].all_score); printf("\t\t"); system("pause"); break; case5: printf("\t\t成绩在平均分及平均分之上的学生: \n"); high(stud,n); break; case6: unpass(stud,n); break; case0: printf("\t\t谢谢使用! \n");/*结束程序*/ printf("\t\t"); system("pause"); exit(0); } } } 运行结果截屏如下: 菜单选项一: 输入学生信息: 菜单选项二: 打印学生信息 菜单选项三: 统计每个学生的总分和平均分并打印 菜单选项四: 按总分由大到小排出名次并打印 菜单选项五: 打印出成绩在全班平均分及平均分之上的学生名单 菜单选项六: 打印出某门不及格学生名单 菜单选项0: 退出系统 6、强化训练心得体会 通过这紧张一周的C语言课程设计的制作,我收获不小,不仅捡回了遗忘多半的C语言知识,而且通过对题目的分析、代码的编写和报告的制作发现并解决了很多问题,查阅了很多资料,请教很多高手、学长学姐,还跟队友们一起探讨、交流、争论、合作,相信我们这个团队每个成员的团队精神和合作能力都得到了很大的提高。 由于我们是上学期学习C语言的,并且课程结束的比较仓促,所以在课程设计的过程中,一开始感觉一头雾水,遇到了很多问题,许多课本上的知识不够灵活地掌握,所以进行了反复的修改和调试,一次次实验,查资料,补充,另寻方法,才一步步讲程序补充完整。 在此过程中,加深了对数组,函数,循环体,条件判断的理解病能够熟练运用;并且能够熟练使用变量,字符串;还练习了冒泡排序法等,我们每个人的C语言知识都得到了很大的巩固,能力上也提高了一个台阶。 虽然此次课程设计得以顺利完成,但是还是有很多不足之处,对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不太熟悉,修改的时候遇到了很大的困难,很多地方编的有些啰嗦。 希望老师可以帮我们指出和修改,谢谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信工程 语言 课程设计 报告