日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言入门(初识C语言)

發布時間:2024/3/12 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

#include <stdio.h>int main() {printf("Hello,World!");printf("Hello,C!");return 0; }

打印結果如下

這樣你肯定理解了吧!

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關鍵字定義枚舉常量。舉例:
#include<stdio.h> enum Sex {MALE,FEMALE,SECRET, }; int main() {printf("%d\n", MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0; }

運行結果:

3.2 變量

  • 變量的定義方法:
#include <stdio.h> int main() {int a = 10;float b = 6.66;char c = 'a';printf("a=%d\n", a);printf("b=%f\n", b);printf("c=%c\n", c);return 0; }

程序運行結果:

  • 變量的分類
    在C語言中變量有兩類,局部變量和全局變量。
    全局變量: 指在一個程序中對整個代碼都有效的變量,定義在main函數之外。注意:由于全局變量的特性,我們甚至可以在一個工程中,跨文件使用同一個全局變量,所以它是很不安全的,一般情況下不建議使用。
    局部變量: 指定義在{}內部的變量,它只在該區域內起作用。當一個程序中同時定義了相同名字的全局變量和局部變量時,采用局部優先的原則。舉例:
  • 變量的使用
    變量的使用很簡單,與生活中的數學不計較相似。這里我們以寫一個可以計算兩個整數相加減的程序為例子吧
#include<stdio.h>int main() {int num1 = 20, num2 = 10;int sum = 0, sub = 0;sum = num1 + num2;sub = num1 - num2;printf("num1 + num2 = %d\n", sum);printf("num1 - num2 = %d\n", sub);return 0; }

程序運行結果:

  • 變量的作用域和生命周期

四. 轉義字符和字符串

4.1 轉義字符

轉義字符其實我們早就見過了 printf("Hello world!\n");這一段代碼中的\n就是一個轉義字符,它叫換行符。
除了\n,C語言中還有許多其他的轉義字符:

感興趣的話可以自己在代碼中嘗試。

4.2 字符串

字符串就是由" "引起的內容,我們其實也見過它了, printf("Hello world!\n");中的Hello world就是字符串。其中字符串最重要的一個知識點就是它的結束標志 ‘\0’。
看看以下代碼:

#include<stdio.h>int main() {char str1[] = { 'H','e','h','e','\0' };char str2[] = { 'H','e','h','e' };char str3[] = "Hehe";printf("%s\n", str1);printf("%s\n", str2);printf("%s\n", str3);return 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
    既可以注釋一行,也可以注釋多行

五. 選擇語句

生活中我們經常會遇到選擇的問題, 舉一個例子:我們該好好學習嗎?接下來就該選擇了,如果好好學習,就會得到一個好工作,否則,就沒有好工作,回家賣紅薯。 接下來,我們用圖解和代碼的形式把這段話描述出來。

#include <stdio.h>int main() {int i = 0;printf("請選擇: (1.好好學習,0.擺爛)\n");scanf("%d", &i);if (i == 1){printf("好offer!高薪資!\n");}else{printf("回家賣紅薯。。。\n");}return 0; }

程序運行結果:


C語言中的選擇語句有if,else語句和switch語句,這里我們先介紹if,else語句。

六. 循環語句

生活中有很多事情需要我們日復一日的去做,這就是循環。C語言中提供了三種循環語句,while、for、do…while。
這里我們先介紹while循環。舉一個例子:我們學習編程,每天寫代碼,當代碼量達到一萬行時就拿到好offer。接下來我們用C語言描述一下它:

#include <stdio.h>int main() {int i = 0;while (i<10000){printf("%d行\n", i);i++;}printf("寫了一萬號代碼了,得到好offer!\n");return 0; }

七. 函數

7.1 自定義函數

在我們寫代碼的過程中,一個功能可能會用到很多次(比如計算兩個數的和),那么我們可以把這一段代碼模塊化,以后想計算兩個數的和時,就不需要自己重新寫一遍這個代碼了,直接調用這個函數就可以。接下來我們用兩個模式寫這段代碼,第一個是一般寫法,第二個是寫成函數的形式。

  • 一般寫法
#include <stdio.h>int main() {int num1 = 0, num2 = 0;int sum = 0;printf("請輸入兩個整數: \n");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("sum = %d\n", sum);return 0; }
  • 寫成函數
#include <stdio.h> int Add(int x, int y) {int sum = x + y;return sum; } int main() {int num1 = 0, num2 = 0;int sum = 0;printf("請輸入兩個整數: \n");scanf("%d %d", &num1, &num2);sum = Add(num1, num2);printf("sum = %d\n", sum);return 0; }

程序運行結果(兩個代碼的結果是一樣的):

函數的特點就是可以簡化代碼,并且提高代碼復用能力。

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


如果想打印該數組,需要用到循環,請看代碼:

#include <stdio.h> int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;while (i < 10){printf("arr[%d] = %d\n", i, arr[i]);i++;}return 0; }

程序運行結果:

九. C語言中的操作符

9.1 算術操作符

就是數學中的算術運算符:+,-,*,/,%。其中需要額外注意的是除法運算和%取模運算。請看代碼:

9.2 移位操作符,位操作符,賦值操作符

  • 移位操作符
    >>(右移操作符), <<(左移操作符),作用分別是將目標的數值轉換成二進制后,對二進制進行移位。舉例:

    右移操作符也是同理
  • 位操作符:

&按位與 |按位或 ^按位異或

這三個都是進行的二進制位操作,這里我們先認識一下,之后進階再介紹。

-賦值操作符

= += -= *= /= &= ^= |= >>= <<=

拿+=舉例子吧,比如 a+=10;這段表達式我們翻譯一下就是a=a+10;其他的也是同理的。

9.3 其他操作符

單目操作符作業
邏輯反操作
-取負
+取正
&取地址
sizeof求操作數的類型長度(單位是字節)
~對一個數的二進制按位取反
- -前置、后置- -
++前置、后置++
*解引用操作符
(數據類型)強制類型轉換‘
項目關系操作符作用
>測試大于
<測試小于
>=測試大于等于
<=測試小于等于
==測試等于
!=測試不等
  • 邏輯操作符
    &&:邏輯與;
    ||:邏輯或。
  • 條件操作符
exp1 ? exp2 : exp3;

舉例:

  • 逗號表達式
    格式:exp1, exp2, exp3, …expN
  • 下標引用、函數調用和結構成員
[] () . ->

十. 常見關鍵字


C語言提供了豐富的關鍵字,這些關鍵字都是語言本身預先設定好的,用戶自己是不能創造關鍵字的。
我們先介紹幾個,之后的慢慢了解。

10.1 typedef

typedef 顧名思義是類型定義,這里應該理解為類型重命名。

舉例子:

十一. #define 定義常量和宏

請看例子:

十二. 指針

在了解指針之前,我們得先了解一下內存

什么是內存?

內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的 。
所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節。
為了能夠有效的訪問到內存的每個單元,就給內存單元進行了編號,這些編號被稱為該內存單元的地址。

變量是創建內存中的(在內存中分配空間的),每個內存單元都有地址,所以變量也是有地址的。

如何取出變量的地址呢?
我們之前講到的&操作符就是干這個的:


如果我們想把&a,即a的地址存起來該怎么做呢?
這時指針就是我們想要的工具了。

#include <stdio.h> int main() {int a = 10;int* pa = &a;printf("%p", pa);return 0; }

注意:不同類型變量的地址,應該用與之相對應的指針來存儲。
到這了,我們不難發現,其實指針本質上就是也是一種變量,只不過是專門用來存儲地址的。
那么變量應該也有大小吧?
我們不妨用sizeof試試?

#include <stdio.h> //指針變量的大小取決于地址的大小 //32位平臺下地址是32個bit位(即4個字節) //64位平臺下地址是64個bit位(即8個字節) int main() {printf("%d\n", sizeof(char *));printf("%d\n", sizeof(short *));printf("%d\n", sizeof(int *));printf("%d\n", sizeof(double *));return 0; }


這里我用的平臺是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语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。