鱼C论坛

 找回密码
 立即注册
查看: 361|回复: 2

为啥老是报错啊。

[复制链接]
发表于 2023-10-4 17:29:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求求各位帮我看看哪里出问题了
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define ok 1
  4. typedef int elemtype;
  5. typedef int status;
  6. typedef struct lnode{
  7.         elemtype date;
  8.         struct lnode *next;
  9. }lnode,*linklist;
  10. typedef struct polynode{
  11.         int coef;//系数
  12.         int expn;//指数
  13.         struct polynode *next;
  14. }polynode , *polynomial;
  15. void initlist(linklist &l,int n)
  16. {
  17.         elemtype e;
  18.         int i;
  19.         l=(linklist)malloc(sizeof(lnode));
  20.         l->next=NULL;
  21.         printf("请逆序输入数字:\n");
  22.         for(i=0;i<n;i++){
  23.                 scanf("%d",&e);
  24.                 linklist p=(linklist)malloc(sizeof(lnode));
  25.                 p->date=e;
  26.                 p->next=l->next;
  27.                 l->next=p;
  28.         }
  29. }
  30. status create(polynomial &l,int n)
  31. {
  32.         elemtype f;
  33.         int i,e;
  34.         l=(polynomial)malloc(sizeof(polynode));
  35.         l->next=NULL;
  36.         polynomial r=l;
  37.         printf("请逆序输入数字:\n");
  38.         for(i=0;i<n;i++){
  39.                 scanf("%d,%d",&e,&f);
  40.                 polynomial p=(polynomial)malloc(sizeof(polynode));
  41.                 p->coef=e;
  42.                 p->expn=f;
  43.                 r->next=p;
  44.                 r=p;
  45.         return ok;
  46. }
  47. void output(linklist l)
  48. {
  49.         linklist p=l->next;
  50.         while(p){
  51.                 printf("%d ",p->date);
  52.                 p=p->next;
  53.         }
  54.         printf("\n");
  55. }
  56. void delete1(linklist &l)
  57. {
  58.         int n,j;
  59.         elemtype e;
  60.         linklist p=l,q;
  61.         printf("请输入你要删除的位置:\n");
  62.         scanf("%d",&n);
  63.         for(j=0;j<n-1;j++)
  64.         {
  65.                 p=p->next;
  66.         }
  67.         if(!(p->next))
  68.         {
  69.                 printf("error\n");
  70.         }
  71.         else
  72.          q=p->next;
  73.          p->next=q->next;
  74.          e=q->date;
  75.          free(q);
  76.         printf("被删除的数为:%d\n",e);
  77. }
  78. void insert(linklist &l)
  79. {
  80.         linklist p=l,q=(linklist)malloc(sizeof(lnode));
  81.         int j,i;
  82.         elemtype e;
  83.         printf("请输入你想插入的位置:\n");
  84.         scanf("%d",&i);
  85.         printf("请输入你想插入的数字:\n");
  86.         scanf("%d",&e);
  87.         for(j=0;j<i-1;j++){
  88.                 p=p->next;
  89.         }
  90.         q->date=e;
  91.         q->next=p->next;
  92.         p->next=q;
  93. }
  94. void search(linklist l)
  95. {
  96.         linklist p=l;
  97.         elemtype i,e;
  98.         int j=0;
  99.         printf("请输入你想查找的位置:\n");
  100.         scanf("%d",&i);
  101.         for(j=0;j<i;j++)
  102.         {
  103.                 if(!p){
  104.                 break;
  105.         }
  106.            p=p->next;
  107.         }
  108.         if(p){
  109.                 printf("查找成功!");
  110.                 printf("该数值为%d\n",p->date) ;
  111.         }
  112.         else
  113.          {
  114.                  printf("查找失败!");
  115.          }
  116. }
  117. void sort(linklist &l)
  118. {
  119.         linklist p,q;
  120.         elemtype x;
  121.         for(p=l->next;p->next!=NULL;p=p->next){
  122.                 for(q=l->next;q->next!=NULL;q=q->next){
  123.                         if(q->date>=q->next->date){
  124.                                 x=q->date;
  125.                                 q->date=q->next->date;
  126.                                 q->next->date=x;
  127.                         }
  128.                 }
  129.         }
  130. }
  131. void combine(linklist &l,linklist &l2)
  132. {
  133.         linklist pa,pb,pc,lc;
  134.         pa=l->next;
  135.         pb=l2->next;
  136.         lc=pc=l;
  137.         while(pa&&pb){
  138.                 if(pa->date<=pb->date)
  139.         {
  140.                 pc->next=pa;
  141.                 pc=pa;
  142.                 pa=pa->next;
  143.         }
  144.         else
  145.         {
  146.                 pc->next=pb;
  147.                 pc=pb;
  148.                 pb=pb->next;
  149.         }
  150.         }
  151.         pc->next=pa?pa:pb;
  152.         free(l2);
  153. }
  154. int main()
  155. {
  156.         linklist l,l2;
  157.         polynomial pa,pb;
  158.         int n,m,i;
  159.         printf("请输入你想建立的长度:\n");
  160.         scanf("%d",&n);
  161.         initlist(l,n);
  162.         output(l);
  163.         delete1(l);
  164.         output(l);
  165.         insert(l);
  166.         output(l);
  167.         search(l);
  168.         sort(l);
  169.         printf("排序后为:");
  170.         output(l);
  171.         printf("请输入你想建立的第二个表的长度:\n");
  172.         scanf("%d",&m);
  173.         initlist(l2,m);
  174.         sort(l2);
  175.         printf("排序后为:");
  176.         output(l2);
  177.         printf("\n两个表合并后为:");
  178.         combine(l,l2);
  179.         output(l);
  180.         printf("请输入第一个多项式的长度:\n");
  181.         scanf("%d",&i);
  182.         //create(pa,i);
  183. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-4 17:30:29 | 显示全部楼层
这段代码中存在一些问题:

1. 在 create 函数中,缺少一个右括号,应该在最后一行加上一个右括号。

2. 在 combine 函数中,没有为 lc 赋初值,应该将 lc 初始化为 l。

3. 在 combine 函数中,应该在最后释放 l2 所占用的内存空间。

4. 在 main 函数中,create 函数没有被调用,应该将注释取消掉,调用 create 函数。

5. 在 main 函数中,combine 函数没有被调用,应该将注释取消掉,调用 combine 函数。

6. 在 main 函数中,没有释放 l 所占用的内存空间,应该在程序结束前释放 l 所占用的内存空间。

下面是修改后的代码:

  1. #include <stdio.h>
  2. #include <malloc.h>

  3. #define ok 1

  4. typedef int elemtype;
  5. typedef int status;

  6. typedef struct lnode{
  7.     elemtype date;
  8.     struct lnode *next;
  9. }lnode,*linklist;

  10. typedef struct polynode{
  11.     int coef;//系数
  12.     int expn;//指数
  13.     struct polynode *next;
  14. }polynode , *polynomial;

  15. void initlist(linklist &l,int n)
  16. {
  17.     elemtype e;
  18.     int i;
  19.     l=(linklist)malloc(sizeof(lnode));
  20.     l->next=NULL;
  21.     printf("请逆序输入数字:\n");
  22.     for(i=0;i<n;i++){
  23.         scanf("%d",&e);
  24.         linklist p=(linklist)malloc(sizeof(lnode));
  25.         p->date=e;
  26.         p->next=l->next;
  27.         l->next=p;
  28.     }
  29. }

  30. status create(polynomial &l,int n)
  31. {
  32.     elemtype f;
  33.     int i,e;
  34.     l=(polynomial)malloc(sizeof(polynode));
  35.     l->next=NULL;
  36.     polynomial r=l;
  37.     printf("请逆序输入数字:\n");
  38.     for(i=0;i<n;i++){
  39.         scanf("%d,%d",&e,&f);
  40.         polynomial p=(polynomial)malloc(sizeof(polynode));
  41.         p->coef=e;
  42.         p->expn=f;
  43.         r->next=p;
  44.         r=p;
  45.     }
  46.     return ok;
  47. }

  48. void output(linklist l)
  49. {
  50.     linklist p=l->next;
  51.     while(p){
  52.         printf("%d ",p->date);
  53.         p=p->next;
  54.     }
  55.     printf("\n");
  56. }

  57. void delete1(linklist &l)
  58. {
  59.     int n,j;
  60.     elemtype e;
  61.     linklist p=l,q;
  62.     printf("请输入你要删除的位置:\n");
  63.     scanf("%d",&n);
  64.     for(j=0;j<n-1;j++)
  65.     {
  66.         p=p->next;
  67.     }
  68.     if(!(p->next))
  69.     {
  70.         printf("error\n");
  71.     }
  72.     else
  73.         q=p->next;
  74.         p->next=q->next;
  75.         e=q->date;
  76.         free(q);
  77.         printf("被删除的数为:%d\n",e);
  78. }

  79. void insert(linklist &l)
  80. {
  81.     linklist p=l,q=(linklist)malloc(sizeof(lnode));
  82.     int j,i;
  83.     elemtype e;
  84.     printf("请输入你想插入的位置:\n");
  85.     scanf("%d",&i);
  86.     printf("请输入你想插入的数字:\n");
  87.     scanf("%d",&e);
  88.     for(j=0;j<i-1;j++){
  89.         p=p->next;
  90.     }
  91.     q->date=e;
  92.     q->next=p->next;
  93.     p->next=q;
  94. }

  95. void search(linklist l)
  96. {
  97.     linklist p=l;
  98.     elemtype i,e;
  99.     int j=0;
  100.     printf("请输入你想查找的位置:\n");
  101.     scanf("%d",&i);
  102.     for(j=0;j<i;j++)
  103.     {
  104.         if(!p){
  105.             break;
  106.         }
  107.         p=p->next;
  108.     }
  109.     if(p){
  110.         printf("查找成功!");
  111.         printf("该数值为%d\n",p->date) ;
  112.     }
  113.     else
  114.         {
  115.             printf("查找失败!");
  116.         }
  117. }

  118. void sort(linklist &l)
  119. {
  120.     linklist p,q;
  121.     elemtype x;
  122.     for(p=l->next;p->next!=NULL;p=p->next){
  123.         for(q=l->next;q->next!=NULL;q=q->next){
  124.             if(q->date>=q->next->date){
  125.                 x=q->date;
  126.                 q->date=q->next->date;
  127.                 q->next->date=x;
  128.             }
  129.         }
  130.     }
  131. }

  132. void combine(linklist &l,linklist &l2)
  133. {
  134.     linklist pa,pb,pc,lc;
  135.     pa=l->next;
  136.     pb=l2->next;
  137.     lc=pc=l;
  138.     while(pa&&pb){
  139.         if(pa->date<=pb->date)
  140.         {
  141.             pc->next=pa;
  142.             pc=pa;
  143.             pa=pa->next;
  144.         }
  145.         else
  146.         {
  147.             pc->next=pb;
  148.             pc=pb;
  149.             pb=pb->next;
  150.         }
  151.     }
  152.     pc->next=pa?pa:pb;
  153.     free(l2);
  154. }

  155. int main()
  156. {
  157.     linklist l,l2;
  158.     polynomial pa,pb;
  159.     int n,m,i;
  160.     printf("请输入你想建立的长度:\n");
  161.     scanf("%d",&n);
  162.     initlist(l,n);
  163.     output(l);
  164.     delete1(l);
  165.     output(l);
  166.     insert(l);
  167.     output(l);
  168.     search(l);
  169.     sort(l);
  170.     printf("排序后为:");
  171.     output(l);
  172.     printf("请输入你想建立的第二个表的长度:\n");
  173.     scanf("%d",&m);
  174.     initlist(l2,m);
  175.     sort(l2);
  176.     printf("排序后为:");
  177.     output(l2);
  178.     printf("\n两个表合并后为:");
  179.     combine(l,l2);
  180.     output(l);
  181.     printf("请输入第一个多项式的长度:\n");
  182.     scanf("%d",&i);
  183.     create(pa,i);
  184.     free(l);
  185.     return 0;
  186. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-4 17:34:18 | 显示全部楼层
isdkz 发表于 2023-10-4 17:30
这段代码中存在一些问题:

1. 在 create 函数中,缺少一个右括号,应该在最后一行加上一个右括号。

你好,这个代码我复制过去后也运行不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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