C语言入门(初识C语言)
C語言入門(初識C語言)
- 前言
- 什么是C語言?
- 為什么選擇C語言?
- 計算機語言的發展
- 高級計算機語言中的經典:C語言
- 初識C語言(正片開始)
- 一.第一個C語言程序(你好,C語言)
- 1.1 #include
- 1.2 int main()
- 1.3 printf
- 1.4 return 0
- 1.5 小結
- 二.C語言數據類型
- 三.C語言中的常量與變量
- 3.1 常量
- 3.2 變量
- 四. 轉義字符和字符串
- 4.1 轉義字符
- 4.2 字符串
- 4.3 注釋
- 五. 選擇語句
- 六. 循環語句
- 七. 函數
- 7.1 自定義函數
- 7.2 C語言庫函數
- 八. 數組
- 8.1 數組的定義
- 8.2 數組的下標
- 九. C語言中的操作符
- 9.1 算術操作符
- 9.2 移位操作符,位操作符,賦值操作符
- 9.3 其他操作符
- 十. 常見關鍵字
- 10.1 typedef
- 十一. #define 定義常量和宏
- 十二. 指針
- 十三. 結構體
- 總結
前言
嘿嘿,當你點進這篇文章時,我想你一定對編程感興趣,并且準備邁出學習它的第一步了吧?那么就讓我們開始吧!編程是一件非常有趣的事情,希望你能夠一直保持積極的心態面對它。我們就從C語言開始入門吧。接下來我將講解C語言的基礎知識。
什么是C語言?
C語言是一門通用計算機編程語言,廣泛應用于底層開發。C語言的設計目標是提供一種能以簡易
的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語
言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的
C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超
級電腦等作業平臺。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標準局為C語言制
定了一套完整的美國國家標準語法,稱為ANSI C,作為C語言最初的標準。 [1] 目前2011年12月8
日,國際標準化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標
準,也是C語言的最新標準,該標準更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢
字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
為什么選擇C語言?
在明白為什么選擇C語言之前,我們需要先了解一下計算機語言的發展歷史
計算機語言的發展
一. 機器語言
第一代計算機語言稱為機器語言。機器語言就是 0/1 代碼。計算機只能識別 0 和 1。在計算機內部,無論是一部電影還是一首歌曲或是一張圖片,最終保存的都是 0/1 代碼,因為 CPU 只能執行 0/1 代碼。那么這是不是就意味著我們編程一定要用 0/1 代碼呢?
首先這么編寫肯定是可以的,但是這樣太麻煩,而且很不好理解,所以后來就出現了匯編語言。
二. 匯編語言
匯編語言就是將一串很枯燥無味的機器語言轉化成一個英文單詞。比如說:add 1, 2;
add 就是一個英文單詞,這樣看起來就稍微有一些含義了,即 1 和 2 相加。這個就是匯編語言。
如果直接用機器語言編寫的話,這幾乎是無法實現的。因為用機器語言太難記憶了,也沒人能看得懂。所以后來就設計出了第二種語言,即將 0/1 代碼翻譯為英文單詞,這些英文單詞直接對應著一串 0/1 指令。這個就是匯編語言。
通過專門的軟件就可以將這些英文單詞轉化成 0/1 代碼并由計算機執行,這種專門起翻譯的作用的軟件叫作編譯器。
這些英文單詞和與它們對應的 0/1 代碼之間的對應關系,以及語言的語法,在編寫這個軟件的時候就已經寫在里面了。我們只要通過編譯器就可以將這些都轉化成 0/1 代碼。這樣大大方便了我們對程序的編寫。
三. 高級語言
匯編語言之后又出現了第三代語言。第三代語言又叫“高級語言”。高級語言的發展分為兩個階段,以 1980 年為分界線,前一階段屬于結構化語言或者稱為面向過程的語言如C語言、FORTRAN語言,后一階段屬于面向對象的語言,如C++、Python、、Java、C#等。
面向過程語言中最經典、最重要的就是C語言。C語言一直在用,因為C語言是計算機領域最重要的一門語言。但是C語言也有缺陷,它的缺陷只有在學完面向對象語言之后才能體會到。
高級計算機語言中的經典:C語言
C語言自上世紀70年代初誕生直到現在,憑借著它語言簡潔、緊湊,使用方便、靈活 ;運算符豐富,語言的運算符包含的范圍廣泛;數據類型豐富;具有結構化的控制語句;程序設計自由度大;編寫的程序可移植性好;代碼質量高,程序執行效率高的特性,在最新的計算機語言排行榜上依然排進前三名。可見,C語言是一款經久不衰的語言。
數據來源:TIOBE網站
一直有一句話這樣說:C語言乃是萬物之本。所以我們從C語言開始學習是非常不錯的選擇。
那么,讓我們開始C語言的學習吧!
初識C語言(正片開始)
一.第一個C語言程序(你好,C語言)
#include <stdio.h>int main() {printf("Hello,World!\n");printf("Hello,C!\n");return 0; }程序運行結果如下:
看上去是不是很簡單呢?現在就讓我來介紹一下這些代碼吧!
1.1 #include
include我們將它稱為文件包含命令,它的作用就是將<>或者" "中的的文件包含到程序中。而stdio.h就是前面所說的“文件”,它的全名叫standard input output,“.h”是后綴名,表示它是一個頭文件。那么這段代碼的意思就是將stdio.h文件包含到本程序中。我們這里就先把它記住,以后的程序開頭就以這個格式寫上去就行了。
1.2 int main()
main函數(也叫主函數),是程序的入口,這里也是一樣的,我們記住這個標準格式就行,在main函數下面有一對{}號,我們的代碼就寫在{}里面。需要注意的是,一個工程里只能有一個main函數!
1.3 printf
printf叫做格式化輸出函數,用法就是將你想要輸出的內容放入(" ")中,比如上面我們寫的Hello,World!
當想要輸出某個字符類型時,需要以這種格式打印 printf("數據類型\n",變量名);,比如我已經定義了一個整型變量a,現在我想將它打印出來,那么就這樣寫:printf("%d\n",a);你注意到了嗎,我們在輸出函數內容時,會添加一個**\n**,它是換行符,效果就是將光標移動到下一行。我們試著將上面寫的代碼去掉\n
打印結果如下
這樣你肯定理解了吧!
1.4 return 0
表示主函數返回的值為0,我們先記住這個格式,先不做深入了解。
1.5 小結
以上就是一個C語言程序的主要內容。我們以后寫代碼時就按照這個格式來寫吧。有一些知識我們不必咬文嚼字,只需大概了解就行了,不會影響我們寫程序的。
二.C語言數據類型
char //字符數據類型 short //短整型 int //整形 long //長整型 long long //更長的整形 float //單精度浮點數 double //雙精度浮點數這些是C語言的基本數據類型,如果想知道每一種數據類型所占空間的大小(單位是字節),我們可以使用sizeof運算符:
#include <stdio.h> int main() {printf("%d\n", sizeof(char));printf("%d\n", sizeof(short));printf("%d\n", sizeof(int));printf("%d\n", sizeof(long));//printf("%d\n", sizeof(long long));printf("%d\n", sizeof(float));printf("%d\n", sizeof(double));return 0; }程序打印結果:
三.C語言中的常量與變量
我們之前說了,編程可以用于解決生活中的問題。而生活中的事物有變化的也有不變的。
3.1 常量
常量:C語言中的常量就可以理解為不變的量,比如生活中的血型、性別、圓周率等。
- 字面常量
字面常量的意思就是已知的值,比如100,50等。 - const修飾的常變量
這是未用const修飾的變量:
使用const修飾過后:
這里我們還想修改a的值時,編譯器報錯了。這里我們解釋如下:被const修飾過后的變量具有了常屬性,其值不能再改變。 注意:a只是具有了常屬性,但是它本質上還是一個變量。可以用數組的定義來證明:
- #define定義的標識符常量:定義的標識符不占內存,只是一個臨時的符號,預編譯后這個符號就不存在了。可以理解為編譯器在預編譯時將符號替換成常量的數值。舉個例子吧:
在代碼的第八行,MAX就是#define 定義的標識符常量,在預編譯時,MAX會被替換成10。
- 枚舉常量:可以一一列舉出來的常量,C語言中使用enum關鍵字定義枚舉常量。舉例:
運行結果:
3.2 變量
- 變量的定義方法:
程序運行結果:
- 變量的分類
在C語言中變量有兩類,局部變量和全局變量。
全局變量: 指在一個程序中對整個代碼都有效的變量,定義在main函數之外。注意:由于全局變量的特性,我們甚至可以在一個工程中,跨文件使用同一個全局變量,所以它是很不安全的,一般情況下不建議使用。
局部變量: 指定義在{}內部的變量,它只在該區域內起作用。當一個程序中同時定義了相同名字的全局變量和局部變量時,采用局部優先的原則。舉例:
- 變量的使用
變量的使用很簡單,與生活中的數學不計較相似。這里我們以寫一個可以計算兩個整數相加減的程序為例子吧
程序運行結果:
- 變量的作用域和生命周期
四. 轉義字符和字符串
4.1 轉義字符
轉義字符其實我們早就見過了 printf("Hello world!\n");這一段代碼中的\n就是一個轉義字符,它叫換行符。
除了\n,C語言中還有許多其他的轉義字符:
感興趣的話可以自己在代碼中嘗試。
4.2 字符串
字符串就是由" "引起的內容,我們其實也見過它了, printf("Hello world!\n");中的Hello world就是字符串。其中字符串最重要的一個知識點就是它的結束標志 ‘\0’。
看看以下代碼:
程序運行結果:
可見,字符串的結束標志為’\0’,在C語言中以char str[]="Hehe";定義字符串,會在最后自動加上’\0’。而如果以char str1[] = { 'H','e','h','e','\0' };這個形式定義字符串的話,切記要手動添加一個\0。否則打印出來的會是隨機值,因為編譯器只找\0,找到了\0它就認為字符串結束了,否則就會一直打印,直到內存中出現了\0。
4.3 注釋
當我們寫的程序越來越復雜時,定義了很多的變量,如果沒有注釋的話,我們過一段時間再回來讀程序的時候會十分困難;或者是當我們寫錯了程序時,但是又不行刪除寫的代碼,也可以用到注釋。C語言提供了兩種注釋風格:
- C語言的注釋風格:/* xxxxxx*/
缺點:不能嵌套注釋 - C++的注釋風格://xxxxx
既可以注釋一行,也可以注釋多行
五. 選擇語句
生活中我們經常會遇到選擇的問題, 舉一個例子:我們該好好學習嗎?接下來就該選擇了,如果好好學習,就會得到一個好工作,否則,就沒有好工作,回家賣紅薯。 接下來,我們用圖解和代碼的形式把這段話描述出來。
程序運行結果:
C語言中的選擇語句有if,else語句和switch語句,這里我們先介紹if,else語句。
六. 循環語句
生活中有很多事情需要我們日復一日的去做,這就是循環。C語言中提供了三種循環語句,while、for、do…while。
這里我們先介紹while循環。舉一個例子:我們學習編程,每天寫代碼,當代碼量達到一萬行時就拿到好offer。接下來我們用C語言描述一下它:
七. 函數
7.1 自定義函數
在我們寫代碼的過程中,一個功能可能會用到很多次(比如計算兩個數的和),那么我們可以把這一段代碼模塊化,以后想計算兩個數的和時,就不需要自己重新寫一遍這個代碼了,直接調用這個函數就可以。接下來我們用兩個模式寫這段代碼,第一個是一般寫法,第二個是寫成函數的形式。
- 一般寫法
- 寫成函數
程序運行結果(兩個代碼的結果是一樣的):
函數的特點就是可以簡化代碼,并且提高代碼復用能力。
7.2 C語言庫函數
說到庫函數,我們不應該陌生,在前面寫到的printf就是C語言中的一個庫函數,格式化輸出函數。需要注意的是:在使用庫函數之前,必須包含其頭文件,比如我們想使用printf函數,就包含了stdio.h頭文件。
想要了解更多的庫函數,可以訪問C++官網:cppreference.com
庫函數的簡單分類:
八. 數組
如果要連續存多個數據,該如何存?
C語言中給了數組的定義:一組相同類型元素的集合
8.1 數組的定義
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定義一個整形數組,最多放10個元素8.2 數組的下標
如果我們要找到數組中的某個元素,比如第i個元素,我們直接寫arr[i]可以嗎?
注意了,這個寫法是錯誤的!
C語言規定:數組的每個元素都有一個下標,下標是從0開始的。
如果數組10個元素,下標的范圍是0-9
如果想打印該數組,需要用到循環,請看代碼:
程序運行結果:
九. C語言中的操作符
9.1 算術操作符
就是數學中的算術運算符:+,-,*,/,%。其中需要額外注意的是除法運算和%取模運算。請看代碼:
9.2 移位操作符,位操作符,賦值操作符
- 移位操作符
>>(右移操作符), <<(左移操作符),作用分別是將目標的數值轉換成二進制后,對二進制進行移位。舉例:
右移操作符也是同理 - 位操作符:
&按位與 |按位或 ^按位異或
這三個都是進行的二進制位操作,這里我們先認識一下,之后進階再介紹。
-賦值操作符
= += -= *= /= &= ^= |= >>= <<=拿+=舉例子吧,比如 a+=10;這段表達式我們翻譯一下就是a=a+10;其他的也是同理的。
9.3 其他操作符
| ! | 邏輯反操作 |
| - | 取負 |
| + | 取正 |
| & | 取地址 |
| sizeof | 求操作數的類型長度(單位是字節) |
| ~ | 對一個數的二進制按位取反 |
| - - | 前置、后置- - |
| ++ | 前置、后置++ |
| * | 解引用操作符 |
| (數據類型) | 強制類型轉換‘ |
| > | 測試大于 |
| < | 測試小于 |
| >= | 測試大于等于 |
| <= | 測試小于等于 |
| == | 測試等于 |
| != | 測試不等 |
- 邏輯操作符
&&:邏輯與;
||:邏輯或。 - 條件操作符
舉例:
- 逗號表達式
格式:exp1, exp2, exp3, …expN - 下標引用、函數調用和結構成員
十. 常見關鍵字
C語言提供了豐富的關鍵字,這些關鍵字都是語言本身預先設定好的,用戶自己是不能創造關鍵字的。
我們先介紹幾個,之后的慢慢了解。
10.1 typedef
typedef 顧名思義是類型定義,這里應該理解為類型重命名。
舉例子:
十一. #define 定義常量和宏
請看例子:
十二. 指針
在了解指針之前,我們得先了解一下內存
什么是內存?
內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的 。
所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節。
為了能夠有效的訪問到內存的每個單元,就給內存單元進行了編號,這些編號被稱為該內存單元的地址。
變量是創建內存中的(在內存中分配空間的),每個內存單元都有地址,所以變量也是有地址的。
如何取出變量的地址呢?
我們之前講到的&操作符就是干這個的:
如果我們想把&a,即a的地址存起來該怎么做呢?
這時指針就是我們想要的工具了。
注意:不同類型變量的地址,應該用與之相對應的指針來存儲。
到這了,我們不難發現,其實指針本質上就是也是一種變量,只不過是專門用來存儲地址的。
那么變量應該也有大小吧?
我們不妨用sizeof試試?
這里我用的平臺是32位的,所以指針變量的大小是四個字節,如果在64位平臺下,指針變量的大小就是八個字節了。
十三. 結構體
我們生活中的事物是很復雜的,想要正確的描述他們,我們可能只靠數字和字符。比如描述學生,我們得說出他的名字、性別、年齡、班級等等。那么如何用C語言來描述呢?那就讓我來介紹一下結構體吧!
結構體是C語言中特別重要的知識點,結構體使得C語言有能力描述復雜類型。
舉例,描述一個學生,包括姓名,學號,年齡,性別。
struct Stu {char name[20];//名字int age; //年齡char sex[5]; //性別char id[15]; //學號 };結構體的初始化:
struct Stu s = {"張三", 15, "男", "2021213158"};接下來我們來試試使用結構體(兩種方法):
//.為結構成員訪問操作符 printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id); //->操作符 struct Stu *ps = &s; printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps- >id);程序輸出結果:
總結
好啦,以上就是初識C語言的全部內容了。認真看完的話,我們應該就可以看懂別人寫的代碼了。最好呢是能夠自己動手寫一寫代碼。我給大家推薦幾個刷題的網站吧:牛客網 | 力扣 | PTA
這是我的第一篇博客,肯定有很多不成熟的地方,希望大家多多評論提建議,感謝!
之后的博客應該會定期發布一些進階知識和題目的講解,希望大家到時候可以一起討論,一起進步!
總結
以上是生活随笔為你收集整理的C语言入门(初识C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NIST随机数测试软件下载,安装、和使用
- 下一篇: 《用莫比乌斯带巧解内接矩形问题:拓扑学的