2019 第十一週做業

2019 第十一週做業html

這個做業屬於哪一個課程 C語言程序設計ll
這個做業要求在哪裏 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3201
我在這個課程的目標是 瞭解並學會使用遞歸函數
這個做業在哪一個具體方面幫助我實現目標 理解遞歸函數
參考文獻 https://jingyan.baidu.com/article/0f5fb099d9ae7e6d8334eae1.html##1

單選題:

1、基礎題

一、漢諾塔問題* (10 分)

漢諾塔是一個源於印度古老傳說的益智玩具。聽說大梵天創造世界的時候作了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着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

(1)實驗代碼

#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);
        }
}

(2)設計思路

(3)本題調試過程當中碰到問題及解決方法

問題:本題是參照書上 的例題寫的,因此一開始沒有單獨定義字符串,致使答案錯誤

解決方法:編譯過程當中發現錯誤及時改過以後調試過程當中沒出現什麼問題

(4)運行結果截圖

二、估值一億的AI核心代碼 (20 分)

以上圖片來自新浪微博。

本題要求你實現一個稍微更值錢一點的 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

(1)實驗代碼

本題不會寫,看了這位博主的代碼 (http://www.javashuo.com/article/p-pkeqaqml-cg.html) ,表示一臉懵。

三、***八皇后問題 (20 分)

在國際象棋中,皇后是最厲害的棋子,能夠橫走、直走,還能夠斜走。棋手馬克斯·貝瑟爾 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 . . . .

(1)實驗代碼

本題照樣不會寫,而後也搜了一些百度,看了該博主的代碼(http://www.cnblogs.com/cnnnnnn/p/8506883.html),依舊很懵。。。

2、預習題

請你們查閱資料,思考以下問題:

請舉實例解釋如下幾個概念:數組指針,指針數組,指針函數,函數指針,二級指針,單向鏈表。(無實例不給分)

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

3、學習感悟

本週學習了第10章函數與程序結構,在C語言中,遞歸就是一個函數在它的函數體內調用它自身。執行遞歸函數將反覆調用其自身,每調用一次就進入新的一層。遞歸函數必須有結束條件。當函數在一直遞推,直到遇到牆後返回,這個牆就是結束條件。因此遞歸要有兩個要素,結束條件與遞推關係。遞歸有兩個基本要素:(1)邊界條件:肯定遞歸到什麼時候終止,也稱爲遞歸出口。(2)遞歸模式:大問題是如何分解爲小問題的,也稱爲遞歸體。遞歸函數只有具有了這兩個要素,才能在有限次計算後得出結果 。
在遞歸函數中,調用函數和被調用函數是同一個函數,須要注意的是遞歸函數的調用層次,若是把調用遞歸函數的主函數稱爲第0層,進入函數後,首次遞歸調用自身稱爲第1層調用;從第i層遞歸調用自身稱爲第i+1層。反之,退出第i+1層調用應該返回第i層。一個遞歸函數的調用過程相似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同一個函數。

感悟:感受這周的做業好難啊,嚴重超出了個人能力範圍。唉,身爲菜鳥的我繼續努力吧!加油!

4、結對編程感想

本週三晚自習依舊是咱們結對編程的時間,感受此次做業比較難,我和搭檔相對來講都比較菜,都不會作,這周感受沒有多大的收穫。

5、學習進度條

周/日期 這周所花的時間 代碼行數 學到的知識點簡介 目前比較迷惑的問題
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 遞歸函數的定義及使用 遞歸函數的使用

6、表格和折線圖

時間 代碼行數 博客字數
第一週 45 870
第二週 37 1055
第三週 112 1158
第四周 113 1696
第五週 78 1854
第六週 114 2977
第七週 96 3019
第八週 128 3264
第九周 120 3540
第十週 0 3216
第十一週 26 3186

相關文章
相關標籤/搜索