帮我看下这个C语言程序 哪里出错了

2025-06-27 16:52:05
推荐回答(3个)
回答1:

指针p的用法,全程很多错误。指针在使用之前,要先赋值,并指向正确的位置。

#define N 3
#include "stdio.h"
typedef struct {
int num;
char name[10];
char sex;
int age;
float score[3];
float sum;
float avg;
}STUDENT;
void count(STUDENT *p); /*这个函数的参数改成数组更好,改为void count(STUDENT stu[] )*/
void main()
{int i,j;
float t;
STUDENT stu[N],*p;
/*
下面这个for语句中,你似乎想通过p指向每个学生记录,并挨个输入学生信息,最后再计算出成绩。
所以在for语句开始执行之时,要让p指向每个学生的记录 */
for(i=0;i {
p=stu+i; /*加上这一行,使之指向每个学生的记录*/
{printf("输入num,name,sex,age:");
scanf("%d %s %c %d",p->num,p->name,p->sex,p->age);}
for(j=0;j<3;j++)
{ printf("输入第%d门课成绩:",j+1);
scanf("%f",p->score[j]);
p++; /*这里的指针p不能++,否则for(i=0;i}
}
count(p); /*看你的count函数的实现,是要计算并打印出所有学生的信息,这里传入指针p调用是错误的,因为此时p不是指向第一个学生的记录。这里应改为count(stu),传入所有学生的记录数组*/
p++; /*这行要删除,没意义*/
}

void count(STUDENT str[]) /* 这里的参数,由*p改为str[]。用指针传也可以,但要指向第一个学生*/
/* 记录。不过用数组传入,代码的可读性更好 */
{int i,j;
float t;
for(i=0;i{
t=0;
这里加上一行,让p依次指向每个学生的记录:p=stu+i;
t=p->score[0]+p->score[1]+p->score[2];
p->sum=t;
p->avg=t/3;
p++; /*这一行删掉*/
}
for(i=0;i{
/*这里加一行p=stu+i,让p指向每一个学生的记录*/
printf("第%d名学生num,name,sex,age:",i+1);
printf("%d%s%c%d",p->num,p->name,p->sex,p->age);
for(j=0;j<3;j++)
{ printf("第%d门课成绩:",j+1);
printf("%f",p->score[j]);}
printf("总成绩: %f 平均成绩: %f \n", p->sum, p->avg);
}
}

回答2:

#define N 3
#include "stdio.h"
typedef struct {
int num;
char name[10];
char sex;
int age;
float score[3];
float sum;
float avg;
}STUDENT;
void count(STUDENT *p);
void main()
{int i,j;
float t;
STUDENT stu[N],*p;//在这加句 p=new STUDENT;
for(i=0;i { {printf("输入num,name,sex,age:");
scanf("%d %s %c %d",p->num,p->name,p->sex,p->age);}//错在这里,这里你没给P分配空间就用了
for(j=0;j<3;j++)
{ printf("输入第%d门课成绩:",j+1);
scanf("%f",p->score[j]);
p++;
}
}
count(p);
p++;
}

void count(STUDENT *p)
{int i,j;
float t;
for(i=0;i{
t=0;
t=p->score[0]+p->score[1]+p->score[2];
p->sum=t;
p->avg=t/3;
p++;
}
for(i=0;i{ printf("第%d名学生num,name,sex,age:",i+1);
printf("%d%s%c%d",p->num,p->name,p->sex,p->age);
for(j=0;j<3;j++)
{ printf("第%d门课成绩:",j+1);
printf("%f",p->score[j]);}
printf("总成绩: %f 平均成绩: %f \n", p->sum, p->avg);
}
}

回答3:

写的好乱 不知道要表达什么目的