第十一周编程总结
| 這個作業屬于哪個課程 | C語言程序設計II | |
| 這個作業要求在哪 | https://edu.cnblogs.com/campus/zswxy/MS/homework/3206 | |
| 我在這個課程的目標是 | 能夠使用遞歸函數進行編程;掌握宏的基本用法;掌握編譯預處理的概念 | |
| 這個作業在哪個具體方面幫助我實現目標 | 通過PTA作業實踐編程學習 | |
| 參考文獻 | C語言程序設計 |
選擇題
編程題
7-1 漢諾塔問題* (10 分)
漢諾塔是一個源于印度古老傳說的益智玩具。據說大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤,大梵天命令僧侶把圓盤移到另一根柱子上,并且規定:在小圓盤上不能放大圓盤,每次只能移動一個圓盤。當所有圓盤都移到另一根柱子上時,世界就會毀滅。
請編寫程序,輸入漢諾塔圓片的數量,輸出移動漢諾塔的步驟。
輸入格式
圓盤數 起始柱 目的柱 過度柱
輸出格式
移動漢諾塔的步驟
每行顯示一步操作,具體格式為:
盤片號: 起始柱 -> 目的柱
其中盤片號從 1 開始由小到大順序編號。
輸入樣例
3
a c b
輸出樣例
1: a -> c
2: a -> b
1: c -> b
3: a -> c
1: b -> a
2: b -> c
1: a -> c
1.代碼
2.設計思路
3.本題遇到的問題及解決辦法
問題:模仿書上245頁的漢諾塔代碼,但代碼運行時出現答案錯誤
解決辦法:重新檢查代碼,發現自己給定義的變量多加了‘ ’符號,改正后答案正確
4.運行結果
預習題
請大家查閱資料,思考如下問題:
請舉實例解釋以下幾個概念:數組指針,指針數組,指針函數,函數指針,二級指針,單向鏈表。(無實例不給分)
請用自己的理解回答。如果有引用他人的文字,請一定要標出出處(使用Markdown的鏈接方式)。
1.數組指針
首先“數組指針”本質是指針,是指向一維數組的指針,定義方法,如:int (p)[n];()的優先級更高,表示一個名為p的指針,指向一個整型的、長度為n的數組。如果要把一個二維數組賦給這樣的指針,可以這樣,如:int b[2][4]; int (p)[4]; (因為要將二維數組b賦給p,而二維數組b的有2行,每一行的長度是4,所以數組指針p的長度定為4)定義完之后賦值方法為 p=b; (將數組b的首地址b[0]或者b[0][0]賦給p),此時p指向b[0][0],若執行p++; 則p指向b[1][0]。
2.指針數組
指針數組的本質是數組,這個數組的元素全都是指針。定義方式如:int p[n]; p是數組名,int是數組的類型,n是數組長度,則p[0]、p[1]、p[2]等都表示這個數組的一個指針,p++; 表示p數組指向下一個數組元素。如果a是個一維數組,要將a首地址賦給p,則p=a是錯誤的方式,可以寫成p=a; 此時p表示指針數組第一個元素的值,a的首地址的值。如果要把二維數組賦給一個指針數組,則在定義之后如int c[3][5]; int p[3]; for(i=0;i<3;i++) p[i]=c[i]; 二維指針數組的各個元素的表示方法:((p+i))和**(p+i)表示第‘i+1’行的第一個元素,(p[i]+j)、((p+i)+j)、((p+i))[j]和p[i][j]都表示第i行的第j個元素。
3.指針函數
指針函數本質是函數,它的返回值是個指針。它的聲明形式:類型名 函數名(參數表),如,int fact(cahr c,char op);會返回一個類型為int的指針(地址值),而在主函數中用來接收該返回值的也必須是相同類型的指針變量。
4.函數指針
指向函數的指針包含了函數的地址,可以通過它來調用函數。聲明格式如下:
類型說明符 (*函數名)(參數)
其實這里不能稱為函數名,應該叫做指針的變量名。這個特殊的指針指向一個返回整型值的函數。指針的聲明筆削和它指向函數的聲明保持一致。
指針名和指針運算符外面的括號改變了默認的運算符優先級。如果沒有圓括號,就變成了一個返回整型指針的函數的原型聲明。
5.二級指針:指向指針的指針
int c=2,d=3; int *pc=&c;
pc是指針變量的存儲內容,也就是c的地址
*pc就是對指針的解引用,取出這個c這個地址里面的值
6.單向鏈表:單向鏈表是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。鏈表是使用指針進行構造的列表,并且是由一個個結點組裝起來的,因此又稱為結點列表。其中每個結點都有指針成員變量指向列表中的下一個結點,head指針指向第一個結點稱為表頭,而終止于最后一個指向nuLL的指針。
學習感悟
本周學習了遞歸函數并用其進行編程;學習了宏的基本用法;理解編譯預處理的概念。以前總是見到使用宏的情況,但是沒去正式了解,這次真正知道了宏的概念,還有編譯預處理也經常聽到但沒沒去查過,這周也知道了,真正感覺到對這門課的知識越學越深了,也越來越難了。
結對編程感想
本周作業太難了,和小伙伴只討論了前面的題目,后面的只能啞口無言,看不懂,只能借看大佬的瞎扯幾句話,我們還需要加把勁。
學習進度條
轉載于:https://www.cnblogs.com/ZJ999999/p/10846933.html
總結
- 上一篇: Laravel中一些要记住 的写法
- 下一篇: 团队冲刺十