
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);
} 展开
#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);
} 展开
4个回答
展开全部
#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;
}
#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;
}
展开全部
{ 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赋值?后面没看了*/
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赋值?后面没看了*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
STU 这个改成student,英文student才是结构体的名字,STU只是个结构体变量
链表好像不是这么弄的
你在看看那里的知识吧
链表好像不是这么弄的
你在看看那里的知识吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错误很多,建议看下书里链表的例子。creat()没有用到?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询