當(dāng)前位置:首頁 > 公眾號(hào)精選 > C語言編程
[導(dǎo)讀]哈嘍,大家好,我是瓜哥,致力于為大家分享互聯(lián)網(wǎng)各領(lǐng)域干貨。這篇文章可以說是一本書了,排版,碼字耗費(fèi)了瓜哥很長的時(shí)間,10W字C語言從入門到精通保姆級(jí)教程2021年版,覺得有價(jià)值記得一鍵三連支持。目錄計(jì)算機(jī)常識(shí)什么是計(jì)算機(jī)程序?什么是計(jì)算機(jī)語言?常見的計(jì)算機(jī)語言類型有哪些?什么是C...


哈嘍,大家好,我是瓜哥,致力于為大家分享互聯(lián)網(wǎng)各領(lǐng)域干貨。

這篇文章可以說是一本書了,排版,碼字耗費(fèi)了瓜哥很長的時(shí)間,10W 字 C 語言從入門到精通保姆級(jí)教程2021年版,覺得有價(jià)值記得一鍵三連支持。

目錄

  • 計(jì)算機(jī)常識(shí)

  • 什么是計(jì)算機(jī)程序?

  • 什么是計(jì)算機(jī)語言 ?

  • 常見的計(jì)算機(jī)語言類型有哪些?

  • 什么是C語言?

  • C語言歷史

  • C語言標(biāo)準(zhǔn)

  • C語言現(xiàn)狀

  • 為什么要學(xué)習(xí)C語言?

  • 如何學(xué)好C語言

  • 工欲善其事必先利其器

  • 編寫C語言程序用什么工具 ?

  • 什么是Qt Creator ?

  • Qt Creator安裝

  • 什么是環(huán)境變量?

  • 為什么要配置系統(tǒng)變量,不配置用戶變量

  • Qt Creator快捷鍵

  • 如何創(chuàng)建C語言程序

  • 如何創(chuàng)建C語言文件

  • C語言程序組成

  • 函數(shù)定義格式

  • 如何執(zhí)行定義好的函數(shù)

  • 如何運(yùn)行編寫好的程序

  • main函數(shù)注意點(diǎn)及其它寫法

  • C語言程序練習(xí)

  • 初學(xué)者如何避免程序出現(xiàn)BUG

  • 多語言對比

  • 什么是注釋?

  • 為什么要使用注釋?

  • 注釋的分類

  • 注釋的注意點(diǎn)

  • 注釋的應(yīng)用場景

  • 使用注釋的好處

  • 什么是關(guān)鍵字?

  • 關(guān)鍵字分類

  • 什么是標(biāo)識(shí)符?

  • 標(biāo)識(shí)符命名規(guī)則

  • 練習(xí)

  • 標(biāo)識(shí)符命名規(guī)范

  • 什么是數(shù)據(jù)?

  • 數(shù)據(jù)分類

  • C語言數(shù)據(jù)類型

  • 什么是常量?

  • 常量的類型

  • 什么是變量?

  • 如何定義變量

  • 如何使用變量?

  • 變量的初始化

  • 如何修改變量值?

  • 變量之間的值傳遞

  • 如何查看變量的值?

  • 變量的作用域

  • 變量內(nèi)存分析(簡單版)

  • printf函數(shù)

  • Scanf函數(shù)

  • scanf運(yùn)行原理

  • putchar和getchar

  • 運(yùn)算符基本概念

  • 運(yùn)算符分類

  • 運(yùn)算符的優(yōu)先級(jí)和結(jié)合性

  • 算數(shù)運(yùn)算符

  • 賦值運(yùn)算符

  • 自增自減運(yùn)算符

  • sizeof運(yùn)算符

  • 逗號(hào)運(yùn)算符

  • 關(guān)系運(yùn)算符

  • 邏輯運(yùn)算符

  • 三目運(yùn)算符

  • 類型轉(zhuǎn)換

  • 階段練習(xí)

  • 流程控制基本概念

  • 選擇結(jié)構(gòu)

  • 選擇結(jié)構(gòu)if

  • 選擇結(jié)構(gòu)switch

  • 循環(huán)結(jié)構(gòu)

  • 循環(huán)結(jié)構(gòu)while

  • 循環(huán)結(jié)構(gòu)do while

  • 循環(huán)結(jié)構(gòu)for

  • 四大跳轉(zhuǎn)

  • 循環(huán)的嵌套

  • 圖形打印

  • 函數(shù)基本概念

  • 函數(shù)的分類

  • 函數(shù)的定義

  • 函數(shù)的參數(shù)和返回值

  • 函數(shù)的聲明

  • main函數(shù)分析

  • 遞歸函數(shù)(了解)

  • 進(jìn)制基本概念

  • 進(jìn)制轉(zhuǎn)換

  • 十進(jìn)制小數(shù)轉(zhuǎn)換為二進(jìn)制小數(shù)

  • 二進(jìn)制小數(shù)轉(zhuǎn)換為十進(jìn)制小數(shù)

  • 原碼反碼補(bǔ)碼

  • 位運(yùn)算符

  • 變量內(nèi)存分析

  • char類型內(nèi)存存儲(chǔ)細(xì)節(jié)

  • 類型說明符

  • short和long

  • signed和unsigned

  • 數(shù)組的基本概念

  • 定義數(shù)組

  • 初始化數(shù)組

  • 數(shù)組的使用

  • 數(shù)組的遍歷

  • 數(shù)組長度計(jì)算方法

  • 練習(xí)

  • 數(shù)組內(nèi)部存儲(chǔ)細(xì)節(jié)

  • 數(shù)組的越界問題

  • 數(shù)組注意事項(xiàng)

  • 數(shù)組和函數(shù)

  • 數(shù)組元素作為函數(shù)參數(shù)

  • 數(shù)組名作為函數(shù)參數(shù)

  • 數(shù)組名作函數(shù)參數(shù)的注意點(diǎn)

  • 計(jì)數(shù)排序(Counting Sort)

  • 選擇排序

  • 冒泡排序

  • 插入排序

  • 希爾排序

  • 折半查找

  • 進(jìn)制轉(zhuǎn)換(查表法)

  • 二維數(shù)組

  • 二維數(shù)組的定義

  • 二維數(shù)組的初始化

  • 二維數(shù)組的應(yīng)用場景

  • 二維數(shù)組的遍歷和存儲(chǔ)

  • 二維數(shù)組的遍歷

  • 二維數(shù)組的存儲(chǔ)

  • 二維數(shù)組與函數(shù)

  • 二維數(shù)組作為函數(shù)參數(shù)注意點(diǎn)

  • 作業(yè)

  • 字符串的基本概念

  • 字符串的初始化

  • 字符串輸出

  • 字符串常用方法

  • 練習(xí)

  • 字符串?dāng)?shù)組基本概念

  • 指針基本概念

  • 什么是指針

  • 什么是指針變量

  • 定義指針變量的格式

  • 指針變量的初始化方法

  • 訪問指針?biāo)赶虻拇鎯?chǔ)空間

  • 指針類型

  • 二級(jí)指針

  • 練習(xí)

  • 指針訪問數(shù)組元素

  • 指針與字符串

  • 指向函數(shù)指針

  • 什么是結(jié)構(gòu)體

  • 定義結(jié)構(gòu)體類型

  • 定義結(jié)構(gòu)體變量

  • 結(jié)構(gòu)體成員訪問

  • 結(jié)構(gòu)體變量的初始化

  • 結(jié)構(gòu)體類型作用域

  • 結(jié)構(gòu)體數(shù)組

  • 結(jié)構(gòu)體指針

  • 結(jié)構(gòu)體內(nèi)存分析

  • 結(jié)構(gòu)體變量占用存儲(chǔ)空間大小

  • 結(jié)構(gòu)體嵌套定義

  • 結(jié)構(gòu)體和函數(shù)

  • 共用體

  • 枚舉

  • 全局變量和局部變量

  • auto和register關(guān)鍵字

  • static關(guān)鍵字

  • extern關(guān)鍵字

  • static與extern對函數(shù)的作用

  • Qt Creator編譯過程做了什么?

  • 計(jì)算機(jī)是運(yùn)算過程分析

  • 預(yù)處理指令

  • 預(yù)處理指令的概念

  • 宏定義

  • 帶參數(shù)的宏定義

  • 條件編譯

  • typedef關(guān)鍵字

  • 宏定義與函數(shù)以及typedef區(qū)別

  • const關(guān)鍵字

  • 如何使用const?

  • 內(nèi)存管理

  • 進(jìn)程空間

  • 棧內(nèi)存(Stack)

  • 堆內(nèi)存(Heap)

  • malloc函數(shù)

  • free函數(shù)

  • calloc函數(shù)

  • realloc函數(shù)

  • 鏈表

  • 靜態(tài)鏈表

  • 動(dòng)態(tài)鏈表

  • 動(dòng)態(tài)鏈表頭插法

  • 動(dòng)態(tài)鏈表尾插法

  • 動(dòng)態(tài)鏈優(yōu)化

  • 鏈表銷毀

  • 鏈表長度計(jì)算

  • 鏈表查找

  • 鏈表刪除

  • 作業(yè)

  • 文件基本概念

  • 文件的打開和關(guān)閉

  • 一次讀寫一個(gè)字符

  • 一次讀寫一行字符

  • 一次讀寫一塊數(shù)據(jù)

  • 讀寫結(jié)構(gòu)體

  • 其它文件操作函數(shù)

計(jì)算機(jī)常識(shí)

  • 什么是計(jì)算機(jī)?

  • 顧名思義,就是能夠進(jìn)行數(shù)據(jù)運(yùn)算的機(jī)器(臺(tái)式電腦、筆記本電腦、平板電腦、智能手機(jī))

  • 計(jì)算機(jī)_百度百科

  • 計(jì)算機(jī)的發(fā)明者是誰 ?

  • 關(guān)于電子計(jì)算機(jī)的發(fā)明者是誰這一問題,有好幾種答案:

  • 1936年英國數(shù)學(xué)家圖靈首先提出了一種以程序和輸入數(shù)據(jù)相互作用產(chǎn)生輸出的計(jì)算機(jī)構(gòu)想,后人將這種機(jī)器命名為通用圖靈計(jì)算機(jī)

  • 1938年克蘭德·楚澤發(fā)明了首臺(tái)采用繼電器進(jìn)行工作的計(jì)算機(jī),這臺(tái)計(jì)算機(jī)命名為Z1,但是繼電器是機(jī)械式的,并不是完全的電子器材

  • 1942年阿坦那索夫和貝利發(fā)明了首臺(tái)采用真空管*的計(jì)算機(jī),這臺(tái)計(jì)算機(jī)命名為ABC

  • 1946年ENIAC誕生,它擁有了今天計(jì)算機(jī)的主要結(jié)構(gòu)和功能,是通用計(jì)算機(jī)

現(xiàn)在世界上公認(rèn)的第一臺(tái)現(xiàn)代電子計(jì)算機(jī)是1946年在美國賓夕法尼亞大學(xué)誕生的ENIAC(Electronic Numerical Integrator And Calculator)

  • 計(jì)算機(jī)特點(diǎn)是什么?

  • 計(jì)算機(jī)是一種電器, 所以計(jì)算機(jī)只能識(shí)別兩種狀態(tài), 一種是通電一種是斷電

  • 正是因?yàn)槿绱? 最初ENIAC的程序是由很多開關(guān)和連接電線來完成的。但是這樣導(dǎo)致改動(dòng)一次程序要花很長時(shí)間(需要人工重新設(shè)置很多開關(guān)的狀態(tài)和連接線)

  • 為了提高效率,工程師們想能不能把程序和數(shù)據(jù)都放在存儲(chǔ)器中, 數(shù)學(xué)家馮·諾依曼將這個(gè)思想以數(shù)學(xué)語言系統(tǒng)闡述,提出了存儲(chǔ)程序計(jì)算機(jī)模型(這是所謂的馮·諾依曼機(jī))

  • 那利用數(shù)學(xué)語言如何表示計(jì)算機(jī)能夠識(shí)別的通電和斷電兩種狀態(tài)呢?

    • 非常簡單用0和1表示即可
    • 所以計(jì)算機(jī)能識(shí)別的所有指令都是由0和1組成的
    • 所以計(jì)算機(jī)中存儲(chǔ)和操作的數(shù)據(jù)也都是由0和1組成的
0和1更準(zhǔn)確的是應(yīng)該是高電平和低電平, 但是這個(gè)不用了解, 只需要知道計(jì)算機(jī)只能識(shí)別0和1以及存儲(chǔ)的數(shù)據(jù)都是由0和1組成的即可。

什么是計(jì)算機(jī)程序?

  • 計(jì)算機(jī)程序是為了告訴計(jì)算機(jī)"做某件事或解決某個(gè)問題"而用"計(jì)算機(jī)語言編寫的命令集合(語句)

  • 只要讓計(jì)算機(jī)執(zhí)行這個(gè)程序,計(jì)算機(jī)就會(huì)自動(dòng)地、有條不紊地進(jìn)行工作,計(jì)算機(jī)的一切操作都是由程序控制的,離開程序,計(jì)算機(jī)將一事無成

  • 現(xiàn)實(shí)生活中你如何告訴別人如何做某件事或者解決某個(gè)問題?

    • 通過人能聽懂的語言: 張三你去樓下幫我買一包煙, 然后順便到快遞箱把我的快遞也帶上來
    • 其實(shí)我們通過人能聽懂的語言告訴別人做某件事就是在發(fā)送一條條的指令
    • 計(jì)算機(jī)中也一樣, 我們可以通過計(jì)算機(jī)語言告訴計(jì)算機(jī)我們想做什么, 每做一件事情就是一條指令, 一條或多條指令的集合我們就稱之為一個(gè)計(jì)算機(jī)程序

什么是計(jì)算機(jī)語言 ?

  • 在日常生活、工作中, 語言是人們交流的工具
    • 中國人和中國人交流,使用中文語言
    • 美國人和美國人交流,使用英文語言
    • 人想要和計(jì)算機(jī)交流,使用計(jì)算機(jī)語言
  • 可以看出在日常生活、工作中,人們使用的語言種類很多
    • 如果一個(gè)很牛人可能同時(shí)掌握了中文語言和英文語言, 那么想要和這個(gè)人交流既可以使用中文語言,也可以使用英文語言
    • 計(jì)算機(jī)其實(shí)就是一個(gè)很牛的人, 計(jì)算機(jī)同時(shí)掌握了幾十門甚至上百門語言, 所以我們只要使用任何一種計(jì)算機(jī)已經(jīng)掌握的語言就可以和計(jì)算機(jī)交流

常見的計(jì)算機(jī)語言類型有哪些?

  • 機(jī)器語言
    • 所有的代碼里面只有0和1, 0表示不加電,1表示加電(紙帶存儲(chǔ)時(shí) 1有孔,0沒孔)
    • 優(yōu)點(diǎn):直接對硬件產(chǎn)生作用,程序的執(zhí)行效率非常非常高
    • 缺點(diǎn):指令又多又難記、可讀性差、無可移植性
  • 匯編語言
    • 符號(hào)化的機(jī)器語言,用一個(gè)符號(hào)(英文單詞、數(shù)字)來代表一條機(jī)器指令
    • 優(yōu)點(diǎn):直接對硬件產(chǎn)生作用,程序的執(zhí)行效率非常高、可讀性稍好
    • 缺點(diǎn):符號(hào)非常多和難記、無可移植性
  • 高級(jí)語言
    • 非常接近自然語言的高級(jí)語言,語法和結(jié)構(gòu)類似于普通英文
    • 優(yōu)點(diǎn):簡單、易用、易于理解、遠(yuǎn)離對硬件的直接操作、有可移植性
    • 缺點(diǎn):有些高級(jí)語言寫出的程序執(zhí)行效率并不
  • 對比(利用3種類型語言編寫1 1)
    • 1 1
    • MOV AX, 1 ADD AX, 1
    • 10111000 00000001 00000000 00000101 00000001 00000000
    • 機(jī)器語言
    • 匯編語言
    • 高級(jí)語言

什么是C語言?

  • C語言是一種用于和計(jì)算機(jī)交流的高級(jí)語言, 它既具有高級(jí)語言的特點(diǎn),又具有匯編語言的特點(diǎn)
    • 非常接近自然語言
    • 程序的執(zhí)行效率非常高
  • C語言是所有編程語言中的經(jīng)典,很多高級(jí)語言都是從C語言中衍生出來的,
    • 例如:C 、C#、Object-C、Java、Go等等
  • C語言是所有編程語言中的經(jīng)典,很多著名的系統(tǒng)軟件也是C語言編寫的
    • 幾乎所有的操作系統(tǒng)都是用C語言編寫的
    • 幾乎所有的計(jì)算機(jī)底層軟件都是用C語言編寫的
    • 幾乎所有的編輯器都是C語言編寫的

C語言歷史

  • 最早的高級(jí)語言:FORTRAN-->ALGOL-->CPL-->BCPL-->C-->C 等
“初,世間無語言,僅電路與連線。及大牛出,天地開,始有 FORTRAN、 LISP、ALGOL 隨之, 乃有萬種語”

  • 1963年英國劍橋大學(xué)推出了CPL(Combined Programming Langurage)語言。CPL語言在ALGOL 60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)
  • 1967年英國劍橋大學(xué)的 Matin Richards(理查茲)對CPL語言做了簡化,推出了 BCPL (Base Combined Programming Langurage)語言
  • 1970年美國貝爾實(shí)驗(yàn)室的 Ken Thompson(肯·湯普遜) 以 BCPL 語言為基礎(chǔ),又作了進(jìn)一步的簡化,設(shè)計(jì)出了很簡單的而且很接近硬件的 B 語言(取BCPL的第一個(gè)字母),并用B語言寫出了第一個(gè) UNIX 操作系統(tǒng)。但B語言過于簡單,功能有限
  • 1972年至1973年間,貝爾實(shí)驗(yàn)室的 Dennis.Ritchie(丹尼斯·里奇) 在 B語言的基礎(chǔ)上設(shè)計(jì)出了C語言(取BCPL的第二個(gè)字母)。C語言即保持 BCPL 語言和B語言的優(yōu)點(diǎn)(精練、接近硬件),又克服了他們的缺點(diǎn)(過于簡單,數(shù)據(jù)無類型等)

C語言標(biāo)準(zhǔn)

  • 1983年美國國家標(biāo)準(zhǔn)局(American National Standards Institute,簡稱ANSI)成立了一個(gè)委員會(huì),開始制定C語言標(biāo)準(zhǔn)的工作
  • 1989年C語言標(biāo)準(zhǔn)被批準(zhǔn),這個(gè)版本的C語言標(biāo)準(zhǔn)通常被稱為ANSI C(C89)
  • 1999年,國際標(biāo)準(zhǔn)化組織ISO又對C語言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原C語言特征的基礎(chǔ)上,針對應(yīng)該的需要,增加了一些功能,命名為C99
  • 2011年12月,ANSI采納了ISO/IEC 9899:2011標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)通常即C11,它是C程序語言的現(xiàn)行標(biāo)準(zhǔn)

C語言現(xiàn)狀

  • 年度編程語言
  • 該獎(jiǎng)項(xiàng)頒發(fā)給了一年中最熱門的編程語言
  • 編程語言排行榜查看

為什么要學(xué)習(xí)C語言?

  • 40多年經(jīng)久不衰
  • 了解操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法等知識(shí)的最佳語言
  • 了解其它語言底層實(shí)現(xiàn)原理必備語言
  • 基礎(chǔ)語法與其它高級(jí)語言類似,學(xué)會(huì)C語言之后再學(xué)習(xí)其它語言事半功倍,且知根知底
當(dāng)你想了解底層原理時(shí),你才會(huì)發(fā)現(xiàn)后悔當(dāng)初沒有學(xué)習(xí)C語言 當(dāng)你想學(xué)習(xí)一門新的語言時(shí), 你才會(huì)發(fā)現(xiàn)后悔當(dāng)初沒有學(xué)習(xí)C語言 當(dāng)你使用一些高級(jí)框架、甚至系統(tǒng)框架時(shí)發(fā)現(xiàn)提供的API都是C語言編寫的, 你才發(fā)現(xiàn)后悔當(dāng)初沒有學(xué)習(xí)C語言 學(xué)好數(shù)理化,走遍天下都不拍 學(xué)好C語言,再多語言都不怕

如何學(xué)好C語言

學(xué)習(xí)本套課程之前學(xué)習(xí)本套課程中學(xué)習(xí)本套課程之后

  • 如何達(dá)到這樣的效果

工欲善其事必先利其器

編寫C語言程序用什么工具 ?

  • 記事本(開發(fā)效率低)
  • Vim(初學(xué)者入門門檻高)
  • VSCode(不喜歡)
  • eclipse(不喜歡)
  • CLion(深愛, 但收費(fèi))
  • Xcode(逼格高, 但得有蘋果電腦)
  • Qt Creator(開源免費(fèi),跨平臺(tái)安裝和運(yùn)行)

什么是Qt Creator ?

  • Qt Creator 是一款新的輕量級(jí)集成開發(fā)環(huán)境(IDE)。它能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括 Windows、Linux(32 位及 64 位)以及 Mac OS X
  • Qt Creator 的設(shè)計(jì)目標(biāo)是使開發(fā)人員能夠利用 Qt 這個(gè)應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)
  • 開源免費(fèi), 簡單易用, 能夠滿足學(xué)習(xí)需求
集成開發(fā)環(huán)境(IDE,Integrated Development Environment )是用于提供程序開發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調(diào)試功能等一體化的開發(fā)軟件服務(wù)套。

Qt Creator安裝

  • 切記囫圇吞棗, 不要糾結(jié)里面的東西都是什么含義, 初學(xué)者安裝成功就是一種成功
  • 下載Qt Creator離線安裝包:
http://download.qt.io/

  • 以管理身份運(yùn)行離線安裝包

  • 下一步,下一步,下一步,等待ing...

  • 注意安裝路徑中最好不要出現(xiàn)中文

  • 對于初學(xué)者而言全選是最簡單的方式(重點(diǎn)!!!)

  • 配置Qt Creator開發(fā)環(huán)境變量

你的安裝路徑\5.11.0\mingw53_32\bin 你的安裝路徑\Tools\mingw530_32\bin

  • 啟動(dòng)安裝好的Qt Creator
  • 非全選安裝到此為止, 全選安裝繼續(xù)往下看出現(xiàn)這個(gè)錯(cuò)誤, 忽略這個(gè)錯(cuò)誤即可
  • 等待安裝完畢之后解決剛才的錯(cuò)誤找到安裝目錄下的strawberry.msi,雙擊運(yùn)行

什么是環(huán)境變量?

  • 打開我們添加環(huán)境變量的兩個(gè)目錄, 不難發(fā)現(xiàn)里面大部分都是.exe的可執(zhí)行程序
  • 如果我們不配置環(huán)境變量, 那么每次我們想要使用這些"可執(zhí)行程序"都必須"先找到這些應(yīng)用程序?qū)?yīng)的文件夾"才能使用
  • 為了方便我們在電腦上"任何地方"都能夠使用這些"可執(zhí)行程序", 那么我們就必須添加環(huán)境變量, 因?yàn)閃indows執(zhí)行某個(gè)程序的時(shí)候, 會(huì)先到"環(huán)境變量中Path指定的路徑中"去查找

為什么要配置系統(tǒng)變量,不配置用戶變量

  • 用戶變量只針對使用這臺(tái)計(jì)算機(jī)指定用戶
    • 一個(gè)計(jì)算機(jī)可以設(shè)置多個(gè)用戶, 不同的用戶用不同的用戶名和密碼
    • 當(dāng)給計(jì)算機(jī)設(shè)置了多個(gè)用戶的時(shí)候,啟動(dòng)計(jì)算機(jī)的時(shí)候就會(huì)讓你選擇哪個(gè)用戶登錄
  • 系統(tǒng)變量針對使用這臺(tái)計(jì)算機(jī)的所有用戶
    • 也就是說設(shè)置了系統(tǒng)變量, 無論哪個(gè)用戶登錄這臺(tái)計(jì)算機(jī)都可以使用你配置好的工具

Qt Creator快捷鍵

  • Qt Creator Keyboard Shortcuts(Documentation)[1]
  • Qt Creator Keyboard Shortcuts(Wiki)[2]

如何創(chuàng)建C語言程序

  • 這個(gè)世界上, 幾乎所有程序員入門的第一段代碼都是Hello World.
  • 原因是當(dāng)年C語言的作者Dennis Ritchie(丹尼斯 里奇)在他的名著中第一次引入, 傳為后世經(jīng)典, 其它語言亦爭相效仿, 以示敬意

如何創(chuàng)建C語言文件

C語言程序組成

  • 手機(jī)有很多功能, "開機(jī)","關(guān)機(jī)","打電話","發(fā)短信","拍照"等等

  • 手機(jī)中的每一個(gè)功能就相當(dāng)于C語言程序中的一個(gè)程序段(函數(shù))

  • 眾多功能中總有一個(gè)會(huì)被先執(zhí)行,不可能多個(gè)功能一起執(zhí)行

  • 想使用手機(jī)必須先執(zhí)行手機(jī)的開機(jī)功能

  • 所以C語言程序也一樣,由眾多功能、眾多程序段組成, 眾多C語言程序段中總有一個(gè)會(huì)被先執(zhí)行, 這個(gè)先執(zhí)行的程序段我們稱之為"主函數(shù)"

  • 一個(gè)C語言程序由多個(gè)"函數(shù)"構(gòu)成,每個(gè)函數(shù)有自己的功能

  • 一個(gè)程序有且只有一個(gè)主函數(shù)

  • 如果一個(gè)程序沒有主函數(shù),則這個(gè)程序不具備運(yùn)行能力

  • 程序運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用主函數(shù),而其它函數(shù)需要開發(fā)者手動(dòng)調(diào)用

  • 主函數(shù)有固定書寫的格式和范寫

函數(shù)定義格式

  • 主函數(shù)定義的格式:
    • int 代表函數(shù)執(zhí)行之后會(huì)返回一個(gè)整數(shù)類型的值
    • main 代表這個(gè)函數(shù)的名字叫做main
    • () 代表這是一個(gè)函數(shù)
    • {} 代表這個(gè)程序段的范圍
    • return 0; 代表函數(shù)執(zhí)行完之后返回整數(shù)0
int?main()?{
????//?insert?code?here...
????return?0;
}
  • 其它函數(shù)定義的格式
    • int 代表函數(shù)執(zhí)行之后會(huì)返回一個(gè)整數(shù)類型的值
    • call 代表這個(gè)函數(shù)的名字叫做call
    • () 代表這是一個(gè)函數(shù)
    • {} 代表這個(gè)程序段的范圍
    • return 0; 代表函數(shù)執(zhí)行完之后返回整數(shù)0
int?call()?{
????return?0;
}

如何執(zhí)行定義好的函數(shù)

  • 主函數(shù)(main)會(huì)由系統(tǒng)自動(dòng)調(diào)用, 但其它函數(shù)不會(huì), 所以想要執(zhí)行其它函數(shù)就必須在main函數(shù)中手動(dòng)調(diào)用
    • call 代表找到名稱叫做call的某個(gè)東西
    • () 代表要找到的名稱叫call的某個(gè)東西是一個(gè)函數(shù)
    • ; ?代表調(diào)用函數(shù)的語句已經(jīng)編寫完成
    • 所以call();代表找到call函數(shù), 并執(zhí)行call函數(shù)
int?main()?{
????call();
????return?0;
}
  • 如何往屏幕上輸出內(nèi)容
    • 并沒有告訴printf函數(shù),我們要往屏幕上輸出什么內(nèi)容
    • 找不到printf函數(shù)的實(shí)現(xiàn)代碼
    • 輸出內(nèi)容是一個(gè)比較復(fù)雜的操作, 所以系統(tǒng)提前定義好了一個(gè)專門用于輸出內(nèi)容的函數(shù)叫做printf函數(shù),我們只需要執(zhí)行系統(tǒng)定義好的printf函數(shù)就可以往屏幕上輸出內(nèi)容
    • 但凡需要執(zhí)行一個(gè)函數(shù), 都是通過函數(shù)名稱 圓括號(hào)的形式來執(zhí)行
    • 如下代碼的含義是: 當(dāng)程序運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)執(zhí)行main函數(shù), 在系統(tǒng)自動(dòng)執(zhí)行main函數(shù)時(shí)我們手動(dòng)執(zhí)行了call函數(shù)和printf函數(shù)
    • 經(jīng)過對代碼的觀察, 我們發(fā)現(xiàn)兩個(gè)問題
int?call(){
????return?0;
}

int?main(){
????call();
????printf();
????return?0;
}
  • 如何告訴printf函數(shù)要輸出的內(nèi)容
    • 將要輸出的內(nèi)容編寫到printf函數(shù)后面的圓括號(hào)中即可
    • 注意: 圓括號(hào)中編寫的內(nèi)容必須用雙引號(hào)引起來
printf("hello?world\n");
  • 如何找到printf函數(shù)的實(shí)現(xiàn)代碼
    • 由于printf函數(shù)是系統(tǒng)實(shí)現(xiàn)的函數(shù), 所以想要使用printf函數(shù)必須在使用之前告訴系統(tǒng)去哪里可以找到printf函數(shù)的實(shí)現(xiàn)代碼
    • #include 就是告訴系統(tǒng)可以去stdio這個(gè)文件中查找printf函數(shù)的聲明和實(shí)現(xiàn)
#include?

int?call(){
????return?0;
}

int?main(){
????call();
????printf("hello?world\n");
????return?0;
}

如何運(yùn)行編寫好的程序

  • 方式1:
  • 點(diǎn)擊小榔頭將"源代碼"編譯成"可執(zhí)行文件"
  • 找到編譯后的源代碼, 打開終端(CMD)運(yùn)行可執(zhí)行文件
  • 方式2
  • 直接點(diǎn)擊Qt開發(fā)工具運(yùn)行按鈕

main函數(shù)注意點(diǎn)及其它寫法

  • C語言中,每條完整的語句后面都必須以分號(hào)結(jié)尾
int?main(){
????printf("hello?world\n")?//?如果沒有分號(hào)編譯時(shí)會(huì)報(bào)錯(cuò)
????return?0;
}
int?main(){
????//?如果沒有分號(hào),多條語句合并到一行時(shí),?系統(tǒng)不知道從什么地方到什么地方是一條完整語句
????printf("hello?world\n")?return?0;
}
  • C語言中除了注釋和雙引號(hào)引起來的地方以外都不能出現(xiàn)中文
int?main(){
????printf("hello?world\n");?//?這里的分號(hào)如果是中文的分號(hào)就會(huì)報(bào)錯(cuò)
????return?0;
}
  • 一個(gè)C語言程序只能有一個(gè)main函數(shù)
int?main(){
????return?0;
}
int?main(){?//?編譯時(shí)會(huì)報(bào)錯(cuò),?重復(fù)定義
????return?0;
}
  • 一個(gè)C語言程序不能沒有main函數(shù)
int?call(){?//?編譯時(shí)報(bào)錯(cuò),?因?yàn)橹挥衏all函數(shù),?沒有main函數(shù)
????return?0;
}
int?mian(){?//?編譯時(shí)報(bào)錯(cuò),?因?yàn)閙ain函數(shù)的名稱寫錯(cuò)了,還是相當(dāng)于沒有main函數(shù)
????return?0;
}
  • main函數(shù)前面的int可以不寫或者換成void
#include?
main(){?//?不會(huì)報(bào)錯(cuò)
????printf("hello?world\n");
????return?0;
}
#include?
void?main(){??//?不會(huì)報(bào)錯(cuò)
????printf("hello?world\n");
????return?0;
}
  • main函數(shù)中的return 0可以不寫
int?main(){?//?不會(huì)報(bào)錯(cuò)
????printf("hello?world\n");
}
  • 多種寫法不報(bào)錯(cuò)的原因
    • Turbo C
    • Visual C(VC)
    • GNU C(GCC)
    • C語言最早的時(shí)候只是一種規(guī)范和標(biāo)準(zhǔn)(例如C89, C11等)
    • 標(biāo)準(zhǔn)的推行需要各大廠商的支持和實(shí)施
    • 而在支持的實(shí)施的時(shí)候由于各大廠商利益、理解等問題,導(dǎo)致了實(shí)施的標(biāo)準(zhǔn)不同,發(fā)生了變化
    • 所以大家才會(huì)看到不同的書上書寫的格式有所不同, 有的返回int,有的返回void,有的甚至沒有返回值
    • 所以大家只需要記住最標(biāo)準(zhǔn)的寫法即可, no zuo no die
#include?
int?main(){
????printf("hello?world\n");
????return?0;
}
Tips: 語法錯(cuò)誤:編譯器會(huì)直接報(bào)錯(cuò) 邏輯錯(cuò)誤:沒有語法錯(cuò)誤,只不過運(yùn)行結(jié)果不正確

C語言程序練習(xí)

  • 編寫一個(gè)C語言程序,用至少2種方式在屏幕上輸出以下內(nèi)容
???***?***
??*********
???*******
????****
?????**
  • 普通青年實(shí)現(xiàn)
printf("?***?***?\n");
printf("*********\n");
printf("?*******\n");
printf("??****\n");
printf("???**\n");
  • 2B青年實(shí)現(xiàn)
printf("?***?***?\n*********\n?*******\n??****\n???**\n");
  • 文藝青年實(shí)現(xiàn)(裝逼的, 先不用理解)
int??i?=?0;
while?(1)?{
????if?(i?%?2?==?0)?{
????????printf("?***?***?\n");
????????printf("*********\n");
????????printf("?*******\n");
????????printf("??****\n");
????????printf("???**\n");
????}else
????{
????????printf("\n");
????????printf("???**?**?\n");
????????printf("??*******\n");
????????printf("???*****\n");
????????printf("????**\n");
????}
????sleep(1);
????i ;
????system("cls");
}

初學(xué)者如何避免程序出現(xiàn)BUG

??????????????????????????_ooOoo_
?????????????????????????o8888888o
?????????????????????????88"?.?"88
?????????????????????????(|?-_-?|)
??????????????????????????O\?=?/O
??????????????????????____/`---'\____
????????????????????.???'
?\\|?|//?`.
?????????????????????/?\\|||?:?|||//?\
???????????????????/?_|||||?-:-?|||||-?\
?????????????????????|?|?\\\?-?///?|?|
???????????????????|?\_|?''\---/''?|?|
????????????????????\?.-\__?`-`?___/-.?/
?????????????????___`.?.'?/--.--\?`.?.?__
??????????????.""?'
_/___.'?>'"".
?????????????|?|?:?`-?\`.;`\?_?/`;.`/?-?`?:?|?|
???????????????\?\?`-.?\_?__\?/__?_/?.-`?/?/
???????======`-.____`-.___\_____/___.-`____.-'======
??????????????????????????`=---='


???????.............................................
??????????????佛祖保佑???????????????????有無BUG
━━━━━━神獸出沒━━━━━━
?????????┏┓????┏┓
????????┏┛┻━━━━━━┛┻┓
????????┃????????┃
????????┃???━????┃
????????┃?┳┛???┗┳?┃
????????┃????????┃
????????┃???┻????┃
????????┃??????????┃
????????┗━┓????┏━┛Code?is?far?away?from?bug?with?the?animal?protecting
??????????┃????┃????神獸保佑,代碼無bug
??????????┃????┃
??????????┃????┗━━━┓
??????????┃????????┣┓
??????????┃?????┏━━┛┛
??????????┗┓┓┏━┳┓┏┛
???????????┃┫┫?┃┫┫
???????????┗┻┛?┗┻┛

??????━━━━━━感覺萌萌噠━━━━━━
????????′′′′′′′′██′′′′′′′
????????′′′′′′′████′′′′′′
????????′′′′′████████′′′′
????????′′`′███????███′′′′′
????????′′′███?●??●?██′′′
????????′′′███??????██′′′′′
????????′′′███????██′??????????????????????項(xiàng)目:第一個(gè)C語言程序
????????′′██████??███′′′′′?????????????????語言:C語言
????????′██████????███′′???????????????????編輯器:Qt Creator
????????██████??????███′′′′????????????????版本控制:git-github
????????′′▓▓▓▓▓▓▓▓▓▓▓▓▓?′′?????????????????代碼風(fēng)格:江哥style
????????′′????▓▓▓▓▓▓▓▓▓?′′′′′??????????????
????????′.???′′▓▓▓▓▓▓▓▓?′′′′′??????????????
????????′.??′′′′▓▓▓▓▓▓▓????????????????????
????????..??.′′′′▓▓▓▓▓▓▓????????????????????
????????′??????????????????????????????????
????????′′′′′′′′′███████′′′′′??????????????
????????′′′′′′′′████████′′′′′′′
????????′′′′′′′█████████′′′′′′
????????′′′′′′██████████′′′′?????????????大部分人都在關(guān)注你飛的高不高,卻沒人在乎你飛的累不累,這就是現(xiàn)實(shí)!
????????′′′′′′██████████′′′?????????????????????我從不相信夢想,我,只,相,信,自,己!
????????′′′′′′′█████████′′
????????′′′′′′′█████████′′′
????????′′′′′′′′████████′′′′′
????????________?????
????????_________????
????????_________????
????????________??_??
????????_______??__??
????????_____???___??
????????_____??___??
????????____??____??
????????___??_____??
????????███____???
????????████____███
????????█?_███_?_█_███
——————————————————————————女神保佑,代碼無bug——————————————————————

多語言對比

  • C語言
#include
int?main()?{
????printf("南哥帶你裝B帶你飛");
????return?0;
}
  • C 語言
#include
using?namespace?std;
int?main()?{
????cout?<"南哥帶你裝B帶你飛"?<????return?0;
}
  • OC語言
#import?
int?main()?{
????NSLog(@"南哥帶你裝B帶你飛");
????return?0;
}
  • Java語言
class?Test
{
????public?static?viod?main()
????{
????????system.out.println("南哥帶你裝B帶你飛");
????}
}
  • Go語言
package?main
import??"fmt"?//引入fmt庫
func?main()?{
????fmt.Println("南哥帶你裝B帶你飛")
}

什么是注釋?

  • 注釋是在所有計(jì)算機(jī)語言中都非常重要的一個(gè)概念,從字面上看,就是注解、解釋的意思
  • 注釋可以用來解釋某一段程序或者某一行代碼是什么意思,方便程序員之間的交流溝通
  • 注釋可以是任何文字,也就是說可以寫中文
  • 被注釋的內(nèi)容在開發(fā)工具中會(huì)有特殊的顏色

為什么要使用注釋?

  • 沒有編寫任何注釋的程序
void?printMap(char?map[6][7]?,?int?row,?int?col);
int?main(int?argc,?const?char?*?argv[])
{
????char?map[6][7]?=?{
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'},
????????{'#',?'?',?'?',?'?',?'#'?,'?',?'?'},
????????{'#',?'R',?'?',?'#',?'#',?'?',?'#'},
????????{'#',?'?',?'?',?'?',?'#',?'?',?'#'},
????????{'#',?'#',?'?',?'?',?'?',?'?',?'#'},
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'}
????};
????int?row?=?sizeof(map)/sizeof(map[0]);
????int?col?=?sizeof(map[0])/?sizeof(map[0][0]);
????printMap(map,?row,?col);
????int?pRow?=?2;
????int?pCol?=?1;
????int?endRow?=?1;
????int?endCol?=?6;
????while?('R'?!=?map[endRow][endCol])?{
????????printf("親,?請輸入相應(yīng)的操作\n");
????????printf("w(向上走)?s(向下走)?a(向左走)?d(向右走)\n");
????????char?run;
????????run?=?getchar();
????????switch?(run)?{
????????????case?'s':
????????????????if?('#'?!=?map[pRow? ?1][pCol])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pRow ;//3
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'w':
????????????????if?('#'?!=?map[pRow?-?1][pCol])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pRow--;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'a':
????????????????if?('#'?!=?map[pRow][pCol?-?1])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pCol--;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'d':
????????????????if?('#'?!=?map[pRow][pCol? ?1])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pCol ;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????}
????????printMap(map,?row,?col);
????}
????printf("你太牛X了\n");
????printf("想挑戰(zhàn)自己,請購買完整版本\n");
????return?0;
}
void?printMap(char?map[6][7]?,?int?row,?int?col)
{
????system("cls");
????for?(int?i?=?0;?i?????????for?(int?j?=?0;?j?????????????printf("%c",?map[i][j]);
????????}
????????printf("\n");
????}
}
  • 編寫了注釋的程序
/*
?????R代表一個(gè)人
?????#代表一堵墻
//???0123456
?????#######?//?0
?????#???#???//?1
?????#R?##?#?//?2
?????#???#?#?//?3
?????##????#?//?4
?????#######?//?5

?????分析:
?????>1.保存地圖(二維數(shù)組)
?????>2.輸出地圖
?????>3.操作R前進(jìn)(控制小人行走)
??????3.1.接收用戶輸入(scanf/getchar)
??????w(向上走)?s(向下走)?a(向左走)?d(向右走)
??????3.2.判斷用戶的輸入,控制小人行走
?????????3.2.1.替換二維數(shù)組中保存的數(shù)據(jù)
?????????????(
????????????????1.判斷是否可以修改(如果不是#就可以修改)
????????????????2.修改現(xiàn)有位置為空白
????????????????3.修改下一步為R
?????????????)
??????3.3.輸出修改后的二維數(shù)組
?????4.判斷用戶是否走出出口
*/
//?聲明打印地圖方法
void?printMap(char?map[6][7]?,?int?row,?int?col);
int?main(int?argc,?const?char?*?argv[])
{
????//?1.定義二維數(shù)組保存迷宮地圖
????char?map[6][7]?=?{
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'},
????????{'#',?'?',?'?',?'?',?'#'?,'?',?'?'},
????????{'#',?'R',?'?',?'#',?'#',?'?',?'#'},
????????{'#',?'?',?'?',?'?',?'#',?'?',?'#'},
????????{'#',?'#',?'?',?'?',?'?',?'?',?'#'},
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'}
????};
????//?2.計(jì)算地圖行數(shù)和列數(shù)
????int?row?=?sizeof(map)/sizeof(map[0]);
????int?col?=?sizeof(map[0])/?sizeof(map[0][0]);
????//?3.輸出地圖
????printMap(map,?row,?col);
????//?4.定義變量記錄人物位置
????int?pRow?=?2;
????int?pCol?=?1;
????//?5.定義變量記錄出口的位置
????int?endRow?=?1;
????int?endCol?=?6;
????//?6.控制人物行走
????while?('R'?!=?map[endRow][endCol])?{
????????//?6.1提示用戶如何控制人物行走
????????printf("親,?請輸入相應(yīng)的操作\n");
????????printf("w(向上走)?s(向下走)?a(向左走)?d(向右走)\n");
????????char?run;
????????run?=?getchar();
????????//?6.2根據(jù)用戶輸入控制人物行走
????????switch?(run)?{
????????????case?'s':
????????????????if?('#'?!=?map[pRow? ?1][pCol])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pRow ;//3
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'w':
????????????????if?('#'?!=?map[pRow?-?1][pCol])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pRow--;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'a':
????????????????if?('#'?!=?map[pRow][pCol?-?1])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pCol--;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????????case?'d':
????????????????if?('#'?!=?map[pRow][pCol? ?1])?{
????????????????????map[pRow][pCol]?=?'?';
????????????????????pCol ;
????????????????????map[pRow][pCol]?=?'R';
????????????????}
????????????????break;
????????}
????????//?6.3重新輸出行走之后的地圖
????????printMap(map,?row,?col);
????}
????printf("你太牛X了\n");
????printf("想挑戰(zhàn)自己,請購買完整版本\n");
????return?0;
}

/**
?*?@brief?printMap
?*?@param?map?需要打印的二維數(shù)組
?*?@param?row?二維數(shù)組的行數(shù)
?*?@param?col?二維數(shù)組的列數(shù)
?*/
void?printMap(char?map[6][7]?,?int?row,?int?col)
{
????//?為了保證窗口的干凈整潔,?每次打印都先清空上一次的打印
????system("cls");
????for?(int?i?=?0;?i?????????for?(int?j?=?0;?j?????????????printf("%c",?map[i][j]);
????????}
????????printf("\n");
????}
}

注釋的分類

  • 單行注釋

    • // 被注釋內(nèi)容
    • 使用范圍:任何地方都可以寫注釋:函數(shù)外面、里面,每一條語句后面
    • 作用范圍: 從第二個(gè)斜線到這一行末尾
    • 快捷鍵:Ctrl /
  • 多行注釋

    • /* 被注釋內(nèi)容 */
    • 使用范圍:任何地方都可以寫注釋:函數(shù)外面、里面,每一條語句后面
    • 作用范圍: 從第一個(gè)/*到最近的一個(gè)*/

注釋的注意點(diǎn)

  • 單行注釋可以嵌套單行注釋、多行注釋
//?南哥?//?公號(hào)代碼情緣
//?/*?江哥?*/
//?瓜哥
  • 多行注釋可以嵌套單行注釋
/*
//?作者:LNJ
//?描述:第一個(gè)C語言程序作用:這是一個(gè)主函數(shù),C程序的入口點(diǎn)
?*/
  • 多行注釋***不能***嵌套多行注釋
/*?
哈哈哈
?????/*嘻嘻嘻*/
?呵呵呵?
*/

注釋的應(yīng)用場景

  • 思路分析
/*
?????R代表一個(gè)人
?????#代表一堵墻
//???0123456
?????#######?//?0
?????#???#???//?1
?????#R?##?#?//?2
?????#???#?#?//?3
?????##????#?//?4
?????#######?//?5

?????分析:
?????>1.保存地圖(二維數(shù)組)
?????>2.輸出地圖
?????>3.操作R前進(jìn)(控制小人行走)
??????3.1.接收用戶輸入(scanf/getchar)
??????w(向上走)?s(向下走)?a(向左走)?d(向右走)
??????3.2.判斷用戶的輸入,控制小人行走
?????????3.2.1.替換二維數(shù)組中保存的數(shù)據(jù)
?????????????(
????????????????1.判斷是否可以修改(如果不是#就可以修改)
????????????????2.修改現(xiàn)有位置為空白
????????????????3.修改下一步為R
?????????????)
??????3.3.輸出修改后的二維數(shù)組
?????4.判斷用戶是否走出出口
*/
  • 對變量進(jìn)行說明
//?2.計(jì)算地圖行數(shù)和列數(shù)
int?row?=?sizeof(map)/sizeof(map[0]);
int?col?=?sizeof(map[0])/?sizeof(map[0][0]);
  • 對函數(shù)進(jìn)行說明
/**
?*?@brief?printMap
?*?@param?map?需要打印的二維數(shù)組
?*?@param?row?二維數(shù)組的行數(shù)
?*?@param?col?二維數(shù)組的列數(shù)
?*/
void?printMap(char?map[6][7]?,?int?row,?int?col)
{
????system("cls");
????for?(int?i?=?0;?i?????????for?(int?j?=?0;?j?????????????printf("%c",?map[i][j]);
????????}
????????printf("\n");
????}
}
  • 多實(shí)現(xiàn)邏輯排序
????//?1.定義二維數(shù)組保存迷宮地圖
????char?map[6][7]?=?{
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'},
????????{'#',?'?',?'?',?'?',?'#'?,'?',?'?'},
????????{'#',?'R',?'?',?'#',?'#',?'?',?'#'},
????????{'#',?'?',?'?',?'?',?'#',?'?',?'#'},
????????{'#',?'#',?'?',?'?',?'?',?'?',?'#'},
????????{'#',?'#',?'#',?'#',?'#',?'#',?'#'}
????};
????//?2.計(jì)算地圖行數(shù)和列數(shù)
????int?row?=?sizeof(map)/sizeof(map[0]);
????int?col?=?sizeof(map[0])/?sizeof(map[0][0]);
????//?3.輸出地圖
????printMap(map,?row,?col);
????//?4.定義變量記錄人物位置
????int?pRow?=?2;
????int?pCol?=?1;
????//?5.定義變量記錄出口的位置
????int?endRow?=?1;
????int?endCol?=?6;
????//?6.控制人物行走
????while?('R'?!=?map[endRow][endCol])?{
????????...?...
????}

使用注釋的好處

  • 注釋是一個(gè)程序員必須要具備的良好習(xí)慣
  • 幫助開發(fā)人員整理實(shí)現(xiàn)思路
  • 解釋說明程序, 提高程序的可讀性
    • 初學(xué)者編寫程序可以養(yǎng)成習(xí)慣:先寫注釋再寫代碼
    • 將自己的思想通過注釋先整理出來,在用代碼去體現(xiàn)
    • 因?yàn)榇a僅僅是思想的一種體現(xiàn)形式而已

什么是關(guān)鍵字?

  • 關(guān)鍵字,也叫作保留字。是指一些被C語言賦予了特殊含義的單詞
  • 關(guān)鍵字特征:
    • 全部都是小寫
    • 在開發(fā)工具中會(huì)顯示特殊顏色
  • 關(guān)鍵字注意點(diǎn):
    • 因?yàn)殛P(guān)鍵字在C語言中有特殊的含義, 所以不能用作變量名、函數(shù)名等
  • C語言中一共有32個(gè)關(guān)鍵字
12345678
charshortintlongfloatdoubleifelse
returndowhileforswitchcasebreakcontinue
defaultgotosizeofautoregisterstaticexternunsigned
signedtypedefstructenumunionvoidconstvolatile
這些不用專門去記住,用多了就會(huì)了。在編譯器里都是有特殊顏色的。我們用到時(shí)候會(huì)一個(gè)一個(gè)講解這個(gè)些關(guān)鍵字怎么用,現(xiàn)在瀏覽下,有個(gè)印象就OK了

關(guān)鍵字分類

什么是標(biāo)識(shí)符?

  • 從字面上理解,就是用來標(biāo)識(shí)某些東西的符號(hào),標(biāo)識(shí)的目的就是為了將這些東西區(qū)分開來
  • 其實(shí)標(biāo)識(shí)符的作用就跟人類的名字差不多,為了區(qū)分每個(gè)人,就在每個(gè)人出生的時(shí)候起了個(gè)名字
  • C語言是由函數(shù)構(gòu)成的,一個(gè)C程序中可能會(huì)有多個(gè)函數(shù),為了區(qū)分這些函數(shù),就給每一個(gè)函數(shù)都起了個(gè)名稱, 這個(gè)名稱就是標(biāo)識(shí)符
  • 綜上所述: 程序員在程序中給函數(shù)、變量等起名字就是標(biāo)識(shí)符

標(biāo)識(shí)符命名規(guī)則

  • 只能由字母(a~z、 A~Z)、數(shù)字、下劃線組成
  • 不能包含除下劃線以外的其它特殊字符串
  • 不能以數(shù)字開頭
  • 不能是C語言中的關(guān)鍵字
  • 標(biāo)識(shí)符嚴(yán)格區(qū)分大小寫, test和Test是兩個(gè)不同的標(biāo)識(shí)符

練習(xí)

  • 下列哪些是合法的標(biāo)識(shí)符








    fromNo22from#22my_Booleanmy-Boolean2ndObjGUIlnj
    Mike2jack江哥_testtest!32haha(da)ttjack_rosejack
    本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
    換一批
    延伸閱讀

    9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

    關(guān)鍵字: 阿維塔 塞力斯 華為

    加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

    關(guān)鍵字: AWS AN BSP 數(shù)字化

    倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

    關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

    北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

    關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

    8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

    關(guān)鍵字: 騰訊 編碼器 CPU

    8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

    關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

    8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

    關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

    要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

    關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

    北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

    關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

    北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

    關(guān)鍵字: BSP 信息技術(shù)
    關(guān)閉
    關(guān)閉