經驗談|22年貿大843C++控制語句例題多寫法精講

經驗談|22年貿大843C++控制語句例題多寫法精講

衝刺班對於知識點已經掌握的差不多了,所以今天主要以做題為主。講前四章的內容。這裡找了三道題目,包括課本的例題、課後題和集錦裡的題目(教材上的常見題集錦大家也應該做過一次了),下面會用不同的方法進行講解。

真題的重要性也很高,19年&20年中與每節課主題相關的題目會摘出來給大家講一下。另外會找一些比較簡單的和常見的經典題目,至少用兩種方法給大家進行講解。以理解程式碼為主,自己陣列寫、指標寫、迴圈寫等幾種方法都寫一下,看看有什麼不同。程式設計題怎麼寫都可以,但有些題目會有要求必須用某種方法。尤其是指標和陣列部分的題目,今年可能考得會稍微多一點。

(一)題目一:輸入一行字元,分別統計出其中的英文字母、數字、空格和其他字元的個數。

解法1:getchar()+while語句

經驗談|22年貿大843C++控制語句例題多寫法精講

首先看一下第一題,已經在21年考過了。貿大的題目首先是為研究生階段的學習做鋪墊,不管是哪個方向都會涉及到對於資料文字的處理,所以今年很可能會考到關於字串處理的題目。

比如 21年第一題考到總結字串中某個字母的個數,第二題考到找出兩個字串。它不會考處理單一資料,大機率會考一些字元跟文字,難度也會稍微大一些。

第一種解法是getchar()+while語句,第二種解法是gets()+for語句+陣列。其中一些固定的寫法可以記下來或者背下來,考前的時候看一看。

注意:

1、getchar()函式可以讀取空格和換行,所以可以用來解決本題,因為本題需要讀取空格;

但cin不能讀取空格,所以不能用cin讀取整個字串,因為讀取到空格就會自動結束讀取。

2、(c=getchar())!=‘\n’,可分解為兩句:c=getchar();while(c!=‘\n’){…},因為getchar每次都只讀取一個字元,所以要利用while迴圈,讀一個判斷一個,再讀下一個。

3、 L、T、N和O記得初始化為0,再進行++。

4、建議手寫程式碼的時候,寫上一些文字指引,方便老師閱讀程式碼,也顯得更為專業。

5、字母取名考慮L(etter)、N(umber)、T(ab)、O(thers),儘量不要隨便用abcd。

解法2:gets()+for語句+陣列

經驗談|22年貿大843C++控制語句例題多寫法精講

注意:

1、首先Get和getchar的區別是:gets()函式可以讀取字元陣列,getchar()函式可以讀取單個字元,但都只能是char型別。

2、gets()識別到換行之後,停止讀取(不讀取換行),並自動補‘\0’,所以在for迴圈裡面需要用‘\0’作為休止符。

解法3:gets()+while語句+指標

經驗談|22年貿大843C++控制語句例題多寫法精講

這個解法和上一個方法差不多,思想都是一樣的。

今年專業課可能會考到與字串處理有關的問題,需要看清楚題目裡面有沒有與空格有關的要求。首先要讀清題目要求,在選擇合適的方法進行作答。實在理解不了可以將模板背下來,都是萬能的。

(二)題目二:關於圖形輸出的問題

(圖形輸出題目重點在於,找到圖形每行之間的規律,將其總結為數學公式,如何理由雙重迴圈進行輸出。)

圖形一:半菱形

經驗談|22年貿大843C++控制語句例題多寫法精講

注意:

1、對於菱形類,需要將其劃分為上下兩部分,上部分遞增,下部分遞減

2、下部分為2*(7-i)

圖形輸出題目重點在於找到圖形每行之間的規律,將其總結為數學公式,如何利用雙重迴圈進行輸出。

對於圖形類的題可以自己總結成數學公式,按照自己寫的邏輯畫一下。如果能畫出來或者能算出來,大機率是沒有問題的,這種型別的題目自己可以檢查出來的。

圖形二:菱形

經驗談|22年貿大843C++控制語句例題多寫法精講

注意:

1、輸出菱形,將菱形分為上下兩部分,再將每部分分為左右兩部分,因此共需要4個迴圈。

2、迴圈條件不是試出來的,是先找規律,然後將其用i表示出來,為了方便理解,最後一個迴圈我寫成了4+(7-i),4是左半部分,7-i是右半部分。

3、寫完自己按程式碼走一遍,畫一下,一般就可以確定自己寫的是否正確。

19&20年相關題目講解

1

Static變數考察

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:B

第一次呼叫:fun(4):k=1+1=2,t=2+1=3,return(4*2*3)=24

第二次呼叫:fun(4):k=1+1=2,t=3+1=4,return(4*2*4)=32

static變數每次只有第一次呼叫時,賦值語句有效和,從第二次開始,只調用運算語句。

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:B

第一次呼叫:x=3*3=9,先輸出9,後進行x++操作後,x=10

第二次呼叫:x=10*3=30,先輸出30,後進行x++操作後,x=31

2

strlen()和sizeof()

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:A

sizeof()計算的是佔用記憶體的大小,union是共用記憶體,int是4位元組,char是1位元組,float是4位元組,取最大位元組數,因此結果為4。

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:B

sizeof()計算的是佔用記憶體的大小,a陣列成員均為char型別,各佔一個位元組,一共有9個成員(加上’\0’),故結果為9;

strlen()是求字串長度,即看字元的個數(數到’\0’前一個字元),故答案是8;

若題目中陣列a改為int型,則答案改為36,8

3

continue和break

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:C

①i=0,k1=11,k2=0

j=0,

j=1,k2=1

j=2,

j=3,k2=2

k1=12

②i=1,k1=13,k2=0

j=0,

j=1,k2=1

j=2,

j=3,k2=2

k1=14

本題難點在於,要請兩個k的不同,因為int k=0前面有個大括號,所以這就是一個新的k2,而最後輸出的是k1,所以其實本題與continue無關,只需要看i迴圈了一遍,每迴圈一遍,k累加兩次,一共迴圈2次,k初始化為10,故最終結果為14。

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:97

89

83

269

high=100,n=3,count=0,sum=0,flag=1

①2-50內,有100的因數(2、50),flag=0,high=99

②2-49內,有99的因數(3、33),flag=0,high=98

③2-48內,有98的因數(2、48),flag=0,high=97

④2-47內,沒有97的因數,flag=1,sum=97,count=1,high=96

……

①2-44內,沒有89的因數,flag=1,sum=97+89=186,count=2,high=87

……

①2-41內,沒有83的因數,flag=1,sum=97+89+83=269,count=3,high=82

本題功能:輸出從100倒數的前三個素數及它們的和

注意:結果書寫這裡,空格和換行一定要看準,填空題只有完全對和完全不對兩種。

4

迴圈語句程式碼理解閱讀

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:88898787

4:4-2=2,跳到case2語句,c+4=4+4=8,break表示不再繼續。

4:4-2=2,跳到case2語句,c+4=4+4=8,break表示不再繼續。

6:6-2-4,跳到default語句,c+2=6+2=8,break表示不再繼續。

7:7-2=5,跳到default語句,c+2=7+2=9,break表示不再繼續。

5:5-2=3,跳到case3語句,c+3=5+3=8

跳到default語句,c+2=5+2=7

5:5-2=3,跳到case3語句,c+3=5+3=8

跳到default語句,c+2=5+2=7

經驗談|22年貿大843C++控制語句例題多寫法精講

答案:C

f(5):return f(4)+f(3)

f(4):return f(3)+f(2)

f(3):return f(2)+f(1)

f(2):return f(1)+f(0)

f(2)= f(1)+f(0)=1+1=2

f(3)= f(2)+f(1)=2+1=3

f(4)= f(3)+f(2)=3+2=5

f(5)= f(4)+f(3)=5+3=8

雖然21年改成c++了,但21年考的題型與19年&20年的題型沒有什麼太大區別。只是文字類的題目有所減少,但對程式碼閱讀的一些必考點還是會考的。同一個知識點可以在19&20年真題中找到兩道題,每年都會考到。所以一定要注意這個知識點,多練習一下。