求C语言编程实现由键盘输入3个学生的信息(包括学号、姓名、成绩)程序运行后按照成绩的高低顺序输出各学生的

如题所述

#include<stdio.h>
struct Stu
{
int num;
char name[20];
float score;
};
void Input(struct Stu s[])
{
int i;
for(i=0;i<3;++i)
scanf("%d%s%f",&s[i].num,s[i].name,&s[i].score);
}
void Sort(struct Stu *a[])
{
int i,j;
struct Stu *t,**p;
for(i=0;i<2;++i)
{
p=a+i;
for(j=i+1;j<3;++j)
if((*p)->score<a[j]->score)p=a+j;
if(p!=a+j)
{
t=*p;
*p=a[i];
a[i]=t;
}
}
}
int main()
{
struct Stu s[3],*a[3];
int i;
Input(s);
for(i=0;i<3;++i)
a[i]=&s[i];
Sort(a);
for(i=0;i<3;++i)
printf("%d %s %.2f\n",a[i]->num,a[i]->name,a[i]->score);
return 0;
}追问

我看不懂。。

追答

1、定义了一个包含学号、姓名、分数的结构体
2、从键盘输入——Input函数
3、根据从大到小的顺序使定义的结构体指针数组依次指向结构体数组里的元素——Sort函数
4、在main函数中定义结构体数组和结构体指针数组,调用Input函数,调用Sort函数,根据题意输出

追问

哦谢谢 我明白了 那楼下那个程序那里错了。。我编译是出现错误

追答

楼下那个程序:
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",xs[i].score);
少了取地址符号:
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",&xs[i].score);

#include
typedef struct student
{
char xh[6];
char name[20];
float score;
}stu;
int main()
{
stu xs[3];
int i,j;
stu k;
for(i=0;i<3;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",xs[i].xh);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",xs[i].name);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",&xs[i].score);
}
for(i=0;i<2;i++)//排序
for(j=i+1;j<3;j++)
if(xs[i].score<xs[j].score)
{
k=xs[i];
xs[i]=xs[j];
xs[j]=k;
}
printf("排序后的学生记录:\n");
for(i=0;i<3;i++)
{
printf("%s\t",xs[i].xh);
printf("%s\t",xs[i].name);
printf("%f\t",xs[i].score);
printf("\n");
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-03
#include<stdio.h>
typedef struct student
{
char xh[6];
char name[20];
float score;
}stu;
main()
{
stu xs[3];
int i,j;
stu k;
for(i=0;i<3;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",xs[i].xh);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",xs[i].name);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",xs[i].score);
}
for(i=0;i<2;i++)//排序
for(j=i+1;j<3;j++)
if(xs[i].score>xs[j].score)
{
k=xs[i];
xs[i]=xs[j];
xs[j]=k;
}
printf("排序后的学生记录:\n");
for(i=0;i<3;i++)
{
printf("%s\t",xs[i].xh);
printf("%s\t",xs[i].name);
printf("%f\t",xs[i].score);
}

}追问

运行时有错误。这是怎么回事啊。能帮我调一下。。。

第2个回答  2012-06-02
你可以仿照这个儿做很简单的。。。这样你才可以学到东西。

#include<stdio.h>
#define N 3
#define M 5
float score[N][M];
float a_stu[N];
float a_cour[M];
void main()
{
int i,j;
void input_stu();
void aver_stu();
float aver_cour();
float highest();
input_stu();
aver_stu();

printf("\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆学生成绩☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("\n学号\t高数\t英语\tc语言\tJAVA\t计算机\t平均分\n");
for(i=0;i<N;i++)
{
printf("%d\t",i+1);
for(j=0;j<M;j++)
printf("%.2f\t",score[i][j]);
printf("%.2f\n",a_stu[i]);
}
aver_cour();
highest();

}

void input_stu() //输入3个学生成绩函数
{
int i,j;
for(i=0;i<N;i++)
{
printf("输入第%d个学生的5门成绩:",i+1);
for(j=0;j<M;j++)
scanf("%f",&score[i][j]);
}
}

void aver_stu() //3个学生5门课平均成绩
{
int i,j,s;
for(i=0;i<N;i++)
{ s=0;
for(j=0;j<M;j++)
{ s+=score[i][j];
a_stu[i]=s/5.0;
}

}

}
float aver_cour() //每门课平均成绩
{
int i,j,k;
printf("平均 ");
for(i=0;i<M;i++)
{ k=0;
for(j=0;j<N;j++)
{
k+=score[j][i];
}
a_cour[j]=k/N;

printf("%.2f\t",a_cour[j]);

}
printf("\n");
}

float highest() //求最高分数函数
{
int i,j,a,b,max;
max=score[0][0];
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
if(max<score[i][j])
{ max=score[i][j];
a=i+1;
b=j+1;
}
}
printf("最高成绩为:%d\n",max);
printf("该学生号为:%d\n",a);
printf("该课程号为:%d\n",b);
}

#endif
第3个回答  2012-06-02
查中国铁道出版社的c/c++书中有原题追问

找不到,能帮我找下。。有急用。。

追答

行不过得明天
今晚拿不到书

相似回答