C語言快速學習筆記

學習網站:C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com)

這個網站知識完整,講解清晰。

在線C語言編程工具:菜鳥教程在線編輯器 (runoob.com)

國外學習網站:C語言介紹 - GeeksforGeeks

?算法知識網站:算法通關手冊(LeetCode) | 算法通關手冊(LeetCode) (itcharge.cn)

0.前言

靜態語言和動態語言

動態語言:是運行時才確定數據類型的語言,變量在使用之前無需申明類型,通常變量的值是被賦值的那個值的類型。比如Php、Asp、JavaScript、Python、Per等等。

靜態語言:是編譯時變量的數據類型就可以確定的語言,大多數靜態語言要求在使用變量之前必須聲明數據類型。比如Java、C、C++、C#等。

圖片來源:動態語言和靜態語言的區別(如python與c++)-CSDN博客

1.C語言的簡介

C 語言是一種通用的高級語言,最初是由丹尼斯·里奇在貝爾實驗室為開發 UNIX 操作系統而設計的。

1.1特點

  • 易學習
  • 結構化語言
  • 高效率
  • 底層處理
  • 使用多種計算機
  • 通用和便攜(General Purpose and Portable)

1.2? C與C++的區別

  • C++ 支持 OOP 范式,而 C 只有編程的過程概念。
  • C++ 具有異常處理功能。在 C 語言中,我們必須手動解析。
  • C 中沒有引用。

2 環境配置

教程:從零開始的vscode安裝及環境配置教程(C/C++)(Windows系統)_vscode搭建編譯器環境-CSDN博客

?C 代碼的編輯器 :VSCode(全稱:Visual Studio Code)是一款由微軟開發且跨平臺的免費源代碼編輯器,VSCode 開發環境非常簡單易用。

?C 代碼的編譯器 :最常用的免費可用的編譯器是 GNU 的 C/C++ 編譯器。

windows安裝編譯器:為了在 Windows 上安裝 GCC,您需要安裝 MinGW。

AI助手:

  1. GitHub Copilot
  2. Fitten Code

3、C 程序結構

C程序主要包括以下部分:

  • 預處理器指令:#include <stdio.h>?
  • 函數:int main()?是主函數
  • 變量:int a
  • 語句&表達式:{里面的}
  • 注釋:/*...*/?

4? C基本語法

4.1 C的令牌

C 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字符串值,或者是一個符號。

4.2 分號

在 C 程序中,分號是語句結束符。也就是說,每個語句必須以分號結束。它表明一個邏輯實體的結束。

4.3 注釋

兩種注釋方式

1、單行注釋: //

2、/* */?這種格式的注釋可以單行或多行。

4.4 標識符

C 標識符是用來標識變量、函數,或任何其他用戶自定義項目的名稱。一個標識符以字母 A-Z 或 a-z 或下劃線 _ 開始,后跟零個或多個字母、下劃線和數字(0-9)。C 標識符內不允許出現標點字符,比如 @、$ 和 %。C 是區分大小寫的編程語言。

4.5 常見的關鍵字

關鍵字說明
auto聲明自動變量
break跳出當前循環
case開關語句分支
char聲明字符型變量或函數返回值類型
const定義常量,如果一個變量被 const 修飾,那么它的值就不能再被改變
continue結束當前循環,開始下一輪循環
default開關語句中的"其它"分支
do循環語句的循環體
double聲明雙精度浮點型變量或函數返回值類型
else條件語句否定分支(與 if 連用)
enum聲明枚舉類型
extern聲明變量或函數是在其它文件或本文件的其他位置定義
float聲明浮點型變量或函數返回值類型
for一種循環語句
goto無條件跳轉語句
if條件語句
int聲明整型變量或函數
long聲明長整型變量或函數返回值類型
register聲明寄存器變量
return子程序返回語句(可以帶參數,也可不帶參數)
short聲明短整型變量或函數
signed聲明有符號類型變量或函數
sizeof計算數據類型或變量長度(即所占字節數)
static聲明靜態變量
struct聲明結構體類型
switch用于開關語句
typedef用以給數據類型取別名
unsigned聲明無符號類型變量或函數
union聲明共用體類型
void聲明函數無返回值或無參數,聲明無類型指針
volatile說明變量在程序執行中可被隱含地改變
while循環語句的循環條件

4.6、 C語言的數據類型

4.6.1 字、字節(Byte)、比特(bit)

比特bit是二進制位(Binary digit)的簡稱,一個二進制包含的信息量成為一比特bit。比特bit是計算機內部數據存儲的最小單位。二進制在效率和成本方面的優勢為全世界所接受,現在電腦所有的信息都是二進制的,就是0和1組成的。

字節Byte是計算機數據處理的最小單位,習慣上用大寫的B表示,每個字節有8個二進制位,其中最右邊的一位為最低位,最左邊的一位為最高位,每個二進制位的值不是0就是1。一個字節由8個二進制位組成。也就是1字節Byte等于8比特Bit

字和字節都是計算機的存儲單元字由若干個字節組成,一個字節是8個比特bit。字的位數叫做字長,即cpu一次處理二進制代碼的位數。字的長度與計算架構有關,比如32位機,一個字就是32位,換算成字節就是4字節;同樣的64位機,一個字就是64位,也就是8字節。字也是計算機一次處理數據的最大單位。

序號類型與描述
1基本數據類型
它們是算術類型,包括整型(int)、字符型(char)、浮點型(float)和雙精度浮點型(double)。
2枚舉類型:
它們也是算術類型,被用來定義在程序中只能賦予其一定的離散整數值的變量。
3void 類型:
類型說明符?void?表示沒有值的數據類型,通常用于函數返回值。
4派生類型:
:包括數組類型、指針類型和結構體類型。

數組類型和結構類型統稱為聚合類型。函數的類型指的是函數返回值的類型。

4.6.2 整數類型

類型存儲大小值范圍
char1 字節-128 到 127 或 0 到 255(ASIICA)
unsigned char1 字節0 到 255
signed char1 字節-128 到 127
int2 或 4 字節-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2 或 4 字節0 到 65,535 或 0 到 4,294,967,295
short2 字節-32,768 到 32,767
unsigned short2 字節0 到 65,535
long4 字節-2,147,483,648 到 2,147,483,647
unsigned long4 字節0 到 4,294,967,295

注意,各種類型的存儲大小與系統位數有關,但目前通用的以64位系統為主。

為了得到某個類型或某個變量在特定平臺上的準確大小,您可以使用?sizeof?運算符。表達式?sizeof(type)?得到對象或類型的存儲字節大小。

4.6.3 浮點類型

下表列出了關于標準浮點類型的存儲大小、值范圍和精度的細節:

類型存儲大小值范圍精度
float4 字節1.2E-38 到 3.4E+386 位有效位
double8 字節2.3E-308 到 1.7E+30815 位有效位
long double16 字節3.4E-4932 到 1.1E+493219 位有效位

頭文件 float.h 定義了宏,在程序中可以使用這些值和其他有關實數二進制表示的細節。

4.6.4 void 類型

序號類型與描述
1函數返回為空
C 中有各種函數都不返回值,或者您可以說它們返回空。不返回值的函數的返回類型為空。例如?void exit (int status);
2函數參數為空
C 中有各種函數不接受任何參數。不帶參數的函數可以接受一個 void。例如?int rand(void);
3指針指向 void
類型為 void * 的指針代表對象的地址,而不是類型。例如,內存分配函數?void *malloc( size_t size );?返回指向 void 的指針,可以轉換為任何數據類型。

4.6.5 類型轉換

類型轉換是將一個數據類型的值轉換為另一種數據類型的值。

C 語言中有兩種類型轉換:

  • 隱式類型轉換:隱式類型轉換是在表達式中自動發生的,無需進行任何明確的指令或函數調用。它通常是將一種較小的類型自動轉換為較大的類型,例如,將int類型轉換為long類型或float類型轉換為double類型。隱式類型轉換也可能會導致數據精度丟失或數據截斷。

  • 顯式類型轉換:顯式類型轉換需要使用強制類型轉換運算符(type casting operator),它可以將一個數據類型的值強制轉換為另一種數據類型的值。強制類型轉換可以使程序員在必要時對數據類型進行更精確的控制,但也可能會導致數據丟失或截斷。

4.7 C變量基本變量

變量的名稱可以由字母、數字和下劃線字符組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為 C 是大小寫敏感的

類型描述
char通常是一個字節(八位), 這是一個整數類型。
int整型,4 個字節,取值范圍 -2147483648 到 2147483647。
float

單精度浮點值。單精度是這樣的格式,1位符號,8位指數,23位小數。

double

雙精度浮點值。雙精度是1位符號,11位指數,52位小數。

void表示類型的缺失。

4.7.1 變量定義

type value

type?表示變量的數據類型,可以是整型、浮點型、字符型、指針等,也可以是用戶自定義的對象。

variable_list?可以由一個或多個變量的名稱組成,多個變量之間用逗號,分隔,變量由字母、數字和下劃線組成,且以字母或下劃線開頭。

比如:

  • int age;
  • char grade;?
  • int i,j,k;
  • >>>

4.7.2 變量初始化

type variable_name = value;

其中,type?表示變量的數據類型,variable_name?是變量的名稱,value?是變量的初始值。

4.7.3 后續初始化變量

type variable_name; ? ?// 變量定義
variable_name = new_value; ? ?// 變量初始化

注意:為了避免不確定的行為和錯誤,建議在使用變量之前進行初始化。

4.7.4 變量不初始化

對于全局變量和靜態變量(在函數內部定義的靜態變量和在函數外部定義的全局變量),它們的默認初始值為零。

以下是不同類型的變量在沒有顯式初始化時的默認值:

  • 整型變量(int、short、long等):默認值為0。
  • 浮點型變量(float、double等):默認值為0.0。
  • 字符型變量(char):默認值為'\0',即空字符。
  • 指針變量:默認值為NULL,表示指針不指向任何有效的內存地址。
  • 數組、結構體、聯合等復合類型的變量:它們的元素或成員將按照相應的規則進行默認初始化,這可能包括對元素遞歸應用默認規則。

需要注意的是,局部變量(在函數內部定義的非靜態變量)不會自動初始化為默認值,它們的初始值是未定義的(包含垃圾值)。因此,在使用局部變量之前,應該顯式地為其賦予一個初始值。

4.7.5? 變量聲明

變量的聲明有兩種情況:

  • 1、一種是需要建立存儲空間的。例如:int a 在聲明的時候就已經建立了存儲空間。
  • 2、另一種是不需要建立存儲空間的,通過使用extern關鍵字聲明變量名而不定義它。 例如:extern int a 其中變量 a 可以在別的文件中定義的。
  • 除非有extern關鍵字,否則都是變量的定義。

4.8 C 常量

常量是固定值,在程序執行期間不會改變。這些固定的值,又叫做字面量

常量可以是任何的基本數據類型,比如整數常量、浮點常量、字符常量,或字符串字面值,也有枚舉常量。

4.8.1 整數常量

整數常量可以是十進制、八進制或十六進制的常量。前綴指定基數:0x 或 0X 表示十六進制,0 表示八進制,不帶前綴則默認表示十進制。

整數常量也可以帶一個后綴,后綴是 U 和 L 的組合,U 表示無符號整數(unsigned),L 表示長整數(long)。后綴可以是大寫,也可以是小寫,U 和 L 的順序任意。

4.8.2 字符常量

字符常量是括在單引號中,例如,'x' 可以存儲在?char?類型的簡單變量中。

轉義序列含義
\\\ 字符
\'' 字符
\"" 字符
\?? 字符
\a警報鈴聲
\b退格鍵
\f換頁符
\n換行符
\r回車
\t水平制表符
\v垂直制表符
\ooo一到三位的八進制數
\xhh . . .一個或多個數字的十六進制數

?4.8.3 字符串常量

字符串字面值或常量是括在雙引號?" "?中的。一個字符串包含類似于字符常量的字符:普通的字符、轉義序列和通用的字符。

4.8.4 定義常量

在 C 中,有兩種簡單的定義常量的方式:

  1. 使用?#define?預處理器: #define 可以在程序中定義一個常量,它在編譯時會被替換為其對應的值。
  2. 使用?const?關鍵字:const 關鍵字用于聲明一個只讀變量,即該變量的值不能在程序運行時修改。

#define 預處理器:#define 常量名 常量值 ->?#define PI 3.14159

const 關鍵字:const 數據類型 常量名 = 常量值; ->?const int MAX_VALUE = 100;

注意:建議使用 const 關鍵字來定義常量,因為它具有類型檢查和作用域的優勢,而 #define 僅進行簡單的文本替換,可能會導致一些意外的問題。

4.9 存儲類

存儲類定義 C 程序中變量/函數的存儲位置、生命周期和作用域。

這些說明符放置在它們所修飾的類型之前。

下面列出 C 程序中可用的存儲類:

  • auto
  • register
  • static
  • extern

4.9.1 auto類

auto?存儲類是所有局部變量默認的存儲類。

定義在函數中的變量默認為 auto 存儲類,這意味著它們在函數開始時被創建,在函數結束時被銷毀。

4.9.2? register 存儲類

register?存儲類用于定義存儲在寄存器中而不是 RAM 中的局部變量。register 存儲類定義存儲在寄存器,所以變量的訪問速度更快,但是它不能直接取地址,因為它不是存儲在 RAM 中的。在需要頻繁訪問的變量上使用 register 存儲類可以提高程序的運行速度。

register int  miles;

4.9.3??static 存儲類

static int count=10;        /* 全局變量 - static 是默認的 */

static?存儲類指示編譯器在程序的生命周期內保持局部變量的存在,而不需要在每次它進入和離開作用域時進行創建和銷毀。因此,使用 static 修飾局部變量可以在函數調用之間保持局部變量的值。

static 修飾符也可以應用于全局變量。當 static 修飾全局變量時,會使變量的作用域限制在聲明它的文件內。

全局聲明的一個 static 變量或方法可以被任何函數或方法調用,只要這些方法出現在跟 static 變量或方法同一個文件中。

靜態變量在程序中只被初始化一次,即使函數被調用多次,該變量的值也不會重置。

4.9.4??extern 存儲類

extern void write_extern();

extern?存儲類用于定義在其他文件中聲明的全局變量或函數。當使用 extern 關鍵字時,不會為變量分配任何存儲空間,而只是指示編譯器該變量在其他文件中定義。

4.10 運算符

在 C 語言中,運算符是表示要對一個或多個操作數執行的操作的符號。它們是 C 編程的基本組件

運算符是一種告訴編譯器執行特定的數學或邏輯操作的符號。C 語言內置了豐富的運算符,并提供了以下類型的運算符:

C 語言提供了廣泛的運算符,根據其功能可以分為 6 種類型:

  1. 算術運算符
  2. 關系運算符
  3. 邏輯運算符
  4. 位運算符
  5. 賦值運算符
  6. 雜項運算符

4.10.1 算術運算符

The arithmetic operators are used to perform arithmetic/mathematical operations on operands. There are 9 arithmetic operators in C language(算術運算符用于對操作數執行算術/數學運算。C語言中有9個算術運算符:

S.No.

Symbol

OperatorDescription

Syntax

1

+

Plus

Adds two numeric values. 把兩個操作數相加

a + b

2

Minus

Subtracts right operand from left operand.第一個操作數減第二個操作數

a – b

3

*

Multiply

Multiply two numeric values.兩個操作數相乘

a * b

4

/

Divide

Divide two numeric values. 第一個操作數除以第二個操作數

a / b

5

%

Modulus

Returns the remainder after diving the left operand with the right operand.?

返回左操作數除以右操作數后的余數。

a % b

6

+

Unary Plus

Used to specify the positive values.用于指定正值。

+a

7

Unary Minus

Flips the sign of the value.

翻轉值的符號。

-a

8

++

Increment

Increases the value of the operand by 1.?將操作數的值增加1

a++

9

Decrement

Decreases the value of the operand by 1.?將操作數的值減少1。

a–

4.10.2?關系運算符(Logical Operator

C 中的關系運算符用于比較兩個操作數。所有這些運算符都是二進制運算符,它們作為比較的結果返回真值或假值。(The relational operators in C are used for the comparison of the two operands. All these operators are binary operators that return true or false values as the result of comparison.)

運算符描述實例
==檢查兩個操作數的值是否相等,如果相等則條件為真。(A == B) 為假。
!=檢查兩個操作數的值是否相等,如果不相等則條件為真。(A != B) 為真。
>檢查左操作數的值是否大于右操作數的值,如果是則條件為真。(A > B) 為假。
<檢查左操作數的值是否小于右操作數的值,如果是則條件為真。(A < B) 為真。
>=檢查左操作數的值是否大于或等于右操作數的值,如果是則條件為真。(A >= B) 為假。
<=檢查左操作數的值是否小于或等于右操作數的值,如果是則條件為真。(A <= B) 為真。
// C program to illustrate the relational operators
#include <stdio.h>int main()
{int a = 25, b = 5;// using operators and printing resultsprintf("a < b  : %d\n", a < b);printf("a > b  : %d\n", a > b);printf("a <= b: %d\n", a <= b);printf("a >= b: %d\n", a >= b);printf("a == b: %d\n", a == b);printf("a != b : %d\n", a != b);return 0;
}

4.10.3?C 語言中的邏輯運算符

邏輯運算符用于組合兩個或多個條件/約束,或補充所考慮的原始條件的評估。邏輯運算符操作的結果是一個布爾值,可以是?true?或?false

運算符描述實例
&&稱為邏輯與運算符。如果兩個操作數都非零,則條件為真。(A && B) 為假。
||稱為邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為真。(A || B) 為真。
!稱為邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件為真則邏輯非運算符將使其為假。!(A && B) 為真。
// C program to illustrate the logical operators
#include <stdio.h>int main()
{int a = 25, b = 5;// using operators and printing resultsprintf("a && b : %d\n", a && b);printf("a || b : %d\n", a || b);printf("!a: %d\n", !a);return 0;
}

4.10.4??位運算符(Bitwise Operators

按位運算符用于對操作數執行位級操作。首先將運算符轉換為位級,然后對操作數執行計算。加法、減法、乘法等數學運算可以在位級別執行,以加快處理速度。

S.No.

Symbol

OperatorDescription

Syntax

1

&

Bitwise AND/按位與

Performs bit-by-bit AND operation and returns the result./對兩個操作數的每一位執行邏輯與操作。

解釋:如果兩個相應的位都為 1,則結果為 1,否則為 0。

0&0=0; ??
0&1=0; ? ?
1&0=0; ? ??
1&1=1;

a & b

2

|

Bitwise OR/按位或

Performs bit-by-bit OR operation and returns the result./對兩個操作數的每一位執行邏輯或操作。

解釋:如果兩個相應的位都為 0,則結果為 0,否則為 1。

0|0=0; ??
0|1=1; ??
1|0=1; ? ?
1|1=1;

a | b

3

^

Bitwise XOR/按位異或

Performs bit-by-bit XOR operation and returns the result./對兩個操作數的每一位執行邏輯異或操作。

解釋:如果兩個相應的位值相同,則結果為 0,否則為 1。

0^0=0; ??
0^1=1; ??
1^0=1; ?
1^1=0;

a ^ b

4

~

Bitwise First Complement/逐位第一補碼Flips all the set and unset bits on the number./

對操作數的每一位執行邏輯取反操作。

解釋:即將每一位的 0 變為 1,1 變為 0。

~1=-2; ??
~0=-1;

~a

5

<<

Bitwise Leftshift/逐位左移Shifts the number in binary form by one place in the operation and returns the result./將操作數的所有位向左移動指定的位數。左移 n 位相當于乘以 2 的 n 次方。a << b

6

>>

Bitwise Rightshilft/逐位右移Shifts the number in binary form by one place in the operation and returns the result./

將操作數的所有位向右移動指定的位數。右移n位相當于除以 2 的 n 次方。

a >> b

?4.10.5 賦值運算符(Assignment Operators)

賦值運算符用于為變量賦值。賦值運算符左側的操作數是變量,右側的操作數是值。右側的值必須與左側的變量屬于相同的數據類型,否則編譯器會報錯。

賦值運算符可以與 C 中的其他運算符組合使用,從而使用單個運算符提供多項運算。這些運算符稱為復合運算符。

運算符描述實例
=簡單的賦值運算符,把右邊操作數的值賦給左邊操作數C = A + B 將把 A + B 的值賦給 C
+=加且賦值運算符,把右邊操作數加上左邊操作數的結果賦值給左邊操作數C += A 相當于 C = C + A
-=減且賦值運算符,把左邊操作數減去右邊操作數的結果賦值給左邊操作數C -= A 相當于 C = C - A
*=乘且賦值運算符,把右邊操作數乘以左邊操作數的結果賦值給左邊操作數C *= A 相當于 C = C * A
/=除且賦值運算符,把左邊操作數除以右邊操作數的結果賦值給左邊操作數C /= A 相當于 C = C / A
%=求模且賦值運算符,求兩個操作數的模賦值給左邊操作數C %= A 相當于 C = C % A
<<=左移且賦值運算符C <<= 2 等同于 C = C << 2
>>=右移且賦值運算符C >>= 2 等同于 C = C >> 2
&=按位與且賦值運算符C &= 2 等同于 C = C & 2
^=按位異或且賦值運算符C ^= 2 等同于 C = C ^ 2
|=按位或且賦值運算符C |= 2 等同于 C = C | 2
// C program to illustrate the arithmatic operators
#include <stdio.h>int main()
{int a = 25, b = 5;// using operators and printing resultsprintf("a = b: %d\n", a = b);printf("a += b: %d\n", a += b);printf("a -= b: %d\n", a -= b);printf("a *= b: %d\n", a *= b);printf("a /= b: %d\n", a /= b);printf("a %= b: %d\n", a %= b);printf("a &= b: %d\n", a &= b);printf("a |= b: %d\n)", a |= b);printf("a >>= b: %d\n", a >> b);printf("a <<= b: %d\n", a << b);return 0;
}

4.10.6? 其它運算符(other Operators)

C 語言中還有一些其他運算符可用于執行某些特定任務。

運算符描述實例
sizeof()返回變量的大小。sizeof(a) 將返回 4,其中 a 是整數。
&返回變量的地址。&a; 將給出變量的實際地址。
*指向一個變量。*a; 將指向一個變量。
? :條件表達式如果條件為真 ? 則值為 X : 否則值為 Y

點 (.) 和箭頭 (->) 運算符:

  • 成員運算符用于引用類、結構和聯合的單個成員。
  • 點運算符應用于實際對象。
  • 箭頭運算符與指向對象的指針一起使用。

4.10.7 C 中的一元、二元和三元運算符

運算符還可以根據其處理的操作數數量分為三種類型:

  1. 一元運算符:處理單個操作數的運算符。
  2. 二進制運算符:處理兩個操作數的運算符。
  3. 三元運算符:處理三個操作數的運算符。

4.10.8??C 中的運算符優先級和關聯性

運算符的優先級確定表達式中項的組合。這會影響到一個表達式如何計算。某些運算符比其他運算符有更高的優先級,例如,乘除運算符具有比加減運算符更高的優先級。

將按運算符優先級從高到低列出各個運算符,具有較高優先級的運算符出現在表格的上面,具有較低優先級的運算符出現在表格的下面。在表達式中,較高優先級的運算符會優先被計算。

C 中的運算符優先級

運算符優先級確定當表達式具有多個運算符時,首先計算哪個運算符。例如,100-2 * 30將產生 40,因為它被求值為100 - (2 * 30)而不是(100-2)* 30。原因是乘法*的優先級高于減法(-)。

C 中的關聯性

是指當表達式中有兩個或多個具有相同優先級的運算符時,這些運算符的執行順序。例如,乘法和除法算術運算符具有相同的優先級,假設我們有一個表達式5 * 2/10,這個表達式將被計算為(5 * 2)/ 10,因為這些運算符的關聯性是從左到右。類似地,20/2 * 5將被計算為(20/2)*5

類別?運算符?結合性?
后綴?() [] -> . ++ - - ?從左到右?
一元?+ - ! ~ ++ - - (type)* & sizeof?從右到左?
乘除?* / %?從左到右?
加減?+ -?從左到右?
移位?<< >>?從左到右?
關系?< <= > >=?從左到右?
相等?== !=?從左到右?
位與 AND?&?從左到右?
位異或 XOR?^?從左到右?
位或 OR?|?從左到右?
邏輯與 AND?&&?從左到右?
邏輯或 OR?||?從左到右?
條件??:?從右到左?
賦值?= += -= *= /= %=>>= <<= &= ^= |=?從右到左?
逗號?,?從左到右?

4.11? 判斷

C 語言中條件語句的類型(Types of Conditional Statements in C)

  1. if 語句(Statement)
  2. if-else 語句
  3. 嵌套(Nested) if 語句
  4. if-else-if 梯子
  5. switch 語句
  6. 條件運算符——?? : 運算符(三元運算符)
  7. 跳轉語句:
  • break
  • continue
  • goto
  • return

if-else-if 梯子流程圖

?switch 語句流程圖

?條件運算符

(condition) ? [true_statements] : [false_statements];

?break

?continue

4.12? C語言中的循環(C – Loops)

Loops in programming are used to repeat a block of code until the specified condition is met. A loop statement allows programmers to execute a statement or group of statements multiple times without repetition of code.--編程中的循環用于重復代碼塊,直到滿足指定的條件。循環語句允許程序員多次執行一個語句或一組語句,而無需重復代碼

There are mainly two types of loops(循環) in C:

  1. 入口(Entry)控制回路:在入口控制回路中,在進入回路主體之前檢查測試條件。For 循環和 While 循環是 Entry 控制的循環。
  2. 退出受控循環:?在出口控制回路中,測試條件在回路主體的末尾進行評估。循環體將至少執行一次,無論條件是真還是假。do-while 循環是 Exit。
循環類型描述
while 循環當給定條件為真時,重復語句或語句組。它會在執行循環主體之前測試條件。
for 循環多次執行一個語句序列,簡化管理循環變量的代碼。
do...while 循環除了它是在循環主體結尾測試條件外,其他與 while 語句類似。
嵌套循環您可以在 while、for 或 do..while 循環內使用一個或多個循環。

for 循環(Loop)

Syntax(語法):

for (initialize expression(初始化表達式); test expression(測試表達式); update expression(更新表達式))
{//// body of for loop//
}

example:

for(int i = 0; i < n; ++i)
{printf("Body of for loop which will execute till n");
}

While 循環(Loop)

?語法(Syntax):

initialization_expression;while (test_expression)
{// body of the while loopupdate_expression;
}

?Example:

// C program to illustrate 
// while loop
#include <stdio.h>// Driver code
int main()
{
// Initialization expression
int i = 2; // Test expression
while(i < 10)
{// loop bodyprintf( "Hello World\n"); // update expressioni++;
} return 0;
}

?do-while 循環

循環主體都將至少執行一次

?Syntax:
?

initialization_expression;
do
{// body of do-while loopupdate_expression;} while (test_expression);

?Example:

// C program to illustrate 
// do-while loop
#include <stdio.h>// Driver code
int main()
{
// Initialization expression
int i = 2; do
{// loop bodyprintf( "Hello World\n"); // Update expressioni++;// Test expression
} while (i < 1); return 0;
}

循環控制語句

循環控制語句改變你代碼的執行順序。通過它你可以實現代碼的跳轉。

C 提供了下列的循環控制語句。點擊鏈接查看每個語句的細節。

控制語句
  • 描述
break 語句終止循環或?switch?語句,程序流將繼續執行緊接著循環或 switch 的下一條語句。
continue 語句告訴一個循環體立刻停止本次循環迭代,重新開始下次循環迭代。
goto 語句將控制轉移到被標記的語句。但是不建議在程序中使用 goto 語句。

?4.13? 函數(Function)

????????C 中的函數是一組語句,調用時執行某些特定任務。它是 C 程序的基本構建塊,提供模塊化和代碼可重用性。函數的編程語句括在{ } 括號內,具有特定含義并執行特定操作。在其他語言中,它們也稱為子例程或過程。

????????接下來將學習函數、函數定義、聲明、參數和形參、返回值等等。

????????函數的組成包括:

  • 返回類型:一個函數可以返回一個值。return_type?是函數返回的值的數據類型。有些函數執行所需的操作而不返回值,在這種情況下,return_type 是關鍵字?void
  • 函數名稱:這是函數的實際名稱。函數名和參數列表一起構成了函數簽名。
  • 參數:參數就像是占位符。當函數被調用時,您向參數傳遞一個值,這個值被稱為實際參數。參數列表包括函數參數的類型、順序、數量。參數是可選的,也就是說,函數可能不包含參數。
  • 函數主體:函數主體包含一組定義函數執行任務的語句。

4.13.1 函數的聲明(Declarations)

語法(Syntax)

return_type name_of_the_function (parameter_1, parameter_2);

?注意:聲明函數時,參數名稱不是強制性的。我們也可以不使用數據變量的名稱來聲明函數。

4.13.2??函數的定義

?4.13.3 函數的調用

?

?注意:函數調用是將程序控制帶到函數定義處的必要操作。如果沒有調用,函數語句將不會被執行。

代碼示例:
?

// C program to show function
// call and definition
#include <stdio.h>// Function that takes two parameters 
// a and b as inputs and returns 
// their sum
int sum(int a, int b) 
{ return a + b; 
}// Driver code
int main()
{// Calling sum function and // storing its value in add variableint add = sum(10, 30);printf("Sum is: %d", add);return 0;
}

4.13.4 函數類型

1、庫函數

庫函數也稱為“內置函數”。編譯器包中已經包含這些函數,每個函數都有特定含義,并包含在包中。內置函數的優點是無需定義即可直接使用,而用戶定義函數必須在使用前聲明和定義。

比如:

pow()、sqrt()、strcmp()、strcpy() 等。

?C 庫函數的優點

  • C 庫函數易于使用且經過優化,性能更佳。
  • C 庫函數節省了大量時間,即函數開發時間。
  • C 庫函數很方便,因為它們總是有效。

2、用戶定義的函數?

????????程序員創建的函數稱為用戶定義函數或“定制函數”。用戶定義函數可以根據程序員的需求進行改進和修改。

用戶定義函數的優點
  • 可變功能可以根據需要進行修改。
  • 這些函數的代碼可以在其他程序中重復使用。
  • 這些功能易于理解、調試和維護。

4.13.5 函數參數類型

調用函數時傳遞的數據稱為實際參數。

形式參數是函數聲明中提到的變量和數據類型。

?兩種方式向 C 函數傳遞參數:

  • ?按值傳遞

????????此方法中的參數傳遞將值從實際參數復制到形式函數參數中。因此,函數內部所做的任何更改都不會反映在調用者的參數中。?

  • 通過引用傳遞(指針)

????????調用者的實際參數和函數的實際參數指向相同的位置,因此函數內部所做的任何更改都會反映在調用者的實際參數中。

C語言函數的不足:

  1. 無法返回多個值。
  2. 由于堆棧幀分配和程序控制傳輸而導致的內存和時間開銷。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38090.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習】機器學習的重要方法——線性回歸算法深度探索與未來展望

歡迎來到 破曉的歷程博客 引言 在數據科學日益重要的今天&#xff0c;線性回歸算法以其簡單、直觀和強大的預測能力&#xff0c;成為了眾多領域中的基礎工具。本文將詳細介紹線性回歸的基本概念、核心算法&#xff0c;并通過五個具體的使用示例來展示其應用&#xff0c;同時探…

使用conda創建虛擬環境,并將虛擬環境加載到jupyter notebook中【已解決】

使用conda創建虛擬環境&#xff0c;并將虛擬環境加載到jupyter notebook中【已解決】

免費分享:2000-2021年全國分省250mNDVI數據集(附下載方法)

NDVI (Normalized Difference Vegetation Index)歸一化植被指數&#xff0c;又稱標準化植被指數。是目前應用最廣泛的植被指數&#xff0c;與植被的分布呈線性相關&#xff0c;是植被生長狀態和空間分布的最佳指示因子&#xff0c;也是遙感估算植被覆蓋度(FVC&#xff0c;Fract…

深入學習 Kafka(2)- Partition 和 Topic

1. Partition的作用 Topic是邏輯的概念&#xff0c;Partition是物理的概念&#xff1a; Partition 對一個 Topic 的消息進行物理上的分離&#xff0c;讓消息可以分布在不同的實體機器上&#xff0c;可以提升系統吞吐量和并行處理能力。每個Partition可以有多個副本&#xff08…

交換機06_vlantrunk

一、虛擬局域網vlan 目的&#xff1a;劃分廣播域 思科設備如何去配置vlan 創建vlan設置對應的接口模式將接口加入vlan全局模式配置vlan vlan 2 設置接口模式&#xff08;目前需要將接口加入對應vlan&#xff0c;一般用于連接PC&#xff09; en conf t int f0/0 switchport m…

SAP S/4 FICO批量創建銀行主數據(銀行主數據/賬戶主數據)開發說明書(包括測試樣例、程序代碼僅作參考,不保證一定可以運行)

開發通用說明 新增程序——批導工具處理邏輯如下:自定義批導程序():點擊“執行”按鈕若數據錯誤或重復,先檢查導入的銀行賬號是否已在系統中存在,若已存在則狀態顯示為紅燈,并在消息反饋列提示“該銀行已經存在”。查重后若銀行賬戶為新增賬戶,但導入模板提供的數據有缺…

Spring Boot中獲取請求參數的幾種方式詳解

Spring Boot中獲取請求參數的幾種方式詳解 在Web開發中&#xff0c;處理HTTP請求是一項基本且核心的任務。Spring Boot作為目前最流行的Java Web開發框架之一&#xff0c;提供了多種簡便的方式來獲取和處理請求參數。本文將深入探討在Spring Boot中獲取請求參數的幾種方式&…

學會python——用python編寫一個計算機程序(python實例十六)

目錄 1.認識Python 2.環境與工具 2.1 python環境 2.2 Visual Studio Code編譯 3.編寫計算器程序 3.1 代碼構思 3.2 代碼實例 3.3 運行結果 4.總結 1.認識Python Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。 Python 的設計具有很強的可讀…

【C語言】刷題筆記 Day1

多刷題 多思考 【題目1】 實現字母的大小寫轉換&#xff0c;實現多組輸入輸出 1. getchar 為輸入函數&#xff0c;EOF&#xff08;end of file&#xff09;為文件結束標志&#xff0c;通常為文件結束的末尾。 2. 題目中要求實現多組輸入輸出&#xff0c;那我們用 while 循…

RH442 計算機測量單位的換算

計算機測量單位的換算 計算機測量單位的換算 計算機測量單位的換算 在本練習中&#xff0c;您要將性能指標從一個單位換算成另一個單位。 成果 您要學會性能指標單位的換算。 以 student 用戶登錄 workstation 虛擬機&#xff0c;密碼為 student。 在 workstation上運行 l…

初步認識 B樹(B-tree)

定義 B樹&#xff08;B-tree&#xff09;是一種自平衡的多路搜索樹&#xff0c;廣泛應用于數據庫和文件系統的索引結構中。它能夠保持數據有序&#xff0c;同時提供高效的插入、刪除和查找操作。 一、基本概念 定義&#xff1a;B樹是一種自平衡的樹結構&#xff0c;能夠保持…

python+django 環境搭建以及post接口封裝

1、搭建pythondjango環境 python 3.7.9的版本 具體參考之前的安裝教程 django 使用 pip install django 會自動安裝 檢驗安裝版本&#xff1a; python -m django --version 2、創建django項目 django-admin startproject projectname 啟動項目&#xff1a;python manage.py…

011-GeoGebra基礎篇-驗證泰勒斯定理(動點在指定曲線上移動)

注意咯&#xff0c;如果說前期的文章隨便看看就行&#xff0c;但從這篇往后的內容&#xff0c;則需要君略微動動brain了。當然&#xff0c;后續的文章如果感覺吃力的話&#xff0c;可以看看本專欄序號比較小的文章&#xff0c;可能會對你開卷有益。 若A, B, C是圓周上的三點&am…

Windows PowerShell 添加新配置文件(打開對應的目錄,并執行命令)

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe ./redis-server.exe %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe yarn dev 人工智能學習網站 https://chat.xutongbao.top

數據分析如何在企業中發揮價值

數據分析如何在企業中發揮價值 數據分析的目的是什么為什么怎么做做什么 思考問題流程確認問題拆解問題量化分析 分析數據流程收集數據處理數據制作圖表 全流程 數據分析的目的 是什么 通過數據量化企業當前的經營現狀或業務事實&#xff0c;將業務細節轉換為具體數據&#xf…

通過容器啟動QAnything知識庫問答系統

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或數據庫的本地知識庫問答系統&#xff0c;可斷網安裝使用。目前已支持格式&#xff1a;PDF(pdf)&#xff0c;Word(docx)&#xff0c;PPT(pptx)&#xff0c;XLS(xlsx)&#xff0c;Markdown(md)&…

LabVIEW汽車轉向器測試系統

紹了一種基于LabVIEW的汽車轉向器測試系統。該系統集成了數據采集、控制和分析功能&#xff0c;能夠對轉向器進行高效、準確的測試。通過LabVIEW平臺&#xff0c;實現了對轉向器性能參數的實時監測和分析&#xff0c;提升了測試效率和數據精度&#xff0c;為汽車轉向器的研發和…

CAM350刪除鋪銅?

CAM350刪除鋪銅&#xff1f; 1、選擇菜單欄Add 2、選擇Polygon Void→Line... 3、然點擊需要操作的銅箔&#xff0c;使其高亮 4、用鼠標框選需要刪除的部分&#xff0c;然后右擊 5、刪除后如下圖所示 The Layer Bar controls are part of the new Navigation Pane and can also…

OpenStack開源虛擬化平臺(二)

目錄 三、對象存儲服務Swift&#xff08;一&#xff09;Swift特性&#xff08;二&#xff09;應用場景&#xff08;三&#xff09;Swift主要組件&#xff08;四&#xff09;Swift基本原理&#xff08;五&#xff09;實例分析 四、鏡像服務Glance&#xff08;一&#xff09;Glan…

JAVA-Redis數據結構—跳躍表(Skiplist)【包含Java實現詳情代碼】

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…