一个作业照着自己的思维去想真的是这么长..

感觉上没有充分去运用函数或者是没有用更精简的方式去写阿..

函数差不多都是无返回值类型的..貌似又比之前好..之前就都是全局变量..老师说尽量别用太多全局变量..

#include<stdio.h>

#define N 30
double 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值