cpp學習(二)C語言復習
阿新 • • 發佈:2018-09-15
char 兩個 手寫 匯編知識 c基礎 什麽 ada 發現 png 接下來復習一下C語言部分,畢竟C++與C語言本自同根生,並且在匯編層面C與C++可以說完全相同。假如你沒有C語言基礎的話,可以先暫停去學習一下C語言,C語言可以看“C語言之父”譚浩強的《C語言程序設計》或者觀看學堂在線的免費公開課,在此推薦清華大學的c++課程:http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/a0f3bf5a4c044dfaaad6814821533699/
最起碼要先了解C基礎才能進行接下來的學習。
基礎包括:(想到哪寫哪,有點亂,但是知道這些以後就可以開始動手了) 2.程序都要從main()入口, 然後從最上面順序往下讀。(當然,這種說法其實是錯誤的,有興趣的話我會在以後寫明。)
3.函數的定義與使用
4.編譯預處理不是C語言的一部分,不占運行時間
5.在函數中不可以再定義函數
6.每個C語言程序寫完後,都是先編譯,後鏈接,最後運行。
7.標識符合法的要求是由字母,數字,下劃線組成,並且由下劃線或字母開頭。
8.C語言只有八、十、十六進制,沒有二進制。
9.復合的賦值表達式
a.自增自減語法,以及符號在前與在後的區別
b.基本的位運算與邏輯運算、算術運算
c.指針部分最好理解,如果實在不理解,在以後的博客中,我會講解一部分匯編知識,以便d.大家深入理解指針。
e.文件操作如果不理解也沒關系
//應該還有很多沒想到的知識點…不過,在項目中遇到了再通過註釋的方式詳解吧,這樣更//好理解一點。
好,在此假設屏幕前的你已經有了最基本的C語言知識。
我們來動手寫兩個小項目,進一步熟悉C語言的語法以及VS這款IDE。 ,包括對於變量在內存中的觀察,優秀的斷點,以及可以反匯編,在以後與bug做鬥爭的過程中,會讓你事半功倍。
首先與第一篇一樣,新建工程,新建cpp文件:
然後編碼:
最起碼要先了解C基礎才能進行接下來的學習。
基礎包括:(想到哪寫哪,有點亂,但是知道這些以後就可以開始動手了)
0.C基本數據類型
1.順序結構 、選擇結構、循環結構
3.函數的定義與使用
4.編譯預處理不是C語言的一部分,不占運行時間
5.在函數中不可以再定義函數
6.每個C語言程序寫完後,都是先編譯,後鏈接,最後運行。
7.標識符合法的要求是由字母,數字,下劃線組成,並且由下劃線或字母開頭。
8.C語言只有八、十、十六進制,沒有二進制。
9.復合的賦值表達式
a.自增自減語法,以及符號在前與在後的區別
b.基本的位運算與邏輯運算、算術運算
c.指針部分最好理解,如果實在不理解,在以後的博客中,我會講解一部分匯編知識,以便d.大家深入理解指針。
e.文件操作如果不理解也沒關系
好,在此假設屏幕前的你已經有了最基本的C語言知識。
我們來動手寫兩個小項目,進一步熟悉C語言的語法以及VS這款IDE。
項目一:打印菱形。(可以說是灰常簡單了)
項目二:寫一個C語言版的貪食蛇。(初學者看到,可能覺得自己肯定寫不出來,其實只要具備一定的C語言基礎,都可以很簡單的寫出來,只不過苦於無人指導,遇到一個棘手的問題可能就真的過不了這個坎了,在此我會盡可能詳細的講解可能遇到的問題,如果仍無法解決的話,歡迎請求遠程協助:QQ:1149375463,一些知識細節,遇到後會在項目註釋裏盡可能的寫詳細。)
在此再次推薦VS,因為VS擁有良好的調試功能
首先與第一篇一樣,新建工程,新建cpp文件:
然後編碼:
#include <stdio.h> //C標準輸入輸出庫
#include<Windows.h> //Windows庫
int main() //程序主函數,當main函數執行結束後,進程退出
{
int line = 0; //上半部分層數,此後所說的層數都是之上半部分層數
char draw; //要輸入什麽字符組成的菱形
scanf("%c", &draw);
printf("請輸入你想打印的行數:"); //printf()函數,屬於stdio.h
scanf("%d", &line); //scanf()函數,屬於stdio.h
/*
0001000 對於這個四層菱形,用0代替空格,用1代表要打印的字符
0011100 先打印上四層,再打印下三層
0111110 可以發現:左側空格的數量 = 要打印的總層數 - 當前是第幾層
1111111 然後打印下三層,采用相同的方式
0111110 左側空格數量 = (1,2,3),即 1 開始,到層數 -1
0011100 OK,找到規律後就可以開始編碼啦
0001000
*/
//打印上line層
for (int i = 0; i < line; i++) {
for (int n = 0; n < line - 1 - i; n++) {
printf(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
printf("%c",draw);
}
printf("\n");
}
//打印下line-1層
for (int i = 0; i < line - 1; i++){
for (int n = 0; n < i + 1; n++){
printf(" ");
}
for (int j = 0; j < 2 * (line - 1 - i) - 1; j++){
printf("%c",draw);
}
printf("\n");
}
system("pause"); //system()函數,屬於windows.h,便於觀察結果
return 0; //執行完return語句時退出進程
}
點擊本地Windows調試器或者快捷鍵或者快捷鍵ctrl+F5
如果你使用了和我一樣的IDE,一定會遇到:
這是因為VS為了避免開發者疏忽導致程序在使用某些函數時產生溢出,引發漏洞或程序崩潰,所以基於原標準庫開發了一套安全函數庫,在VS中使用安全函數可以在一定程度上使此程序更加健壯。但在學習過程中通常是不必要的。因此我們:
點開項目屬性:
找到C/C++目錄,將SDL檢查置為否
oK,接下來運行便可看到,用你輸入的圖形打印了輸入行數的菱形。
接下來我們將程序的功能部分寫成一個函數,讓代碼具有更好的可讀性,得到如下代碼:
#include <stdio.h> //C標準輸入輸出庫
#include<Windows.h> //Windows庫
void PrinDia(char , int ); //PrinDia函數的聲明
int main() //程序主函數,當main函數執行結束後,進程退出
{
char draw;
int line;
printf("請輸入你想打印的圖形:");
scanf("%c", &draw);
printf("請輸入你想打印的行數:"); //printf()函數,屬於stdio.h
scanf("%d", &line); //scanf()函數,屬於stdio.h
PrinDia(draw, line);
system("pause"); //system()函數,屬於windows.h,便於觀察結果
return 0; //執行完return語句時退出進程
}
void PrinDia(char draw,int line) {
// line //上半部分層數,此後所說的層數都是之上半部分層數
// draw; //要輸入什麽字符組成的菱形
/*
0001000 對於這個四層菱形,用0代替空格,用1代表要打印的字符
0011100 先打印上四層,再打印下三層
0111110 可以發現:左側空格的數量 = 要打印的總層數 - 當前是第幾層
1111111 然後打印下三層,采用相同的方式
0111110 左側空格數量 = (1,2,3),即 1 開始,到層數 -1
0011100 OK,找到規律後就可以開始編碼啦
0001000
*/
//打印上line層
for (int i = 0; i < line; i++) {
for (int n = 0; n < line - 1 - i; n++) {
printf(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
printf("%c", draw);
}
printf("\n");
}
//打印下line-1層
for (int i = 0; i < line - 1; i++) {
for (int n = 0; n < i + 1; n++) {
printf(" ");
}
for (int j = 0; j < 2 * (line - 1 - i) - 1; j++) {
printf("%c", draw);
}
printf("\n");
}
}
再次運行依然可以看到結果。
OK,接下來便是另一個項目,C語言版的貪食蛇。在此之前需要學習一下如何使用VS調試程序,VS自帶了很強大的調試器,可以在以後的學習中很好的處理自己的bug。
好啦,建議屏幕前的你再好好復習一下C語言吧,一定一定要復習好C語言,或者觀看清華大學課程的前幾章基礎,熟練一下語法......莫貪快歐~
下一篇詳解如何使用VS調試程序。
cpp學習(二)C語言復習