期末祕籍|VB、C語言、C++、知識太多太複雜?編程大神帶你劃重點啦

VB、C語言、C++考試紛紛來臨

面對浩如煙海的編程知識

從哪裡著手複習一度令人頭大

於是糰子們邀請到了兩位編程大佬

來為大家講解編程類課程最重要的考點

快快拿出小本本

記下有用的複習知識吧

期末秘籍|VB、C语言、C++、知识太多太复杂?编程大神带你划重点啦

##大佬一號

7年C++經驗,某安全廠商信息安全工程師

給初學者的建議(青銅段位)

針對廣大的初學者,我個人並不建議抱著太多的教材一起閱讀,而是應該找到一本入門級好書。在這裡,我推薦C++ Primer,這是一本對初學者非常友好的教材。然鵝,只買了教材然後放在宿舍積灰也是不行的,在青銅段位最重要的就是練習。從最簡單的Hello World,再到循環、判斷、數組…必須要在學習一章之後做足夠數量的編程練習。在練習的過程中,可能你就會發現,nani?!這章內容我看書明明都看會了,但為什麼還是不會編呢??這個時候就要回到相應的地方再看。

還有一點,上述說的編程練習都是指在電腦上寫真正的程序,要是手寫代碼的話……這個可不算。

在說完了學習的經驗之後,還要給初學者提醒三點建議:

第一,注意代碼格式。大家一定要參考書上的樣例程序,注意不同層級的代碼前面要加上不同數量的空格,這樣整段代碼是非常清晰的,如果有問題也能很快找到相應的地方。針對初學者來說,可能你會覺得打不打空格都一樣,但如果你進階到需要寫1000行代碼的時候,那你如果還習慣代碼不分層,那我只能唱一首祝你平安……

第二,函數的大括號要一起打出來,然後再填中間的程序內容。跟上面一條異曲同工,這個看似奇葩的做法其實也是為了保證代碼的可讀性,同時也是為了讓你在最後不落下任何一個大括號。如果初學階段養成了這個習慣,以後的代碼之路真的就暢通無阻惹。在這裡要感謝我的信息學競賽老師,當年在被老師無數次diss中終於把這件事當成了本能…

第三,先想想算法,再開始猛敲鍵盤。其實所謂的編程過程,就是要先想出來一個最佳的算法,再利用C艹課所學的語句把這個算法實現。因此,在你寫完int main之後,停下來先想想要用什麼樣的算法,或者可以在紙上先畫個圖,遇到嵌套的循環時可以在紙上畫個表格,列舉i=*、j=*時候程序裡面的變量值都是多少。確定了正確的思路,就很難寫不出來程序了。

在代碼的道路上漸行漸遠(白銀段位)

到了這個段位,不掌握算法那是顯然不行的。因此就一定要重視數據結構和算法原理這兩方面的學習。儘管程序設計的題目千變萬化,但用到的算法其實就這麼幾套。在這個階段,除了看書之外,我建議大家要熟練運用網絡,有的問題可能書上寫得很複雜,但網上一查就發現有人用非常搞笑/直觀/可愛的方式解答了相同的問題。

不管你是不是單身,這個階段在編寫C++代碼的時候都要考慮面向對象編程了,大家要熟悉對象的基本思想和三大特徵,這是C++的靈魂所在。

不寫代碼是不可能的 這輩子都不可能的(黃金段位)

針對更高階的同學,我首先建議大家選好自己的發展方向,也就是你到底要用C++來幹什麼?如果你以後對遊戲比較感興趣,那你就要試試用C++配合DirectX或者OpenGL來做個小遊戲,平常看看計算機圖形學什麼的。如果你以後想要走研發路線,那你還得再深入學學更多的算法,看更厚的算法書。在這個階段,必須要找一個方向深入的學下去,這樣才能把這個具體的方向研究明白。

不過對於廢鐵段位的我們來說

眼前最重要的

就是如何順利度過期末考試

這不,糰子們請到了第二位大神

幫大家梳理一些基礎的C語言知識點~

##大佬二號

程序媛,大三在讀,計算機二級C語言科目90+

在C語言的學習中,最令大家頭痛的莫過於指針、數組、函數這幾方面的知識了,面對馬上要到來的期末考試,需要熟記以下知識點。

指針

指針變量的本質是用來放地址,而一般的變量是放數值的。

1、int *p 中 *p和p的差別:簡單說*p是數值,p是地址

*p可以當做變量來用;*的作用是取後面地址p裡面的數值

p是當作地址來使用。可以用在scanf函數中:scanf(“%d”,p);

2、*p++ 和 (*p)++的之間的差別

*p++是 地址會變化。

口訣:取當前值,然後再移動地址。

(*p)++ 是數值會要變化。

口訣:取當前值,然後再使數值增加1。

例如:int *p,a={1,3,5,7,9};

p=a;

請問*p++和(*p)++的數值分別為多少?

*p++: 這個本身的數值為1。由於是地址會增加一,所以指針指向數值3了。

(*p)++ 這個本身的數值為1。由於有個++表示數值會增加,指針不移動,但數值1由於自加了一次變成了2。

3、二級指針:

*p:一級指針:存放變量的地址。

**q:二級指針:存放一級指針的地址。

常考題目: int x=7;

int*p=&x,**q=p;

問:*p為多少?*q為多少?**q為多少?

答 : 7 , p , 7

再問 :**q=&x的寫法可以嗎?

再答:不可以,因為二級指針只能存放一級指針的地址。

4、三名主義:

數組名:表示第一個元素的地址。數組名不可以自加,他是地址常量名。

函數名:表示該函數的入口地址。

字符串常量名:表示第一個字符的地址。

5、移動指針

char *s=“meikanshu”

while(*s){printf(“%c”,*s);s++;}

這個s首先會指向第一個字母m然後通過循環會一次打印出一個字符,s++是地址移動,打印了一個字母后,就會移動到下一個字母!

6

、指針變量兩種初始化(一定要看懂)

方法一:int a=2,*p=&a;(定義的同時初始化)

方法二:int a=2,*p;(定義之後初始化) p=&a;

數組

數組: 存放的類型是一致的。多個數組元素的地址是連續的。

1、一維數組的初始化

int a[5]={1,2,3,4,5}; 合法

int a[5]={1,2,3, }; 合法

int a={1,2,3,4,5}; 合法,常考,後面決定前面的大小!

int a[5]={1,2,3,4,5,6}; 不合法,賦值的個數多餘數組的個數了

2、一維數組的定義;

int a[5];注意這個地方有一個重要考點,定義時數組的個數不是變量一定是常量。

int a[5] 合法,最正常的數組

int a[1+1] 合法,個數是常量2,是個算術表達式

int a[1/2+4] 合法,同樣是算術表達式

int x=5,int a[x];

不合法,因為個數是x,是個變量,非法的,

define P 5 int a[P]

合法,define 後的的P是符號常量,只是長得像變量

3、二維數組的初始化

int a[2][3]={1,2,3,4,5,6};

合法,很標準的二維的賦值。

int a[2][3]={1,2,3,4,5, };

合法,後面一個默認為0。

int a[2][3]={{1,2,3,} {4,5,6}};

合法,每行三個。

int a[2][3]={{1,2,}{3,4,5}};

合法,第一行最後一個默認為0。

int a[2][3]={1,2,3,4,5,6,7};

不合法,賦值的個數多餘數組的個數了。

int a[3]={1,2,3,4,5,6};

不合法,不可以缺省行的個數。

int a[2]={1,2,3,4,5,6};

合法,可以缺省列的個數。

補充:

1)一維數組的重要概念:

對a[10]這個數組的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[0]的地址。(等價於&a)

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是一維數組名,所以它是列指針,也就是說a+1是跳一列。

對a[3][3]的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[0][0]的地址。

2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是二維數組名,所以它是行指針,也就是說a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以對它進行賦值操作,同時它們都是列指針,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0] 、a[1]、a[2]是不同的,它們的基類型是不同的。前者是一行元素,後三者是一列元素。

2) 二維數組做題目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}這樣的題目。

步驟一:把他們寫成:

第一列 第二列 第三列

a[0] 1 2 3 一>第一行

a[1] 4 5 6 —>第二行

a[2] 7 8 9 一>第三行

步驟二:這樣作題目間很簡單:

*(a[0]+1)我們就知道是第一行的第一個元素往後面跳一列,那麼這裡就是a[0][1]元素,所以是1。

*(a[1]+2)我們就知道是第二行的第一個元素往後面跳二列。那麼這裡就是a[1][2]元素,所以是6。

一定記住:只要是二維數組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。

3) 數組的初始化,一維和二維的,一維可以不寫,二維第二個一定要寫

int a={1,2} 合法。

int a[4]={2,3,4}合法。

但int a[4]={2,3,4}非法。

4) 二維數組中的行指針

int a[1][2];

其中a現在就是一個行指針,a+1跳一行數組元素。

搭配(*)p[2]指針

a[0],a[1]現在就是一個列指針。

a[0]+1 跳一個數組元素。搭配*p[2]指針數組使用

5) 還有記住脫衣服法則:超級無敵重要

a[2] 變成 *(a+2)

a[2][3]變成 *(a+2)[3]再可以變成 *(*(a+2)+3)。

函數

1、函數:是具有一定功能的一個程序塊,是C語言的基本組成單位。

2、函數不可以嵌套定義。但是可以嵌套調用。

3、函數名缺省返回值類型,默認為 int。

4、C語言由函數組成,但有且僅有一個main函數,是程序運行的開始

5、如何判斷a是否為質數:

void iszhishu( int a )

{

for(i=2;i


分享到:


相關文章: