C语言问题求代码高手来解决啊

建立一个动态连接表 连表中的每一结点包括
学号 姓名 性别 年龄 成绩。 程序能实现以下功能: 1建立链表 显示链表 查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录”的信息 4删除链表中指定的学号的结点 5 在链表中指定的位置插入一个新结点
要求 陈滚运行中显示实现以上功能锁构成的菜单,然后根据选项调用相应程序及对影的结果然后在现实菜单结构 知道按’退出‘选项程序执行结束

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct student{
int id;
char name[30];
char gender;
int age;
float score;
struct student *next;
};

typedef struct student Student;

Student *s=0;

void add(int id,char name[],char gender,int age,float score){
if(s==0){
s=(Student *)malloc(sizeof(Student));
s->id=id;
strcpy(s->name,name);
s->gender=gender;
s->age=age;
s->score=score;
s->next=0;
}
else{
Student *p=s;
while(p->next!=0){
p=p->next;
}
Student *t=(Student *)malloc(sizeof(Student));
t->id=id;
strcpy(t->name,name);
t->gender=gender;
t->age=age;
t->score=score;
t->next=0;
p->next=t;
}
}

void display(){
Student *p=s;
while(p!=0){
printf("%5d %s %c %5d %5.2f\n",p->id,p->name,p->gender,p->age,p->score);
p=p->next;
}
}

void search(int id){
Student *p=s;
while(p!=0){
if((p->id)==id) {printf("%5d %s %c %5d %5.2f\n",p->id,p->name,p->gender,p->age,p->score);return;}
else p=p->next;
}
printf("No such record.\n");
}

Student *del(int id){
Student *p1=s;
Student *p2=p1;
if(s->id==id){s=s->next;free(p1);return s;}
else{
while(p1!=0){
p2=p1;
p1=p1->next;
if(p1->id==id){
p2->next=p1->next;
free(p1);
return s;
}
}
return s;
}
}

Student *insert(Student *n,int index){
if(index<0) return 0;
else if(index==0) {n->next=s;return n;}
else{
Student *p2=s;
while(index>1){
p2=p2->next;
index--;
}
n->next=p2->next;
p2->next=n;
return s;
}
}

int main(){
int i;
do{
printf("Enter the function you want:\n");
printf("1. Add 2.Insert 3.Delete 4.Search 5.Display 6.Quit\n");
scanf("%d",&i);
if(i==1){
int id;
printf("Enter the id: ");
scanf("%d",&id);
char name[30];
printf("Enter the name: ");
scanf("%s",name);
char gender;
printf("Enter the gender: ");
scanf("%c",&gender);
int age;
printf("Enter the age: ");
scanf("%d",&age);
float score;
printf("Enter the score: ");
scanf("%f",&score);
add(id,name,gender,age,score);
}
else if(i==2){
Student *n=(Student *)malloc(sizeof(Student));
printf("Enter the id: ");
scanf("%d",&(n->id));
printf("Enter the name: ");
scanf("%s",n->name);
printf("Enter the gender: ");
scanf("%c",&(n->gender));
printf("Enter the age: ");
scanf("%d",&(n->age));
printf("Enter the score: ");
scanf("%f",&(n->score));
n->next=0;
int index;
printf("Enter the index: ");
scanf("%d",&index);
s=insert(n,index);
}
else if(i==3){
int id;
printf("Enter the id: ");
scanf("%d",&id);
s=del(id);
}
else if(i==4){
int id;
printf("Enter the id: ");
scanf("%d",&id);
search(id);
}
else if(i==5){
display();
}
else if(i==6){
Student *p;
while(s!=0){
p=s->next;
free(s);
s=p;
}
break;
}
}while(1);
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言有一道题不会做,求高手解,最好分析一下。
这个回车符会传递到下一句,也就是:c=getchar(); ,这样 c 赋值为回车符了;d=getchar(); 接着就是这句,你输入34的时候,d 只接收单个字符,也就是 3 ;所以最后的输出是:12 3

一个C语言的问题,希望高手给解决一下,很感谢的。。。 要具体的分析...
共用体...内存共用。s->i[0]=0x35;\/\/这里赋值为十六进制的35 printf("%lx\\n",s->k);\/\/输出也就是35 printf("%c\\n",s->c[0]);\/\/这里想把0x35也就是十进制的53输入字符对应为ASCII码的‘5’

C语言的问题,高手进来帮帮忙
void main(){ \/\/ 开始 \/\/创建 整型数变量a 三个元素的数组b int a,b[3];int i,j,k;\/\/输出并换行 printf("输入一个三位数:\\n");\/\/ 输入一个数值,赋给变量a scanf("%d",&a);\/\/ 循环 先 i=100, j=0 如果 i>1 就继续循环,每次循环后 i=i\/10, j=j+1 for (i=100,j...

请问这个C语言的代码错误在那里,求高手解决
首先int *p[5]; 我希望你知道,这是定义指针数组,5个元素。也就是说这里是5个指针,也许你当成了指向5个元素的数组的指针 另外p[0] = ptr;如果你的目标是操作ptr的话,那么下面的代码通通要变成 p[0][i] ………或者*(p[0]+i)其次 p[i-1]这里本身就存在问题,i=0的时候就出现负数了...

C语言高手的进来。。帮忙帮忙谢谢了啊、、、悬赏30分
第一题:#include <stdio.h>void main (){ FILE *fp; char b[9], a[9]; char ch; int i=0; scanf("%s", b); fp = fopen("D:\\\\123.txt", "w"); if(fp == NULL) { printf("打开文件失败!\\n"); return; } fwrite(b, sizeof(char), 8, fp); fclose(fp); \/\/...

求C语言高手帮忙分析代码
在提问时,尝试以简洁的语言描述您的问题,同时使用适当的注释或代码注释来说明代码的目的和关键逻辑。这有助于分析者快速定位问题所在,并提供有针对性的解决方案。如果代码较长,分段展示并简要说明每个部分的功能或作用,可以提高问题的可读性和理解性。当您收到回复时,仔细阅读并理解分析者的建议或解决...

C语言的问题,高手快进来啊
1、include <stdio.h> main(){ int i,n, sum = 0;printf("请输入一个四位数:");scanf("%d", &n);for(i=1;i<=4;i++){ sum += n % 10;n \/= 10;} printf("每一位数字相加和为:%d\\n", sum);return 0;} 2 、include <stdio.h> main(){ int a,b;scanf("%d %d"...

c语言几个小小的问题 高手帮个忙
1. C 逗号在这里不合法 2. 输出2,虽然x是浮点型,但是10和4都是整型,所以先按整型运算,再将结果转换为浮点型 3. (++x, y++)表示这是一个逗号表达式,逗号表达式取最后一个表达式的值,也就是y++的值,所以输出结果是3和3 4. printf("%8.4g\\n",b); 这句输出8756,%g表示按%e或者...

C语言的问题 请高手帮忙回答 谢谢~!~急···
肯定有15 while (i<15)if(++i%3!=0) continue;else printf(“%3d”,i);} 当i=14时,进入循环,先执行++i进行if判断,此时i变成15,if条件不满足(15%3==0),执行else,打印15

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

相似回答
大家正在搜