C程式實驗(1)一個多項式可以表達為x的各次冪與係數乘積的和
阿新 • • 發佈:2018-12-31
題目內容:
一個多項式可以表達為x的各次冪與係數乘積的和,比如:
2x6+3x5+12x3+6x+20
現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。
程式要處理的冪最大為100。
輸入格式:
總共要輸入兩個多項式,每個多項式的輸入格式如下:
每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的係數,所有的係數都是整數。第一行一定是最高冪,最後一行一定是0次冪。
注意第一行和最後一行之間不一定按照冪次降低順序排列;如果某個冪次的係數為0,就不出現在輸入資料中了;0次冪的係數為0時還是會出現在輸入資料中。
輸出格式:
從最高冪開始依次降到0冪,如:
2x6+3x5+12x3-6x+20
注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的係數為0則不需要有那項。
輸入樣例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
輸出樣例:
4x6+6x5+12x3+12x2+12x+40
遇到的問題
- 如何能夠根據輸入動態儲存這些資料呢
- 沒注意最高冪是100,所以我們可以使用有100個元素的陣列
- 可以用標號表示冪數,元素代表係數
- 陣列的表示
A[n] - 在迴圈中要用break
- 輸出陣列的元素的時候
printf(“%d”,arr[0]),因為陣列的第一個元素是地址 - printf後面是不需要加地址的
#include<stdio.h> #include<math.h> int main() { int N=101,i,n,a,flag=0; int arr[N]; for(i=0;i<N;i++) { arr[i]=0; } while(flag<2)//輸入資料 { scanf("%d %d",&n,&a); if(n==0) { flag++; } if(arr[n]!=0) { arr[n]+=a; } else { arr[n]=a; } } int max=0; for(i=N;i>0;i--)//判斷最大的冪次 { if(arr[i]!=0) { max=i; break; } } if(max==0) { printf("%d",arr[0]); } else { for(i=max;i>-1;i--) { if(i>1) { if(abs(arr[i])==1) { printf("x%d",i); } else if(abs(arr[i])>1) { printf("%dx%d",abs(arr[i]),i); } } else if(i==1) { if(abs(arr[i]==1)) { printf("x"); } else if(abs(arr[i]>1)) { printf("%dx",abs(arr[i])); } } else if(arr[i]!=0) { printf("%d",abs(arr[i])); } if(i>0) { if(arr[i-1]<0) { printf("-"); } else if(arr[i-1]>0) { printf("+"); } } } } return 0; }
程式碼終結
- 結構
- 用陣列儲存資料,並且用flag變量表示結束兩個多項式
- 用for迴圈判斷最大的冪次
- 最難的就是後面的輸出了,要充分了解各種情況。第一個就是隻有一個常數的情況,第二個就是當係數為1時候,第三個就是當冪次為1時候的情況
- 使用絕對值,再在最後加上正負號,這樣可以減輕討論情況