廈門大學(xué)-c程序設(shè)計基礎(chǔ)(有字幕)國家級精品課

一,浮點型常量
- 小數(shù)形式,小數(shù)點不可省略
- 指數(shù)形式,e或E前后必須有數(shù)字
二.
int 是整型數(shù)據(jù)的說明符. %d
float 定義單精度浮點型變量 %f
(%f 默認(rèn)輸出6位小數(shù))
double 定義雙精度浮點型變量 %lf
區(qū)別:雙精度能保存的數(shù)據(jù)范圍更大,有效位數(shù)更多,保存數(shù)據(jù)更精確。
三.
標(biāo)識符用于表示程序中的各類元素的名字
標(biāo)識符以字母或下劃線打頭,由字母,數(shù)字字符,下劃線組成。
區(qū)分大小寫字符,例如sum,SUM,Sum,三者不一樣。
標(biāo)識符不能命名為關(guān)鍵字或特定字。
四. 用戶鍵盤輸入數(shù)據(jù)
scanf(“格式控制符”,變量地址);
&:取地址運算符
例 scanf(“%d”,&length)
五.
求余運算符 % 兩側(cè)數(shù)據(jù)必為整型數(shù)據(jù)
賦值運算符 = 左邊只能是單個變量
條件運算符 表達式1?表達式2:表達式3
(先計算表示1若為“真”,則計算表達式2輸出;若為“假”,則計算表達式3輸出)
除法運算,任意兩整數(shù)相除結(jié)果為整數(shù);如果/兩邊有一個為浮點數(shù)結(jié)果為浮點數(shù)
求字節(jié)運算符 sizeof(e),用來返回其后的類型說明符或表達式所表示的數(shù)在內(nèi)存中所占有的字節(jié)數(shù)
六. 數(shù)學(xué)函數(shù)
圓周率 編譯預(yù)處理命令#define PI 3.14
sqrt(x) 求x的平方根 使用時需要聲明(#include“math.h”)即告訴編譯器要使用
cos(x) 求cos值
sin(x) 求sin
fabs(x)求x絕對值
exp(x)求e的x次冪
log(x)求ln(x)
七. 操作數(shù) (運算對象)例-b*5 中b和5就是操作數(shù)
單目運算符-取負(fù)+取正
雙目運算符+,-,*,/,%
八.




自增自減運算符操作數(shù)必須是變量
例:5++,(a+1)++都是錯的
九.


十. printf函數(shù)及附加說明項
printf中使用\t將光標(biāo)移至下一個水平制表符的位置 各水平制表符之間通常為八個字符寬度 (第一列,第九列,第十七列...)
printf(“普通字符/格式控制符”,表達式1,表達式2...);原樣輸出/指定格式輸出
附加說明項
- %d %-0m格式字符
- m指定輸出最小寬度占一列
- 實際長度超過m,按實際輸出
- -m指定m列數(shù)據(jù)左對齊;0m指定m列中空位填0
浮點型格式控制符
- %f %-m.nf 符號和小數(shù)點各占一列 .n指定小數(shù)部分所占的位數(shù),默認(rèn)為六位(四舍五入)
- %-m.ne 以指數(shù)形式輸出單精度或雙精度類型 指數(shù)e占一列 默認(rèn)六位小數(shù)位,一位整數(shù),共十三列
- %mg 根據(jù)數(shù)據(jù)大小自動選擇%f或%e
十一.
scanf的格式控制符中出現(xiàn)普通字符,鍵盤輸入數(shù)據(jù)時就要輸入這些普通字符
scanf如果編程時輸入\n就要在運行時多輸入一個數(shù),因為\相當(dāng)于一個普通字符,系統(tǒng)會以為你沒有輸入完

十二. scanf函數(shù)及附加說明項
- %lf:輸入double類型的雙精度數(shù)據(jù)格式控制符
- %md:截取m列數(shù)據(jù)作為輸入
- %*md:跳過m列數(shù)據(jù),不輸入

十三 . 運算符優(yōu)先級
邏輯!優(yōu)先于算術(shù)運算符優(yōu)先于關(guān)系運算符(>,>=,<,<=優(yōu)先于==,!=)優(yōu)先于邏輯&&優(yōu)先于邏輯||優(yōu)先于賦值運算符
十四. “==”與“=”的區(qū)別
“==”關(guān)系運算符,運算結(jié)果為“0”或“1”
“=”賦值運算符,將表達式的值賦值給變量
十五. 邏輯運算符
一元邏輯運算符:?。ㄟ壿嫹牵?/p>
二元邏輯運算符:&&(邏輯與)
二元邏輯運算符:||(邏輯或)

與


或


與:一個為假則為假;或:一個為真則為真
十六. 分支語句
- 單分支if語句
- 雙分支if-else語句
- 多重雙分支else-if級聯(lián) 在2的基礎(chǔ)上加(對于最后一個分支,如果需要判斷條件就寫成“else if(表達式n){語句n;}”;如果不需要判斷條件就寫成“else{語句n;}”)
- 多分支開關(guān)語句(switch語句)
十七. if(表達式)語句;
- 表達式是條件,一定要寫在圓括號()里;
- 語句只能是一條語句,可以是空語句;,或者是復(fù)合語句;

十八. if-else語句
if(表達式)
語句1
else
語句2
注意:關(guān)鍵字else不能單獨使用;
if后面必須有“表達式”,else后面不能有“表達式”,也不能有分號。
最近配對原則:else與它最近的“未配對的if”搭配。{}使if結(jié)束
補充:求個位數(shù)n%10
十位數(shù)n/10%10
百位數(shù)n/100%10
十九. switch語句語法形式

break的作用:退出switch分支;從循環(huán)體中跳出
case的作用:標(biāo)號作用,每個case后面的常量表達式的值各不同;根據(jù)表達式值轉(zhuǎn)向不同的case標(biāo)號位置,執(zhí)行相應(yīng)的語句
注意:1.常量表達式與case之間至少應(yīng)有一個空格2.每個case只能列舉一個整型或字符型常量,否則會出現(xiàn)語法錯誤
二十. for語句語法
for(表達式1;表達式2;表達式3) 循環(huán)語句
表達式1:循環(huán)變量賦初值
表達式2:循環(huán)條件,決定循環(huán)是否繼續(xù)
表達式3:更新循環(huán)變量,(增/減)
注意:三個表達式均可以省略,但作為分隔符的分號卻是必須的。

二十一. 計數(shù)變量count
- count初始化為0
- 每輸出一個滿足要求的整數(shù),count計數(shù)加1
二十二.
素數(shù):除了1和它本身,不能被其它整數(shù)整除

二十三. while語句
while(表達式)
語句
注意:循環(huán)體中一定要有使循環(huán)趨于結(jié)束的語句

二十四. do-while循環(huán)
do
語句
while(表達式);
“直到型”循環(huán):先執(zhí)行循環(huán)體,后進行條件判斷
注:表達式是循環(huán)繼續(xù)的條件,不是循環(huán)結(jié)束的條件
二十五.

二十六. 多重循環(huán)的執(zhí)行


二十七.

goto語句

break和continue本質(zhì)上受限于goto
break語句只能終止本層循環(huán),需要從多重循環(huán)的內(nèi)層一下轉(zhuǎn)移到最外層時,可以使用goto語句
二十八. 窮舉法

累加法

二十九. 函數(shù)


括號里的形式參數(shù)可有可無,沒有形式參數(shù)即稱為無參函數(shù)。




函數(shù)的定義是平行的,一個函數(shù)不可以定義在另一個函數(shù)里;函數(shù)之間的關(guān)系是相互的,是調(diào)用于被調(diào)用的關(guān)系
三十. 函數(shù)的參數(shù)
形參:類似定義變量的形式呈現(xiàn),定義時不占內(nèi)存,調(diào)用后釋放內(nèi)存
實參:可以是常量,變量或表達式,要求有確切值

三十一. 函數(shù)的返回值
- return 表達式;
- return;
功能:結(jié)束被調(diào)函數(shù),返回到主調(diào)函數(shù),并帶回一個返回值
return不是必須的,返回值為空時可以沒有return語句
一個函數(shù)也可以出現(xiàn)多個return語句

如果函數(shù)有返回值,則必須使用帶表達式的return
當(dāng)return語句中表達式的值類型與函數(shù)類型不一致時,以函數(shù)類型為準(zhǔn)
沒有返回值的函數(shù)調(diào)用不能作為表達式的一部分參與運算,只能以函數(shù)調(diào)用語句形式出現(xiàn)
有返回值的函數(shù)調(diào)用可以參與運算,也可以作為函數(shù)調(diào)用語句出現(xiàn),此時其返回值未被加以利用

三十二. 自定義函數(shù)

函數(shù)fac()可以被編譯,但不能單獨運行,需要被調(diào)用;
函數(shù)間是調(diào)用與被調(diào)用的關(guān)系,但任何函數(shù)都不能調(diào)用main函數(shù)。
三十三. 函數(shù)的嵌套調(diào)用

函數(shù)的遞歸調(diào)用
在遞歸函數(shù)中必須有:
1.遞歸結(jié)束條件
2.遞歸調(diào)用語句
三十四. 變量的作用域


程序運行進入這個塊之前,其中的變量不存在,離開這個塊,其中的變量就釋放了
塊外定義的變量在里面仍然有效
塊內(nèi)定義了和塊外同名的變量,則掩蓋了塊外的
不能在同一個塊內(nèi)定義同名的變量
三十五. 全局變量

三十六. 變量的儲存類型



全局變量的存儲類型


三十七.函數(shù)與變量小結(jié)

小結(jié)位置
三十八.整型的分類及特點
整型的劃分
- 基本整型int
- 短整型short int
- 長整型long int
默認(rèn)情況下,整型變量是有符號的




%o以八進制形式讀寫整數(shù)
%x以十六進制形式讀寫整數(shù)

三十九. 數(shù)據(jù)溢出
無符號型整數(shù)運算過程中發(fā)生溢出,會將結(jié)果對2^n取模(取余)
有符號型整數(shù)運算過程中發(fā)生溢出,結(jié)果不確定的:結(jié)果出錯(是未定義行為),程序報錯,崩潰等。
四十. 浮點數(shù)的保存



四十一. 字符型常量
用單引號括起來的單個字符
字符常量以二進制形式編碼,并保存,最常用的是ASCLL編碼(小寫字符比大寫字符大32)
‘1’是字符型,1是整型,有沒有單引號,差別很大



字符型常量只占用一個字節(jié),字符串常量除了儲存有效的ASCII碼值外還要存放結(jié)束標(biāo)志‘\0’

十進制滿十進一,二進制滿二進一
二進制轉(zhuǎn)十進制:1010 1*2^3+0*2^2+1*2^1+0*2^0結(jié)果為10
十進制轉(zhuǎn)二進制:(除二取余,逆序排列法)234 結(jié)果為11101010
四十二. 轉(zhuǎn)義字符

數(shù)字轉(zhuǎn)義字符主要用于其他方式無法表示的字符

四十三. 字符的讀寫
圖中內(nèi)容分別是等價!

1.字符輸出函數(shù)putchar(c);
其中,c可以是字符型常量,字符型變量或整型變量
功能:在屏幕當(dāng)前光標(biāo)位置處,顯示c所表示的一個字符
2.字符輸入函數(shù)getchar();
功能:讀入從鍵盤輸入的一個字符,并將其返回
字符輸入的注意事項
按enter鍵,tab鍵,空格鍵,都輸入了一個字符
scanf(“ %c”,&c1);
%c前面加空格,在輸入時可以跳過空白字符,包括換行符
四十四. 類型轉(zhuǎn)換
兩種:
- 隱式類型轉(zhuǎn)換:由c編譯器按照某種預(yù)定的規(guī)則進行自動轉(zhuǎn)換


- 顯示類型轉(zhuǎn)換:由程序員在程序中用類型轉(zhuǎn)換運算符設(shè)計的轉(zhuǎn)換(強制類型轉(zhuǎn)換)
通常用于自動類型轉(zhuǎn)換不能起作用時
在程序中借助類型轉(zhuǎn)換運算符,人為的強制進行類型轉(zhuǎn)換
格式:(類型名)表達式
例(double)5/3
類型轉(zhuǎn)換不會改變變量的類型與值

- 賦值運算的類型轉(zhuǎn)換
1.變量=表達式
2.兩邊數(shù)據(jù)類型不一致,一律自動轉(zhuǎn)換為左邊變量的類型
四十五. 一維數(shù)組的定義,引用和初始化


數(shù)組長度可以是常量,或者是由常量構(gòu)成的式子,即常量表達式

原則上,如果數(shù)組的長度為n則下標(biāo)的范圍應(yīng)該界于0和n-1。但c編譯系統(tǒng)沒有對下標(biāo)進行越界檢查,要求用戶嚴(yán)格遵循

注意:如圖

- 如果對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度,但是不能省略【】。
- 對數(shù)組進行初始化時,不允許初始化的元素個數(shù)比定義的數(shù)組長度大
- 動態(tài)存儲方式只定義數(shù)組而沒有初始化里面取得就是隨機值
- 數(shù)組不允許整體賦值,可以分別給元素賦值
四十六. 一維數(shù)組應(yīng)用


四十七. 冒泡法


四十八. 字符數(shù)組


字符串常量:用一對雙引號括起的字符序列
在存儲字符串時,自動在其后添加空字符‘\0’,作為字符串結(jié)束符
注意:空字符不同于空格字符
數(shù)組名等價于數(shù)組的首地址 數(shù)組用scanf時不需要&取地址符號
字符串輸入輸出%s
%s輸入時遇到空格或回車結(jié)束,但獲得的字符中不包括回車及空格本身,而是在字符串末尾添\0";輸出時,遇\0"結(jié)束,且輸出字符中不包含\0"

以下兩個函數(shù)都來自頭文件stdio.h
- gets(字符數(shù)組) 從鍵盤上輸入1個字符串,允許輸入空格
- puts(字符數(shù)組) 把字符數(shù)組中所存的字符串輸出到標(biāo)準(zhǔn)輸出設(shè)備中去

例子:


四十九. 字符串處理函數(shù)

以下函數(shù)來自頭文件string.h
- 字符串連接函數(shù)strcat(字符數(shù)組1名,字符數(shù)組2名) 將字符數(shù)組2連接到字符數(shù)組1后面,字符數(shù)組2不變
- 字符串復(fù)制函數(shù)strcpy(字符數(shù)組1,字符串) 將“字符串”完整的復(fù)制到“字符數(shù)組1”中覆蓋字符數(shù)組1中的原有內(nèi)容,字符串不變
- 字符串比較函數(shù)strcmp(字符串1,字符串2)
如果字符串1>字符串2,返回值>0
如果字符串1=字符串2,返回值為0
如果字符串1<字符串2,返回值<0
- 測試字符串長度函數(shù)strlen(字符數(shù)組名) 求字符數(shù)組中字符串的實際字符個數(shù),不包括字符串結(jié)束的標(biāo)志“\0”
- 字符串中大小寫轉(zhuǎn)換函數(shù)
大寫轉(zhuǎn)小寫strlwr(字符數(shù)組名)
小寫轉(zhuǎn)大寫strupr(字符數(shù)組名)

五十. 二維數(shù)組

二維數(shù)組在內(nèi)存中按行連續(xù)存放



二維數(shù)組初始化時可以省略第一維度。

