程序小问题
/* Note:Your choice is C IDE */#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
#define N 5 /*这是总的学生数,你可以想多少就多少*/
char name[N][20];
int i,num[N];
float yuwen[N],shuxue[N],yingyu[N];
input()
{
for(i=0;i<N;i++)
{
printf("请输入第[%d]学生的姓名\n",i+1);
scanf("%s",name[i]);getchar();
printf("请输入第[%d]学生的学号\n",i+1);
scanf("%d",&num[i]);
printf("请输入第[%d]学生的语文成绩\n",i+1);
scanf("%f",&yuwen[i]);
printf("请输入第[%d]学生的数学成绩\n",i+1);
scanf("%f",&shuxue[i]);
printf("请输入第[%d]学生的英语成绩\n",i+1);
scanf("%f",&yingyu[i]);
}
return(i);
}
void sort1()
{ int n;
float t;
int i,j;
char a[10];
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
{
if(num[i]>num[j]) /*条件成立,交换前后学号*/
{ n=num[j];
num[j]=num[i];
num[i]=n;
strcpy(a,name[j]); /*交换前后姓名,使与学号相对应*/
strcpy(name[j],name[i]);
strcpy(name[i],a);
t=yuwen[j]; /*交换前后语文成绩,使与学号想对应*/
yuwen[j]=yuwen[i];
yuwen[i]=t;
t=shuxue[j]; /*交换前后数学成绩,使与学号想对应*/
shuxue[j]=shuxue[i];
shuxue[i]=t;
t=yingyu[j]; /*交换前后英语成绩,使与学号想对应*/
yingyu[j]=yingyu[i];
yingyu[i]=t;
}
}
printf("学生成绩按学号排序:\n");
printf("学号\t姓名\t语文成绩\t数学成绩\t英语成绩\n");
for(i=0;i<N;i++)
printf("%d\t%s\t%.2f\t\t%.2f\t\t%.2f\n",num[i],name[i],yuwen[i],shuxue[i],yingyu[i]);
}
void sort2()
{
int i,j;
float t;
char a[10];
int b;
for(i=0;i<N-1;i++)
{for(j=i+1;j<N;j++)
{
if(yuwen[j]+shuxue[j]+yingyu[j]>yuwen[i]+shuxue[i]+yingyu[i])
{
strcpy(a,name[j]);/*交换前后姓名,使与学号相对应*/
strcpy(name[i],name[j]);
strcpy(name[j],a);
b=num[i];
num[i]=num[j];
num[j]=b;
t=yuwen[i]; /*交换前后语文成绩,使与学号想对应*/
yuwen[i]=yuwen[j];
yuwen[j]=t;
t=shuxue[i]; /*交换前后数学成绩,使与学号想对应*/
shuxue[i]=shuxue[j];
shuxue[j]=t;
t=yingyu[i]; /*交换前后英语成绩,使与学号想对应*/
yingyu[i]=yingyu[j];
yingyu[j]=t;
}
}}
printf("学生成绩按总分排序:\n");
printf("姓名\t学号\t总分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f",name[i],num[i],yuwen[i]+shuxue[i]+yingyu[i]);
printf("\n");
}
}
void stat()
{
int i,j;
float max1,max2,max3,min1,min2,min3;
float sum1=0,sum2=0,sum3=0;
float aver1,aver2,aver3;
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",name[i],num[i],yuwen[i],shuxue[i],yingyu[i],
yuwen[i]+shuxue[i]+yingyu[i],(yuwen[i]+shuxue[i]+yingyu[i])/3);
printf("\n");
}
for(i=0;i<N;i++) /*求总分*/
{
sum1=sum1+yuwen[i];
sum2=sum2+shuxue[i];
sum3=sum3+yingyu[i];
}
aver1=sum1/N;/*求平均分*/
aver2=sum2/N;
aver3=sum3/N;
max1=yuwen[N-1];min1=yuwen[0];/*求语文成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max1<yuwen[j])
max1=yuwen[j];
if(min1>yuwen[j])
min1=yuwen[j];
}
max2=shuxue[N-1];min2=shuxue[0]; /*求数学成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max2<shuxue[j])
max2=shuxue[j];
if(min2>shuxue[j])
min2=shuxue[j];
}
max3=yingyu[N-1];min3=yingyu[0];/*求英语成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max3<yingyu[j])
max3=yingyu[j];
if(min3>yingyu[j])
min3=yingyu[j];
}
printf("语文成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver1,max1,min1);
printf("数学成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver2,max2,min2);
printf("英语成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver3,max3,min3);
}
void main()
{ int k;
while(1)
{
printf("*******************学生成绩管理系统*********************\n");
printf("\t\t | 1. 输入学生资料 |\n");
printf("\t\t | 2. 学生成绩排序 |\n");
printf("\t\t | 3. 学生成绩统计 |\n");
printf("\t\t | 0. 退出 |\n");
printf("********************************************************\n");
printf("请输入(0~3)选择:");
scanf("%d",&k);
switch(k) /*用switch语句实现功能选择*/
{
case 1: input();break;/*输入学生资料函数*/
case 2: sort1();sort2();break;/*成绩排序函数*/
case 3: stat();break;/*成绩统计函数*/
case 0: exit(0);break;/*退出*/
}
}}
附图: 姓名排序出现问题 不知道什么原因 望高手指点、、