你的这个程序错得太多了,我懒得该了,函数selection几乎都是错的,我懒得改了
#include
struct stu
{
int id;
char name[31];//存储空间大小必须指定
int math;
int english;
int computer;
int total;
};
void input(stu *p,int n)
{
for(int i=0;i
//scanf不能带\n,%d,%s,%d,%d,%d格式控制串的个数要和变量数相同,有字符串输入时不能用逗号做分隔符会被字符串当成字符保存到字符串中,对于非字符串变量要使用&取地址
printf("\n");
}
void output(stu *p,int n)
{
for(int i=0;i
printf("\n");
}
void sum(stu *p,int n)
{
for(int i=0;i
printf("%d\n",p[i].total);
}
void selection(stu *p,int n)
{
int j,max,temp;
for(int i=0;i
max=i;
for(j=i+1;j<5;j++)
if(p[j].total>p[max].total)
max=j;
if(max!=i)
{
temp=p[i].total;
p[i].total=p[max].total;
p[max].total=temp;
}
}
}
void main(void)
{
stu a[5];
input(a,5);
output(a,5);
sum(a,5);
selection(a,5);
}
#include
typedef struct stu
{
int id;
char name[20]; //这里若使用指针,你得自己动态分配空间,直接使用数组方便
int math;
int english;
int computer;
int total;
}stu;
void input(stu *p,int n)
{
int i;
for(i=0;i
printf("\n");
}
void output(stu *p,int n)
{
int i;
for(i=0;i
printf("\n");
}
void sum(stu *p,int n)
{
int i;
for(i=0;i
printf("%d\n",p[i].total);
}
void selection(stu *p,int n)
{
int j,max;
stu temp;
int i;
for(i=0;i
max=i;
for(j=i+1;j<5;j++)
if(p[j].total>p[max].total)
max=j;
if(max!=i) //交换不能只交换总分啊,你要整体交换啊。
{
temp=p[i];
p[i]=p[max];
p[max]=temp;
}
}
}
void main(void)
{
stu a[5];
input(a,5);
output(a,5);
sum(a,5);
selection(a,5);
}
错误有一些
char*name;
最后定义数组 char name[20];
void input(stu *p,int n)
{
for(int i=0;i
printf("\n");
}
scanf("%d,%s,%d,%d,%d\n",p[i].name,&p[i].math,,,,); //自己添加
void output(stu *p,int n)
{
for(int i=0;i
printf("\n");
}
这个不知道干嘛,和上一个函数一样
void selection(stu *p,int n)
这个函数交换完了,成绩和姓名不对应