有没有C程编程高手,帮我一下,急!!!
不是说没定义,你形参就是stu,这里又定义个stu做什么,重复定义了,编译器到这里肯定通不过啊 ,就只有这一部分实在是看不懂你程序的结构,但是out这个函数里不应该再次定义结构体对象,stu可以直接拿来用,而且M,N是定义的宏么,不是的话,M,N也没定义。
把struct这一行直接去掉试试吧
求采纳为满意回答。
以上回答你满意么?
给你一个建议,看一下谭浩强那本C语言程序设计的答案书.
没有时间不能帮你打出来,看看那本书,书里就有答案.
#define True 1
#define False 0
typedef struct polyterm {
int coef; // 系数
int exp; //指数
struct polyterm *next;
} TERM;
TERM *reverse(TERM *q); //函数声明
void polyout(TERM *head);
TERM *creatpoly() { //创建多项式链表
TERM *head,*r,*s;
int m,n;
head=(TERM *)malloc(sizeof(TERM)); //分配内存
printf("input coef and exp(1,2<CR>):\n"); //输入系数和指数
scanf("%d,%d",&n,&m);
r=head; //r指向头指针
while(n) {
s=(TERM *)malloc(sizeof(TERM)); //给s新结点分配空间赋值
s->coef=n; s->exp=m;
r->next=s; r=s; //接到最后一个结点之后,并把r指针后移
printf("\nInput coef and exp:\n");
scanf("%d,%d",&n,&m); }
r->next=Null; r=head; //最后的结点的下一个赋空
head=head->next; free(r); //头结点后移,释放头结点
return (head);
} /* creatpoly */
TERM *polyadd(TERM *ha,TERM *hb) { //相加函数
TERM *hc,*p,*q,*s,*r;
int x;
p=ha; q=hb;
hc=(TERM *)malloc(sizeof(TERM));
s=hc; //hc表示相加后的多项式链表,s指向最后的结点
while((p!=Null)&&(q!=Null)) { //当两个相加多项式都不为空是循环
if(p->exp==q->exp) { /* coeficients */ //如果两比较结点的指数相等
x=p->coef+q->coef; //系数相加到x
if(x!=0) { //如果系数相加不为0就表示可以生成结点
r=(TERM *)malloc(sizeof(TERM));
r->exp=p->exp; r->coef=x;
s->next=r; s=r; } //生成新结点,加在hc后面指针后依
p=p->next; q=q->next; } //系数为0结点不存在了,两多项式分别后移
else if(p->exp<q->exp) { //如果p的结点指数更小
r=(TERM *)malloc(sizeof(TERM));
r->coef=q->coef; r->exp=q->exp;
s->next=r; s=r; //把q的结点加到hc后面,s,q指针后移
q=q->next; }
else { /* p->exp>q->exp */ //q更小时
r=(TERM *)malloc(sizeof(TERM)); //把p的系数,指数组成新结点加到后面,s后移,p后移
r->exp=p->exp; r->coef=p->coef;
s->next=r; s=r;
p=p->next; }
}
while(p!=Null) { //p不为空,说明q已经空了,把p后面的结点依次组成新结点加到hc后面
r=(TERM *)malloc(sizeof(TERM));
r->exp=p->exp; r->coef=p->coef;
s->next=r; s=r;
p=p->next; }
while(q!=Null) { //q与p上面同理
r=(TERM *)malloc(sizeof(TERM));
r->exp=q->exp; r->coef=q->coef;
s->next=r; s=r;
q=q->next; }
s->next=Null; //最后一个断尾
r=hc;
hc=hc->next;
free(r); //释放头指针
return (hc);
} /*polyadd */
TERM *polymulti(TERM *f,TERM *g) { /*关于一元多项式相乘的程序 */
TERM *fp,*gp,*hp,*q,*h; //*q是存储临时新结点
int maxp,p,r,x; //p表示两结点指数和,maxp当前最大实数和也是要存储的结点的支书,依次从大到小存储,x临时系数和
maxp=f->exp+g->exp; //表示两个多项式中最大的指数相加,也是相乘后最大的指数
h=(TERM *)malloc(sizeof(TERM));
hp=h; //相乘后的头指针
g=reverse(g); //这个函数你没发上来,应该是指数倒转函数
for(r=maxp;r>=0;r--) {
x=0; fp=f; //系数清0,fp,gp重新指到第一个结点,再依次乘一遍
gp=g;
while((fp!=Null)&&(gp!=Null)) { //当都不为空
p=fp->exp+gp->exp; //p等与当前结点支书和
if(p>r) fp=fp->next; //如果当前两结点和大于现在要算的结点的指数和,把fp后移,可以减小,知道相等
else if(p<r) gp=gp->next; //如果更小时,因为gp是倒置过的,所以和fp相反,最小指数的在最前面,所以向后是增加
else {
x+=fp->coef*gp->coef; //当相等是,累计系数,最后的和就是这个系数
fp=fp->next; //分别后移
gp=gp->next; }
} /*end of while */
if(x!=0) { //最后如果系数没有为0就把上面的系数来组成新结点加上来新建结点
q=(TERM *)malloc(sizeof(TERM));
q->exp=r; q->coef=x;
q->next=Null; //后面结点赋空
hp->next=q; hp=q; } //接到新链表后面,结点指针后移
}/* end of for */
hp=h; h=h->next;
free(hp); //释放头同上
return (h);
}
相关视频
求会c语言的编程高手教教我怎么快速入门c语言啊,我想学,谢谢
方法只有一个,那就是多学习,先拿本谭浩强的教材好好研究一下,有问题及时请教其他人,多思考、多动脑、多上机操作,上机操作时多按自己的思路尝试进行修改和扩充。有了问题及时解决,并做到举一反三。另外,有了一定基础后,再看一些其他相关书,每看一遍、每看一本都会有新的收获的!语言的学习是需要一定时间来消化、吸收的,时间久了,慢慢接受...
有没有C程编程高手,帮我一下,急!!!
define True 1 define False 0 typedef struct polyterm { int coef; \/\/ 系数 int exp; \/\/指数 struct polyterm *next;} TERM;TERM *reverse(TERM *q); \/\/函数声明 void polyout(TERM *head);TERM *creatpoly() { \/\/创建多项式链表 TERM *head,*r,*s;int m,n;head=(TE...
请用C语言程序编程,高手请帮忙!有重金赏!请看下面题目:
这个阶梯有119步,程序如下:main(){ int x=7;while (x%2!=1 || x%3!=2 || x%4!=3 || x%5!=4 || x%6!=5) x+=7;printf("%d\\n",x);} 程序根据7步刚好走完这一信息,从7开始测试是否满足要求,不满足就加7再测试,知道满足为止。
我想学习C语言。求高手指点应该怎么做?
首先申明,本人不是什么高手,但自认为对c还比较熟悉,可以给你提点建议:1、学习C语言,要从入门到精通,需要读哪些书(从简单的到难的排序,越详细越好,最好都能注释下选择这本书的理由)?入门阶段:还是老谭那本。理由:虽然不能说它写得有多好,但是你现在要做的是入门,要快速的掌握c的基本...
怎样成为C高手
一、明确目标与兴趣导向评估自身适配性:程序员职业并非适合所有人,需结合兴趣、逻辑思维能力和抗压能力综合判断。若仅以谋生为目的,可能因长期高压而失去动力;若对计算机底层原理有强烈好奇心,则更易坚持并深入探索。区分“高手”标准:C高手的核心特征是对计算机物理过程(如内存管理、网络传输、图形算法...
哪位高手能帮我编以下c语言的程序
中国旧历农历纪年中,有闰月的一年称为闰年。一般年份为12个月,354或355天,闰年则为13个月,383或384天 编程中公历闰年的简单计算方法: 设年份 year if (year能被4整除 and 不能被100整除) or year能被400整除 then 该年为闰年 else 该年为平年 ...