溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

cpp學(xué)習(xí)(二)C語言復(fù)習(xí)

發(fā)布時(shí)間:2020-06-11 09:44:07 來源:網(wǎng)絡(luò) 閱讀:553 作者:若年少有為 欄目:編程語言

接下來復(fù)習(xí)一下C語言部分,畢竟C++與C語言本自同根生,并且在匯編層面C與C++可以說完全相同。假如你沒有C語言基礎(chǔ)的話,可以先暫停去學(xué)習(xí)一下C語言,C語言可以看“C語言之父”譚浩強(qiáng)的《C語言程序設(shè)計(jì)》或者觀看學(xué)堂在線的免費(fèi)公開課,在此推薦清華大學(xué)的c++課程:http://www.xuetangx.com/courses/course-v1:TsinghuaX+00740043X_2015_T2+sp/courseware/a0f3bf5a4c044dfaaad6814821533699/
最起碼要先了解C基礎(chǔ)才能進(jìn)行接下來的學(xué)習(xí)。
基礎(chǔ)包括:(想到哪寫哪,有點(diǎn)亂,但是知道這些以后就可以開始動(dòng)手了)

0.C基本數(shù)據(jù)類型
1.順序結(jié)構(gòu) 、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
2.程序都要從main()入口, 然后從最上面順序往下讀。(當(dāng)然,這種說法其實(shí)是錯(cuò)誤的,有興趣的話我會(huì)在以后寫明。)
3.函數(shù)的定義與使用
4.編譯預(yù)處理不是C語言的一部分,不占運(yùn)行時(shí)間
5.在函數(shù)中不可以再定義函數(shù)
6.每個(gè)C語言程序?qū)懲旰?,都是先編譯,后鏈接,最后運(yùn)行。
7.標(biāo)識(shí)符合法的要求是由字母,數(shù)字,下劃線組成,并且由下劃線或字母開頭。
8.C語言只有八、十、十六進(jìn)制,沒有二進(jìn)制。
9.復(fù)合的賦值表達(dá)式
a.自增自減語法,以及符號(hào)在前與在后的區(qū)別
b.基本的位運(yùn)算與邏輯運(yùn)算、算術(shù)運(yùn)算
c.指針部分最好理解,如果實(shí)在不理解,在以后的博客中,我會(huì)講解一部分匯編知識(shí),以便d.大家深入理解指針。
e.文件操作如果不理解也沒關(guān)系
//應(yīng)該還有很多沒想到的知識(shí)點(diǎn)…不過,在項(xiàng)目中遇到了再通過注釋的方式詳解吧,這樣更//好理解一點(diǎn)。
好,在此假設(shè)屏幕前的你已經(jīng)有了最基本的C語言知識(shí)。
我們來動(dòng)手寫兩個(gè)小項(xiàng)目,進(jìn)一步熟悉C語言的語法以及VS這款I(lǐng)DE。

項(xiàng)目一:打印菱形。(可以說是灰常簡單了)
項(xiàng)目二:寫一個(gè)C語言版的貪食蛇。(初學(xué)者看到,可能覺得自己肯定寫不出來,其實(shí)只要具備一定的C語言基礎(chǔ),都可以很簡單的寫出來,只不過苦于無人指導(dǎo),遇到一個(gè)棘手的問題可能就真的過不了這個(gè)坎了,在此我會(huì)盡可能詳細(xì)的講解可能遇到的問題,如果仍無法解決的話,歡迎請求遠(yuǎn)程協(xié)助:QQ:1149375463,一些知識(shí)細(xì)節(jié),遇到后會(huì)在項(xiàng)目注釋里盡可能的寫詳細(xì)。)

在此再次推薦VS,因?yàn)閂S擁有良好的調(diào)試功能,包括對于變量在內(nèi)存中的觀察,優(yōu)秀的斷點(diǎn),以及可以反匯編,在以后與bug做斗爭的過程中,會(huì)讓你事半功倍。
首先與第一篇一樣,新建工程,新建cpp文件:
cpp學(xué)習(xí)(二)C語言復(fù)習(xí)
然后編碼:

#include <stdio.h>   //C標(biāo)準(zhǔn)輸入輸出庫
#include<Windows.h>  //Windows庫
int main()          //程序主函數(shù),當(dāng)main函數(shù)執(zhí)行結(jié)束后,進(jìn)程退出
{
    int line = 0;  //上半部分層數(shù),此后所說的層數(shù)都是之上半部分層數(shù)
    char draw;                          //要輸入什么字符組成的菱形
    scanf("%c", &draw); 
    printf("請輸入你想打印的行數(shù):");  //printf()函數(shù),屬于stdio.h
    scanf("%d", &line);                 //scanf()函數(shù),屬于stdio.h
    /*  
        0001000             對于這個(gè)四層菱形,用0代替空格,用1代表要打印的字符
        0011100             先打印上四層,再打印下三層
        0111110             可以發(fā)現(xiàn):左側(cè)空格的數(shù)量 = 要打印的總層數(shù) - 當(dāng)前是第幾層
        1111111             然后打印下三層,采用相同的方式
        0111110             左側(cè)空格數(shù)量 = (1,2,3),即 1 開始,到層數(shù) -1
        0011100             OK,找到規(guī)律后就可以開始編碼啦
        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()函數(shù),屬于windows.h,便于觀察結(jié)果
    return 0;           //執(zhí)行完return語句時(shí)退出進(jìn)程
}

點(diǎn)擊本地Windows調(diào)試器或者快捷鍵或者快捷鍵ctrl+F5
如果你使用了和我一樣的IDE,一定會(huì)遇到:
cpp學(xué)習(xí)(二)C語言復(fù)習(xí)

這是因?yàn)椋郑訛榱吮苊忾_發(fā)者疏忽導(dǎo)致程序在使用某些函數(shù)時(shí)產(chǎn)生溢出,引發(fā)漏洞或程序崩潰,所以基于原標(biāo)準(zhǔn)庫開發(fā)了一套安全函數(shù)庫,在VS中使用安全函數(shù)可以在一定程度上使此程序更加健壯。但在學(xué)習(xí)過程中通常是不必要的。因此我們:

點(diǎn)開項(xiàng)目屬性:

cpp學(xué)習(xí)(二)C語言復(fù)習(xí)
找到C/C++目錄,將SDL檢查置為否
cpp學(xué)習(xí)(二)C語言復(fù)習(xí)

oK,接下來運(yùn)行便可看到,用你輸入的圖形打印了輸入行數(shù)的菱形。
cpp學(xué)習(xí)(二)C語言復(fù)習(xí)

接下來我們將程序的功能部分寫成一個(gè)函數(shù),讓代碼具有更好的可讀性,得到如下代碼:

#include <stdio.h>   //C標(biāo)準(zhǔn)輸入輸出庫
#include<Windows.h>  //Windows庫

void PrinDia(char , int );  //PrinDia函數(shù)的聲明

int main()          //程序主函數(shù),當(dāng)main函數(shù)執(zhí)行結(jié)束后,進(jìn)程退出
{
    char draw;
    int line;
    printf("請輸入你想打印的圖形:");
    scanf("%c", &draw);
    printf("請輸入你想打印的行數(shù):");  //printf()函數(shù),屬于stdio.h
    scanf("%d", &line);                 //scanf()函數(shù),屬于stdio.h
    PrinDia(draw, line);
    system("pause");    //system()函數(shù),屬于windows.h,便于觀察結(jié)果
    return 0;           //執(zhí)行完return語句時(shí)退出進(jìn)程
}

void PrinDia(char draw,int line) {
//   line   //上半部分層數(shù),此后所說的層數(shù)都是之上半部分層數(shù)
//   draw;  //要輸入什么字符組成的菱形

    /*
        0001000             對于這個(gè)四層菱形,用0代替空格,用1代表要打印的字符
        0011100             先打印上四層,再打印下三層
        0111110             可以發(fā)現(xiàn):左側(cè)空格的數(shù)量 = 要打印的總層數(shù) - 當(dāng)前是第幾層
        1111111             然后打印下三層,采用相同的方式
        0111110             左側(cè)空格數(shù)量 = (1,2,3),即 1 開始,到層數(shù) -1
        0011100             OK,找到規(guī)律后就可以開始編碼啦
        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");
    }
}

再次運(yùn)行依然可以看到結(jié)果。

OK,接下來便是另一個(gè)項(xiàng)目,C語言版的貪食蛇。在此之前需要學(xué)習(xí)一下如何使用VS調(diào)試程序,VS自帶了很強(qiáng)大的調(diào)試器,可以在以后的學(xué)習(xí)中很好的處理自己的bug。
好啦,建議屏幕前的你再好好復(fù)習(xí)一下C語言吧,一定一定要復(fù)習(xí)好C語言,或者觀看清華大學(xué)課程的前幾章基礎(chǔ),熟練一下語法......莫貪快歐~

下一篇詳解如何使用VS調(diào)試程序。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI