c语言链表问题,高人帮我看我哪里错了

#include<stdio.h>#include<stdlib.h>#defineNsizeof(structstudent)typedefstructstudent{... #include <stdio.h>
#include <stdlib.h>
#define N sizeof(struct student)
typedef struct student{
long num;
char name[20];
char sex;
int score;
struct student *next;
}STU;
STU *creat()
{ STU *head=NULL;
STU *p=NULL;
STU *q=NULL;
head=(STU*)malloc(N);
while(1)
{
if(head==NULL)
{printf("分配失败");
exit(0);
}
else
{ head=(STU*)malloc(N);
p->next=q;
p->next=NULL;
p=q;
}
}
return(head);

}

void main()
{
STU *p;
int i,j;
for(i=1;;i++)
{
printf("请输入学号:");
scanf("%d",&p->num);
if(p->num<0)
break;
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入性别:");
scanf("%s",p->sex);
for(j=1;j<=3;j++)
{
printf("请输入科目j的分数:");
scanf("%f",&p->score);
}
}
int r=0,w=0;
float average,sum;
while(!p->next)
{r++;
sum+=p->score;
}
average=sum/r;
while(!p->next)
{
if(p->score<average)
w++;
printf("低于平均分同学的学号:%d\n",p->num);
printf("低于平均分同学的姓名:%s\n",p->name);
printf("低于平均分同学的性别:&s\n",p->sex);
for(i=1;i<=3;i++)
printf("科目1:%f",p->score);
printf("********************************");
}
while(!p->next)
{
if(p->score>average)
printf("高于平均分同学的学号:%d\n",p->num);
printf("高于平均分同学的姓名:%s\n",p->name);
printf("高于平均分同学的性别:&s\n",p->sex);
for(i=1;i<=3;i++)
printf("科目1:%f",p->score);
printf("********************************");
}
for(i=1;i<=3;i++)
printf("科目i的平均分是%f",average);
printf("平均分一下的同学的个数为:%d",w);
}
展开
 我来答
赫连沛凝ck
2011-12-13 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2531万
展开全部
#include <stdio.h>
#include <stdlib.h>

#define N sizeof(struct student)

typedef struct student{
long num;
char name[20];
char sex[3];
float score;
struct student *next;
}STU;

STU *Creat() {
int n = 0;
STU *head,*p,*q;
head = p = (STU *)malloc(N);
while(1) {
q = (STU *)malloc(N);
printf("第%d个学生的学号 : ",n + 1);
scanf("%d",&q->num);
if(q->num < 0) {
free(q);
break;
}
printf("第%d个学生的姓名 : ",n + 1);
scanf("%s",q->name);
printf("第%d个学生的性别 : ",n + 1);
scanf("%s",q->sex);
printf("第%d个学生的学分 : ",n + 1);
scanf("%f",&q->score);
p->next = q;
p = q;
++n;
}
p->next = NULL;
return(head);
}

int main() {
STU *p,*head = Creat();
float sum = 0.0f,average;
int n = 0;
p = head->next;
while(p != NULL) {
sum += p->score;
++n;
p = p->next;
}
average = sum/(float)n;
p = head->next;
printf("高于平均分的同学 : \n");
while(p != NULL) {
if(p->score >= average) printf("%5d %10s %2s %.2f\n",p->num,p->name,p->sex,p->score);
p = p->next;
}
p = head->next;
printf("低于平均分的同学 : \n");
while(p != NULL) {
if(p->score < average) printf("%5d %10s %2s %.2f\n",p->num,p->name,p->sex,p->score);
p = p->next;
}
printf("科目的总分是 : %.2f,平均分是 : %.2f\n",sum,average);
return 0;
}
德铭虹8
2011-12-13 · TA获得超过718个赞
知道小有建树答主
回答量:1157
采纳率:0%
帮助的人:495万
展开全部
{ STU *head=NULL;
STU *p=NULL;
STU *q=NULL;
head=(STU*)malloc(N);
while(1)
{
if(head==NULL)
{printf("分配失败");
exit(0);
}
else
{ head=(STU*)malloc(N);
p->next=q;
p->next=NULL;
p=q;
/*head在前面就获得地址了,为什么还要malloc一次,另外一开始p=NULL,你却对p->next赋值?后面没看了*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦海瑶s1
2011-12-13 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:910万
展开全部
STU 这个改成student,英文student才是结构体的名字,STU只是个结构体变量
链表好像不是这么弄的
你在看看那里的知识吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手感冰凉abc
2011-12-13
知道答主
回答量:10
采纳率:0%
帮助的人:10.4万
展开全部
错误很多,建议看下书里链表的例子。creat()没有用到?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式