C语言程序设计详细版 (学习笔记1) 看完不懂,我也没办法。
程序設計與C語言
- 計算機語言
- 程序設計與算法
- 最簡單的C語言程序
- 數據類型
- 關鍵字與標識符
- 關鍵字
- 標識符
- 常量與變量
- 常量
- 變量
- 數據類型
- 基本類型
- 構造類型
計算機語言
計算機語言是人與計算機之間通信的語言(人與計算機能夠交流的語言),由一些指令組成,包括數字,符號,語法等。
那什么是計算機語言🙌??
計算機語言包括機器語言,匯編語言,高級語言
-
機器語言:這個貨是能夠被計算機直接識別的語言,是由二進制數0和1組成的一串指令集和,but這對于我們程序員來說,機器語言是不便于記憶和識別的
-
匯編語言:把不易理解的,記憶的機器語言按照對應關系轉換成匯編指令,這些匯編語言是用英文字母和或符號串來代替機器語言,but這對于我們程序員來說還是挺難的,因為匯編語言依賴于硬件,即程序的移植性極差,我們在使用計算機時,需要我們去學習新的匯編指令,這對于我們是非常麻煩的
-
高級語言:便是我們現在使用的編程語言(c#,Java,python等),易于理解,記憶和使用(真的是這樣的嗎🤷?♂?,為什么我學起來hai那么難🤷?♀?·······)
程序設計與算法
算法是程序設計的靈魂
什么是算法勒?
- 算法:字面意思:解決問題的方法與過程
算法將要解決的實際問題和解決實際問題的計算機程序聯合起來
最簡單的C語言程序
我們直接代碼開頭
#include<stdio.h>//頭文件 int main() //函數入口 {printf("你好,世界!\n"); //語句塊,打印語句return 0;//返回值}簡單來說,一個C程序就是由若干頭文件和函數組成
- #include <stdio.h> 就是一條預處理命令,它的作用是通過C語言的編譯系統在對C程序編譯之前做一些預處理操作
- 一個C程序只有一個主函數,即main函數。這個主函數C語言中唯一的入口
- 在main前面的是主函數的類型
- printf()是格式輸出函數。在這里我們只需要記住它的功能就是在屏幕上輸出指定的信息,給我們看
- \n是轉義字符中的換行符
- return是函數的返回值,根據函數類型的不同,返回值得類型也是不同的
這些大概就是最簡單的代碼了吧,從你開始學就已經回不了頭了。
其次我們要養成良好的書寫習慣!!!!
因為你的代碼并不只是要求能運行,還要美觀易讀。有可讀性的代碼才是有價值的代碼,如果你寫完代碼,別人根本看不懂,甚至你自己都看不懂,那么這個代碼就沒法修改,如果程序需要升級或者要修改漏洞,效率就會很低!
程序解釋——注釋
C語言注釋方法有兩種:
多行注釋:
單行注釋
//單行注釋//生活就是不斷崩潰 不斷自愈我們需要記住
注釋是寫給程序員看的,不是寫給電腦看的。
數據類型
C語言的基礎知識包括關鍵字,標識符,常量,變量,數據類型,運算符
關鍵字與標識符
關鍵字
關鍵字:是指在編程語言里事先定義好(減輕了我們的工作量),并被賦予了特殊含義的單詞,也稱作保留字,他們具有特殊的含義,不能被我們隨意使用的字符,每一個關鍵字都有屬于他自己特殊的作用
特征:
- 在編譯器中會顯示特殊的顏色
. C語言中的關鍵字 (32個) auto、double、int、struct、break、long、 switch、else、case、enum、register、typedef、char、extern、return、union、construction、float、short、unsigned、continue、for、signed、void、default、goto、sizeof、volatile、do、if、while、static
最新版中多加了五個(restrict、inline、_Bool、_Complex、_Lmaginary)
這時候有人就會問,這么多我怎么記呀😣。你這不是為難我嗎??
別急呀這些我們現在只需要了解一下,等后面遇到了,用到了,我們在理解,加深記憶和運用
標識符
標識符: 在我們的編程過程中,我們需要定義一些符號來標記一些數據或內容(就像朋友給我們起的小名一樣),有變量名,方法名,參數名,數組名等
C語言規定,
- 標識符可以是字母(A~Z,a~z)、數字(0~9)、下劃線_組成的字符串
- 標識符不能以數字作為第一個字符
- 標識符不能是C語言中的關鍵字(關鍵字在哪里???在上面)
- 注:
標識符的長度最好不要超過8位,
標識符是嚴格區分大小寫的。例如name和Name 是兩個不同的標識符。
標識符最好選擇有意義的英文單詞組成做到"見名知意",不然別的程序員看代碼看不懂,想打人😡,叫他自己來看他寫的代碼,他也看不懂,我頓時在心里給他一個懷懷的一筆,當然那些大牛人物除外。
常量與變量
常量
常量:在程序運行期間,固定不變的量。是那個值,就是那個值。
常量的分類:
- 字符串常量:凡是用雙引號引起來的部分,叫做字符串常量。例如:“abc”、“2b”.
- 整數常量: (%d)整數類型的常量,直接寫上的數字,沒有小數點。例如:100。
- 浮點數常量:(%f)直接寫上的數字,有小數點。例如:-2.5。
- 字符常量:(%c)凡是用單引號引起來的單個字符,叫做字符常量。例如:‘a’、‘中’。
- 布爾常量:只有兩種取值。true、false。
- 空常量:null。代表沒有任何數據
變量
變量:就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據內存中一定的存儲單元。使用變量之前必須先定義變量,要區分變量名和變量值是兩個不同的概念。
變量定義的一般形式為:數據類型 變量名
多個類型相同的變量:數據類型 變量名, 變量名, 變量名…
接下來我們直接上代碼。用代碼說明
#include<stdio.h> int main() { int love; //定義一個整型變量,變量名字叫love love=520; //給love變量賦值為520 int a,b,c,d; //同時聲明多個變量,然后分別賦值 a=1; b=2; c=3; d=4; printf("%d\n%d\n%d\n%d\n%d\n",love,a,b,c,d);//打印整型變量love,a,b,c,d //運行結果 520 1 2 3 4 }注意:在定義中不允許連續賦值,如int=a=b=c=d;這是不合法的
數據類型
數據類型用于聲明不同類型的變量或者函數,而變量的類型決定了變量存儲占用的空間以及存儲模式
C語言中中的數據類型分為4種,分別是基本類型,構造類型,指針類型,空類型
基本類型
基本類型: 整型,字符型,浮點型
我這邊只列出了我們經常要用的🐱?🏍🐱?🚀
| char | 字符型 | 1 | 用于儲存單個字符 | char sex=‘m’ |
| int | 整型 | 2 | 用于存儲整數 | int height=170 |
| folat | 單精度浮點型 | 4 | 用于存儲小數 | float price=12.5 |
| double | 雙精度浮點型 | 8 | 用于存儲位數更多的小數 | double pi=3.1415926 |
這里我們說一下格式化輸出語句,這也是比較重要的
格式化輸出語句,是將各種類型的數據按照格式化后的類型及指定位置,輸出到計算機屏幕上,顯示給我們
構造類型
C語言提供的基本數據類型(字符型,整型,浮點型)并不能夠滿足后面復雜程序的設計需求,因此
C語言允許用戶根據自己的需求自定義數據類型,這些自定義的數據類型稱為構造類型
構造類型:有數組,枚舉;共用體,結構體
1.數組
數組:是一組具有相同數據類型的變量集合,這些變量稱為數組的元素,數組的類型由數組中存儲的元素的類型決定
2.枚舉類型
在實際編程中,有些數據的取值往往是有限的,只能是非常少量的整數,并且最好為每個值都取一個名字,以方便在后續代碼中使用(減少了工作量,使代碼簡潔)比如一個星期只有七天,一年只有十二個月,一個班每周有六門課程等。
枚舉類型:用于定義值可以被一 一列舉的變量,具體格式如下:
enum 枚舉名{標識符1=整型常量1,·······}我們直接來看代碼👩?🏫
#include <stdio.h> #define Mon 1 //是不是很熟悉,有點陌生?再去上面常量看一看🤬😡 #define Tues 2 #define Wed 3 #define Thurs 4 #define Fri 5 #define Sat 6 #define Sun 7 int main(){ int day; scanf("%d", &day); switch(day){ case Mon: puts("Monday"); break; case Tues: puts("Tuesday"); break; case Wed: puts("Wednesday"); break; case Thurs: puts("Thursday"); break; case Fri: puts("Friday"); break; case Sat: puts("Saturday"); break; case Sun: puts("Sunday"); break; default: puts("Error!"); } return 0; } 運行結果: 5 Friday但是副作用是宏名較多,代碼松散,看起來總是有點不舒服,我們給他優化一下
int main(){enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;這就叫做代碼優化😂😂😂😂😂😂
這對于我們以后寫項目的時候還是很有用的
3.共用體
共用體又叫聯合體,它可以把不同數據類型的變量整合到一起。
共用體數據類型使用union關鍵字進行聲明上面關鍵字找找,是不是用到了。這時候我們在記憶和理解這個關鍵字的用法
格式如下:
上代碼(*  ̄3)(ε ̄ *)
#include <stdio.h> #include <string.h>union Data {int i;float f;char str[20]; };int main( ) {union Data data;data.i = 10;data.f = 220.5;strcpy( data.str, "C Programming");printf( "data.i : %d\n", data.i);printf( "data.f : %f\n", data.f);printf( "data.str : %s\n", data.str);return 0; } //運行結果 data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming為啊么只有最后一個值顯示出來了,????????
因為之后賦給變量的值占用了內存位置
定義了共用體變量之后,需要對共用體變量進行初始化,對公共體變量進行初始化時,只能對其中一個成員進行初始化。同一時間只能使用到一個成員
union 共用體類型名 共用體變量={其中一個成員的類型值}少廢話,上代碼
//實例 #include <stdio.h> #include <string.h> union Data {int i;float f;char str[20]; }; int main( ) {union Data data;data.i = 5;printf( "data.i : %d\n", data.i);data.f = 250.2;printf( "data.f : %f\n", data.f);strcpy( data.str, "C Programming");printf( "data.str : %s\n", data.str);return 0; } //運行結果 data.i : 5 data.f : 250.200000 data.str : C Programming //在這里,所有的成員都能完好輸出,因為同一時間只用到一個成員。理解理解理解了沒有
結構體
在上面我們講解了共用體,它是一組具有相同類型的數據的集合。在實際的編程過程中,我們需要一組類型不同的數據,例如對于學生信息登記表,姓名為字符串,學號為整數,年齡為整數,所在的學習小組為整數,成績為小數,因為數據類型不同,顯然不能用一個數組來存放。
| char | int | int | int | float |
在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。結構體的定義形式為:
struct 結構體名{結構體所包含的變量或數組 };結構體是一種集合,它里面包含了多個變量或數組,它們的類型可以相同,也可以不同,每個這樣的變量或數組都稱為結構體的成員(Member)。
別廢話,上代碼🐱?🏍🐱?🏍🐱?🏍🐱?🏍
這里stu 為結構體名,它包含了 5 個成員,分別是 name、num、age、group、score。結構體成員的定義方式與變量和數組的定義方式相同,只是不能初始化。
注意大括號后面的分號;不能少,這是一條完整的語句。
結構體也是一種數據類型,它由程序員自己定義,可以包含多個其他類型的數據。
像 int、float、char 等是由C語言本身提供的數據類型,不能再進行分拆,我們稱之為基本數據類型;而結構體可以包含多個基本類型的數據,也可以包含其他的結構體,我們將它稱為復雜數據類型或構造數據類型。
結構體變量
既然結構體是一種數據類型,那么就可以用它來定義變量。
例如:struct stu stu1, stu2;
定義了兩個變量 stu1 和 stu2,它們都是 stu 類型,都由 5 個成員組成。
注意關鍵字struct不能少
stu 就像一個“模板”,定義出來的變量都具有相同的性質。也可以將結構體比作“圖紙”,將結構體變量比作“零件”,根據同一張圖紙生產出來的零件的特性都是一樣的。
你也可以在定義結構體的同時定義結構體變量:
struct stu{ char *name; //姓名 int num; //學號 int age; //年齡 int group; //所在學習小組 float score; //成績 } stu1, stu2;將變量放在結構體定義的最后即可。
如果只需要 stu1、stu2 兩個變量,后面不需要再使用結構體名定義其他變量,那么在定義時也可以不給出結構體名,如下所示:
struct{ //沒有寫 stu char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在學習小組 float score; //成績 } stu1, stu2;這樣做書寫簡單,但是因為沒有結構體名,后面就沒法用該結構體定義新的變量。
成員的獲取和賦值
結構體和數組類似,也是一組數據的集合,整體使用沒有太大的意義。數組使用下標[ ]獲取單個元素,結構體使用點號 . 獲取單個成員。獲取結構體成員的一般格式為:
結構體變量名.成員名;通過這種方式可以獲取成員的值,也可以給成員賦值:
#include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //學號 int age; //年齡 int group; //所在小組 float score; //成績 } stu1; //給結構體成員賦值 stu1.name = "周杰倫"; stu1.num = 1001; stu1.age = 18; stu1.group = 1; stu1.score = 100; //讀取結構體成員的值 printf("%s的學號是%d,年齡是%d,在%d組,今年的成績是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score); return 0; } //運行結果 周杰倫的學號是1001,年齡是18,在1組,今年的成績是100.0!除了可以對成員進行逐一賦值,也可以在定義時整體賦值,例如:
struct{ char *name; //姓名 int num; //學號 int age; //年齡 char group; //所在小組 float score; //成績 } stu1 = { "周杰倫", 1001, 18, 1, 100 }; //運行結果 周杰倫的學號是1001,年齡是18,在1組,今年的成績是100.0!不過整體賦值僅限于定義結構體變量的時候,在使用過程中只能對成員逐一賦值,這和數組的賦值非常類似。
需要注意的是,結構體是一種自定義的數據類型,是創建變量的模板,不占用內存空間;結構體變量才包含了實實在在的數據,需要內存空間來存儲。
你們說是不是有問題,這和上面的共用體有什么區別,你講了干什么??
這就是共用體與結構體的區別:
共同體:使幾個不同類型的變量共占一段內存(相互覆蓋)。所占內存長度是最長那個成員占的內存長度。
結構體:把不同類型的數據組合成一個整體。所占內存長度是各成員占之間的內存長度的總和。
結構體我們這里大概說一下,😂😂😂😂后面還會遇到的(你這是大概嗎,。。。。。。)
| 從現在做起,堅持下去,一天進步一小點,不久的將來,你會感謝曾經努力的你! |
如果又出錯的,請各位友友指正。
新人報到,各位友友們,給我個三聯(點贊,關注,收藏)
總結
以上是生活随笔為你收集整理的C语言程序设计详细版 (学习笔记1) 看完不懂,我也没办法。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言学习C程序设计——程序设计基础
- 下一篇: 收敛性