第十一周总结
| 這個作業(yè)屬于那個課程 | C語言程序設(shè)計II |
| 這個作業(yè)要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/3203 |
| 我在這個課程的目標是 | 理解與使用遞歸函數(shù)。 |
| 參考文獻 | ? |
基礎(chǔ)題
2-1
宏定義“#define DIV(a, b) a/b”,經(jīng)DIV(x + 5, y - 5) 引用,替換展開后是(A)。?(1分)
A.???? x + 5 / y - 5
B.???? (x + 5 / y – 5)
C.???? (x + 5) / (y - 5)
D.???? (x + 5) / (y - 5);
2-2
定義帶參數(shù)的宏“#define JH(a,b,t) t = a; a = b; b = t”,對兩個參數(shù)a、b的值進行交換,下列表述中正確的是(B)。?(1分)
A.??? 不定義參數(shù)a和b將導(dǎo)致編譯錯誤
B.??? 不定義參數(shù)a、b、t將導(dǎo)致編譯錯誤
C.??? 不定義參數(shù)t將導(dǎo)致運行錯誤
D.??? 不需要定義參數(shù)a、b、t類型
2-3
如果所有的變量按照下面的程序進行定義和聲明,那么在main()函數(shù)中所有可用的變量為 (C)。?(2分)
void fun(int x)
{?
??? static int y;
??? ……
??? return;
}
int z;
void main( )
{??
??? int a,b;
??? fun(a);
??? ……
}
A.??? x,y
B.??? x,y,z
C.??? a,b,z
D.??? a,b,x,y,z
2-4
如果一個變量在整個程序運行期間都存在,但是僅在說明它的函數(shù)內(nèi)是可見的,這個變量的存儲類型應(yīng)該被說明為( A )。?(1分)
A.??? 靜態(tài)變量
B.??? 動態(tài)變量
C.??? 外部變量
D.??? 內(nèi)部變量
2-5
下面說法中正確的是(C)。?(1分)
A.??? 若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態(tài)全局變量,以降低模塊間的耦合度
B.??? 若全局變量僅由單個函數(shù)訪問,則可以將這個變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度
C.??? 設(shè)計和使用訪問動態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函數(shù)時,需要考慮變量生命周期問題
D.??? 靜態(tài)全局變量使用過多,可那會導(dǎo)致動態(tài)存儲區(qū)(堆棧)溢出
2-6
凡是函數(shù)中未指定存儲類別的局部變量,其隱含的存儲類型為(A )。?(1分)
A.??? 自動(auto)
B.??? 靜態(tài)(static)
C.??? 外部(extern)
D.??? 寄存器(register)
2-7
在一個C源程序文件中,若要定義一個只允許本源文件中所有函數(shù)使用的全局變量,則該變量需要使用的存儲類別是 ( D )。?(1分)
A.??? extern
B.??? register
C.??? auto
D.??? static
2-8
將一個函數(shù)說明為static后,該函數(shù)將 ( B )。(1分)
A.???? 既能被同一源文件中的函數(shù)調(diào)用,也能被其他源文件中的函數(shù)調(diào)用
B.???? 只能被同一源文件中的函數(shù)調(diào)用,不能被其他源文件中的函數(shù)調(diào)用
C.???? 只能被其他源文件中的函數(shù)調(diào)用,不能被同一源文件中的函數(shù)調(diào)用
D.???? 既不能被同一源文件中的函數(shù)調(diào)用,也不能被其他源文件中的函數(shù)調(diào)用
?
7-1?漢諾塔問題*?(10?分)
漢諾塔是一個源于印度古老傳說的益智玩具。據(jù)說大梵天創(chuàng)造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤,大梵天命令僧侶把圓盤移到另一根柱子上,并且規(guī)定:在小圓盤上不能放大圓盤,每次只能移動一個圓盤。當(dāng)所有圓盤都移到另一根柱子上時,世界就會毀滅。請編寫程序,輸入漢諾塔圓片的數(shù)量,輸出移動漢諾塔的步驟。
輸入格式
圓盤數(shù) 起始柱 目的柱 過度柱輸出格式
移動漢諾塔的步驟 每行顯示一步操作,具體格式為: 盤片號: 起始柱 -> 目的柱 其中盤片號從 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 (void) {int n;char a,b,c;scanf("%d\n",&n);scanf("%c %c %c",&a,&b,&c);hanio(n,a,b,c);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);} }思路圖
錯誤截圖
結(jié)果截圖
?
-2?估值一億的AI核心代碼?(20?分)
本題要求你實現(xiàn)一個稍微更值錢一點的 AI 英文問答程序,規(guī)則是:
?
無論用戶說什么,首先把對方說的話在一行中原樣打印出來;
消除原文中多余空格:把相鄰單詞間的多個空格換成 1 個空格,把行首尾的空格全部刪掉,把標點符號前面的空格刪掉;
把原文中所有大寫英文字母變成小寫,除了 I;
把原文中所有獨立的 can you、could you 對應(yīng)地換成 I can、I could—— 這里“獨立”是指被空格或標點符號分隔開的單詞;
把原文中所有獨立的 I 和 me 換成 you;
把原文中所有的問號 ? 換成驚嘆號 !;
在一行中輸出替換后的句子作為 AI 的回答。
輸入格式:
輸入首先在第一行給出不超過 10 的正整數(shù) N,隨后 N 行,每行給出一句不超過 1000 個字符的、以回車結(jié)尾的用戶的對話,對話為非空字符串,僅包括字母、數(shù)字、空格、可見的半角標點符號。輸出格式:
按題面要求輸出,每個 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代碼
#include<stdio.h> int main (void) {int n,i,j=0,str;char sting[1000];scanf("%d\n",&n);for(i=1;i<=n;i++)gets(string);puts(string);pritnf("AI: ");思路
這個題不是很會做,只能寫出部分解。輸出原文,換大小寫的,換問號為感嘆號,輸出AI:
錯誤截圖
結(jié)果截圖
?
挑戰(zhàn)作業(yè)
7-3?***八皇后問題?(20?分)
在國際象棋中,皇后是最厲害的棋子,可以橫走、直走,還可以斜走。棋手馬克斯·貝瑟爾 1848 年提出著名的八皇后問題:即在 8 × 8 的棋盤上擺放八個皇后,使其不能互相攻擊 —— 即任意兩個皇后都不能處于同一行、同一列或同一條斜線上。
現(xiàn)在我們把棋盤擴展到 n × n 的棋盤上擺放 n 個皇后,請問該怎么擺?請編寫程序,輸入正整數(shù) n,輸出全部擺法(棋盤格子空白處顯示句點“.”,皇后處顯示字母“Q”,每兩格之間空一格)。
輸入格式
正整數(shù) 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 . . . .代碼
?
思路
我對本題沒思路,我有一個一個字地看,我大概理解題目要我做什么,但就是沒有思路。很亂,真的不會!
錯誤截圖
?
結(jié)果截圖
?
預(yù)習(xí)作業(yè)(第十一章 指針進階)
? ? ? ?數(shù)組指針:是一個指向數(shù)組的指針。
int (*arr)[10];//指向int[10]的指針? ? ? ?指針數(shù)組:是一個存放指針的數(shù)組。
int *arr[];//[]優(yōu)先級高,所以arr首先是一個數(shù)組,里面存放的是一個個指針 int** arr[];//數(shù)組中放入二級指針? ? ? ?指針函數(shù):我們知道能保存地址的是指針;那么問題就轉(zhuǎn)化為了哪個是指針的問題?同數(shù)組指針一樣,我們考慮優(yōu)先級的問題:pfun1先和*結(jié)合,說明pfun1是指針,指針指向的是一個函數(shù),指向的函數(shù)無參數(shù),返回值類型為void。所以pfun1可以保存函數(shù)地址。而“void *pfun2();”是一個函數(shù)聲明,返回值為void*類型。
? ? ? ?函數(shù)指針:類似于指針數(shù)組,要把函數(shù)的地址存到一個數(shù)組中,那這個數(shù)組就叫函數(shù)指針數(shù)組
int (*parr1[10]])();//parr1先與[]結(jié)合,說明它是一個數(shù)組,數(shù)組的內(nèi)容是 int (*)() 類型的函數(shù)指針。 int *parr2[10]();//parr2先與*結(jié)合,說明它是一個指針 int (*)() parr3[10];//沒有這種定義方式,是錯誤的? ? ? ?二級指針:帶命令行參數(shù)的main函數(shù)要用到二級指針
int main(int argc, char **agrv)? ? ? ?單向鏈表:單鏈表)是鏈表的一種,其特點是鏈表的鏈接方向是單向的,對鏈表的訪問要通過順序讀取從頭部開始。
來源(https://blog.csdn.net/weixin_40417029/article/details/78580080)
? ? ? ?(https://blog.csdn.net/u011308691/article/details/16809235)
?
學(xué)習(xí)進度條
| 時間 | 代碼行數(shù) | 這周所花的時間 | 學(xué)到的知識點簡介 |
| 3/2-3/19 | 35 | 四小時左右 | 通過代碼讀取文件里的數(shù)據(jù),并且打印 |
| 3/9-3/19 | 65 | 三十分鐘 | ? |
| 3/19-3/22 | 186 | 五個小時左右 | 二維數(shù)組的用法加上二分法找元素 |
| 3/22-3/28 | 31 | 三小時左右 | 字符串的使用 |
| 4/2-4/9 | 130 | 2小時左右 | 指針的使用 |
| 4/15-4/19 | 200 | 2天 | 指針內(nèi)存的動態(tài)分配,不是很清楚使用動態(tài)分配 |
| 4/22-4/27 | 150 | 3小時 | 對結(jié)構(gòu)體的使用熟悉 |
| 5/6-5/9 ????????????? | 100 | 2小時 | 遞歸函數(shù)運行過程 |
?
折線圖
學(xué)習(xí)感悟
感覺題目好難,這次作業(yè)也讓我了解還有很多東西需要去學(xué)習(xí),對算法的知識了解還是太少
轉(zhuǎn)載于:https://www.cnblogs.com/LUMO/p/10843778.html
總結(jié)
- 上一篇: 关于同时可用git命令clone和Tor
- 下一篇: 在layui中使用 jquery 触发s