麦克雷

标题: 大佬救命为什么有时候输出的成绩显示0.0,但排名是对的??? [打印本页]

作者: wlqczict42    时间: 前天 12:14
标题: 大佬救命为什么有时候输出的成绩显示0.0,但排名是对的???
#include <stdio.h>
#include <stdlib.h>
#define MAX 99
struct stu
{
int id;
char name[128];
float Chinese;
float math;
float English;
}s[MAX];
void input (int x);//录入信息
void print(struct stu s[],int x);//打印学生信息
void mulu ();//菜单
void sa1(struct stu s[],int x);//查询每个学生的总分和平均分
void sa2(struct stu s[],int x);//查询每门课程的总分和平均分
void allrank(struct stu s[],int x);//查询总成绩排名
void Chineserank(struct stu s[],int x);//查询语文成绩排名
void mathrank(struct stu s[],int x);//查询数学成绩排名
void Englishrank(struct stu s[],int x);//查询英语成绩排名
void query(struct stu s[],int x);//查询信息
void query(struct stu s[],int x)
{
printf("请输入所查询学生的学号:\n");
int id,i,l=1;
scanf("%d",&id);
for(i=1;i<=x;i++)
{
if(id==s.id)
{
printf("学号:%d\n",s.id);
printf("姓名:%s\n",s.name);
printf("语文成绩:%.1f\n",s.Chinese);
printf("数学成绩:%.1f\n",s.math);
printf("英语成绩:%.1f\n",s.English);
l=0;
break;
}
}
if(l)
{
printf("未查询到该学生\n");
}
}
void Englishrank(struct stu s[],int x)
{
struct stu temp,cs[x];
int i,j;
for(i=1;i<=x;i++)
{
cs=s;
}
for(i=1;i<x;i++)
{
for(j=i+1;j<=x;j++)
{
if(cs.English<cs[j].English)
{
temp=cs;
cs=cs[j];
cs[j]=temp;
}
}
}
for(i=1;i<=x;i++)
{
printf("学号:%d       姓名:%s       英语成绩:%.1f        名次:%d\n",cs.id,cs.name,cs.English,i);
}
}
void mathrank(struct stu s[],int x)
{
struct stu temp,cs[x];
int i,j;
for(i=1;i<=x;i++)
{
cs=s;
}
for(i=1;i<x;i++)
{
for(j=i+1;j<=x;j++)
{
if(s.math<s[j].math)
{
temp=cs;
cs=cs[j];
cs[j]=temp;
}
}
}
for(i=1;i<=x;i++)
{
printf("学号:%d       姓名:%s       数学成绩:%.1f        名次:%d\n",cs.id,cs.name,cs.math,i);
}
}
void Chineserank(struct stu s[],int x)
{
struct stu temp,cs[x];
int i,j;
for(i=1;i<=x;i++)
{
cs=s;
}
for(i=1;i<x;i++)
{
for(j=i+1;j<=x;j++)
{
if(cs.Chinese<cs[j].Chinese)
{
temp=cs;
cs=cs[j];
cs[j]=temp;
}
}
}
for(i=1;i<=x;i++)
{
printf("学号:%d       姓名:%s       语文成绩:%.1f        名次:%d\n",cs.id,cs.name,cs.Chinese,i);
}
}
void allrank(struct stu s[],int x)
{
float sum[x],temp2;
struct stu temp1,cs[x];
int i,j;
for(i=1;i<=x;i++)
{
cs=s;
}
for(i=1;i<=x;i++)
{
sum=(float)cs.Chinese+(float)cs.math+(float)cs.English;
}
for(i=1;i<x;i++)
{
for(j=i+1;j<=x;j++)
{
if(sum<sum[j])
{
temp1=cs[j];
cs[j]=cs;
cs=temp1;
temp2=sum[j];
sum[j]=sum;
sum=temp2;
}
}
}
for(i=1;i<=x;i++)
{
printf("学号:%d       姓名:%s       总分:%.1f        名次:%d\n",cs.id,cs.name,sum,i);
}
}
void sa1(struct stu s[],int x)
{
float sum[x],average[x];
int i;
for(i=1;i<=x;i++)
{
sum=s.Chinese+s.math+s.English;
average=sum/3.0;
printf("学号:%d       姓名:%s       总分:%.1f        平均分:%.1f       \n",s.id,s.name,sum,average);
}
}
void sa2(struct stu s[],int x)
{
float sum[3]={0,0,0},average[3]={0,0,0};
int i;
for(i=1;i<=x;i++)
{
sum[1]=sum[1]+s.Chinese;
}
average[1]=sum[1]/x;
printf("语文总分:%.1f   语文平均分:%.1f  \n",sum[1],average[1]);
for(i=1;i<=x;i++)
{
sum[2]=sum[2]+s.math;
}
average[2]=sum[2]/x;
printf("数学总分:%.1f   数学平均分:%.1f  \n",(sum[2],average[2]);
for(i=1;i<=x;i++)
{
sum[3]=sum[3]+s.English;
}
average[3]=sum[3]/x;
printf("英语总分:%.1f   英语平均分:%.1f  \n",sum[3],average[3]);
}
void mulu()
{
printf("=====河地大学生管理系统1.2=====\n");
printf("1.录入信息\n");
printf("2.打印学生信息\n");
printf("3.打印每个学生的总分和平均分\n");
printf("4.打印每门课程的总分和平均分\n");
printf("5.查询总成绩排名\n");
printf("6.查询语文成绩排名\n");
printf("7.查询数学成绩排名\n");
printf("8.查询英语成绩排名\n");
printf("9.查询成绩\n");
printf("10.退出系统\n");
printf(" ======请选择您的操作======= \n");
};
void print(struct stu s[],int x)
{
int i;
for(i=1;i<=x;i++)
{
printf("学号:%d\n",s.id);
printf("姓名:%s\n",s.name);
printf("语文成绩:%.1f\n",s.Chinese);
printf("数学成绩:%.1f\n",s.math);
printf("英语成绩:%.1f\n",s.English);
putchar('\n');
}
};
void input(int x)
{
int i;
for(i=1;i<=x;i++)
{
printf("请录入第%d位学生的学号:",i);
scanf("%d",&s.id);
getchar();
putchar('\n');
printf("请录入第%d位学生的姓名:",i);
scanf("%s",s.name);
putchar('\n');
getchar();
printf("请录入第%d位学生的语文成绩:",i);
scanf("%f",&s.Chinese);
putchar('\n');
getchar();
printf("请录入第%d位学生的数学成绩:",i);
scanf("%f",&s.math);
putchar('\n');
getchar();
printf("请录入第%d位学生的英语成绩:",i);
scanf("%f",&s.English);
putchar('\n');
getchar();
}
printf("=====信息录入完毕=====");
putchar('\n');
};
int main()
{
mulu();
int w;
int x=0;
while(1)
{
scanf("%d",&w);
switch(w)
{
case 1:
printf("请问需要输入几个学生的信息?\n");
scanf("%d",&x);
if(x>0&&x<=MAX)
{
input(x);
}
else
{
printf("输入的学生数量超出范围,请重新输入");
}
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
if(x==0)
{
printf("尚未录入信息,请先看录入信息\n");
}
else
{
switch(w) {
case 2: print(s, x); break;
case 3: sa1(s, x); break;
case 4: sa2(s, x); break;
case 5: allrank(s, x); break;
case 6: Chineserank(s, x); break;
case 7: mathrank(s, x); break;
case 8: Englishrank(s, x); break;
case 9: query(s, x); break;
}
}
break;
case 10:
printf("^-^欢迎下次使用^-^\n");
return 0;
default:
printf("错误操作,请重新正确操作\n");
break;
}
}
return 0;
}

(, 下载次数: 0)

(, 下载次数: 0)
我选择操作6和7后,输出的语文成绩数学成绩有的显示0.0,这种情况是哪里写错了?
(, 下载次数: 0)
作者: RunSer    时间: 前天 12:15
这里数组长度不够越界了,而且排序也有问题。

(, 下载次数: 0)




欢迎光临 麦克雷 (https://mavom.cn/) Powered by Discuz! X3.5