C语言基础入门教程
目錄
第一章 ? 初識C語言
1.C語言基礎知識
2.C語言的構成
3.第一個C語言程序
4.數據類型
5.變量
5.1定義變量的方法
5.2變量的分類
?5.3變量的使用
5.4變量的作用域和生命周期
6.常量
6.1符號常量
6.2字符串常量
6.3字符常量
6.4實型常量
6.5整型常量
6.6其它常量
7.字符串+轉義字符+注釋
7.1字符串
8.選擇語句
9.循環語句
10.函數
11.數組
11.1數組的定義
11.2數組的下標
?11.3數組的使用
12.操作符
13.常見關鍵字
14.#define定義常量和宏
15.指針
15.2指針的大小
16.結構體
第一章 ? 初識C語言
旨在大概了解一下C語言中的主要內容,后面的章節會詳細講解每一個內容。
詳細內容:
https://blog.csdn.net/YLG_lin/article/details/126159445
C語言入門教程合集_記憶&碎片的博客-CSDN博客_c教程
1.C語言基礎知識
(1)結構緊湊,使用方便,程序執行效率高。
(2)有9種控制語句,32個關鍵字和34種運算符。
(3)數據結構豐富,可實現鏈表,樹,棧等復雜的運算。
(4)語法不太嚴格,程序設計自由度大。
(5)程序可直接訪問物理地址,對硬件操作,移植性好。
2.C語言的構成
(1)源程序由函數構成,每個函數完成相對獨立的功能。
(2)每個源程序中必須有且只能有一個主函數(main函數),可以放在任意位置,但程序總是從主函數開始執行。
(3) 函數體:在函數后面用一對花括號{}括起來的部分。
(4)每個語句以分號結束,但預處理命令,函數頭之后不能加分號。
(5)注釋:括在/*與*/之間,(/與*之間沒有空格),允許出現在程序的任意位置。(本文7.3中有提及)
(6)預處理命令:以#開頭的語句。
3.第一個C語言程序
#include <stdio.h>//頭文件 int main() {printf("hello world\n");printf("he he\n");return 0; } //main函數是程序的入口 //一個工程中main函數有且僅有一個 //\n為換行4.數據類型
char //字符數據類型 short //短整型 int //整型 long //長整型 long long //更長的整型 float //單精度浮點型 double //雙精度浮點型 豐富的數據類型,更加豐富的表達生活中的各種值。 每種數據類型的大小: #include<stdio.h>int main() {printf("%d\n", sizeof(char)); //1(字節/byte)printf("%d\n", sizeof(short)); //2printf("%d\n", sizeof(int)); //4printf("%d\n", sizeof(long)); //4printf("%d\n", sizeof(long long)); //8printf("%d\n", sizeof(float)); //4printf("%d\n", sizeof(double)); //8printf("%d\n", sizeof(long double)); //8return 0; }1byte(字節)=8bit(位)
1kb=1024byte
1mb=1024kb
1gb=1024mb
1tb=1024gb
.......
5.變量
5.1定義變量的方法
#include <stdio.h>int main() {int age = 20;float weight = 57.0;char ch = 'w';return 0; }5.2變量的分類
?全局變量&局部變量
#include<stdio.h>int age = 20; //這是全局變量 {}外部定義的 int main() {int age = 10; //這是局部變量 {}內部定義的printf("age = %d\n", age); //當局部變量與全局變量名字沖突時,局部變量優先使用。//不建議不全局變量與局部變量的名字寫成一樣的。return 0; }?當局部變量與全局變量名字沖突時,局部變量優先使用,所以輸出為10;
?5.3變量的使用
#include<stdio.h>int main(){int a = 0;int b = 0;int sum = 0;scanf("%d %d", &a, &b);//scanf函數 是輸入函數。具體用法詳看后面章節sum = a + b;printf("%d\n", sum);//printf函數是輸出函數return 0; }5.4變量的作用域和生命周期
作用域:通常來說,一段程序代碼中所用到的名字并不總是有效的,而限定這個名字的可用性的代碼范圍就是這個名字的作用域。
局部變量:作用域為變量所在的局部范圍。
全局變量: 作用域為整個工程。
生命周期:變量的生命周期指的是變量的創建到變量的銷毀之間的一個時間段。
局部變量生命周期:進入作用域生命周期開始,出作用域生命周期結束。
全局變量生命周期:整個程序的生命周期。
6.常量
?定義:在程序運行中,其值不能被改變的量
6.1符號常量
符號常量是由預處理命令“define”定義的常量,在c程序中可用標識符代表一個常量。
6.2字符串常量
字符串常量是用“ ”括起來的一個或者一串字符。
6.3字符常量
一個字符常量代表ASCII碼字符集里的一個字符,在程序中用‘ ’括起來,區分大小寫。
特殊的字符常量:即轉義字符。其中\是轉義的意思,后面跟不同的字符表示不同的意思。
\n(換行)
\\(代表反斜杠\)
ddd:1-3位八進制數所代表的一個ASCII字符。
xxh:1-2位十六進制數所代表的一個ASCII字符
6.4實型常量
表示形式:小數形式和指數形式。
書寫形式:
1,十進制小數形式:小數點兩邊必須有數字。
2,指數形式:e前必須有數字(不需是整數),e后面必須為整數。
6.5整型常量
?表示形式:十進制整型常量,八進制整型常量,十六進制整型常量。
書寫形式:
1,十進制整型常量:基本數字范圍為0-9;
2,八進制整型常量:以0(數字0)開頭,基本數字范圍為0-7;
3,十六進制整型常量:以0X(數字0)開頭,基本數字范圍為0-15,其中10-15寫為a-f或A-F;
6.6其它常量
const 修飾的常變量 #define 定義的標識符常量 枚舉常量 #include <stdio.h> //舉例 enum Color {bule,green,yellow //最后一個不用逗號隔開 }; //括號中的bule,green,yellow是枚舉常量 int main() {//字面常量演示3.14;//字面常量1000;//字面常量//const 修飾的常變量const float pai = 3.14f; ? //這里的pai是const修飾的常變量pai = 5.14;//是不能直接修改的!//#define的標識符常量 演示#define MAX 100printf("max = %d\n", MAX);//枚舉常量演示printf("%d\n", bule);printf("%d\n", green);printf("%d\n", yellow);//注:枚舉常量的默認是從0開始,依次向下遞增1的return 0; } 上面例子上的 pai 被稱為 const 修飾的常變量, const 修飾的常變量在C語言中只是在語法層面限制了,變量 pai 不能直接被改變,但是 pai 本質上還是一個變量的,所以叫常變量。7.字符串+轉義字符+注釋
7.1字符串
"hello world\n"
這種由雙引號(Double Quote)引起來的一串字符稱為字符串字面值(String Literal),或者簡稱字符串。 注:字符串的結束標志是一個 \0 的轉義字符。在計算字符串長度的時候 \0 是結束標志,不算作字符串的內容。7.2轉義字符
轉義字符顧名思義就是轉變意思 \? 在書寫連續多個問號時使用,防止他們被解析成三字母詞 \' 用于表示字符常量' \“ 用于表示一個字符串內部的雙引號 \\ 用于表示一個反斜杠,防止它被解釋為一個轉義序列符。 \a 警告字符,蜂鳴 \b 退格符 \f 進紙符 \n 換行 \r 回車 \t 水平制表符 \v 垂直制表符 \ddd ddd表示1~3個八進制的數字。 如: \130 X \xdd dd表示2個十六進制數字。 如: \x30 07.3注釋
1. 代碼中有不需要的代碼可以直接刪除,也可以注釋掉 2. 代碼中有些代碼比較難懂,可以加一下注釋文字 #include <stdio.h> int Add(int x, int y) {return x+y; } /*C語言風格注釋 int Sub(int x, int y) {return x-y; } */ int main() {//C++注釋風格//int a = 10;//調用Add函數,完成加法printf("%d\n", Add(1, 2));return 0; } 注釋有兩種風格: C語言風格的注釋 /*xxxxxx*/ 缺陷:不能嵌套注釋 C++風格的注釋 //xxxxxxxx 可以注釋一行也可以注釋多行8.選擇語句
如果你好好學習,校招時拿一個好offer,如果你不學習,畢業等于失業,這就是選擇! #include <stdio.h>int main() {int coding = 0;printf("你會好好學習C語言嗎?(選擇1 or 0):>");scanf("%d", &coding);//選擇輸入0或者1if(coding == 1) //判斷coding是否等于1,等于1為真,執行“堅持...”否者執行“放棄...”{prinf("堅持,你會有好offer\n");}else{printf("放棄,工地搬磚\n");}return 0;}9.循環語句
有些事必須一直做,比如我們每天都要不斷呼吸!這就是循環。 for語句以及do...while循環在后面循環章節有詳細講解。 #include <stdio.h>int main() {printf("好好學習C語言\n");int line = 0;while(line<=20000) //程序不斷在while里循環直到line<=20000時程序才跳出while循環執行后面的代碼{line++; //每經歷一次while循環line加一printf("我要繼續努力敲代碼\n");}if(line>20000)printf("收到好offer\n");return 0;}10.函數
函數的特點就是簡化代碼,代碼復用。
#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; } 上述代碼,寫成函數如下: #include <stdio.h>int Add(int x, int y) //int為函數的返回類型,x與y為函數形參。 {int z = x+y; return z; //返回結果z給sum。 } int main() {int num1 = 0;int num2 = 0;int sum = 0;printf("輸入兩個操作數:>");scanf("%d %d", &num1, &num2);sum = Add(num1, num2); //標識符后加()即為函數,num1與num2為實參,用逗號隔開。printf("sum = %d\n", sum); return 0;}11.數組
要存儲1-10的數字,怎么存儲? C語言中給了數組的定義:一組相同類型元素的集合11.1數組的定義
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定義一個整形數組,最多放10個元素11.2數組的下標
C語言規定:數組的每個元素都有一個下標,下標是從0開始的。 數組可以通過下標來訪問的。 比如: int arr[10] = {0}; //如果數組10個元素,下標的范圍是0-9?11.3數組的使用
#include <stdio.h> int main() {int i = 0;int arr[10] = {1,2,3,4,5,6,7,8,9,10};for(i=0; i<10; i++) //for循環打印數組arr【10】中的內容{ printf("%d ", arr[i]); //for循環在后面循環章節有詳細用法講解} printf("\n");return 0; }12.操作符
算術操作符
+ ? -? ? * ? /?? %
移位操作符 <<?? >> 位操作符 |? &?? ^ 賦值操作符 = +=? -=? *=? /=? &=? ^= ?|= ? ?>>= ? <<= 單目操作符 ! ? ? ? ? ? 邏輯反操作 - ? ? ? ? ? 負值 + ? ? ? ? ? 正值 & ? ? ? ? ? 取地址 sizeof ? ? ?操作數的類型長度(以字節為單位) ~ ? ? ? ? ? 對一個數的二進制按位取反 -- ? ? ? ? ?前置、后置-- ++ ? ? ? ? ?前置、后置++ * ? ? ? ? ? 間接訪問操作符(解引用操作符) (類型) ? ? ? 強制類型轉換 關系操作符 > >= < <= != ? 用于測試“不相等” == ? ? ?用于測試“相等 邏輯操作符 && ? ? 邏輯與 || ? ? ? ? ?邏輯或 條件操作符 exp1 ? exp2 : exp3 逗號表達式 exp1, exp2, exp3, …expN 下標引用、函數調用和結構成員 [] () . ->13.常見關鍵字
關鍵字知道有這些東西就ok了,后期遇會講解。 auto ?break ? case ?char ?const ? continue ?default ?do ? double else ?enum ? extern float ?for ? goto ?if ? int ? long ?register ? ?return ? short ?signed sizeof ? static struct ?switch ?typedef union ?unsigned ? void ?volatile ?while14.#define定義常量和宏
//define定義標識符常量,MAX=1000; #define MAX 1000 //define定義宏 #define ADD(x, y) ((x)+(y)) //ADD(x, y) = ((x)+(y)) #include <stdio.h> int main() {int sum = ADD(2, 3);printf("sum = %d\n", sum);sum = 10*ADD(2, 3);printf("sum = %d\n", sum);return 0; }15.指針
內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的 。 所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節。 為了能夠有效的訪問到內存的每個單元,就給內存單元進行了編號,這些編號被稱為該內存單元的地址。 變量是創建內存中的(在內存中分配空間的),每個內存單元都有地址,所以變量也是有地址的。 取出變量地址如下: #include <stdio.h> int main() {int num = 10;# //取出num的地址//這里num的4個字節,每個字節都有地址,取出的是第一個字節的地址(較小的地址)printf("%p\n", &num);//打印地址,%p是以地址的形式打印return 0;} 那地址如何存儲,需要定義指針變量。 int num = 10; int *p;//p為一個整形指針變量 p = # 指針的使用實例: #include <stdio.h> int main() {int num = 10;int *p = #*p = 20;return 0; }15.2指針的大小
#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位平臺是4個字節,64位平臺是8個字節。16.結構體
結構體是C語言中特別重要的知識點,結構體使得C語言有能力描述復雜類型。 比如描述學生,學生包含: 名字+年齡+性別+學號 這幾項信息。 struct Stu {char name[20];//名字int age; ? ? ?//年齡char sex[5]; ?//性別char id[15]; //學號 }; 結構體的初始化: //打印結構體信息 struct Stu s = {"張三", 20, "男", "20180101"}; //.為結構成員訪問操作符 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);總結
- 上一篇: usb禁止重定向_USB虚拟化与重定向(
- 下一篇: php跨域有那些方法,PHP跨域访问的3