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