初識C語言(01)—學習筆記

一只小小小飞猪發表於2024-05-24

什麼是C語言?

C語言是一種通用的高階程式語言,由美國電腦科學家丹尼斯·裡奇(Dennis Ritchie)在20世紀70年代初在貝爾實驗室開發。C語言被設計為一種系統程式語言,最初用於開發UNIX作業系統。它具有高度的可移植性和效率,並且已經成為了許多其他程式語言的基礎。

C語言具有以下特點:

  1. 簡潔而靈活: C語言的語法簡潔而靈活,易於學習和理解。它提供了豐富的語言特性,允許程式設計師以多種方式解決問題。

  2. 高效性: C語言產生的程式碼執行效率很高,因為它是一種編譯型語言,可以直接編譯成機器碼。

  3. 可移植性: C語言編寫的程式通常具有很高的可移植性,可以在各種不同的計算機平臺上執行而無需進行大量修改。

  4. 強大的功能性: C語言提供了豐富的庫函式和功能,包括對檔案操作、記憶體管理、資料結構等方面的支援。

  5. 程序導向: C語言是一種程序導向的程式語言,它透過函式和資料結構來組織程式,使得程式結構清晰、模組化。

  6. 與硬體互動: 由於C語言可以直接訪問記憶體地址和處理底層細節,因此它特別適用於系統程式設計和與硬體互動的應用。

C語言在電腦科學領域有著廣泛的應用,包括系統軟體開發、嵌入式系統、遊戲開發、編譯器設計等方面。雖然C語言本身並不具備很多現代程式語言的高階特性,但它仍然是一種非常重要的語言,為許多其他程式語言提供了基礎和啟發。

我的第一個C語言程式

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

Ctrl+F5執行程式碼,其列印結果為:

image-20240522182758478

#include<stdio.h>:每個C語言程式程式碼都包含一個標頭檔案,其中include稱為檔案包命令,其意義是把尖括號內指定的檔案包含到本程式中,成為本程式的一部分。

int main():這是一個程式的入口,並且在一個工程中有且只有一個main函式。在C語言程式中主體是int main()後面加一對花括號{}。

printf:表示要輸出的結果,其結果放入括號雙引號(“ ”)中,如果想要輸出想要的結果有以下固定形式(“需要列印的結果\n”),這裡\n表示換行,可有可無,只需要看列印結果。

return 0:返回值為0,先不深入探討,記住固定格式,打上去即可。

注意,在main函式中每一條語句後面需要跟上一個英文輸入狀態下的分號

資料型別

資料型別 描述 所佔空間
char 字元資料型別 1位元組
short 短整型 2位元組
int 整形 4位元組
long 長整型 4位元組
long long 更長的整型 8位元組
float 單精度浮點數 4位元組
double 雙精度浮點數 8位元組

以下是各種資料型別的空間大小的程式碼實現

#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;
}

程式碼中的%d是用來列印整型的,函式sizeof()用於輸出資料型別所佔空間的大小

單位

位元(bit) 位元組(byte) KB MB GB

換算關係
$$
1 byte = 8 bit\
1 KB = 1024 byte\
1MB = 1024KB\
1GB = 1024MB
$$
由上可知在,計算機中儲存資料最小的單位是bit(位元),他是一個二進位制的數。

二進位制的世界

0 1

十進位制的世界

0 1 2 3 4 5 6 7 8 9

常量與變數

常量:不變的值,例如身份證號、圓周率、性別、血型等

變數: 變得值,例如年齡、體重、薪資等

定義變數的方法

#include<stdio.h>
int main()
{
	short age = 20; // 年齡
	int higt = 180;//身高 
	float weight = 88.5;//體重
	return 0;
}

首先要先宣告變數是什麼型別的(例如char,short,float等),然後為變數取一個名字(根據習慣即可,後面做專案時要求比較高要見名知意……直接百度翻譯,哈哈~;上面程式碼中體現的變數名字分別是age,higt,weight),最後賦值,用等號連線,並習慣性的打上英文狀態下的分號。

全域性變數和區域性變數

全域性變數:定義在int main()之外的,對整個程式碼均有效

區域性變數:定義只在一對{}之內有效,出了這個範圍則無效

如果全域性變數和區域性變數同時存在,則區域性變數優先被使用。下面的一段程式碼給出形象的展示

#include<stdio.h>
int a = 2025;  // 全域性變數
int main()
{
	int a = 2023;  // 區域性變數
	int b = 2024; // 區域性變數
	printf("a = %d\n", a);
	return 0;
}
// 輸出結果為  a = 2023

變數的使用

下面是計算兩個數的和的程式碼

#include<stdio.h>

int main()
{
	// 初始化
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	// 輸入兩個整數
	printf("請輸入兩個整數");
	scanf("%d %d", &num1, &num2);
	// 對輸入的兩個整數加和
	sum = num1 + num2;
	printf("sum = %d\n", sum);
	return 0;
}
 
//輸出內容
//請輸入兩個整數28 60
//sum = 88

我們在程式碼開始需要對三個變數進行初始化,num1,num2,sum均賦值為0;然後輸出提示語句"請輸入兩個整數",再然後是輸入函式scanf("%d %d", &num1, &num2)來尋找num1,num2的地址,以達到對變數賦值的目的,再由變數sum來承接num1和num2加和的值,最後用printf()函式輸出sum的值。

變數的作用域和生命週期

作用域:區域性變數的作用域是變數所在的區域性範圍;全域性變數的作用域是整個工程

生命週期:區域性變數進入作用域生命週期開始,出作用域生命週期結束;全域性變數的生命週期是整個程式的生命週期

常量

  • 字面常量,即已知的值,例如30,3.14,‘W’(字元),“abc”(字串)

  • const修飾的常變數

    #include<stdio.h>
    int main()
    {
    	const int a = 10;
    	//int a = 20;//報錯
    	printf("%d\n", a);
    	return 0;
    }
    

    在C語言中,const修飾的a 本質是變數,但不能被修改,有常量的屬性。

  • define定義的識別符號常量

    定義識別符號不佔用記憶體,只是一個臨時的符號,預編譯後這個符號就不存在了。例如,對MAX的賦值在main函式之外定義的

    # include <stdio.h>
    
    # define MAX 100
    int main()
    {
    	printf("%d\n", MAX);
    	int a = MAX;
    	printf("%d\n", a);
    	return 0;
    }
    
    // 輸出結果
    // 100
    // 100
    
  • 列舉常量

    在定義時需要一一列舉出來的常量,例如三原色(紅色,綠色,藍色),性別(男生,女生,保密_);在定義是需要用到列舉關鍵字enum.

    # include <stdio.h>
    // 三原色
    enum Color
    {
    	RED,//紅色
    	GREEN,//綠色
    	BLUE,//藍色
    };
    
    int main()
    {
    	// 宣告一個列舉變數並初始化為列舉常量 RED
    	enum Color c = RED;
    
    	// 輸出列舉常量的值
    	printf("Color is: ");
    	// 使用 switch 語句來根據列舉變數的值輸出對應的字串
    	switch (c) {
    	case RED:
    		printf("RED\n");
    		break;
    	case GREEN:
    		printf("GREEN\n");
    		break;
    	case BLUE:
    		printf("BLUE\n");
    		break;
    	}
    	return 0;
    }
    

字串和註釋

字串

字串是由雙引號引起來的一串字元稱為字串字面值,簡稱字串

# include <stdio.h>

int main()
{
	printf("Hello,word!\n"); //字串為Hello,word!

	char arr1[] = "abcdef";
	char arr2[] = { 'a','b','c','d','e','f' };
	char arr3[] = { 'a','b','c','d','e','f' ,'\0'};
	// f10除錯,看一看三個陣列長什麼樣子
	// 如下圖所示
	// 字串的長度  -> strlen()
	//printf("%d\n", strlen(arr1));
	//printf("%d\n", strlen(arr2));
	//printf("%d\n", strlen(arr3));
	return 0;
}

// 輸出結果
//Hello, word!
//6
//38
//6
image-20240524101912159

透過上面的除錯緩解,我們可以看到字串結束的標誌是“\0”;並且我們還輸出了字串的長度,其中函式strlen()是用來求字串長度的一個函式。

註釋

  • 註釋可以梳理思路、
  • 對複雜的程式碼進行解釋
  • 寫程式碼的時候學註釋,是幫助自己也是幫助他人

注意:我們這裡跳過了一節跳脫字元,將在下一期更新_

相關文章