鱼C论坛

 找回密码
 立即注册
查看: 2423|回复: 4

求测试求指错求讲解——关于多项式

[复制链接]
发表于 2014-4-14 23:37:23 | 显示全部楼层 |阅读模式
40鱼币
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct Polynomial
{
        float coef;
        int expn;
        struct Polynomial *next;
}*Polyn;

void InitPolyn(Polyn *P);
void CreatPolyn(Polyn *P,int m);//创建一个多项式
void ShowPolyn(Polyn P);//打印出多项式
void SortPolyn(Polyn P);//按序排列
void AddPolyn(Polyn Pa,Polyn Pb,Polyn Pc);//Pc = Pa + Pb
void SubPolyn(Polyn Pa,Polyn Pb,Polyn Pc);//Pc = Pa - Pb
void valPolyn(Polyn *P,int x);//求多项式当X为多少的值

void InitPolyn(Polyn *P)
{
        *P = (Polyn )malloc(sizeof(Polyn));
        (*P)->coef = 0.0;
        (*P)->expn = 0;
        (*P)->next = NULL;//初始化
}
void CreatPolyn(Polyn *P,int m)
{
        float c;
        int e,i;
        Polyn s,q;
        q = *P;
        printf("请输入项数:  ");
        scanf("%d",&m);
        for(i = 1;i<=m;i++)
        {
                printf("请输入第%d项的系数和指数:  ",i);
                scanf("%f %d",&c,&e);
                s = (Polyn )malloc(sizeof(Polyn));
                s->coef = c;
                s->expn = e;
                s->next = NULL;
                q->next = s;
                q = s;
                q->next = NULL;
        }
}

void SortPolyn(Polyn P)
{
        Polyn temp;
        while(P!=NULL)
        {
                if(P->expn<P->next->expn)
                {
                        temp = P->next;
                        P->next = P;
                        P = temp;
                }
        }
}

void ShowPolyn(Polyn P)
{
        Polyn pchar;
        pchar = P->next;
        while(pchar)
        {
                printf("%f X^%d",pchar->coef,pchar->expn);
                pchar = pchar->next;
        }
        printf("\n");
}

int main()
{
        Polyn Pa;
        InitPolyn(&Pa);
        CreatPolyn(&Pa,2);
        SortPolyn(Pa);
        ShowPolyn(Pa);
}

还有很多编码没有写,只是想先写个main函数来测试测试,我知道中间有个问题,就是CreatPolyn函数的两个参数,第二个m参数改掉之后编译不过关,添上的话就能编译成功,但是添上的话CreatPolyn要用户输入的项数就形同鸡肋了。不知道怎么解决。 然后就是排序和打印的时候直接把黑框给关闭了,不解啊。求测试求指错求讲解。 还有就是要睡觉了,要回也得等明天了,先谢谢热心帮助的人。

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-14 23:37:24 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<stdlib.h>

  4. typedef struct Polynomial
  5. {
  6.         float coef;
  7.         int expn;
  8.         struct Polynomial *next;
  9. }*Polyn;

  10. int m; // 项数

  11. void InitPolyn(Polyn *P);
  12. void CreatPolyn(Polyn *P,int m);//创建一个多项式
  13. void ShowPolyn(Polyn P);//打印出多项式
  14. void SortPolyn(Polyn P);//按序排列
  15. void AddPolyn(Polyn Pa,Polyn Pb,Polyn Pc);//Pc = Pa + Pb
  16. void SubPolyn(Polyn Pa,Polyn Pb,Polyn Pc);//Pc = Pa - Pb
  17. void valPolyn(Polyn *P,int x);//求多项式当X为多少的值

  18. void InitPolyn(Polyn *P)
  19. {
  20.         *P = (Polyn )malloc(sizeof(Polyn));
  21.         (*P)->coef = 0.0;
  22.         (*P)->expn = 0;
  23.         (*P)->next = NULL;  //初始化,加上头结点,便于操作
  24. }
  25. void CreatPolyn( Polyn *P ) // 去掉指针符号
  26. {
  27.         float c;
  28.         int e,i;
  29.         Polyn s,q;

  30.         q = *P;  // 去掉指针符号

  31.         printf("请输入项数:  ");
  32.         scanf("%d",&m);

  33.         for(i=1;i<=m;i++)
  34.         {
  35.                 printf("请输入第%d项的系数和指数:  ",i);
  36.                 scanf("%f%d",&c,&e);

  37.                 s = (Polyn )malloc(sizeof(Polyn));
  38.                 s->coef = c;
  39.                 s->expn = e;
  40.                 s->next = NULL;

  41.                 q->next = s;
  42.                 q = s;
  43.                 q->next = NULL;
  44.         }
  45. }

  46. /*
  47. void SortPolyn(Polyn P)  // 什么排序法?
  48. {
  49.         Polyn temp;
  50.         while(P!=NULL)
  51.         {
  52.                 if( P->expn < P->next->expn )
  53.                 {
  54.                         temp = P->next;
  55.                         P->next = P;
  56.                         P = temp;
  57.                 }
  58. // 感觉少了这一句                P = P ->next;  
  59.         }
  60. }
  61. */

  62. void SortPolyn( Polyn *P )
  63. {
  64.         Polyn q, g;
  65.         int i, j, c, e;

  66.         // 冒泡排序法
  67.         g = (*P);
  68.         for( i = 1; i < m; i++ )
  69.         {
  70.                 q = g ->next;
  71.                 for( j = 0; j < m - i; j++ )
  72.                 {
  73.                         // 用 temp 来处理好像 行不通
  74.                         if( ( q ->next ) && ( q->expn < q->next->expn ) )
  75.                         {
  76.                                 c = q ->coef;
  77.                                 e = q ->expn;

  78.                                 q ->coef = q ->next ->coef;
  79.                                 q ->expn = q ->next ->expn;

  80.                                 q ->next ->coef = c;
  81.                                 q ->next ->expn = e;
  82.                         }
  83.                         q = q ->next;
  84.                 }
  85.                 g = g ->next;
  86.         }
  87. }

  88. void ShowPolyn(Polyn P)
  89. {
  90.         Polyn pchar;

  91.         pchar = P->next;
  92.         while(pchar)
  93.         {
  94.                 printf("%.3f X^%d\t",pchar->coef,pchar->expn);
  95.                 pchar = pchar->next;
  96.         }
  97.         printf("\n");
  98. }

  99. int main( void )
  100. {
  101.         Polyn Pa;

  102.         InitPolyn(&Pa);

  103.         CreatPolyn(&Pa);

  104.         ShowPolyn(Pa);
  105.         system("pause");

  106.         SortPolyn(&Pa);

  107.         ShowPolyn(Pa);

  108.         return 0;  // 最好加上
  109. }
复制代码
f:\结果.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-15 11:11:45 | 显示全部楼层
没有人嘛???!! 求解释啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-21 17:09:09 | 显示全部楼层
这个是程序的结果:
结果.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-4-21 18:06:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-20 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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