彪形大汉是什么意思:C语言程序改错

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/02 08:09:39
题目是这样的:1.学生成绩管理系统 要求:(1)输入10个学生姓名、学号和学生成绩(2)能添加、修改和删除学生信息(3)能进行排序(4)根据学号或学生姓名进行查询。

以下是我写的程序:

#include

#include

#define NULL 0

#define LEN sizeof(struct student)

struct student

{long num;

float score;

struct student * next;

};

int n;

struct student * creat(void)

{struct student * head,* p1,*p2;

n=0;

p1=p2=(struct student *)malloc(LEN);

scanf("%ld,%f",&p1->num,&p1->score);

head=NULL;

while(p1->num!=0)

{n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(LEN);

scanf("%ld,%f",&p1->num,&p1->score);

}

p2->next=NULL;

return(head);

}

void print(struct student * head)

{struct student * p;

printf("\nNow,These %d records are:\n",n);

p=head;

if(head!=NULL)

do

{printf("%ld,%5.1f\n",p->num,p->score);

p=p->next;

}while(p!=NULL);

}

struct student * del(struct student * head,long num)

{struct student * p1,* p2;

if(head==NULL){printf("\nList null!!\n"); }

p1=head;

while(num!=p1->num && p1->next!=NULL)

{p2=p1;p1=p1->next;

}

if(num==p1->num)

{if(p1==head) head=p1->next;

else p2->next=p1->next;

printf("delete:%ld\n",num);

n=n-1;

}

else printf("%ld not been found!!\n",num);

return(head);

}

struct student * insert(struct student * head,struct student * stud)

{struct student * p0,* p1,* p2;

p1=head;

p0=stud;

if(head==NULL)

{head=p0;p0->next=NULL;}

else

{while((p0->num>p1->num)&&(p1->next!=NULL))

{p2=p1;

p1=p1->next;

}

if(p0->num num)

{if(head==p1) head=p0;

else p2->next=p0;

p0->next=p1;

}

else{p1->next=p0;p0->next=NULL;}

}

n=n+1;

return(head);

}

main()

{struct student * head,* stu;

long del_num;

printf("input records: \n");

head=creat();

print(head);

printf("\ninput the deleted number:");

scanf("%ld",&del_num);

while(del_num!=0)

{head=del(head,del_num);

print(head);

printf("input the deleted number:");

scanf("%ld",&del_num);

}

printf("\ninput the inserted record:");

stu=(struct student *)malloc(LEN);

scanf("%ld,%f",&stu->num,&stu->score);

while(stu->num!=0)

{head=insert(head,stu);

print(head);

printf("input the inserted record:");

stu=(struct student * )malloc(LEN);

scanf("%ld,%f",&stu->num,&stu->score);

}

}

在tc上运行还是有错误,但我又检查不出来了。不知哪位高人可以指点一下。谢谢了!!!

scanf("\n%ld,%f",&(p1->num),&(p1->score));
将所有的scanf修改,如上,可能部分\n需加在后面

以下程序在VC++ 6.0 中控制台下编译运行通过。
另:你是一个好学生,不像有些人,就等着代码,那样往往等不到,至少我不会帮他

#include <stdio.h>

#include <stdlib.h>

#define LEN sizeof(struct student)

struct student

{
long num;

float score;

struct student * next;

};

int n;

struct student * creat(void)

{
struct student * head,* p1,*p2;

n=0;

p1=p2=(struct student *)malloc(LEN);
printf("input ID,Score\n");
scanf("\n%ld,%f",&(p1->num),&(p1->score));

head=NULL;

while(p1->num!=0)

{
n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(LEN);
printf("input ID,Score\n");
scanf("\n%ld,%f",&(p1->num),&(p1->score));

}

p2->next=NULL;

return(head);

}

void print(struct student * head)

{
struct student * p;

printf("\nNow,These %d records are:\n",n);

p=head;

if(head!=NULL)

do

{
printf("%ld,%5.1f\n",p->num,p->score);

p=p->next;

}while(p!=NULL);

}

struct student * del(struct student * head,long num)

{
struct student * p1,* p2;

if(head==NULL)
{
printf("\nList null!!\n");
}

p1=head;

while(num!=p1->num && p1->next!=NULL)

{
p2=p1;p1=p1->next;

}

if(num==p1->num)
{
if(p1==head) head=p1->next;

else p2->next=p1->next;

printf("delete:%ld\n",num);

n=n-1;

}

else printf("%ld not been found!!\n",num);

return(head);

}

struct student * insert(struct student * head,struct student * stud)

{
struct student * p0,* p1,* p2;

p1=head;

p0=stud;

if(head==NULL)

{
head=p0;p0->next=NULL;
}

else

{
while((p0->num>p1->num)&&(p1->next!=NULL))

{
p2=p1;

p1=p1->next;

}

if(p0->num)

{
if(head==p1) head=p0;

else p2->next=p0;

p0->next=p1;

}

else{p1->next=p0;p0->next=NULL;}

}

n=n+1;

return(head);

}

main()

{
struct student * head,* stu;
long del_num;

printf("input records: \n");

head=creat();

print(head);

printf("\ninput the deleted number:");

scanf("\n%ld",&del_num);

while(del_num!=0)

{
head=del(head,del_num);

print(head);

printf("input the deleted number:");

scanf("\n%ld",&del_num);

}

printf("\ninput the inserted record:");

stu=(struct student *)malloc(LEN);

scanf("\n%ld,%f",&stu->num,&stu->score);

while(stu->num!=0)

{
head=insert(head,stu);

print(head);

printf("input the inserted record:");

stu=(struct student * )malloc(LEN);

scanf("\n%ld,%f",&stu->num,&stu->score);

}

}

用JAVA吧