版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
通信工程C语言强化训练实验报告
学号:
姓名:
李惠
提交日期:
2010-6-27
成绩:
评语:
教师签字:
东北大学秦皇岛分校计算机工程系
动态建立学生成绩管理程序
强化训练目的
C语言基本知识的巩固和综合运用。基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体。
C语言高级编程。链表基本操作、文件的基本操作、图形和声音制作。
程序的结构化设计。
编辑、设置、编译、调试、执行。
C语言结合实际问题的综合设计。
2、设计题目功能
(1)、可以在计算机上输入n个学生的学号、姓名、m门课程的成绩并存档,并能够打印(显示)出学生信息;
(2)、能够自动计算出每个学生的总分和平均分,能按总分由大到小统计出总名次并打印;
(3)、可以自动找出成绩在全班平均分及平均分之上的学生名单和某门课不及格的学生名单并打印。
设计题目要求
从键盘输入一个班n(未知)个学生的学号、姓名、m(未知)门课的成绩,分别统计下列内容:
1.统计每个学生的总分和平均分;
2.按总分由大到小排出名次;
3.打印出成绩在全班平均分及平均分之上的学生名单;
4.打印出某门课不及格的学生名单
4、程序流程图
传统程序流程图如下:
<1>算法函数流程图:
(1)(2)
(3)(4)
(5)(6)
<2>主函数流程图:
abcdef
开始
menu_select()=?
3
4
5
0
1
2
6
system("pause");
exit(0);
结束
无条件
=1\*GB3
①
=2\*GB3
②
=3\*GB3
③
=4\*GB3
④
=5\*GB3
⑤
=6\*GB3
⑥
主函数流程图
d
=4\*GB3
④
c
=1\*GB3
①
Input(stud,n)j进行输入
=1\*alphabetic
a
Display(stud,n)进行输出
=2\*GB3
②
=2\*alphabetic
b
=3\*GB3
③
all(stud,n)求总分
aver(stud,n)求平均分
all(stud,n)求总分
sort(stud,n)排序
输出:“每个学生的总分和平均分:”
输出:“按总分由大到小排名:”
输出每个学生的总分和平均分
输出按总分由大到小排名
输出:“下面进行学生信息输入”
输出:“所有学生信息如下”
主函数流程图
5、主要代码
#include<stdio.h>/*调用头文件,引用库函数*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#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<n+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<n+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<n+1;i++){
a+=stud[i-1].all_score;
b=a/n;
}
returnb;
}/**************************************************************/
voidaver(Studentstud[],intn){/*每个学生的平均分*/
inti;
all(stud,n);
for(i=1;i<n+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<n-1;i++)/*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(stud[j].all_score<stud[j+1].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<m+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<n+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<n+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<n+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<n+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");
br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内墙节能腻子施工方案
- 小学体育学科校内调研测试方案
- 云南省德宏州梁河县遮岛中心学校2024年三上数学期末质量跟踪监视模拟试题含解析
- 云南省丽江地区2025届六年级数学第一学期期末教学质量检测模拟试题含解析
- 云南省文山市2025届数学三上期末综合测试模拟试题含解析
- 云县2024-2025学年六年级数学第一学期期末检测模拟试题含解析
- 地坪材料租赁合同模板
- 中介房屋出售合同模板
- 地道汽车租赁合同模板
- 化妆培训机构合伙合同模板
- TDT 1083-2023 国土调查数据库更新数据规范
- 房屋建筑的白蚁防治措施
- 电气化铁路接触网钢支柱 第3部分钢管支柱
- 口腔医院门诊患者预约诊疗制度
- 桥梁施工质量控制培训考题试卷及答案(共5页)
- 修辞与句子仿写(课堂PPT)
- 八年级数学课程说明书
- 季度酒店工程部设备维修保养计划
- 浅析电力市场稳定性与风险管理
- 微信公众号代运营协议书.doc
- 明州大桥主桥施工方案
评论
0/150
提交评论