c语言编程,输入学生成绩记录表重的信息。再按从高到低的排序输出,并计算总分

如下表学号 姓名 数学成绩
1 Zhang 90
2 Li 85
3 Wang 73
4 Ma 92
5 Zhen 86
6 Zhao 100
7 Gao 87
8 Xu 82
9 Mao 78
10 Liu 95
为什么不对?
#include<stdio.h>
struct Student
{ int num;
char name[10];
int grade;
};
void main()
{void input(struct Student stu[]);//函数声明//
void order(struct Student stu[]);
struct Student stu[10],*p=stu;
int sum,i;
input(p);
order(p);
sum+=stu[i].grade;
printf("Sum=%d",sum);
}
void input(struct Student stu[])
{int i;
printf("请输入各学生的信息:学号、姓名、成绩:\n");
for(i=0;i<10;i++)
scanf("%d%s%d",&stu[i].num,stu[i].name,stu[i].grade);
}
void order(struct Student stu[])
{ int i,a[5]={0},j,k;
a[i]=stu[i].grade;
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(a[j]<a[i])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(k=0;k<10;k++)
{
if(stu[k].grade==a[i])
{ printf("%d%s%d",stu[k].num,stu[k].name,stu[k].grade);
break;
}
continue;
}
}
}

#include <stdio.h>

struct Student {
int num;
char name[10];
int grade;
};

void main() {
void input(struct Student stu[],int n);//函数声明//
void order(struct Student stu[],int n);
int sum(struct Student stu[],int n);
struct Student stu[10];
input(stu,10);
order(stu,10);
printf("Sum = %d\n",sum(stu,10));
}

void input(struct Student stu[],int n) {
int i;
printf("请输入各学生的信息:学号、姓名、成绩:\n");
for(i = 0;i < n;i++)
scanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].grade);
}

void order(struct Student stu[],int n) {
int i,j;
struct Student temp;
for(i = 0;i < n - 1;i++) {
for(j = i + 1;j < n;j++){
if(stu[i].grade < stu[j].grade) {
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
}

int sum(struct Student stu[],int n) {
int i,sum = 0;
for(i = 0; i < n; ++i)
sum += stu[i].grade;
return sum;
}

追问

程序都没有错,但是为什么输入不了信息,总是输入两个出错,是输入方式不对吗

追答

每行输入三个数据,用空格隔开,结束,如
1 Zhang 90
2 Li 85
3 Wang 73
4 Ma 92
5 Zhen 86
6 Zhao 100

追问

还有一个问题,排序没有起作用啊?怎么输出排序后的?

已经好了,谢谢啦

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-24
首先,子函数声明应该写在主程序之前,而不是主程序里面。其次,排序算法里面,i未初始化,怎么能直接用呢,还有,a[i]=成绩的语句也应该是一个循环追问

可以写在主函数里面做声明,书上也是这样写的,现在的问题是不能输入十条数据

相似回答