C语言从青铜到王者——基础知识总结
關(guān)于C語言
C語言簡介
C 語言是一種通用的高級(jí)語言,最初是由丹尼斯·里奇在貝爾實(shí)驗(yàn)室為開發(fā) UNIX 操作系統(tǒng)而設(shè)計(jì)的。C 語言最開始是于 1972 年在 DEC PDP-11 計(jì)算機(jī)上被首次實(shí)現(xiàn)。在 1978 年,布萊恩·柯林漢(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一個(gè)公開可用的描述,現(xiàn)在被稱為 K&R 標(biāo)準(zhǔn)。UNIX 操作系統(tǒng),C編譯器,和幾乎所有的 UNIX 應(yīng)用程序都是用 C 語言編寫的。由于各種原因,C 語言現(xiàn)在已經(jīng)成為一種廣泛使用的專業(yè)語言。
C語言的特點(diǎn)
- 易于學(xué)習(xí)。
- 結(jié)構(gòu)化語言。
- 它產(chǎn)生高效率的程序。
- 它可以處理底層的活動(dòng)。
- 它可以在多種計(jì)算機(jī)平臺(tái)上編譯。
金無足赤,人無完人。C語言也有一些缺點(diǎn),指針是C語言的靈魂,然而涉及指針的錯(cuò)誤往往難以察覺。要享受用C語言自由編程的樂趣,就必須承擔(dān)更多的責(zé)任。缺點(diǎn)這塊點(diǎn)到為止,不然又要吐槽了,printf(“鋤禾日當(dāng)午,學(xué)C真他媽苦😢”);
C語言的應(yīng)用范圍
C 語言最初是用于系統(tǒng)開發(fā)工作,特別是組成操作系統(tǒng)的程序。由于 C 語言所產(chǎn)生的代碼運(yùn)行速度與匯編語言編寫的代碼運(yùn)行速度幾乎一樣,所以采用 C 語言作為系統(tǒng)開發(fā)語言。下面列舉幾個(gè)使用 C 的實(shí)例:
- 操作系統(tǒng)
- 語言編譯器
- 匯編器
- 文本編輯器
- 打印機(jī)
- 網(wǎng)絡(luò)驅(qū)動(dòng)器
- 現(xiàn)代程序
- 數(shù)據(jù)庫
- 語言解釋器
- 實(shí)體工具
第一個(gè)C語言程序
關(guān)于C語言的有點(diǎn)以及為什么我們要學(xué)習(xí)C語言這里就不多說了,下來我們直接進(jìn)入今天的主題,編寫第一個(gè)C程序。
和學(xué)習(xí)其它語言一樣,先從Hello World開始
關(guān)于編程工具之前介紹了三個(gè),這里就使用其中一個(gè)VS2019,如果還有疑問請(qǐng)看之前的文章。
代碼
#include<stdio.h>int main() { /*主函數(shù)*/printf("hello world!\n"); /*輸出hello world!*/return 0; /*返回*/ }Ctrl+F5運(yùn)行,運(yùn)行結(jié)果如下:
入門的第一個(gè)程序HelloWorld已經(jīng)完成。
我們來分析一下上面這段代碼:
#include<stdio.h>為文件包含命令,而stdio.h是頭文件,它里面包含里一些程序中需要使用的基本元素,printf()就是其中一個(gè)。
下面定義了一個(gè)main()函數(shù),int為函數(shù)的返回值類型,利用printf()函數(shù)輸出了字符串"hello world",而"\n"是換行符,它在這里的作用是輸出"hello world"后換行。return 0表示返回。
代碼中"/*...*/"是注釋,它的內(nèi)容不參與程序運(yùn)行。C語言中單行注釋也可以用"\\"。
下圖總結(jié)了組成C程序的幾個(gè)部分
該圖片出自
編寫C語言程序的7個(gè)步驟
為了讓大家對(duì)編程有大概的了解,這里將編寫C程序的過程分解成了7個(gè)步驟,當(dāng)然這只是理想狀態(tài)下的,實(shí)際開發(fā)中會(huì)根據(jù)情況循環(huán)或者改進(jìn)一些步驟。這里就不詳細(xì)的介紹每個(gè)步驟了,大家可以通過后續(xù)的文章慢慢理解這幾個(gè)步驟。
編程機(jī)制
我們從兩張圖來分別理解一下windows和unix系統(tǒng)中從源代碼到可執(zhí)行文件的過程
- Windows
- Unix
C語言基本算法
算法的基本特性
算法包含兩方面的內(nèi)容:算法設(shè)計(jì)和算法分析
算法設(shè)計(jì)其實(shí)就是針對(duì)某一特定類型的問題而設(shè)計(jì)的一個(gè)實(shí)現(xiàn)過程。算法有以下幾個(gè)特性:
- 有窮性
- 確定性
- 可行性
- 輸入
- 輸出
也就是說我們?cè)谠O(shè)計(jì)算法是的滿足上面所說的特性。當(dāng)然算法也是有好有壞的,那么我們?cè)鯓尤ズ饬恳粋€(gè)算法的優(yōu)劣呢?
算法分析其實(shí)就是在衡量一個(gè)算法的優(yōu)劣,通常會(huì)從一下幾個(gè)方面來分析:
算法的表達(dá)方式
在描述一個(gè)算法時(shí)通常使用的方法有:自然語言、流程圖、N-S圖等。
自然語言
自然語言這種表達(dá)方式通俗易懂,我們通過一個(gè)具體的實(shí)例了解一下。
需求:任意輸入3個(gè)數(shù),求出其中的最小數(shù)。
(1) 定義4個(gè)變量分別是a,b,c和min。
(2) 輸入大小不同的三個(gè)數(shù)分別賦值給a,b,c。
(3) 判斷a是否小于b,如果小于,則將a的值賦給min,否則將b的值賦給min。
(4) 判斷min是否小于c,如果小于,則執(zhí)行(5),否則將c的值賦給min。
(5) 輸出min。
這種表達(dá)方式的好處就是簡單易懂,但是當(dāng)遇到復(fù)雜的算法時(shí)自然語言就顯得不是很方便了。
流程圖
流程圖就是用一些圖框來代表各種不同性質(zhì)的操作,用流程線來指示算法的執(zhí)行方向。他的特點(diǎn)就是直觀形象,應(yīng)用很廣泛。
下圖介紹了流程圖的符號(hào)以及含義
流程圖有三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
- 順序結(jié)構(gòu):順序結(jié)構(gòu)就是簡單的線性結(jié)構(gòu)
- 選擇結(jié)構(gòu):選擇結(jié)構(gòu)也稱為分支結(jié)構(gòu)
- 循環(huán)結(jié)構(gòu):反復(fù)執(zhí)行一系列操作,知道條件不成立時(shí)終止。
我們?cè)侔焉厦娴男枨笥昧鞒虉D來表示一下
N-S流程圖
N-S流程圖是將全部的算法寫在一個(gè)矩形框內(nèi),省去了流程圖中的流程線。下面繼續(xù)看一個(gè)實(shí)例:
需求:輸入一個(gè)數(shù),判別是否為素?cái)?shù)。
算法的基本特性和算法的表示介紹到就結(jié)束了。
數(shù)據(jù)類型
基本類型
基本類型就是我們?cè)谑褂肅語言時(shí)最基礎(chǔ)的數(shù)據(jù)類型,包括整形(短整型,基本整型,長整型)、字符型、浮點(diǎn)型(單、雙精度)以及枚舉類型。
構(gòu)造類型
在編程的過程中只使用基本類型是遠(yuǎn)遠(yuǎn)不夠的,為了滿足需求,因此還要使用基本類型之外的類型,構(gòu)造類型就是其中的一種。構(gòu)造類型可以使用基本類型構(gòu)造出新的數(shù)據(jù)類型來滿足實(shí)際開發(fā)中的需求。構(gòu)造類型有3種形式:數(shù)組類型、結(jié)構(gòu)體類型、共用體類型。
指針類型
指針是C語言的精華所在,許多編程語言中都支持某種形式的指針,但最著名的是C語言。指針的特殊性在于它的值是一個(gè)內(nèi)存地址。關(guān)于指針后面我們會(huì)詳細(xì)說明。
空類型
空類型(void)的主要作用就是限定函數(shù)的返回和限定函數(shù)的參數(shù)。
為了便于記憶,我將數(shù)據(jù)類型做了一個(gè)簡單的思維導(dǎo)圖,如下:
常量
這塊內(nèi)容就不在用過多的文字贅述了,從下面的思維導(dǎo)圖我們可以直觀的理解。
關(guān)于符號(hào)常量我們來看一段簡單的代碼
流程控制語句
循環(huán)控制語句
C語言有3種循環(huán)
- for
- while
- do while
while循環(huán)
我們先來看下while循環(huán),流程圖如下:
下來看個(gè)小示例
do while循環(huán)
流程圖如下:
下來看個(gè)小示例
兩個(gè)小示例的運(yùn)行結(jié)果相同。
for循環(huán)
流程圖如下:
for循環(huán)的執(zhí)行大致可分為4個(gè)步驟
- 執(zhí)行表達(dá)式1,只執(zhí)行一次
- 計(jì)算表示式2的值,看其是否為真(非零),如果為真就執(zhí)行循環(huán)體部分,否則直接退出,執(zhí)行for循環(huán)下面的語句
- 執(zhí)行循環(huán)體
- 計(jì)算表達(dá)式3的值,然后返回步驟2
接下來看一個(gè)for循環(huán)的示例
我們用兩個(gè)for循環(huán)嵌套實(shí)現(xiàn)了九九乘法表
條件控制語句
我們先來看個(gè)簡單的示例:
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() {int score;printf("請(qǐng)輸入學(xué)生的數(shù)學(xué)成績:");scanf("%d", &score);if (score < 60 && score >= 0){printf("該學(xué)生的數(shù)學(xué)成績類別為:差\n");}else if (score < 70 && score >= 60){printf("該學(xué)生的數(shù)學(xué)成績類別為:及格\n");}else if (score < 80 && score >= 70){printf("該學(xué)生的數(shù)學(xué)成績類別為:中\(zhòng)n");}else if (score < 90 && score >= 80){printf("該學(xué)生的數(shù)學(xué)成績類別為:良\n");}else if (score < 100 && score >= 90){printf("該學(xué)生的數(shù)學(xué)成績類別為:優(yōu)\n");}return 0; }
這個(gè)示例中使用了關(guān)鍵字if、else if、else等關(guān)鍵字,即循環(huán)語句的關(guān)鍵字,我們來具體看下
if語句流程圖如下
if語句用來判定給定條件是否滿足,根據(jù)判斷結(jié)果決定是否執(zhí)行某個(gè)操作。if語句的使用形式如下:
if else語句流程圖如下:
多重if語句流程圖如下:
這里不多解釋了,如有什么不懂可以將示例練習(xí)一遍好好琢磨一下,你會(huì)覺得So easy!
控制語句示例
求a,b,c三個(gè)數(shù)中的最大值?
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int a, b, c;int max1, max2;a = 8;b = 12;c = 10;if (a>b){if (a>c){max1 = a;}else{max1 = c;}}else{if (b>c){max1 = b;}else{max1 = c;}}//三元表達(dá)式max2 = a > b ? (a > c ? a : c) : (b > c ? b : c);printf("the max number is %d\n", max1);printf("the max number is %d\n", max2);return 0; }結(jié)果
如果您覺得本篇文章對(duì)您有幫助就順手點(diǎn)個(gè)贊吧
更多干貨內(nèi)容請(qǐng)查看我的個(gè)人公眾號(hào):C語言中文社區(qū)。
【C語言中文社區(qū)】是一個(gè)C語言/C++視頻教程、學(xué)習(xí)筆記、電子書、計(jì)算機(jī)二級(jí)資料等專注于C語言/C++編程學(xué)習(xí)者的干貨知識(shí)分享平臺(tái),精選深度文章,分享優(yōu)秀干貨類、技能類的學(xué)習(xí)資源,幫助學(xué)習(xí)中的你。
總結(jié)
以上是生活随笔為你收集整理的C语言从青铜到王者——基础知识总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Clion开发C语言程序,环境安装配
- 下一篇: C语言从青铜到王者——数组详解总结【一维