2019 第十一週做業html
這個做業屬於哪一個課程 | C語言程序設計ll |
這個做業要求在哪裏 | (https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201) |
我在這個課程的目標是 | 瞭解並學會使用遞歸函數 |
這個做業在哪一個具體方面幫助我實現目標 | 理解遞歸函數 |
參考文獻 | (https://jingyan.baidu.com/article/0f5fb099d9ae7e6d8334eae1.html##1) |
漢諾塔是一個源於印度古老傳說的益智玩具。聽說大梵天創造世界的時候作了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤,大梵天命令僧侶把圓盤移到另外一根柱子上,而且規定:在小圓盤上不能放大圓盤,每次只能移動一個圓盤。當全部圓盤都移到另外一根柱子上時,世界就會毀滅。編程
題圖1.jpg數組
請編寫程序,輸入漢諾塔圓片的數量,輸出移動漢諾塔的步驟。函數
輸入格式學習
圓盤數 起始柱 目的柱 過分柱this
輸出格式.net
移動漢諾塔的步驟
每行顯示一步操做,具體格式爲:
盤片號: 起始柱 -> 目的柱
其中盤片號從 1 開始由小到大順序編號。設計
輸入樣例3d
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
#include<stdio.h> void hanio (int n,char a,char b,char c); int main() { int n; char a,b,c; scanf("%d\n",&n); scanf("%c %c %c",&a,&b,&c); hanio(n,a,b,c); return 0; } //搬動n個盤,從a到b,c爲中間過渡// void hanio (int n,char a,char b,char c) { if(n==1) { printf("%d: %c -> %c\n",n,a,b); } else{ hanio (n-1,a,c,b); printf("%d: %c -> %c\n",n,a,b); hanio(n-1,c,b,a); } }
問題:本題是參照書上 的例題寫的,因此一開始沒有單獨定義字符串,致使答案錯誤
解決方法:編譯過程當中發現錯誤及時改過以後調試過程當中沒出現什麼問題
以上圖片來自新浪微博。
本題要求你實現一個稍微更值錢一點的 AI 英文問答程序,規則是:
•不管用戶說什麼,首先把對方說的話在一行中原樣打印出來;
•消除原文中多餘空格:把相鄰單詞間的多個空格換成 1 個空格,把行首尾的空格所有刪掉,把標點符號前面的空格刪掉;
•把原文中全部大寫英文字母變成小寫,除了 I;
•把原文中全部獨立的 can you、could you 對應地換成 I can、I could—— 這裏「獨立」是指被空格或標點符號分隔開的單詞;
•把原文中全部獨立的 I 和 me 換成 you;
•把原文中全部的問號 ? 換成驚歎號 !;
•在一行中輸出替換後的句子做爲 AI 的回答。
輸入格式:
輸入首先在第一行給出不超過 10 的正整數 N,隨後 N 行,每行給出一句不超過 1000 個字符的、以回車結尾的用戶的對話,對話爲非空字符串,僅包括字母、數字、空格、可見的半角標點符號。
輸出格式:
按題面要求輸出,每一個 AI 的回答前要加上 AI: 和一個空格。
輸入樣例:
6 Hello ? Good to chat with you can you speak Chinese? Really? Could you show me 5 What Is this prime? I,don 't know
輸出樣例:
Hello ? AI: hello! Good to chat with you AI: good to chat with you can you speak Chinese? AI: I can speak chinese! Really? AI: really! Could you show me 5 AI: I could show you 5 What Is this prime? I,don 't know AI: what Is this prime! you,don't know
本題不會寫,看了這位博主的代碼 (http://www.javashuo.com/article/p-pkeqaqml-cg.html) ,表示一臉懵。
在國際象棋中,皇后是最厲害的棋子,能夠橫走、直走,還能夠斜走。棋手馬克斯·貝瑟爾 1848 年提出著名的八皇后問題:即在 8 × 8 的棋盤上擺放八個皇后,使其不能互相攻擊 —— 即任意兩個皇后都不能處於同一行、同一列或同一條斜線上。
如今咱們把棋盤擴展到 n × n 的棋盤上擺放 n 個皇后,請問該怎麼擺?請編寫程序,輸入正整數 n,輸出所有擺法(棋盤格子空白處顯示句點「.」,皇后處顯示字母「Q」,每兩格之間空一格)。
輸入格式
正整數 n (0 < n ≤ 12)
輸出格式
若問題有解,則輸出所有擺法(兩種擺法之間空一行),不然輸出 None。
要求:試探的順序逐行從左往右的順序進行,請參看輸出樣例2。
輸入樣例1
3
輸出樣例1
None
輸入樣例2
6
輸出樣例2
. Q . . . . . . . Q . . . . . . . Q Q . . . . . . . Q . . . . . . . Q . . . Q . . . . . . . . Q . Q . . . . . . . . Q . Q . . . . . . . . Q . . . . . Q . . Q . . . . . . . . . Q . . Q . . . . . . . . . Q . . Q . . . . . . . Q . . . Q . . . Q . . . . . . . . . . Q . . . Q . . . Q . . . .
本題照樣不會寫,而後也搜了一些百度,看了該博主的代碼(http://www.cnblogs.com/cnnnnnn/p/8506883.html),依舊很懵。。。
1.數組指針
數組指針強調的是指針,而且這個指針指向一個數組,即指針變量存放的是數組地址。
eg:int (*a)[10],其中a是一個指針,而且指向一個含有10個整型元素的數組。
2.指針數組
指針數組強調的是數組,而且數組元素是指針類型。
eg:int a[10],其中a是一個數組,數組元素是指針(int)。
3.指針函數
指針函數指帶有指針的函數,即其本質是一個函數,只不過這種函數返回的是一個對應類型的地址。
eg: int function(int m)
{
printf("this is a function");
return m;
}
int main()
{
int p, data = 5;
p = function(&data);
printf("%d\n", p); //打印出data的值
}
4.函數指針
函數指針是指向可執行代碼段或調用可執行代碼段的信息塊的指針,而不是指向某種數據的指針。函數指針是將函數當作普通數據那樣存儲和管理。
eg:void test(char* str);
void (p)(char),其中p是一個指針,而且指向一個函數,這個函數參數是char*,返回類型是void型。
5.二級指針
二級指針指的是A(即B的地址)是指向指針的指針,用於存放二級指針的變量稱爲二級指針變量.根據B的不一樣狀況,二級指針又分爲指向指針變量的指針和指向數組的指針。
eg:int i,*p,**pi;
p=&i; pi=π
6.單向鏈表
單向鏈表(單鏈表)是鏈表的一種,其特色是鏈表的連接方向是單向的,對鏈表的訪問要經過順序讀取從頭部開始。 經過指針鏈接起來,可是隻能單向遍歷的內存塊。
eg:這裏有一個單向鏈表的經典示例( https://wenku.baidu.com/view/e880d93483c4bb4cf7ecd130.html )
本週學習了第10章函數與程序結構,在C語言中,遞歸就是一個函數在它的函數體內調用它自身。執行遞歸函數將反覆調用其自身,每調用一次就進入新的一層。遞歸函數必須有結束條件。當函數在一直遞推,直到遇到牆後返回,這個牆就是結束條件。因此遞歸要有兩個要素,結束條件與遞推關係。遞歸有兩個基本要素:(1)邊界條件:肯定遞歸到什麼時候終止,也稱爲遞歸出口。(2)遞歸模式:大問題是如何分解爲小問題的,也稱爲遞歸體。遞歸函數只有具有了這兩個要素,才能在有限次計算後得出結果 。
在遞歸函數中,調用函數和被調用函數是同一個函數,須要注意的是遞歸函數的調用層次,若是把調用遞歸函數的主函數稱爲第0層,進入函數後,首次遞歸調用自身稱爲第1層調用;從第i層遞歸調用自身稱爲第i+1層。反之,退出第i+1層調用應該返回第i層。一個遞歸函數的調用過程相似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同一個函數。
感悟:感受這周的做業好難啊,嚴重超出了個人能力範圍。唉,身爲菜鳥的我繼續努力吧!加油!
本週三晚自習依舊是咱們結對編程的時間,感受此次做業比較難,我和搭檔相對來講都比較菜,都不會作,這周感受沒有多大的收穫。
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
2/25-3/3 | 三天 | 45 | 數組的認識及用法 | 數組長度的理解 |
3/4-3/10 | 兩天 | 37 | 編寫程序時處理文件 | fscanf與fprintf的具體用法 |
3/11-3/17 | 三天 | 53 | 二維數組的使用及文件插入 | 二維數組的用法、上三角的判斷及文件的處理 |
3/18-3/24 | 兩天 | 113 | 選擇排序法、二分查找法、二維數組的引用與矩陣 | 不清楚選擇排序法和冒泡排序法的區別 |
3/25-3/31 | 兩天 | 78 | 判斷迴文、一維字符數組的用法、使用字符串編程 | 使用字符串編程 |
4/1-4/7 | 兩天 | 88 | 指針變量的基本運算,內存單元和地址之間的關係 | 不太瞭解指針數組 |
4/8-4/14 | 兩天 | 96 | 指針、數組和地址之間的關係 | 對於指針數組和數組指針的區別不是特別清楚 |
4/15-4/21 | 兩天 | 128 | 字符串和字符指針、經常使用的字符串處理函數 及用指針實現內存動態分配 | 對於指針都不是特別懂 |
4/22-4/28 | 兩天 | 120 | 定義結構,使用結構變量與結構數組進行編程 | 結構體參與判斷 |
4/29-5/4 | 一天 | 0 | 結構數組及結構指針 | 結構指針 |
5/5-5/11 | 兩天 | 26 | 遞歸函數的定義及使用 | 遞歸函數的使用 |
時間 | 代碼行數 | 博客字數 |
---|---|---|
第一週 | 45 | 870 |
第二週 | 37 | 1055 |
第三週 | 112 | 1158 |
第四周 | 113 | 1696 |
第五週 | 78 | 1854 |
第六週 | 114 | 2977 |
第七週 | 96 | 3019 |
第八週 | 128 | 3264 |
第九周 | 120 | 3540 |
第十週 | 0 | 3216 |
第十一週 | 26 | 3186 |