项目作业:学生成绩管理系统
实验目的:熟悉一维数组作函数参数,排序、查找、统计分析等常用算法,模块化程序设计方法。
实验题目:某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90~ 100)、良好(8089)、中等(7079)、及格(60~69)、不及格5个类别,统计每个类别的人数以及所占的百分比;
(7)输出每个学生的学号、考试成绩,课程总分和平均分。
[思考题]如果要求程序运行后先显示如下菜单,并提示用户输入选项:
int main()
{
int choose=0;
int a[N+1];
do
{
printf(" \n");
printf("学生成绩管理程序");
printf(" \n");
printf("1.录入每个学生的学号和考试成绩:\n");
printf("2.计算课程的总分和平均分:\n");
printf("3.按成绩由高到底排出名次表:\n");
printf("4.按学号由小到大排出成绩表:\n");
printf("5.按学号查询查询学生排名及其考试成绩:\n");
printf("6.统计每个类别的人数以及所占比例:\n");
printf("7.输入每个学生的学号、考试成绩、课程总分和平均分:\n");
printf(" 0.退出程序\n");
printf(" **\n");
printf(" 请输入选项编号:");
scanf("%d",&choose);
switch(choose)
{
case 1:
{
int i=0;
printf("\n 输入学生成绩:");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
}
break;
case 2:
{
int i=0;
printf("学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)
printf("%4d",a[i]);
printf("\n");
}
break;
case 3:
{
int i=0,x=0;
printf("输入要查找的成绩:\n");
scanf("%d",&x);
printf("\n 学生成绩如下:");
printf(" ");
for(i-0;i<N;i++)
if(xa[i]!=-1)
printf("%4d",a[i]);
printf(" ");
for(i=0;i<N;i++)
if(xa[i])
break;
if(i<N)
printf("要查找的成绩在数组的下标:%d\n",i);
else
printf("查找的成绩:%d不存在!\n",x);
}
break;
case 4:
{
int max=a[0],i;
printf("学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)
printf("\n");
for(i=1;i<N;i++)
{
if(max<a[i])
max=a[i];
}
printf("\n 最高分的成绩是:%d\n",max);
}
break;
case 5:
{
int i=0,k=0,s;
printf("\n 成绩的原始顺序:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a [i]!=-1) /-1 表示成绩已删除,为删除成绩做准备/
printf("%4d",a[i]);
printf("\n");
printf("请输入要插入成绩位置序号与成绩:");
scanf("%d%d",&k,&s);
for(i=N;i>=k+1;i--)
a[i]=a[i-1];
a[k]=s;
printf(" 插入成绩后的顺序:\n");
printf(" ");
for(i=0;i<N+1;i++)
printf("%4d",a[i]);
printf("\n");
}
break;
case 6:
{
int i,s;
printf("\n 删除前的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1) /-1表示成绩已删除,为删除成绩做准备/
printf("%4d",a[i]);
printf("\n");
printf(" 请输入要删除的成绩:");
scanf("%d",&s);
for(i=0;i<N;i++)
{
if(s==a[i])
{
a[i]=-1;/加删除标记*/
break;
}
}
printf("\n 删除后的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)/*-1表示成绩已经删除,为删除成绩做准备*/
printf("%4d",a[i]);
printf("\n");
}
case 7:
{
int i=0,j=0,k=0,t=0;
printf("\n 排序前的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;1<N;i++)
if(a[i]!=-1)/*-1表示成绩已删除,为删除成绩做准备*/
printf("%4d",a[i]);
for(i=0;i<N-1;i++)
{
k=i;
for(j=k+1;j<N;j++)
if(a[k]<a[j]) k=j;
if(k>i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n 排序后的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1) /*-1表示成绩已删除,为删除成绩做准备*/
printf("%4d",a[i]);
printf("\n");
}
break;
case 0: exit(0);
default : printf(" 为非法选项!\n");
}
}
while(1);
return 0;
}
Hi,要问程序如何修改,先把目前实现的程序发出来看看
int main()
{
int choose=0;
int a[N+1];
do
{
printf(" \n");
printf("学生成绩管理程序");
printf(" \n");
printf("1.录入每个学生的学号和考试成绩:\n");
printf("2.计算课程的总分和平均分:\n");
printf("3.按成绩由高到底排出名次表:\n");
printf("4.按学号由小到大排出成绩表:\n");
printf("5.按学号查询查询学生排名及其考试成绩:\n");
printf("6.统计每个类别的人数以及所占比例:\n");
printf("7.输入每个学生的学号、考试成绩、课程总分和平均分:\n");
printf(" 0.退出程序\n");
printf(" **\n");
printf(" 请输入选项编号:");
scanf("%d",&choose);
switch(choose)
{
case 1:
{
int i=0;
printf("\n 输入学生成绩:");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
}
break;
case 2:
{
int i=0;
printf("学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)
printf("%4d",a[i]);
printf("\n");
}
break;
case 3:
{
int i=0,x=0;
printf("输入要查找的成绩:\n");
scanf("%d",&x);
printf("\n 学生成绩如下:");
printf(" ");
for(i-0;i<N;i++)
if(xa[i]!=-1)
printf("%4d",a[i]);
printf(" ");
for(i=0;i<N;i++)
if(xa[i])
break;
if(i<N)
printf("要查找的成绩在数组的下标:%d\n",i);
else
printf("查找的成绩:%d不存在!\n",x);
}
break;
case 4:
{
int max=a[0],i;
printf("学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)
printf("\n");
for(i=1;i<N;i++)
{
if(max<a[i])
max=a[i];
}
printf("\n 最高分的成绩是:%d\n",max);
}
break;
case 5:
{
int i=0,k=0,s;
printf("\n 成绩的原始顺序:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a [i]!=-1) /-1 表示成绩已删除,为删除成绩做准备/
printf("%4d",a[i]);
printf("\n");
printf("请输入要插入成绩位置序号与成绩:");
scanf("%d%d",&k,&s);
for(i=N;i>=k+1;i--)
a[i]=a[i-1];
a[k]=s;
printf(" 插入成绩后的顺序:\n");
printf(" ");
for(i=0;i<N+1;i++)
printf("%4d",a[i]);
printf("\n");
}
break;
case 6:
{
int i,s;
printf("\n 删除前的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1) /-1表示成绩已删除,为删除成绩做准备/
printf("%4d",a[i]);
printf("\n");
printf(" 请输入要删除的成绩:");
scanf("%d",&s);
for(i=0;i<N;i++)
{
if(s==a[i])
{
a[i]=-1;/加删除标记*/
break;
}
}
printf("\n 删除后的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1)/*-1表示成绩已经删除,为删除成绩做准备*/
printf("%4d",a[i]);
printf("\n");
}
case 7:
{
int i=0,j=0,k=0,t=0;
printf("\n 排序前的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;1<N;i++)
if(a[i]!=-1)/*-1表示成绩已删除,为删除成绩做准备*/
printf("%4d",a[i]);
for(i=0;i<N-1;i++)
{
k=i;
for(j=k+1;j<N;j++)
if(a[k]<a[j]) k=j;
if(k>i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n 排序后的成绩:");
printf("\n 学生成绩如下:\n");
printf(" ");
for(i=0;i<N;i++)
if(a[i]!=-1) /*-1表示成绩已删除,为删除成绩做准备*/
printf("%4d",a[i]);
printf("\n");
}
break;
case 0: exit(0);
default : printf(" 为非法选项!\n");
}
}
while(1);
return 0;
}
你怕不是想要我们帮你写吧?
已经写出来了哦
我觉得可以,封装些方法吧,除菜单外,其他最好不要有打印语句,把要打印的内容作为方法的输出。
代码太乱,建议格式化一下,本编辑器支持代码格式化
– 会长 2年前