感觉上没有充分去运用函数或者是没有用更精简的方式去写阿..
函数差不多都是无返回值类型的..貌似又比之前好..之前就都是全局变量..老师说尽量别用太多全局变量..
#include<stdio.h>
#define N 30double S1/*记录分数并计算总分*/(double x[],long y[],int i)
{
int o;
double z=0;
for(o=0;o<i;o++)
{
printf("请输入第%d个考生的学号与分数:",o+1);
scanf("%lf,%ld",&x[o],&y[o]);
z+=x[o];
}
return z;
}
void S3/*分数排序学号随之排序*/(double x[],long y[],int i)
{
int o,p;
long n;
double c;
for(o=0;o<i;o++)
{
for(p=o+1;p<i;p++)
{
if(x[o]<x[p])
{
c=x[o];
x[o]=x[p];
x[p]=c;
n=y[o];
y[o]=y[p];
y[p]=n;
}
}
printf(" %.2lf %ld\n",x[o],y[o]);
}
}
void S4/*学号排序分数随之排序*/(double x[],long y[],int i)
{
int o,p;
long n;
double c;
for(o=0;o<i;o++)
{
for(p=o+1;p<i;p++)
{
if(y[o]>y[p])
{
c=x[o];
x[o]=x[p];
x[p]=c;
n=y[o];
y[o]=y[p];
y[p]=n;
}
}
printf(" %.2lf %ld\n",x[o],y[o]);
}
}
void S5(double x[],long y[],int i)
{
int o,p,k=1;
long c;
printf("请输入学号:");
scanf("%ld",&c);
for(o=0;o<i;o++)
{
if(c==y[o])
{
for(p=0;p<i;p++)
{
if(x[o]<x[p])
k++;
}
printf("成绩由高到低排序为: 分数 学号 排名\n %.2lf %ld %d\n",x[o],y[o],k);
}
}
}
void S6(double x[],int i)
{
int o;
double y=0,l=0,z=0,j=0,b=0;
for(o=0;o<i;o++)
{
if(x[o]>=90)
{
y++;
}
if(x[o]<=89 && x[o]>=80)
{
l++;
}
if(x[o]<=79 && x[o]>=70)
{
z++;
}
if(x[o]<=69 && x[o]>=60)
{
j++;
}
if(x[o]<=59)
{
b++;
}
}
printf(" 优秀(90~100) 良好(80~89) 中等(70~79) 及格(60~69) 不及格(0~59)\n人数 %.0lf %.0lf %.0lf %.0lf %.0lf\n百分比 %.2lf%% %.2lf%% %.2lf%% %.2lf%% %.2lf%%\n",y,l,z,j,b,y*100/i,l*100/i,z*100/i,j*100/i,b*100/i);
}
void S7(double x[],long y[],int i)
{
int o;
for(o=0;o<i;o++)
{
printf(" %.2lf %ld\n",x[o],y[o]);
}
}
void main()
{
int i/*记录人数*/,s/*菜单选择*/,o=0/*计数器*/;
long y[N]/*记录学号*/;
double x[N]/*记录分数*/,z=0/*记录总分*/;
printf("\n\n--------------------------欢迎使用学生成绩管理系统V1.0--------------------------\n\n\n请输入考生人数:");
scanf("%d",&i);
do{
printf("--------------------------------------菜单--------------------------------------\n(1)录入每个学生的学号和考试成绩.\n(2)计算课程的总分和平均分.\n(3)按成绩由高到低排出名次表.\n(4)按学号由小到大排出成绩表.\n(5)按学号查询学生排名及其考试成绩.\n(6)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)、5个类别,统计每个类别的人数以及所占的百分比.\n(7)输出每个学生的学号、考试成绩,课程总分和平均分.\n(0)退出学生成绩管理系统V1.0\n ");
scanf("%d",&s);
switch (s)
{
case 1:
printf("格式:学号,分数\n例:60,201306114420\n");
z=S1(x,y,i);
break;
case 2:
printf("总分:%.2lf 平均分:%.2lf\n",z,z/i);
break;
case 3:
printf("成绩由高到低排序为: 分数 学号\n");
S3(x,y,i);
break;
case 4:
printf("学号由小到大排序为: 分数 学号\n");
S4(x,y,i);
break;
case 5:
S5(x,y,i);
break;
case 6:
S6(x,i);
break;
case 7:
printf(" 分数 学号\n");
S7(x,y,i);
printf("课程总分:%.2lf 平均分:%.2lf\n",z,z/i);
break;
case 0:
exit(0);
break;
default :exit(0);
}
}while(1);
}