| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 430 人关注过本帖
标题:键表问题?
只看楼主 加入收藏
无语的我
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-4-25
收藏
 问题点数:0 回复次数:5 
键表问题?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct poly
{
float coef;
int expn;
struct poly *next;
}POLY;

POLY * create(int n);
void Add(POLY *frist,POLY * second);
void print(POLY *frist);

int main(void)
{
int n;
POLY *frist=NULL,*second=NULL;
printf("n:\n");
scanf("%d",&n);
frist=create(n);
print(frist);
scanf("%d",&n);
second=create(n);
print(second);
Add(frist,second);
}

void print(POLY *frist)
{
POLY *p;
for(p=frist->next;p!=NULL;p=p->next)
{
if(p->coef>0)
printf("+%.3fx^%d",p->coef,p->expn);
else
printf("%.3fx^%d",p->coef,p->expn);
}
printf("\n");
}

POLY * create(int n) /*按指数从大到小的输入*/
{
int i;
POLY *p,*L;
L=(POLY *)malloc((sizeof(POLY)));
L->next=NULL;
for(i=0;i<n;i++)
{
p=(POLY *)malloc((sizeof(POLY)));
scanf("%f%d",&p->coef,&p->expn);
p->next=L->next;
L->next=p;
}
return L;
}

void Add(POLY *frist,POLY * second)
{
POLY *p,*q,*pre_p,*pre_q;
p=frist->next;
q=second->next;
pre_p=frist;
pre_q=second;
while(p && q)
{
if(p->expn<q->expn)
{
pre_p=p;
p=p->next;
}
else if(p->expn==q->expn)
{
if(p->coef+q->coef)
{
p->coef+=q->coef;
pre_q->next=q->next; /*1 */
free(q); /*2 */
q=pre_q->next; /*3 */
}
else
{
pre_p->next=p->next;
free(p);
p=pre_p->next;
pre_q->next=q->next; /*1 */
free(q); /*2 */
q=pre_q->next; /*3 */
} /*可以合在一处处理.*/
}
else
{
pre_q->next=q->next;
q->next=p;
pre_p->next=q;
}
}
if(q)
{
pre_p->next=q;
}
free(second);
print(frist);
getch();
}

搜索更多相关主题的帖子: include create second 
2007-04-17 19:35
无语的我
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-4-25
收藏
得分:0 

在DEC-C++中能运行.结果也对.为什么在WIN-TC中不行呢?


2007-04-17 19:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

POLY * create(int n) /*按指数从大到小的输入*/
{
int i;
POLY *p,*L;
L=(POLY *)malloc((sizeof(POLY)));
L->next=NULL;
for(i=0;i<n;i++)
{
p=(POLY *)malloc((sizeof(POLY)));
scanf("%f%d",&p->coef,&p->expn);//问题出在这里,一般不要直接对结构体的成员直接赋值,尤其是浮点数.
p->next=L->next;
L->next=p;
}
return L;
}


倚天照海花无数,流水高山心自知。
2007-04-17 21:48
无语的我
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-4-25
收藏
得分:0 

那怎样对结构体成员赋值呢?
先谢谢了.


2007-04-17 21:53
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
对局部变量赋值,再将它赋给结构体变量.这样看似多此一举,但觉得很有必要,有的编译器不支持直接对这样的变量赋值.
当然标准的编译器应该可以这样做.

倚天照海花无数,流水高山心自知。
2007-04-17 21:55
无语的我
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-4-25
收藏
得分:0 

谢谢了.呵呵.
又懂了一点.


2007-04-17 21:58
快速回复:键表问题?
数据加载中...
 
   



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

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