正文
c语言函数加法运算 c语言的加法函数
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
用C语言做大数加法,怎么计算进位
把两个数用数组倒过来存放 比如 567 +789
变成765+987
然后两个数组就是
a[]={7,6,5};
b[]={9,8,7};
对应c语言函数加法运算的相加变为c数组
c[] ={7+9,6+8,5+7};
变为 16 14 12
然后看进位16留下6c语言函数加法运算,前面进一位14变为15 变为 6 15 12
再看中间15留下5,前面进一位12变为13,变为 6 5 13
再看 13留下3,向前进一位 变为1,那么最后变为6 5 3 1
最后倒过来,结果就是1356
for (i = 0; i M; i++)
{
c1[i] += (a1[i] + b1[i]) % 10;
c1[i + 1] += (a1[i] + b1[i]) / 10;
}
这是处理进位c语言函数加法运算的代码
C语言函数的特点及其定义?
C语言中一个函数(function)是一个可以从程序其它地方调用执行的语句块。
1、通过使用函数(functions)我们可以把我们的程序以更模块化的形式组织起来,从而利用C语言所支持的结构化程序设计。
2、从数学角度,函数即集合A和集合B之间的映射关系。实际上计算机中的函数概念也是源于此,因此,一般函数,都有形参和返回值。
3、从计算机组成原理的角度来看,函数即是一个小型的计算机系统,依据冯诺伊曼的“存储程序原理”,每一个计算机系统包含:输入系统、输出系统、运算器以及控制器,实际上对于C语言中的函数来说,它是“存储程序原理”的软实现,其中形参、实参这是输入系统,返回值是输出系统,函数体中的运算符,比如+、-、*、/四则运算即为运算器,而逻辑运算符以及if、while等控制语句便是一个控制器。
c语言怎么用堆栈实现多项式的加法运算
//已经帮忙调整,对比下代码吧,就知道是什么问题了
typedef struct PolyNode *Polynomial;
struct PolyNode{
int coef;
int expon;
Polynomial link;
};
Polynomial ReadPoly();
Polynomial PolyAdd(Polynomial P1, Polynomial P2);
void Attach(int c, int e, Polynomial *pRear);
int Compare(int p1, int p2);//未定义函数,自己写实现
int main()
{
Polynomial P1,P2,PP,PS;
P1 = ReadPoly();
P2 = ReadPoly();
// PP = Mult(P1,P2);
// PrintPoly(PP);
PS = PolyAdd(P1,P2);
// PrintPoly(PS);
return 0;
}
Polynomial ReadPoly()
{
Polynomial P, Rear, t;
int c, e, N;
scanf("%d", N);
P = (Polynomial)malloc(sizeof(struct PolyNode));
P-link = NULL;
Rear = P;
while (N--){
scanf("%d %d", c, e);
Attach(c, e, Rear);
}
t = P; P = P-link;
free(t);
//retrun P;//return写错
return P;
}
void Attach(int c, int e, Polynomial *pRear)
{
Polynomial P;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P-coef = c;
P-expon = e;
P-link = NULL;
(*pRear)-link = P;
*pRear = P;
}
Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1P2);
switch (Compare(P1-expon, P2-expon)){//这里要用指针-
case 1:
Attach(P1-coef, P1-expon, rear);//这里要用指针-
P1 = P1-link;
break;
case -1:
Attach(P2-coef, P2-expon, rear);//这里要用指针-
P2 = P2-link;
break;
case 0:
sum = P1-coef + P2-coef;//这里要用指针-
if (sum)Attach(sum, P1-expon, rear);//这里要用指针-
P1 = P1-link;
P2 = P2-link;
break;
}
for (; P1; P1 = P1-link)Attach(P1-coef, P1-expon, rear);
for (; P2; P2 = P2-link)Attach(P2-coef, P2-expon, rear);
rear-link = NULL;
temp = front;
front = front-link;
free(temp);
return front;
}
数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算
#includestdio.h
#includestdlib.h
#includemalloc.h
typedef int ElemType;
/*单项链表的声明*/
typedef struct PolynNode{
int coef; // 系数
int expn; // 指数
struct PolynNode *next; }PolynNode,*PolynList;
/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/
/*指数系数一对一对输入*/ void CreatePolyn(PolynList L,int n)
{
int i;
下载
原文档已转码为如下格式,以便移动设备查看
数据结构(c语言)用单链表存储一元多项式,并实现两个多项式的相加运算【最新】
阅读:1037次 页数:36页 2016-03-21 举报

#includestdio.h
#includestdlib.h
#includemalloc.h
typedef int ElemType;
/*单项链表的声明*/
typedef struct PolynNode{
int coef; // 系数
int expn; // 指数
struct PolynNode *next; }PolynNode,*PolynList;
/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/
/*指数系数一对一对输入*/ void CreatePolyn(PolynList L,int n)
{
int i;

PolynList p,q;
L=(PolynList)malloc(sizeof(PolynNode)); // 生成头结点
L-next=NULL;
q=L;
printf("成对输入%d个数据\n",n);
for(i=1;i=n;i++)
{
p=(PolynList)malloc(sizeof(PolynNode));
scanf("%d%d",p-coef,p-expn); //指数和系数成对输入
q-next=p;
q=q-next;
}
p-next=NULL;
}
// 初始条件:单链表L已存在
// 操作结果: 依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败
void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) {
PolynList p=L-next;
while(p)
{

vi(p-coef, p-expn);
if(p-next)
{
printf(" + "); //“+”号的输出,最后一项后面没有“+”
}
p=p-next;
}
printf("\n");
}
/*ListTraverse()调用的函数(类型要一致)*/ void visit(ElemType c, ElemType e) {
if(c != 0)
{
printf("%dX^%d",c,e); //格式化输出多项式每一项
}
}
/* 多项式相加,原理:归并 */ /* 参数:两个已经存在的多项式 */ /* 返回值:归并后新的多项式的头结点 */
PolynList MergeList(PolynList La, PolynList Lb) {
PolynList pa, pb, pc, Lc;
pa = La-next;
pb = Lb-next;
Lc = pc = La; // 用La的头结点作为Lc的头结点
while(papb)
{
if(pa-expn pb-expn)
{
pc-next = pa; //如果指数不相等,pc指针连上指数小的结
点,
pc = pa;
pa = pa-next; //指向该结点的指针后移
}
else if (pa -expn pb-expn )
{
pc-next = pb; //pc指针连上指数小的结点,
pc = pb;
pb = pb-next; //指向该结点的指针后移
}
else //(pa -expn = pb-expn )
{
pa-coef = pa-coef + pb-coef; //指数相等时,系数相加
pc-next = pa;
pc = pa;
pa = pa-next; //两指针都往后移
pb = pb-next;
}
}
pc-next = pa ? pa:pb; // 插入剩余段
return Lc;
}
void main()
{
PolynList ha,hb,hc;
printf("非递减输入多项式ha, ");
CreatePolyn(ha,5); // 正位序输入n个元素的值
printf("非递减输入多项式hb, ");
CreatePolyn(hb,5); // 正位序输入n个元素的值

两个多项式相加运算(用c语言)
#includestdio.h
#includemalloc.h
#define Null 0
typedef struct Node
{
int coeff;
int expo;
Node *next;
}listNode,*list;
list createList()
{
list head;
head = (list)malloc(sizeof(listNode));
head = NULL;
printf("want to create a new node?y/n\n");
char ch;
fflush(stdin);
scanf("%c",ch);
while(ch=='Y' || ch== 'y')
{
list p;
p = (list)malloc(sizeof(listNode));
printf("input coeff\n");
int coeff;
scanf("%d",coeff);
p-coeff = coeff;
printf("input expo\n");
int expo;
scanf("%d",expo);
p-expo = expo;
p-next = NULL;
//链表为空c语言函数加法运算的时候c语言函数加法运算,即添加首个元素
if(head == NULL)
{
head=p;//添加代码
}
else
{
list prev,curr;
curr = head;
prev = NULL;
//找到添加位置
while(curr!=NULL curr-expop-expo)
{
prev=curr;
curr=curr-next;//添加代码
}
if(curr!=NULL curr-expo == p-expo)
{
curr-coeff = curr-coeff + p-coeff;
printf("want to create a new node?y/n\n");
fflush(stdin);
scanf("%c",ch);
if(ch=='Y' || ch== 'y')
continue;
else
return head;
}
//插入结点c语言函数加法运算,结点非首
if(prev != NULL)
{
p-next=curr;
prev-next=p;
//添加代码
}
//插入结点c语言函数加法运算,结点为首
else
{
p-next=curr;
head=p;
//添加代码
}
}
printf("want to create a new node?y/n\n");
fflush(stdin);
scanf("%c",ch);
}
return head;
}
list add(list head1,list head2)
{
list head,newNode,ptr1,ptr2,ptr3;
ptr1 = head1;
ptr2 = head2;
head = NULL;
while(ptr1 != NULL ptr2 != NULL)
{
newNode = (list)malloc(sizeof(listNode));
if(ptr1-expo ptr2-expo)
{
newNode-coeff = ptr1-coeff;
newNode-expo = ptr1-expo;
newNode-next = NULL;
ptr1 = ptr1-next;
}
else if(ptr1-expo ptr2-expo)
{
newNode-coeff = ptr2-coeff;
newNode-expo = ptr2-expo;
newNode-next = NULL;
ptr2 = ptr2-next;//添加代码
}
else
{
newNode-coeff = ptr1-coeff + ptr2-coeff;
newNode-expo = ptr1-expo;
newNode-next = NULL;
ptr1 = ptr1-next;
ptr2 = ptr2-next;
}
if(head==NULL)
{
head = newNode;
}
else
{
ptr3 = head;
//添加代码
while(ptr3-next != NULL)
ptr3 = ptr3-next;
ptr3-next = newNode;
}
}
while(ptr1 != NULL)
{
newNode = (list)malloc(sizeof(listNode));
newNode-coeff = ptr1-coeff;
newNode-expo = ptr1-expo;
newNode-next = NULL;
ptr3 = head;
if(ptr3 == NULL)
head = ptr3 = newNode;
else
{
while(ptr3-next != NULL)
ptr3 = ptr3-next;
ptr3-next = newNode;//添加代码
}
ptr1 = ptr1-next;
}
while(ptr2 != NULL)
{
newNode = (list)malloc(sizeof(listNode));
newNode-coeff = ptr2-coeff;
newNode-expo = ptr2-expo;
ptr3 = head;
if(ptr3 == NULL)
head = ptr3 = newNode;
else
{
while(ptr3-next != NULL)
ptr3 = ptr3-next;
ptr3-next = newNode;
}
ptr2 = ptr2-next;
}
return head;
}
void display(list head)
{
list ptr = head;
while(ptr != NULL)
{
if(ptr != head )
printf("+");
printf("%d",ptr-coeff);
printf("x^");
printf("%d",ptr-expo);
ptr = ptr-next;
}
printf("\n");
}
int main(int argc, char* argv[])
{
list head,head1,head2;
printf("input the first list\n");
head1 = createList();
display(head1);
printf("input the second list\n");
head2 = createList();
display(head2);
head = add(head1,head2);
display(head);
return 0;
}
c语言函数加法运算的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言的加法函数、c语言函数加法运算的信息别忘了在本站进行查找喔。