麦克雷
标题:
大佬救命为什么有时候输出的成绩显示0.0,但排名是对的???
[打印本页]
作者:
wlqczict42
时间:
2024-11-3 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;
}
(, 下载次数: 3)
上传
点击文件名下载附件
(, 下载次数: 5)
上传
点击文件名下载附件
我选择操作6和7后,输出的语文成绩数学成绩有的显示0.0,这种情况是哪里写错了?
(, 下载次数: 2)
上传
点击文件名下载附件
作者:
RunSer
时间:
2024-11-3 12:15
这里数组长度不够越界了,而且排序也有问题。
(, 下载次数: 2)
上传
点击文件名下载附件
欢迎光临 麦克雷 (http://imac.ly/)
Powered by Discuz! X3.5