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