//pas3.c --- by tsaiwn@csie.nctu.edu.tw //generate Pascal Triangle of order n #include // 先用 #define 把可能會改的寫成符號常數是好習慣! #define MAX_N 19 /// 以後若要改 array 大小則只要改上列的 19 即可 int x[MAX_N][MAX_N]; // 這樣寫很好 :-) int getInteger( ); // 宣告會有個幫忙讀取整數的小弟(function) int main( ) { // 每個程式都長這樣 int i, j, k, n; // 給我安排一些整數備用 while(38==38) { // in C++: while(true) { printf("n=? "); // prompt the user n = getInteger( ); // 叫小弟(function) 去讀入一整數 if(n < 0 ) break; // 注意 n < 0 表示不玩了 :-) if(n >= MAX_N) { // n 太大我們無法處理 :-( printf("Too Large! must less than %d\n", MAX_N); break; // what if changed to "continue;" ? } for(i=0; i<=n; i++) { /*記得宣告/定義x陣列喔*/ x[i][0]=1; // 最左邊放 1 x[i][i] =1; // 最右邊放 1 // 接下來用 for Loop 處理中間各元素 for(j=1; j<= i-1; j++) { x[i][j]= x[i-1][j] + // 等於正上方 + x[i-1][j-1]; // .. 左上角 } // 再來用 for Loop 把整列印出來 // 每列印之前先印一些空格就可印成正三角形 // for(j=0; j<= (n-i)*3; ++j) printf(" "); // 印一些空格 for(j =0; j<=i; j++) { printf("%6d", x[i][j]); // 每個元素印成 6 格的整數 }; printf("\n"); // 當然要記得印出換新列(new Line) }; /* for i */ } // while printf("\nBye bye\n"); } int getInteger( ) { // 這個小弟(function) 已寫得很聰明:-) static char buf[99]; // static memory is good int ans = -1; // assume -1 int kkk; while(38 == 38) { // Loop forever == for(;;) { fgets(buf, sizeof(buf), stdin); // 整列當字串讀入 /// /// ans = (int) atol(buf); // 把字串轉成 Long 整數 kkk = sscanf(buf, "%d", &ans); // kkk 是讀到幾個數 if(kkk == 1) break; // 成功讀取, leave Loop fprintf(stderr, " Error input, please re-Type it: "); } // while return ans; } int getInt( ) { // 簡易版的 getInteger int ans = -1; // 預設 -1 是個好習慣 scanf("%d", &ans); // 若亂打會使程式盪掉! return ans; }