1. 程式人生 > >1010 一元多項式求導 (25 分) C語言

1010 一元多項式求導 (25 分) C語言

設計函式求一元多項式的導數。(注:xn​​(n為整數)的一階導數為nxn1​​。)

輸入格式:

以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過 1000 的整數)。數字間以空格分隔。

輸出格式:

以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意“零多項式”的指數和係數都是 0,但是表示為 0 0

輸入樣例:

3 4 -5 2 6 1 -2 0

輸出樣例:

12 3 -10 1 6 0

#include <stdio.h>
#include <stdlib.h>
#define MAX 1001
struct
Term{ //也可以直接使用陣列,程式會簡短一些,但用結構陣列更容易理解。 int para; int index; }; int main(void) { int i=0,j,k=0; struct Term term[MAX]; while (scanf("%d%d",&term[i].para,&term[i].index) == 2) /*scanf()如果正確讀取兩個數值,返回值為2 改為while (scanf("%d%d",&term[i].para,&term[i].index) != EOF) 也能通過,更容易理解。 但我使用的編譯器卻無法執行,至少當前的程式碼在編譯器中能執行
*/ { term[i].para=term[i].para*term[i].index; term[i].index-=1; i++; } if (i==1 && term[0].para==0) //考慮特殊情況即多項式求導後為0,即只有一項且係數為0 printf("0 0\n"); else { for (j=0;j<i;j++) if (term[j].para != 0) //若多項式出現係數為0的項,就不必輸出 {
if (k++ != 0) //解決此類輸出最後不要空格的粗暴辦法,簡單有效。 putchar(' '); printf("%d %d",term[j].para,term[j].index); } } system("pause"); return 0; }