C语言高手来帮帮忙

2024-12-22 14:02:51
推荐回答(3个)
回答1:

你的这个程序错得太多了,我懒得该了,函数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("%d %s %d %d %d",&(p[i].id),p[i].name,&(p[i].math),&(p[i].english),&(p[i].computer));
//scanf不能带\n,%d,%s,%d,%d,%d格式控制串的个数要和变量数相同,有字符串输入时不能用逗号做分隔符会被字符串当成字符保存到字符串中,对于非字符串变量要使用&取地址
printf("\n");
}
void output(stu *p,int n)
{
for(int i=0;i printf("%d,%s,%d,%d,%d\n",p[i].id,p[i].name,p[i].math,p[i].english,p[i].computer);
printf("\n");
}
void sum(stu *p,int n)
{
for(int i=0;i p[i].total=p[i].math+p[i].english+p[i].computer;
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);
}

回答2:

#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 scanf("%d,%s,%d,%d,%d\n",&p[i].id,p[i].name,&p[i].math,&p[i].english,&p[i].computer); //这里修改为一一对应,有个格式,后面就的有几个参数。
printf("\n");
}
void output(stu *p,int n)
{
int i;
for(i=0;i printf("%d,%s,%d,%d,%d\n",p[i].id,p[i].name,p[i].math,p[i].english,p[i].computer); //这里不是输出吗?输出使用printf
printf("\n");
}
void sum(stu *p,int n)
{
int i;
for(i=0;i p[i].total=p[i].math+p[i].english+p[i].computer;
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);
}

回答3:

错误有一些
char*name;
最后定义数组 char name[20];

void input(stu *p,int n)
{
for(int i=0;i scanf("%d,%s,%d,%d,%d\n",p[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 scanf("%d,%s,%d,%d,%d\n",p[i]);
printf("\n");
}
这个不知道干嘛,和上一个函数一样

void selection(stu *p,int n)
这个函数交换完了,成绩和姓名不对应