台灣最大程式設計社群網站
線上人數
2025
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C/C++ >> 用c語言typedef方式做出多項式乘法
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
用c語言typedef方式做出多項式乘法
價值 : 100 QP  點閱數:958 回應數:1
樓主

張皓雲
門外漢
0 1
34 0
發送站內信





#include <stdio.h>
#include<stdlib.h>
#define MAX_TERMS 100
typedef struct {
float coef; //每項的係數
int expon; //每項的指數
} polynomial;
polynomial terms[MAX_TERMS]; // 僅能儲存一百個項數和係數
int starta, finisha, startb, finishb, startd1, finishd1;
int avail = 0;

/*
starta 代表第一個多項式開始的位置
finisha 代表第一個多項式結束的位置

startb 代表第二個多項式開始的位置
finishb 代表第二個多項式結束的位置

startd 代表儲存結果的多項式開始的位置
finishd 代表儲存結果的多項式結束的位置

avail 代表可以使用的索引
*/

void readpoly();
void printpoly();
void p1();
void d(float c,float c1,int a2,int a3);
void e(int a,int a1,int a2,int a3);
void p();
int main(void)
{
readpoly();
printpoly();
p1();
p();
}

void readpoly()
{

int i,j;

scanf("%d", &i);

starta = 0; //第一個多項式的起點一定是 0

for(int k = starta ; k < i ; k++)
{
scanf("%f", &terms[k].coef);

scanf("%d", &terms[k].expon);

}

finisha = i - 1;

scanf("%d", &j);

startb = finisha + 1;

finishb = startb + j;

for(i = startb ; i < finishb ; i++)
{
scanf("%f", &terms[i].coef);

scanf("%d", &terms[i].expon);
}

avail = finishb+1;

}
void printpoly()
{
int k1=starta;

int i1=startb;

if(terms[k1].coef > 0 && terms[k1].expon == 1)
{

printf("%.2fx", terms[k1].coef);
}
else if(terms[k1].coef > 0 && terms[k1].expon == 0)
{
printf("%.2f", terms[k1].coef);
}
else
{
printf("%.2fx^%d", terms[k1].coef,terms[k1].expon);
}
for(int k = starta+1 ; k <= finisha ; k++){
if( terms[k].coef >0 && terms[k].expon == 0)
{
printf(" +%.2f", terms[k].coef); // 印出多項式的加號
}
/*else if(k = starta&&k < starta+1&&terms[k].coef>0&&terms[k].expon>0){
printf(" %.2fX^%d", terms[k].coef,terms[k].expon);
}*/
else if(terms[k].coef > 0 && terms[k].expon > 0)
{
printf(" +%.2fx^%d", terms[k].coef,terms[k].expon);
}
else if(terms[k].coef < 0 && terms[k].expon > 1){
printf(" %.2fx^%d", terms[k].coef,terms[k].expon);
}
else if(terms[k].coef < 0 && terms[k].expon == 1){
printf(" %.2fx", terms[k].coef);
}
/*else if(terms[k].coef>0&&terms[k].expon==0){
printf(" %.2f", terms[k].coef);
}*/
}
printf("\n");
if(terms[i1].coef > 0 && terms[i1].expon == 0)
{
printf("%.2f", terms[i1].coef);
}
else if(terms[i1].coef == 0)
{
printf("%.2f", terms[i1].coef);
}
else if(terms[i1].coef > 0 && terms[i1].expon == 1)
{
printf("%.2fx", terms[i1].coef);
}
else
{
printf("%.2fx^%d", terms[i1].coef,terms[i1].expon);
}
for(int i = startb+1 ; i < finishb ; i++)
{
if( terms[i].coef > 0 && terms[i].expon == 0)
{
printf(" +%.2f", terms[i].coef); // 印出多項式的加號
}
/*else if(i = startb&&i < startb+1&&terms[i].coef>0&&terms[i].expon>0){
printf(" %.2fX^%d", terms[i].coef,terms[i].expon);
}*/
else if(terms[i].coef > 0 && terms[i].expon > 0)
{
printf(" +%.2fx^%d", terms[i].coef,terms[i].expon);
}
else if(terms[i].coef < 0 && terms[i].expon > 1)
{
printf(" %.2fx^%d", terms[i].coef,terms[i].expon);
}
else if(terms[i].coef < 0 && terms[i].expon == 1)
{
printf(" %.2fx", terms[i].coef);
}
}
printf("\n");
}

//以上是印出輸入
//問題在下面
void p1()
{
int t_1starta = starta;
int t_1finisha = finisha;
int t_1startb = startb;
int t_1finishb = finishb;
float c,c1;
int a,a1;
int a2,a3;
startd1=avail;
while(t_1starta <= t_1finisha && t_1startb <= t_1finishb)
{
d(terms[t_1starta].coef,terms[t_1startb].coef,t_1starta,t_1finisha);
e(terms[t_1starta].expon,terms[t_1startb].expon,t_1starta,t_1finisha);
t_1startb++;
}
finishd1 = avail - 1;
}
void d(float c,float c1,int a2,int a3)
{
for(a2;a2<a3;a2++)
{
c=(c*c1);
terms[avail].coef = c;
}
}
void e(int a,int a1,int a2,int a3)
{
for( a2;a2<a3;a2++)
{
a=(a+a1);
terms[avail++].expon = a;
}
}
void p()
{
for(int i4 = startd1 ; i4 < finishd1 ; i4++)
{
printf("%fx^%d",terms[i4].coef,terms[i4].expon);
}

printf("\n");
}

搜尋相關Tags的文章: [ 用c語言typedef方式做出多項式乘法 ] ,
本篇文章發表於2016-12-04 13:59
1樓
最有價值解答

建中
檢舉此回應
我把你的程式碼整理成Visual C++ 2010可以讀取的格式,
這裡用到的技巧是加上 include "stdafx.h"敘述,
再用int _tmain(int argc, _TCHAR* argv[]) 取代int main()就可以跑了。
以下是整理好的程式碼可以跑了,
初步看起來可以正常輸入,
請自行參考使用哦。


本篇文章回覆於2016-12-09 00:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.