1. 程式人生 > >cpp學習(二)C語言復習

cpp學習(二)C語言復習

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基礎才能進行接下來的學習。
基礎包括:(想到哪寫哪,有點亂,但是知道這些以後就可以開始動手了)

0.C基本數據類型
1.順序結構 、選擇結構、循環結構

2.程序都要從main()入口, 然後從最上面順序往下讀。(當然,這種說法其實是錯誤的,有興趣的話我會在以後寫明。)
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擁有良好的調試功能

,包括對於變量在內存中的觀察,優秀的斷點,以及可以反匯編,在以後與bug做鬥爭的過程中,會讓你事半功倍。
首先與第一篇一樣,新建工程,新建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語言復習