查看: 1503|回复: 0
收起左侧

[已解决] C语言修改

[复制链接]
YorkWaugh
发表于 2022-12-10 12:24:40 | 显示全部楼层 |阅读模式
本帖最后由 YorkWaugh 于 2022-12-11 15:15 编辑

要求:
实验内容2::试编写一个程序完成:建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
实验要求:(1)用链表实现。
(2)输入事先已编好的程序,并运行该程序。分析运行结果是否正确。

我的代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define LEN sizeof(struct Student)
  4. struct Student
  5. {
  6.     int num;
  7.     char name[20];
  8.     char gender;
  9.     int age;
  10.     struct Student *next;
  11. };
  12. int main()
  13. {
  14.     int t;
  15.     struct Student *pt;
  16.     struct Student *creat(void);
  17.     void del(int x, struct Student *s);
  18.     void print(struct Student * s);
  19.     printf("Input the information: number, name, gender, age\n");
  20.     pt = creat();
  21.     printf("Input a number:\n");
  22.     scanf("%d", &t);
  23.     del(t, pt);
  24.     print(pt);
  25.     return 0;
  26. }
  27. struct Student *creat()
  28. {
  29.     struct Student *head, *p1, *p2;
  30.     int n = 0;
  31.     p1 = p2 = (struct Student *)malloc(LEN);
  32.     scanf("%d %s %c %d", &p1->num, p1->name, &p1->gender, &p1->age);
  33.     head = NULL;
  34.     while (p1->num != 0)
  35.     {
  36.         n += 1;
  37.         if (n == 1)
  38.             head = p1;
  39.         else
  40.             p2->next = p1;
  41.         p2 = p1;
  42.         p1 = (struct Student *)malloc(LEN);
  43.         scanf("%d %s %c %d", &p1->num, p1->name, &p1->gender, &p1->age);
  44.     }
  45.     p2->next = NULL;
  46.     return (head);
  47. }
  48. void del(int x, struct Student *s)
  49. {
  50.     struct Student *ps;
  51.     ps = s;
  52.     while (ps->next != NULL)
  53.     {
  54.         if (ps->age == x)
  55.             ps->next = (*(*ps).next).next;
  56.         ps = ps->next;
  57.     }
  58. }
  59. void print(struct Student *s)
  60. {
  61.     struct Student *ps;
  62.     ps = s;
  63.     while (ps->next != NULL)
  64.     {
  65.         printf("%d %s %c %d\n", ps->num, ps->name, ps->gender, ps->age);
  66.         ps = ps->next;
  67.     }
  68. }
复制代码

大概是
  1. scanf("%d %s %c %d", &p1->num, p1->name, &p1->gender, &p1->age);
复制代码
这里不对
麻烦帮我修改下,急
update:已解决
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define LEN sizeof(struct Student)
  4. struct Student
  5. {
  6.     int num;
  7.     char name[20];
  8.     char gender;
  9.     int age;
  10.     struct Student *next;
  11. };
  12. int main()
  13. {
  14.     int t;
  15.     struct Student *pt;
  16.     struct Student *creat(void);
  17.     void del(int x, struct Student *s);
  18.     void print(struct Student * s);
  19.     printf("Input the information: name, number, gender, age\n");
  20.     pt = creat();
  21.     print(pt);
  22.     printf("Input a number:\n");
  23.     scanf("%d", &t);
  24.     del(t, pt);
  25.     if (pt->age == t)
  26.         pt = pt->next;
  27.     print(pt);
  28.     return 0;
  29. }
  30. struct Student *creat()
  31. {
  32.     struct Student *head, *p1, *p2;
  33.     int n = 0;
  34.     p1 = p2 = (struct Student *)malloc(LEN);
  35.     scanf("%s %d %c %d", p1->name, &p1->num, &p1->gender, &p1->age);
  36.     head = NULL;
  37.     while (p1->num != 0)
  38.     {
  39.         n += 1;
  40.         if (n == 1)
  41.             head = p1;
  42.         else
  43.             p2->next = p1;
  44.         p2 = p1;
  45.         p1 = (struct Student *)malloc(LEN);
  46.         scanf("%s %d %c %d", p1->name, &p1->num, &p1->gender, &p1->age);
  47.     }
  48.     p2->next = NULL;
  49.     return (head);
  50. }
  51. void del(int x, struct Student *s)
  52. {
  53.     struct Student *b1, *b2;
  54.     b1 = s->next, b2 = s;
  55.     while (b1->next != NULL)
  56.     {
  57.         if (b1->age == x)
  58.             b2->next = b1->next, b1 = b1->next;
  59.         else
  60.             b2 = b1, b1 = b1->next;
  61.     }
  62.     if (b1->age == x)
  63.         b2->next = NULL;
  64. }
  65. void print(struct Student *s)
  66. {
  67.     struct Student *p1, *p2;
  68.     p1 = s;
  69.     do
  70.     {
  71.         printf("%d %s %c %d\n", p1->num, p1->name, p1->gender, p1->age);
  72.         p2 = p1, p1 = p1->next;
  73.     } while (p2->next != NULL);
  74. }
复制代码
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-24 01:43 , Processed in 0.123275 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表