c語言多項求和,c語言中多項式求和

本文目錄一覽:

多項式求和的c語言程序

#include stdio.h

int Fluction(int);//聲明實現多項式 1-1/2+1/3-1/4+1/5-1/6+…的功能函數

double sum;//定義全局變數(其實一般不推薦定義全局變數)

int main()

{

int m,n;//m個測試實例,求前 n項和

while(scanf(“%d”,m)!=EOF)

{

for(int i=1;i=m;i++)//輸入 m個測試實例,所以循環 m次

{

scanf(“%d”,n);

Fluction(n);//調用函數,傳參 n

printf(“%.2lf\n”,sum);//保留兩位小數輸出

}

}

}

int Fluction(int t)//函數定義,實現 1-1/2+1/3-1/4+1/5-1/6+…多項式

{

int sign=1;//定義符號

double x;

sum=0;

for(int i=1;i=t;i++)//要求前幾項的和就循環幾次

{

x=(double)sign/i;//強制轉變類型

sum+=x;

sign*=-1;

}

return sum;//一定要定義它返回 sum的值,否則,函數會自動返回 0

}

c語言多項式相加

我這有一個實現加減乘除的多項式程序,自己寫的,另外輸入形式為:-2x^3 +5x^2+3x+4 即可。

其中百度的現實問題,有一個©A和©B的 應該是 COPYA, COPYB

去掉中間空格

支持整數多項式加減乘除。

#includestdio.h

#includestdlib.h

#includectype.h

typedef struct _POLYNODE{

int coef;//係數

int exp;//指數

struct _POLYNODE *next;

}polynode,*polyptr;

void createPoly(polynode **P, char ch[]);//建立多項式鏈表

void polyAdd(polynode *A,polynode *B);//多項式加

void polyMinus(polynode *A,polynode *B);//減

void polyMulti(polynode *A,polynode *B);//乘

void polyDiv(polynode *A,polynode *B);//除

void order(polynode **P);//排序

void display(polynode *P);//展示多項式

void destroy(polynode **P);//銷毀多項式

void menu();//命令菜單

int isPut(char ch[]);

//菜單

void menu(){

printf(“1.輸入多項式.\n”

“2.多項式相加.\n”

“3.多項式相減.\n”

“4.多項式相乘.\n”

“5.多項式相除.\n”

“6.顯示多項式.\n”

“7.銷毀多項式.\n”

“8.退出.\n”);

}

//判斷菜單選擇

int IsChoice(int choice){

if(0 choice 9 choice)

return 1;

else

return 0;

}

int isPut(char ch[]){

int i,j = 1;

for(i = 0; ch[i] != ‘\0’; i++){

{if(0 == j ‘^’ == ch[i])

return 0;

if(‘^’ == ch[i] 1 == j)

j = 0;

if((‘+’ ==ch[i] || ‘-‘ == ch[i] || ‘*’ == ch[i] || ‘/’ == ch[i]) 0 == j)

j = 1;

}

if(‘.’ != ch[i] ‘x’ != ch[i] ‘X’ != ch[i] ‘^’ != ch[i] ‘+’ != ch[i] ‘-‘ != ch[i] ‘*’ != ch[i] ‘/’ != ch[i] !isdigit(ch[i]))

return 0;

else{

if(‘+’ ==ch[0] || ‘*’ == ch[0] || ‘/’ == ch[0] || ‘^’ == ch[0] || ‘.’ == ch[0])

return 0;

if(‘\0’ == ch[i+1] ‘+’ ==ch[0] || ‘*’ == ch[0] || ‘/’ == ch[0] || ‘^’ == ch[0])

return 0;

// 上面是判斷字元串首尾是否合格 下面是中間部分

if(0 != i ch[i+1] != ‘\0’ ){

if((‘X’ == ch[i] || ‘x’ == ch[i]) !isdigit(ch[i-1]) ‘+’ != ch[i-1] ‘-‘ != ch[i-1] ‘*’ != ch[i-1] ‘/’ != ch[i-1] ‘.’ != ch[i-1])

return 0;

if((‘X’ == ch[i] || ‘x’ == ch[i]) ‘^’ != ch[i+1] ‘+’ != ch[i+1] ‘-‘ != ch[i+1] ‘*’ != ch[i+1] ‘/’ != ch[i+1])

return 0;

if((‘+’ == ch[i] || ‘-‘ == ch[i] || ‘*’ == ch[i] || ‘/’ == ch[i]) !isdigit(ch[i-1]) ‘X’ != ch[i-1] ‘x’ != ch[i-1] !isdigit(ch[i+1]) ‘X’ != ch[i+1] ‘x’ != ch[i+1])

return 0;

if(‘^’ == ch[i] ‘X’ != ch[i-1] ‘x’ != ch[i-1])

return 0;

if(‘^’ == ch[i] !isdigit(ch[i+1]))

return 0;

if(‘.’ == ch[i] !isdigit(ch[i+1]) !isdigit(ch[i-1]))

return 0;

}

}

}

return 1;

}

void createPoly(polynode **P, char ch[]){

char *t = ch;

int i = 0, j = 1;

int iscoef = 1,isminus = 1;

polyptr Q,L;

if(‘-‘ == ch[0]){

isminus = -1;

*t++;

}

while(‘\0’ != *t){

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = 1;

Q-exp = 0;

Q-next = NULL;//申請節點,初始化參數為1.

if(-1 == isminus){

Q-coef *= isminus;

isminus = 1;

}

while(‘+’ != *t ‘-‘ != *t ‘*’ != *t ‘/’ != *t ‘\0’ != *t){

if(‘x’ != *t ‘X’ != *t){

while(isdigit(*t)){

i =((int)*t – 48) + i*10;

t++;

j *= i;

}//抽取數字

if(1 == iscoef 0 != i){

Q-coef *= i;

}

if(0 == iscoef){

Q-exp += i;

iscoef = 1;

}

//如果i=0,則

}

else{

iscoef = 0;

t++;

if(‘^’ == *t)

t++;

else

Q-exp = 1;

}

i = 0;

}//while 遍歷到加減乘除,則退出循環,到下一新的節點

iscoef = 1;

if(‘\0’ != *t){

if(‘-‘ == *t)

isminus = -1;

t++;

}

if(0 == j){

Q-coef = 0;

j = 1;

}

printf(“係數:%d,指數:%d\n”,Q-coef,Q-exp);

if(NULL == *P){

*P = Q;

}

else{

L-next = Q;

}

L = Q;

}//while遍歷整個字元串

}

void polyAdd(polynode *A,polynode *B){

polyptr P = A, Q,L;

polyptr COPYA = NULL,COPYB = NULL;

if(NULL == A || NULL == B){

printf(“多項式未被建立,請先輸入多項表達式.\n”);

return ;

}

while(NULL != P){//複製A

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef;

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYA)

COPYA = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

P = B;

while(NULL != P){//複製B

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef;

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYB)

COPYB = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

L-next = COPYA;//把COPYA,COPYB兩個多項式連接起來,整理一下就OK了.

order(©B);

order(©B);

printf(“相加結果為:”);

display(COPYB);

destroy(©B);

}

void polyMinus(polynode *A,polynode *B){//相減和相加差不多

polyptr P = A, Q,L;

polyptr COPYA = NULL,COPYB = NULL;

if(NULL == A || NULL == B){

printf(“多項式未被建立,請先輸入多項表達式.\n”);

return ;

}

while(NULL != P){//複製A

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef;

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYA)

COPYA = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

P = B;

while(NULL != P){//複製B

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = -(P-coef);

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYB)

COPYB = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

L-next = COPYA;//把COPYA,COPYB兩個多項式連接起來,整理一下就OK了.

order(©B);

order(©B);

printf(“相減結果為:”);

display(COPYB);

destroy(©B);

}

void polyMulti(polynode *A,polynode *B){

polyptr R = A, P = B, Q, L = NULL, T;

if(NULL == A || NULL == B){

printf(“多項式未被建立,請先輸入多項表達式.\n”);

return ;

}

if(0 == A-coef || 0 == B-coef){

printf(“多項式乘積為:0\n”);

return ;

}

while(NULL != R){

while(NULL != P){

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef * R-coef;

Q-exp = P-exp + R-exp;

Q-next = NULL;

if(NULL == L)

L = Q;

else

T-next = Q;

T = Q;

P = P-next;

}

P = B;

R = R-next;

}

order(L);

order(L);

printf(“多項式乘積為:\n”);

display(L);

destroy(L);

}

void polyDiv(polynode *A,polynode *B){//多項式除法

polyptr P = A, Q,L,R,T,C,D;

polyptr COPYA = NULL,COPYB = NULL;

if(NULL == A || NULL == B){

printf(“多項式未被建立,請先輸入多項表達式.\n”);

return ;

}

if(A-coef == 0){

printf(“0.\n”);

return ;

}

if(B-coef == 0){

printf(“除數為0,錯誤!\n”);

return ;

}

if(A-coef B-coef){

printf(“商:0,餘數為:”);

display(A);

return ;

}

while(NULL != P){//複製A

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef;

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYA)

COPYA = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

P = B;

while(NULL != P){//複製B

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = -(P-coef);

Q-exp = P-exp;

Q-next = NULL;

if(NULL == COPYB)

COPYB = Q;

else

L-next = Q;

L = Q;

P = P-next;

}

C = P = Q = L = R = T = NULL;

//——————開始計算

while(COPYA-exp = COPYB-exp){

D = COPYA;

while(NULL != D-next)

D = D-next;

R = COPYB;

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = (-COPYA-coef) / R-coef;

Q-exp = COPYA-exp – R-exp;

Q-next = NULL;

if(NULL == L)

L = Q;

else

P-next = Q;

P = Q;

while(NULL != R){

Q = (polyptr)malloc(sizeof(polynode));

Q-coef = P-coef * R-coef;

Q-exp = P-exp + R-exp;

Q-next = NULL;

if(NULL == T)

T = Q;

else

C-next = Q;

C = Q;

R = R-next;

}

D-next = T;

order(©A);

order(©A);

T = NULL;

C = NULL;

}

order(L);

order(©A);

printf(“A除以B,商:”);

display(L);

printf(“餘數:”);

display(COPYA);

destroy(L);

destroy(©A);

destroy(©B);

}

void display(polynode *P){

//考慮情況有係數為1,指數為1,0,一般數;係數為係數不為1,指數為1,0,一般數;

//係數為負數,指數為1,0,一般數,主要考慮中間符號問題.

if(NULL == P){

printf(“多項式為空.\n”);

return ;

}

if(1 == P-coef){

if(0 == P-exp)

printf(“1”);

else if(1 == P-exp) printf(“x”);

else printf(“x^%d”,P-exp);

}

else{

if(-1 == P-coef){

if(0 == P-exp)

printf(“-1”);

else if(1 == P-exp) printf(“-x”);

else printf(“-x^%d”,P-exp);

}

else if(0 == P-exp)

printf(“%d”,P-coef);

else if(1 == P-exp) printf(“%dx”,P-coef);

else

printf(“%dx^%d”,P-coef,P-exp);

}

P = P-next;

while(NULL != P){

if(0 P-coef){

if(1 == P-coef){

if(0 == P-exp)

printf(“+1”);

else if(1 == P-exp) printf(“+x”);

else printf(“+x^%d”,P-exp);

}

else{

if(0 == P-exp)

printf(“+%d”,P-coef);

else if(1 == P-exp) printf(“+%dx”,P-coef);

else

printf(“+%dx^%d”,P-coef,P-exp);

}

}

else{

if(-1 == P-coef){

if(0 == P-exp)

printf(“-1”);

else if(1 == P-exp) printf(“-x”);

else printf(“-x^%d”,P-exp);

}

else{

if(0 == P-exp)

printf(“%d”,P-coef);

else if(1 == P-exp) printf(“%dx”,P-coef);

else

printf(“%dx^%d”,P-coef,P-exp);

}

}

P = P-next;

}

printf(“\n”);

}

void destroy(polynode **P){

polyptr Q = *P;

if(NULL == *P)

return ;

while(*P != NULL){

Q = *P;

*P = (*P)-next;

delete Q;

}

}

void order(polynode **P){

//首先 係數為零的要清掉,其次指數從高到低排序,再者係數相同的要合併.

polyptr prev,curr,OUT,INcurr;//前一節點和當前節點

int temp;

//出去第一節點係數為0的項

while(NULL != *P){

if(0 != (*P)-coef)

break;

else{

if(NULL == (*P)-next)

return;

curr = *P;

(*P) = (*P)-next;

delete curr;

}

}

if(NULL == *P || NULL == (*P)-next)//如果只剩1項或空,則不需要整理,退出函數

return;

//冒泡排序

OUT = INcurr = *P;

while(NULL != OUT-next){//外循環

while(NULL != INcurr-next){//內循環

prev = INcurr;

INcurr = INcurr-next;

if(prev-exp INcurr-exp){

temp = prev-coef;

prev-coef = INcurr-coef;

INcurr-coef = temp;//交換係數

temp = prev-exp;

prev-exp = INcurr-exp;

INcurr-exp = temp;//交換指數

}

}

OUT = OUT-next;

INcurr = *P;

}

//去除0項

prev = curr = *P;

curr = curr-next;

while(NULL != curr){

if(0 == curr-coef){

prev-next = curr-next;

delete curr;

curr = prev-next;

}

else{

prev = curr;

curr = curr-next;

}

}

//合併同類項

OUT = INcurr = *P;

while(NULL != OUT-next){

while(NULL != INcurr-next){

prev = INcurr;

INcurr = INcurr-next;

if(INcurr-exp == OUT-exp){

OUT-coef += INcurr-coef;

prev-next = INcurr-next;

delete INcurr;

INcurr = prev;

}

}

INcurr = OUT = OUT-next;

if(NULL == OUT)

return;

}

}

void main(){

int choice;

// int i;

char ch[100];

polynode *polyA,*polyB;

polyA = polyB = NULL;

menu();

scanf(“%d”,choice);

while(!IsChoice(choice)){

menu();

printf(“輸入錯誤,重新輸入.\n”);

scanf(“%d”,choice);

}

while(8 != choice){

switch(choice){

case 1:

if(NULL != polyA || NULL != polyB){

destroy(polyA);

destroy(polyB);

printf(“原多項式被銷毀.\n”);

}

printf(“多項式輸入格式:4x^3+7x^2+x+6–x不分大小寫.\n輸入多項式A:\n”);

scanf(“%s”,ch);

while(!isPut(ch)){

printf(“輸入錯誤!重新輸.\n”);

scanf(“%s”,ch);

}

createPoly(polyA,ch);//建立多項式A鏈表

printf(“輸入多項式B:\n”);

scanf(“%s”,ch);

while(!isPut(ch)){

printf(“輸入錯誤!重新輸.\n”);

scanf(“%s”,ch);

}

createPoly(polyB,ch);//建立多項式B鏈表

order(polyB);

order(polyA);//整理排序多項式,默認降冪

printf(“建立多項式成功!多項式:\nA為:”);

display(polyA);

printf(“B為:”);

display(polyB);

break;

case 2:

polyAdd(polyA,polyB);

break;

case 3:

polyMinus(polyA,polyB);

break;

case 4:

polyMulti(polyA,polyB);

break;

case 5:

printf(“PS:係數只支持整數,計算除法存在誤差;\n如果除數所有項係數為1,能得到正確答案,或者某些情況係數剛好被整除.”);

polyDiv(polyA,polyB);

break;

case 6:

printf(“——顯示多項式——\nA :”);

display(polyA);

printf(“B :”);

display(polyB);

break;

case 7:

destroy(polyA);

destroy(polyB);

printf(“此多項式已被清空.\n”);

break;

default:

return ;

}

choice = 0;

menu();

scanf(“%d”,choice);

while(!IsChoice(choice) || 0 == choice){

menu();

printf(“輸入錯誤,重新輸入.\n”);

scanf(“%d”,choice);

}

}

}

C語言程序設計——多項式求和

void sum(vectorpairint,int p, vectorpairint,intq,vectorpairint,int r) { term a, b; int i,j; i=j=0; while(ip.size() jq.size()) { a = p[i]; b = q[j]; if(a.second b.second) { r.push_back(a); i++; } else if (a.second b.second) { r.push_back(b); j++; } else { i++;j++; intc = a.first + b.first; if(c!=0) r.push_back(make_pair(c,a.second)); } } while(ip.size()) { r.push_back(p[i]); i++; } while(jq.size()) { r.push_back(q[j]); j++; }} 這個是多項式求和演算法,最後是用一個r容器來保存相加好的多項式,

C語言實驗–多項式求和

main()

{

int i,j,n,m;

float s=0.0;

printf(“input ceshishiligeshu(1=m100):”);

scanf(“%d”,m);

printf(“input a int num(1=n1000):”);

scanf(“%d”,n);

for(j=1;jm;j++)

{for(i=1;i=n;i++)

{if(i%2!=0)

s+=s1/n;

else

s-=1/n;

}

printf(“this is %d xiang shili:”,j);

printf(the sum is%f\n”,s);

}

C語言:多項式求和

for (j=1;j=n;j++)

{

if (j%2==0)

{

j=j*(-1);

}

這段死循環了 0 – 2 – -2 – 2 – -2

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/253063.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 02:15
下一篇 2024-12-14 02:15

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論