這個做業屬於哪一個課程 | C語言程序設計ll |
這個做業要求在哪裏 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/3202 |
我在這個課程的目標是 | 瞭解並學習遞歸函數以及宏定義的知識 |
這個做業在哪一個具體方面幫助我實現目標 | 這個做業讓我瞭解和學習如何使用遞歸函數 |
參考文獻 | 書本第十章的知識以及百度查閱的知識 |
漢諾塔是一個源於印度古老傳說的益智玩具。聽說大梵天創造世界的時候作了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤,大梵天命令僧侶把圓盤移到另外一根柱子上,而且規定:在小圓盤上不能放大圓盤,每次只能移動一個圓盤。當全部圓盤都移到另外一根柱子上時,世界就會毀滅。
請編寫程序,輸入漢諾塔圓片的數量,輸出移動漢諾塔的步驟。ios
圓盤數 起始柱 目的柱 過分柱面試
移動漢諾塔的步驟
每行顯示一步操做,具體格式爲:
盤片號: 起始柱 -> 目的柱
其中盤片號從 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
#include<stdio.h> void hanio (int n,char a,char b,char c); int main() { int n; char d,e,f; scanf("%d\n",&n); scanf("%c %c %c",&d,&e,&f); hanio(n,d,e,f); return 0; } 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); } }
問題:本題是按照書上例題來改寫的,原本沒有定義和輸入d,e,f的,直接所有按照書上來寫,就報錯
解決方法:定義和輸入d,e,f,不直接調用字符‘a',’b',‘c'就能夠了數組
以上圖片來自新浪微博。
本題要求你實現一個稍微更值錢一點的 AI 英文問答程序,規則是:
不管用戶說什麼,首先把對方說的話在一行中原樣打印出來;
消除原文中多餘空格:把相鄰單詞間的多個空格換成 1 個空格,把行首尾的空格所有刪掉,把標點符號前面的空格刪掉;
把原文中全部大寫英文字母變成小寫,除了 I;
把原文中全部獨立的 can you、could you 對應地換成 I can、I could—— 這裏「獨立」是指被空格或標點符號分隔開的單詞;
把原文中全部獨立的 I 和 me 換成 you;
把原文中全部的問號 ? 換成驚歎號 !;
在一行中輸出替換後的句子做爲 AI 的回答。markdown
輸入首先在第一行給出不超過 10 的正整數 N,隨後 N 行,每行給出一句不超過 1000 個字符的、以回車結尾的用戶的對話,對話爲非空字符串,僅包括字母、數字、空格、可見的半角標點符號。app
按題面要求輸出,每一個 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學習
正整數 n (0 < n ≤ 12)this
若問題有解,則輸出所有擺法(兩種擺法之間空一行),不然輸出 None。
要求:試探的順序逐行從左往右的順序進行,請參看輸出樣例2。.net
3
None
6
. Q . . . . . . . Q . . . . . . . Q Q . . . . . . . Q . . . . . . . Q . . . Q . . . . . . . . Q . Q . . . . . . . . Q . Q . . . . . . . . Q . . . . . Q . . Q . . . . . . . . . Q . . Q . . . . . . . . . Q . . Q . . . . . . . Q . . . Q . . . Q . . . . . . . . . . Q . . . Q . . . Q . . . .
數組指針,指的是數組名的指針,即數組首元素地址的指針,便是指向數組的指針,數組指針只是一個指針變量,它佔有內存中一個指針的存儲空間
例:
int a[10][20]; int (*p)[10];
int (*p)[10]該語句是定義一個數組指針,指向含10個元素的一維數組。
指針數組中的每個元素均爲指針,即有諸形如「ptr_array[i]」的指針。因爲數組元素均爲指針,所以ptr_array[i]是指第i+1個元素的指針,指針數組是多個指針變量,以數組形式存在內存當中,佔有多個指針的存儲空間
例:
int *p[10]; int a[10][20];
int *p[10] 表示一個一維數組內存放着三個指針變量,分別是p[0]、p[1]、p[2]一直到p[9]
首先它是一個函數,只不過這個函數的返回值是一個地址值。函數返回值必須用同類型的指針變量來接受,也就是說,指針函數必定有「函數返回值」,並且,在主調函數中,函數返回值必須賦給同類型的指針變量
例:
float *fun(); float *p; p = fun(a);
函數指針是指向函數的指針變量。 所以「函數指針」自己首先應是指針變量,只不過該指針變量指向函數,每個函數都有一個入口地址,該入口地址就是函數指針所指向的地址,函數指針有兩個用途:調用函數和作函數的參數。
例:
// fuction_pointer.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <string> int addInt(int n, int m) { return n + m; } typedef int(*FunctionPointer)(int, int);/*這樣就定義了一種指針類型*/ int add2to3(int(*functionPtr)(int, int)) { return (*functionPtr)(2, 3); } int main() { FunctionPointer fp = &addInt; int sum = fp(3, 2); std::cout<<sum<< std::endl; int sum2=add2to3(fp); std::cout << sum2 << std::endl; system("pause"); return 0; }
A(即B的地址)是指向指針的指針,稱爲二級指針,用於存放二級指針的變量稱爲二級指針變量.根據B的不一樣狀況,二級指針又分爲指向指針變量的指針和指向數組的指針。
例:
使用二級指針,無需申請內存空間,由於在函數內直接改變形參的指向就能夠改變實參的指向, 指向的內存空間,只須要在函數內部申請便可(棧空間不可,由於棧空間用完即被釋放,沒法返回出來,可使用動態內存分配)。
單向鏈表(單鏈表)是鏈表的一種,其特色是鏈表的連接方向是單向的,對鏈表的訪問要經過順序讀取從頭部開始;鏈表是使用指針進行構造的列表;又稱爲結點列表,由於鏈表是由一個個結點組裝起來的;其中每一個結點都有指針成員變量指向列表中的下一個結點。
例:
struct Node { int id; int score; struct Node *next; //此處*next表示尾巴 }*list_head;//設list_head,爲全局變量的指針
周/日期 | 這周所花的時間 | 代碼行數 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
2/25-3/3 | 2天 | 39 | 初次學習數組的用法 | 關於數組的一些具體的用法 |
3/4-3/10 | 2天 | 35 | 編寫程序來處理文件數據 | 指針的具體用法和fscanf類型函數的理解 |
3/11-3/17 | 1天 | 59 | 第一題:編寫程序處理文件數據 | 指針的具體用法 |
3/11-3/17 | 2天 | 51 | 第二題:用二維數組知識編寫程序 | 二維數組的知識點不熟悉 |
3/18-3/24 | 2天 | 111 | 二維數組、選擇法排序和冒泡法排序 | 選擇法排序和冒泡法排序的區別 |
3/25-3/31 | 2天 | 78 | 判斷迴文,字符數組和使用字符串編程 | 使用字符串編程時的一些函數的用法 |
4/1-4/7 | 3天 | 102 | 指針的基本運算,數組和指針的結合 | 對於數組仍是不熟悉 |
4/8-4/14 | 3天 | 96 | 冒泡排序,指針、數組和地址間的關係 | 指針和數組的關係和應用不太會,容易錯 |
4/15-4/21 | 3天 | 129 | 經常使用的字符串處理函數和用指針實現內存動態分配 | 關於指針內存動態分配還不太熟悉 |
4/22-4/28 | 3天 | 86 | 瞭解和學習結構的概念與定義,結構變量的使用以及結構數組和指針的使用 | 結構指針不太會,多是沒用慣 |
4/29-5/5 | 1天 | ---- | 怎樣花兩年時間面試一我的;如何有效地記憶與學習;如何提問 | ---- |
5/6-5/12 | 2天 | 25 | 如何使用遞歸函數以及學習宏定義的知識 | 有挺多地方都不太懂,此次的做業很難,不會寫 |
時間 | 代碼行數 | 博客字數 |
---|---|---|
第一週 | 39 | 798 |
第二週 | 35 | 923 |
第三週 | 110 | 1071 |
第四周 | 111 | 1713 |
第五週 | 78 | 1878 |
第六週 | 102 | 2991 |
第七週 | 96 | 2618 |
第八週 | 129 | 3011 |
第九周 | 86 | 3598 |
第十週 | ---- | 3456 |
第十一週 | 25 | 3468 |