生活随笔
收集整理的這篇文章主要介紹了
C语言学习笔记1——C语言程序
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C語言簡(jiǎn)介:
BCPL ->newB ->C ->UNIX ->Minux ->Linux ->gcc
C語言誕生于1970-1973年,在肯·湯姆遜和丹尼斯·里奇的合作編寫下完成,歸屬于美國(guó)貝爾實(shí)驗(yàn)室。
C語言是專門為了編寫操作系統(tǒng)而誕生的語言,C語言天生適合對(duì)硬件編程,以速度快而著稱,也非常適合編寫數(shù)據(jù)結(jié)構(gòu)與算法。
C語言由于出現(xiàn)時(shí)間過早,有很多缺陷,也沒想到普通人也能使用C語言編程,因此存在著陷阱,但是前輩們總結(jié)了一些避免的經(jīng)驗(yàn)《C陷阱和缺陷》 《C語言三劍客》 《C程序設(shè)計(jì)語言》
C語言的語法很自由,自由源于自律C89語法標(biāo)準(zhǔn),也是gcc編譯器默認(rèn)的語法標(biāo)準(zhǔn)
C99語法標(biāo)準(zhǔn),是對(duì)C語言的擴(kuò)展和增強(qiáng) -std=gnu99
C11語法標(biāo)準(zhǔn),全新的升級(jí)
一、第一個(gè)C語言程序:
#include <stdio.h>
程序員所編寫的代碼不是標(biāo)準(zhǔn)C代碼,需要一段程序把它翻譯成標(biāo)準(zhǔn)C代碼,負(fù)責(zé)翻譯的程序叫做預(yù)處理器,翻譯的過程叫做預(yù)處理,被翻譯的語句叫做預(yù)處理指令,以#開頭的語句都是預(yù)處理指令
#include 的功能是把一個(gè)頭文件導(dǎo)入到當(dāng)前文件中
#include <> 從系統(tǒng)指定的路徑下查找頭文件,找到加載導(dǎo)入
#include “” 先從當(dāng)前目錄查找頭文件,如果沒找到,再從系統(tǒng)指定的路徑下查找頭文件,找到加載導(dǎo)入
stdio.h
頭文件:以.h
結(jié)尾的文件,里面儲(chǔ)存的是一些輔助性的代碼,絕大多數(shù)內(nèi)容都是對(duì)函數(shù)的聲明
源文件:以.c結(jié)尾的文件,里面主要是對(duì)和函數(shù)的實(shí)現(xiàn),功能性的代碼
由C語言標(biāo)準(zhǔn)委員會(huì)為C語言提供的一套常用的基礎(chǔ)功能,以函數(shù)形式存在,這些函數(shù)都被封裝在libc.so庫中
會(huì)有很多的頭文件負(fù)責(zé)對(duì)libc.so庫中的代碼進(jìn)行聲明,stdio.h是其中一個(gè),其他string.h stdlib.h 等
stdio standard input & output 負(fù)責(zé)對(duì)輸入輸出功能函數(shù)進(jìn)行聲明
int main()
{printf("Hello World!\n");return 0;
}main函數(shù):C語言以函數(shù)為最小單位來管理代碼,一個(gè)函數(shù)就是一段具有某一項(xiàng)功能的代碼段main函數(shù)是程序的執(zhí)行入口,有且只有一個(gè)int是一種數(shù)據(jù)類型,表示main函數(shù)的執(zhí)行結(jié)果是一個(gè)整數(shù)return有兩個(gè)功能:1、結(jié)束函數(shù)的執(zhí)行2、返回一個(gè)數(shù)據(jù)給函數(shù)的調(diào)用者main函數(shù)是由操作系統(tǒng)調(diào)用的,所以main函數(shù)的執(zhí)行結(jié)果返回給操作系統(tǒng),該執(zhí)行結(jié)果反映了程序是如何結(jié)束的:整數(shù) 出現(xiàn)異常 (別人的錯(cuò)誤)0 一切正常負(fù)數(shù) 出現(xiàn)錯(cuò)誤 (自己的錯(cuò)誤)可以通過echo $? 查看操作系統(tǒng)獲取到的執(zhí)行結(jié)果printf/scanf是標(biāo)準(zhǔn)庫中的輸出/輸入函數(shù),負(fù)責(zé)輸出、輸入數(shù)據(jù),一般作為程序測(cè)試使用轉(zhuǎn)義字符:鍵盤上一些無法直接打印的符號(hào),會(huì)用一些特殊的字符來表示,這種特殊字符就叫做轉(zhuǎn)義字符,\n就是其中之一\n 換行\(zhòng)t 制表符Tab\b 退格鍵,退一個(gè)字符\a 鈴響\r 回到行首\\ 顯示一個(gè)\%% 顯示一個(gè)%C語言是以分號(hào)作為一行代碼的結(jié)束,使用大括號(hào)作為劃分代碼區(qū)域注意:分號(hào)不能亂加,也不要出現(xiàn)中文格式的符號(hào)
二、編譯器
負(fù)責(zé)把人能看得懂的用代碼記錄的文本文件,翻譯成計(jì)算機(jī)能看懂的二進(jìn)制文件,由預(yù)處理器、編譯器、鏈接器
gcc是由gnu社區(qū)為了編譯Linux內(nèi)核代碼而開發(fā)的一款免費(fèi)的編譯器,默認(rèn)采用C89編譯語法,-std=gnu99 可以設(shè)置為C99語法
gcc code.c -> a.out(可執(zhí)行文件、二進(jìn)制文件)
常用的參數(shù):
-E 顯示出預(yù)處理結(jié)果
-S 生成匯編代碼
-c 只編譯不鏈接
-o 設(shè)置編譯結(jié)果的名字
-std= 設(shè)置編譯語法
-I 指定頭文件的加載路徑
-l 指定要使用的庫文件 例如-lm
-Wall 更嚴(yán)格地檢查代碼,盡可能多得產(chǎn)生警告
-Werror 把警告當(dāng)錯(cuò)誤處理
三、C代碼源文件變成可執(zhí)行文件的過程
1、預(yù)處理:把源文件翻譯成預(yù)處理文件
gcc -E code.c 把預(yù)處理結(jié)果打印到終端
gcc -E code.c -0 code.i 生成以.i結(jié)尾的預(yù)處理文件
2、編譯:把預(yù)處理文件翻譯成匯編代碼
gcc -E code.i 生成以.s結(jié)尾的匯編文件
3、匯編:把匯編文件翻譯成二進(jìn)制的目標(biāo)文件
gcc -c code.s 生成以.o結(jié)尾的目標(biāo)文件
4、鏈接:把若干個(gè)目標(biāo)文件合并生成一個(gè)可執(zhí)行文件
gcc a.o b.o c.o 默認(rèn)生成a.out可執(zhí)行文件
gcc a.o b.o c.o -o xxx 指定生成名為xxx的可執(zhí)行文件
四、C文件類型
.h 頭文件
.h.gch 頭文件的編譯結(jié)果,會(huì)被優(yōu)先使用
.c 源文件
.i 預(yù)處理文件
.s 匯編文件
.o 目標(biāo)文件
.so 共享庫文件
.a 靜態(tài)庫文件
五、存儲(chǔ)空間的單位:
Bit 比特 一個(gè)二進(jìn)制位,只能存儲(chǔ)0或者1,計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的最小單位
Byte 字節(jié) 八個(gè)二進(jìn)制位,計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的基本單位
Kb 1024字節(jié)
Mb 1024Kb
Gb 1024Mb
Tb 1024Gb
Pb 1024Tb
六、數(shù)據(jù)類型
為什么要對(duì)數(shù)據(jù)進(jìn)行分類?
1、現(xiàn)實(shí)社會(huì)中的數(shù)據(jù)自帶類別屬性
2、對(duì)數(shù)據(jù)進(jìn)行分類可以節(jié)約存儲(chǔ)空間、提高運(yùn)行效率
C語言中數(shù)據(jù)分為兩個(gè)大類:自建(程序員自己設(shè)計(jì)的:結(jié)構(gòu)、聯(lián)合、類)和內(nèi)建(C語言自帶)
整型:signed 有符號(hào)類型 字節(jié)數(shù) 表示范圍signed char 1 -128~127signed short 2 -32768~32767signed int 4 正負(fù)20億signed long 4/8 正負(fù)20億/正負(fù)9開頭的19位整數(shù)signed long long 8 正負(fù)9開頭的19位整數(shù)注意:32位系統(tǒng)下signed long是4字節(jié),64位是8字節(jié)注意:signed 默認(rèn)添加unsigned 無符號(hào)類型 字節(jié)數(shù) 表示范圍unsigned char 1 0~255unsigned short 2 0~65535unsigned int 4 0~40億unsigned long 4/8 0~40億/0~1開頭的20位整數(shù)unsigned long long 8 0~1開頭的20位整數(shù)注意:由于定義無符號(hào)數(shù)據(jù)時(shí)名字麻煩,標(biāo)準(zhǔn)庫把這些類型重新定義以下類型:需要包含頭文件<stdint.h>uint8_t uint16_t uint32_t uint64_tint8_t int16_t int32_t int64_t浮點(diǎn)型:float 4double 8long double 12/16
注意:采用科學(xué)計(jì)數(shù)法,換算真實(shí)數(shù)據(jù)與二進(jìn)制數(shù)據(jù),因此計(jì)算浮點(diǎn)型數(shù)據(jù)時(shí)要比整型數(shù)據(jù)慢得多,編程時(shí)盡量使用整型
注意:關(guān)注浮點(diǎn)型的精度,小數(shù)點(diǎn)后六位有效模擬:字符型:%cchar 字符就是符號(hào)或者圖案,在內(nèi)存中存儲(chǔ)的是整數(shù),需要顯示出符號(hào)或圖案時(shí),計(jì)算機(jī)會(huì)根據(jù)ASCII碼表中的對(duì)應(yīng)關(guān)系顯示出相應(yīng)的符號(hào)或圖案。'\0'== 0'0' == 48'A' == 65'a' == 97布爾型:bool先有C語言之后才有bool類型,所以C語言是沒有真正的bool類型,在stdbool.h 頭文件中用整數(shù)進(jìn)行模擬bool true false
可以使用sizeof運(yùn)算符 計(jì)算類型、變量占用的字節(jié)數(shù)
例如:sizeof(int)
七、變量與常量
什么是變量:
在程序運(yùn)行期間數(shù)值可以發(fā)生變化的叫變量,相當(dāng)于存放數(shù)據(jù)的盒子
定義:
類型 變量名;
int num;
變量名取名規(guī)則:
1、由字母、數(shù)字、下劃線組成
2、不能以數(shù)字開頭
3、不能與32個(gè)C語言關(guān)鍵字重名,能默寫
4、見名知意(功能+類型+作用域)
注意:變量的默認(rèn)值是隨機(jī)的,為了安全起見,一般都初始化為0
使用:賦值:變量名 = 數(shù)據(jù); num = 100;運(yùn)算:變量名*10; num*10;
變量的輸出、輸入:int printf(const char *format, ...);功能:輸出數(shù)據(jù)format:"雙引號(hào)包含的提示信息+占位符"...:變量名列表返回值:輸出字符個(gè)數(shù)類型占位符:C語言通過占位符的形式傳遞變量的類型%hhd %hd %d %ld %lld 有符號(hào)%hhu %hu %u %lu %llu 無符號(hào)%f %lf %LF 浮點(diǎn)型%c 字符型int scanf(const char *format, ...);
功能:輸入數(shù)據(jù)到變量
format:"雙引號(hào)包含的占位符"
...:變量的地址列表 &num
返回值:成功輸入的變量的個(gè)數(shù)
注意:scanf需要的是變量的類型和變量的地址變量地址 = &變量名什么是常量:程序運(yùn)行期間數(shù)值不能發(fā)生變化的叫做常量100 默認(rèn)是 signed int100l signed long100ll signed long long100u unsigned int100lu unsigned long100llu unsigned long long3.14 默認(rèn)是 double3.14f float3.14l long double問:定義一個(gè)表示100年有多少秒的宏常量?(忽略潤(rùn)平年)#define SEC (60*60*24*365*100u)
八、格式化輸入輸出
%nd 顯示n個(gè)字符寬度,不夠則補(bǔ)空格,右對(duì)齊
%0nd 顯示n個(gè)字符寬度,不夠則補(bǔ)0,右對(duì)齊
%-nd 顯示n個(gè)字符寬度,不夠則補(bǔ)空格,左對(duì)齊
%n.mf 顯示n個(gè)字符寬度(小數(shù)點(diǎn)也算),不夠則補(bǔ)空格,m表示顯示小數(shù)點(diǎn)后幾位(五舍六入)
%g 顯示浮點(diǎn)型數(shù)據(jù),不顯示小數(shù)點(diǎn)后多余的0
總結(jié)
以上是生活随笔為你收集整理的C语言学习笔记1——C语言程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。