学生姓名: 学 号: 专业班级: 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期:
实验项目: 学生成绩管理系统
一、实验目的和要求
目的:
1.掌握三种程序基本结构;
2.熟练使用数组、用户自定义函数等相关知识进行程序设计;
3.熟悉结构化程序设计语言思想编写程序代码;
4.理解和掌握C语言的语法以及三种基本程序结构的综合应用;
5.熟悉排序、查找、统计分析等常用算法
6.熟悉C语言的编程和调试环境,培养学生用计算机解决实际问题的能力 要求:根据实验内容,认真编写源程序代码、上机调试程序,书写实验报告。
二、实验内容
综合利用所学C语言三种程序基本结构以及数组(或指针)、用户自定义函数等相关知识进行一个小型学生成绩管理系统的设计与实现,具体内容如下: 某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,实现如下的学生成绩管理系统:
(1)录入每个学生的学号和考试成绩
(2)计算课程的总分和平均分
(3)按成绩由高到低排出名次表
(4)按学号由小到大排出成绩表
(5)按学号查询学生考试成绩
(6)按优秀(90-100分)、良好(80-89分)、中等(70-79分)、及格(60-69分)、不及格(0-59分)5个类别,统计每个类别的人数及其所占百分比
(7)输出每个学生的学号、考试成绩
三、实验步骤
1.仔细阅读实验要求和书上的相关内容,在磁盘上新建以学号姓名命名的文件夹。
2.编写程序代码、编译、连接及运行程序、查找程序中的错误
3.函数及功能说明
四、完整源程序代码
五、结果分析及总结
分析运行结果,并进行总结(可以从以下几个方面来总结:你在编程过程中对问题是如何分析的?遇到了哪些难题?你是怎么克服的?你的收获有哪些?)
调试代码:
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 30 /*最多的学生人数*/
int Menu(void);
void Readscore (long num[],float score[],int n);
void Aversumofscore(float score[],int n);
void Desortbyscore(long num[],float score[],int n);
void Assortbynum(long num[],float score[],int n);
void searchbynum(long num[],float score[],int n);
void statisticanalysis(float score[],int n);
void printscore(long num[],float score[],int n);
int main()
{ char itemselected;
int n;
float score[STU_NUM];
long num[STU_NUM];
printf("输入学生人数(n<%d)",STU_NUM);
scanf("%d",&n);
while (1)
{ itemselected=Menu(); /*显示菜单,并读取用户输入*/ switch (itemselected)
{case 1: Readscore (num,score, n); break; case 2: Aversumofscore( score, n); break; case 3: Desortbyscore( num,score,n); printf("\n sort in descending order by score:\n"); printscore( num,score,n);
break; case 4: Assortbynum(num,score,n); printf("\n sort in ascending order by score:\n"); printscore( num,score,n);
break; case 5: searchbynum(num,score, n); break; case 6: statisticanalysis( score, n); break; case 7: printscore( num,score,n); break; case 0: exit(0);
/*printf("end of program!"); break;*/ default :printf("input error !"); } break;
}
return 0;
}
/*函数功能:显示菜单项并获得用户键盘输入的选项*/
int Menu(void)
{ int itemselected;
printf("\n 学生成绩管理系统:管理学生成绩\n");
printf("\n 1. 录入每个学生学号和考试成绩\n");
printf("\n 2. 计算班级总分和平均分\n");
printf("\n 3. 按成绩由高到低排出名次表\n");
printf("\n 4. 按学号由小到大排出成绩表\n");
printf("\n 5. 按学号查询学生排名和考试成绩\n");
printf("\n 6. 按优秀(90-100分)、良好(80-89分)、中等(70-79分)、及格(60-69分)、不及格(0-59分)5个类别\n统计每个类别的人数及其所占百分比\n"); printf("\n 7. 输出每个学生的学号、考试成绩\n");
printf("\n 0. 程序结束\n");
printf("\n输入你的选择\n");
scanf ("%d",&itemselected);
return itemselected;
}
/*函数功能:输入n个学生的某门课成绩*/
void Readscore (long num[],float score[],int n)
{
}
/*函数功能:计算全班总分和平均分*/
void Aversumofscore(float score[],int n)
{
}
/*函数功能:将数组score的元素值按从高到低排序,即按成绩从大到小排序*/ void Desortbyscore(long num[],float score[],int n) float d,c; int j; c=0; for(j=0;j<n;j++) { } d=c/n; printf("总分=%f,平均分=%f\n",c,d); c=c+score[j]; int i; printf("请输入学号和分数(学号和分数用空格隔开,回车输入下一个):\n"); for(i=0;i<n;i++) scanf("%ld%f",&num[i],&score[i]);
{
}
/*函数功能:将数组num的元素值按从低到到排序,即按学号从小到大排序*/ void Assortbynum(long num[],float score[],int n)
{
}
/*函数功能:按学号查找学生成绩并显示查找结果*/
void searchbynum(long num[],float score[],int n) float a; long t; int j,i; for(i=0;i<=n-1;i++) for(j=i+1;j<n;j++) if(num[i]>num[j]) {t=num[i];num[i]=num[j];num[j]=t; a=score[i];score[i]=score[j];score[j]=a;} float t; long a; int j,i; for(i=0;i<=n-1;i++) for(j=i+1;j<n;j++) if(score[i]<score[j]) {t=score[i];score[i]=score[j];score[j]=t; a=num[i];num[i]=num[j];num[j]=a;}
{
}
/*函数功能:统计各分数段的学生人数及所占百分比*/ void statisticanalysis(float score[],int n) {
int i;
float t[5]={0,0,0,0,0};
float a;
for(i=0;i<n;i++)
{
if(score[i]>=0&&score[i]<60)t[0]++; else if(score[i]<70&&score[i]>=60)t[1]++; else if(score[i]<80&&score[i]>=70)t[2]++; else if(score[i]<90&&score[i]>=80)t[3]++; else if(score[i]<=100&&score[i]>=90)t[4]++;} int i; long b; printf("请输入学号查找学生成绩\n"); scanf("%ld",&b); for(i=0;i<n;i++) if(num[i]==b) printf("%f",score[i]); for(i=0;i<=5;i++)
{
if(i==0) printf("小于60分共%f人,占%f%%\n",t[i],a=t[i]/n*100); else if(i==1)
printf("大于等于60分小于70分共%f人,占%f%%\n",t[i],a=t[i]/n*100);
else if(i==2)
printf("大于等于70分小于80分共%f人,占%f%%\n",t[i],a=t[i]/n*100);
else if(i==3)
printf("大于等于80分小于90分共%f人,占%f%%\n",t[i],a=t[i]/n*100);
else if(i==4)
printf("大于等于90分小于等于100分共%f人,占%f%%\n",t[i],a=t[i]/n*100);
}
}
/*函数功能:打印学生成绩*/
void printscore(long num[],float score[],int n) {
int i; for(i=0;i<n;i++) printf("%ld %f\n",num[i],score[i]);
}
第二篇:C语言实验报告5模板
宁夏师范学院数学与计算机科学学院
《高级语言程序设计》实验报告
实验序号:5 实验项目名称:循环结构及其测试