江 軍
(電子科技大學成都學院 四川 成都 611731)
程序的效果是要在屏幕上產生一個如圖1所示的“字母金字塔”在屏幕上完成從左至右的移動的動態過程。

圖1
這個問題的解決,我們按照下面幾個步驟來完成:
可以用循環及循環的嵌套來實現。
(1)首先這個金字塔是由26行組成,可設一個循環變量i來控制行的變化,i依次由1循環變到26,這是一個外層循環,i增加1,就輸出打印出一行的全部內容。
(2)當行i確定后,每一行里又是由若干個空格和若干個字符組成,這可用二個內層循環來實現。假設用j來控制每一行里的空格數,用k來控制每一行里的字符數,下面我們列表來分析一下,當行i確定以后,每一行里最大空格數、最大字符數、字符對應的ASCII碼的變化規律C。

行數i 空格數j 字符數k 字符的ASCII碼1 25 1 65 2 24 3 66 3 23 5 67…………26 0 51 90
顯然當外層循環i值確定后,內層空格j循環的終值為26-i,內層字符數k循環的終值為2*i-1,對應同行上的字符的ascii碼值為:65+i-1即64+i。這樣我們就可以方便地寫出實現這個靜態的“字母金字塔”的C程序的源代碼如下:

可以這樣來考慮,每執行一次上面的循環可完成一個“字母金字塔”。我們可再設計一個更外層的循環,每循環一次將“字母金字塔”整體向右移動一個空格,也就是每一行的空格數增加一個,然后將前面一個“金字塔”清屏刪除掉,為產生下一個向右整體移動一格的“字母金字塔”做準備。
因此我們在上面的源程序i循環變量的外面再設計一個循環變量kk來控制“字母金字塔”向右移動的空格數,例如移動100個空格,這樣我們可以讓kk從1變到100,終值為100,kk每循環一次,上面的循環執行一次。完成一次kk循環后,就會生成一個完整的“字母金字塔”,然后我們要清屏刪除掉(可用Dos的清屏命令來實現:system(“cls”);),以便供下一個整體向右移動一格的“字母金字塔”生成。最后整個“字母金字塔”在屏幕上就完成了向右移動的過程。
實現這個功能的源程序代碼如下:


通過這個程序的實現,可以讓學生體會C語言的循環及循環的嵌套功能非常強大,它能實現很多意想不到的功能,“只有你想不到的,沒有它做不到的”,從而提高學生學習C語言的積極性,為今后編程打下堅實的基礎。