問題描述:寫一程式依據輸入印出圖形. 當輸入 3 時,印出 ABC AB A 【將複雜或抽象問題轉成基本模式】 若將 A 轉換成 1、B 轉換成 2、C 轉換成 3, 則輸出應該是 123 12 1 【恢復 n 值為定值,並修改原程式結構】 思考上一題,輸出字元數是依據 y 值與 x 值的差,因此輸出字元數與 x 遞增有關, x 主要目的是表達列的編號,1 列、2 列、 3 列,而 y 值是依據 x 值大小輸出字元數, 1 字、2 字、3 字,今若要改變成遞減模 式,則 y 值必須從 n 值開始遞減成 3 字、 2 字、1 字 。 另外,輸出不能依據 y 值,否則會變 321, 思考如何從 321 變成 123? 令輸出為 n-y+1 即為正解。 int n,x; n=3; for(x=1 ; x<=n ; x++){ for(y=n; y>=x; y--){ printf("%d",n-y+1); } printf("\n"); } 【將 123 轉換成 ABC】 檢查 A 之 ASCII 碼為 65,B 為 66,依此類推, 因此 輸出之 1、2、3 每位數字加上 64,就成為 65、66、67 了,再將此數字轉型成字元即為所求了。 int n,x; n=3; for(x=1 ; x<=n ; x++){ for(y=n; y>=x; y--){ printf("%c",(n-y+1)+64); } printf("\n"); } 【修飾一下程式碼】 printf("%c",(n-y+1)+64); 變成 printf("%c",n-y+65); 再變成 printf("%c",n-y+"A"); 因此最後程式碼為: int n,x; n=3; for(x=1 ; x<=n ; x++){ for(y=n; y>=x; y--){ printf("%c",(n-y+"A"); } printf("\n"); } 下一個工作是恢復 n 的輸入方式即為所求。 int n,x; printf("Input the n : ");scanf("%d",&n); for(x=1 ; x<=n ; x++){ for(y=n; y>=x; y--){ printf("%c",(n-y+"A"); } printf("\n"); } |