| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 326 人关注过本帖
标题:多项式相加 程序有点问题 求指点
只看楼主 加入收藏
zq_16
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2010-12-3
结帖率:100%
收藏
 问题点数:0 回复次数:0 
多项式相加 程序有点问题 求指点
多项式相加  数据从外部文件读取 我这有个程序 不过有问题  谁能帮忙看看  改改 谢谢
#include<stdio.h>
#include <string.h>
#include<malloc.h>
#include <stdlib.h>

typedef struct nodelink
{
    int c;//系数
    int exp; //指数
    struct nodelink *next;
}nodelink;
FILE *stream;

void printhead(nodelink *head)//输出连表数据
{   int pcount=1;//结点计数器
    nodelink *phead;
    phead=head->next; //指向第一个元素结点
    while(phead!=NULL)
    {
        printf("第%d个结点的系数和指数分别为:",pcount);
        printf("%2d%4d\n",phead->c,phead->exp);
        phead=phead->next;
        pcount++;
    }
    printf("\n");
}
void ADD(nodelink *heada,nodelink *headb)//实现多项式相加
{

    nodelink *p,*q,*prea,*preb,*temp;
    int sum;
    p=heada->next;//分别使p和q指向第一个元素结点
    q=headb->next;
    prea=heada;
    free(headb);//释放headb链表的头结点
    while(p!=NULL&&q!=NULL)
    {
        if(p->exp<q->exp)
        {
            prea=p;
            p=p->next;
        }
        else if(p->exp==q->exp)
        {
              sum=p->c+q->c;
          if(sum!=0)
          {
             p->c=sum;
             preb=q;
             prea=p;
             p=p->next;
             q=q->next;
             free(preb);
          }
         else//如果和为零
         {
            temp=p;
            p=p->next;
            prea->next=p;
            free(temp);
            preb=q;
            q=q->next;
            free(preb);
         }
        }
        else //若p->exp大于q->exp
        {
            preb=q;
            q=q->next;
            preb->next=p;
            prea->next=preb;
            prea=prea->next;
        }
    }
    if(q!=NULL)
    prea->next=q;
   
    printhead(prea);
}
int main(int argc, char* argv[])
{
    void Add(nodelink *heada,nodelink *headb );
    char buf[256];
    char *token;
    char seps[]   = ",;";// 文本转化后,回车将变成一个字符,是\n,不是\r



    nodelink * list_head1 =NULL;
    nodelink * list_head2 =NULL;
    nodelink * list_rear =NULL;
    nodelink * temp_node;


    if( (stream  = fopen( argv[1], "r" )) == NULL )
        printf( "The file 'data' was not opened\n" );
    else
        printf("OK!\n");

    memset(buf,0,256);//新的初始化的方法
    fscanf( stream, "%s", buf );//读取文件,并且将文件按格式提取出,输出存在buf中

    token = strtok( buf, seps );
    while( token != NULL )
    {
        temp_node = (struct nodelink *)malloc(sizeof(nodelink)); //为临时节点分配内存   
        
        temp_node->next=NULL;     //空指针
        temp_node->c = atof(token );  // 系数;
        token = strtok( NULL, seps );  //开始下一字节的比较
        temp_node->exp  =atoi(token);     //指数
        
        if(list_head1==NULL){      
            list_head1=temp_node;
            list_rear=temp_node;
        }
        else{
            list_rear->next =temp_node;
            list_rear = temp_node;
        }
  
        token = strtok( NULL, seps ); // 从当前位置开始下一处寻找
    }
   
    //printf(buf);
       printhead(list_head1);
    printf("\n");




    fscanf( stream, "%s", buf );//读取文件,并且将文件按格式提取出,输出存在buf中
//printf(buf);
    //本例用来说明stream文件指针是可以移动的。当执行第一句fscanf的时候,会略掉转义字符,结束在最后一个转义字符之前。
    //当第一句执行完毕之后,在第二次的执行的时候,stream指针已经跳向刚才完毕的地方,书中说过,有个函数可以让stream指针再次归零,所以说此时就可以再接着找了。
    token = strtok( buf, seps );
    while( token != NULL )
    {
        nodelink * temp;
        temp = (struct nodelink *)malloc(sizeof(nodelink)); //为临时节点分配内存   
        
        temp->next=NULL;     //空指针
        temp->c = atof(token );  // 系数;
        token = strtok( NULL, seps );  //开始下一字节的比较
        temp->exp  =atoi(token);     //指数
        
        if(list_head2==NULL){       //判断是不是头指针
            list_head2=temp;
            list_rear=temp;
        }
        else{
            list_rear->next =temp;
            list_rear = temp;
        }
  
        token = strtok( NULL, seps ); // 从当前位置开始下一处寻找

    }
   
        //printf(buf);
     printhead(list_head2);
     printf("\n");

    fclose(stream);
    Add(list_head1,list_head2);

    free(list_head1);
    free(list_head2);


    return 0;
}
搜索更多相关主题的帖子: 多项式 计数器 元素 
2011-03-28 21:19
快速回复:多项式相加 程序有点问题 求指点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017247 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved