《21天学通C语言》总结(1)
- 《21天學(xué)通C語言》 第六版
編輯、編譯、鏈接、測試
編譯時(shí)一個(gè)錯(cuò)誤可能引起多條錯(cuò)誤消息
鏈接時(shí)錯(cuò)誤大多來自庫函數(shù)拼寫錯(cuò)誤
庫函數(shù)
編譯指令
包含文件(頭文件)
加粗樣式
變量、常量是命名的數(shù)據(jù)存儲(chǔ)位置
變量名只能是數(shù)字、字母、下劃線。數(shù)字不能在開頭。不能用C語言的關(guān)鍵字。如double。
typedef指定新名稱。如typedef int integer; integer count;
字面常量、符號(hào)常量。符號(hào)常量是表示字面常量的符號(hào)
定義常量
define可以位于任何位置,不過定義的常量只在后面的源代碼中有效
define需要#不用;,const需要聲明變量以及;。
const與define的區(qū)別涉及指針和變量作用域。
語句中的空白被忽略,字面字符串常量的空格不能忽略。字面字符串常量放在多行中必須在換行之前加上反斜杠\。
代碼塊(語句塊)中花括號(hào)最好單獨(dú)占一行,并對(duì)齊。
算數(shù)、關(guān)系、邏輯運(yùn)算符
單目運(yùn)算符
遞增遞減前后綴不同。前綴先計(jì)算遞增或遞減再計(jì)算表達(dá)式,后綴先計(jì)算表達(dá)式再計(jì)算遞增或遞減。
sizeof()也是單目運(yùn)算符不是函數(shù)
&&、||、!
非的優(yōu)先級(jí)最高,與或最低,與高于或。
復(fù)合賦值運(yùn)算符
x *= y; y -= z+1; a /= b; x += y/8; y %= 3;條件運(yùn)算符,唯一一個(gè)三目運(yùn)算符。
exp1 ? exp2 : exp3; //如果exp1為真,則表達(dá)式為exp2,否則為exp3.x = y ? 1 : 100; //y為真x=1,否則x=100.z = (x > y) ? x : y; //z=x,或z=y.逗號(hào)運(yùn)算符,逗號(hào)分隔的兩個(gè)表達(dá)式都被計(jì)算,且先計(jì)算左邊。表達(dá)式的結(jié)果為右邊子表達(dá)式的值。例如:
x = (a++ , b++); //x=b,之后a,b分別加1. //加圓括號(hào)是因?yàn)?優(yōu)先級(jí)低于賦值,而后綴++所以先賦值x在a,b++。0為false,其他數(shù)為true,包括負(fù)數(shù)。
scanf(%d, &age); %d后面加空格會(huì)導(dǎo)致回車后無法接著執(zhí)行必須輸入一個(gè)非空格或\n(換行)的字符才行。
scanf("%d ", &a)。%d后面加空格的問題
簡單點(diǎn)說,你輸入的數(shù)字后面的空白符(空格也好,回車也好),都被%d吸收了,因?yàn)榭瞻追硎緮?shù)字的結(jié)束;
這樣一來,要匹配%d后面的空格,必然要輸入一個(gè)非空格符,被%d吸收掉,之后空格才能被%d后的空格匹配。
函數(shù)
函數(shù)原型與函數(shù)定義
如果return-type不是void則函數(shù)體必須包含一條return語句。
函數(shù)原型將有關(guān)函數(shù)的信息告知編譯器。 以讓編譯器檢查源代碼對(duì)函數(shù)的調(diào)用是否正確。
函數(shù)原型中不必寫出形參名,只要類型和順序相符合就行。
規(guī)劃:
列出程序要執(zhí)行的所有具體任務(wù),確定程序的功能。
將任務(wù)劃分為更小的子任務(wù)。
將相同的子任務(wù)編寫成一個(gè)函數(shù)。
形參(paremeter)位于函數(shù)頭中,實(shí)參的一個(gè)占位符,固定不變。
實(shí)參(argument)調(diào)用函數(shù)時(shí)傳遞的實(shí)際值,個(gè)數(shù)和類型必須相同,值可以不同。
實(shí)參被傳遞給形參,數(shù)目必須相等。
參數(shù)可以是任何合法的表達(dá)式:常量、變量、數(shù)學(xué)或邏輯表達(dá)式,甚至是另一個(gè)返回一個(gè)值的函數(shù)。
調(diào)用函數(shù)
printf("Half of %d is %d.", x, half_of(x));y = half_of(x) + half_of(z);if ( do_a_process() != OKAY ) {/* statements; */ /* do error routine */ }局部變量,全局變量
全局變量默認(rèn)值是0,而局部變量不是
遞歸
直接:自身調(diào)用自身。間接:調(diào)用的函數(shù)中調(diào)用自身
例如計(jì)算階乘。
內(nèi)聯(lián)函數(shù)
inline int toinches(int Feet) {return (Feet/12) }power有冪指數(shù)的意思。。
數(shù)組
數(shù)組下標(biāo)可以是另一個(gè)變量,從零開始。
int data[1000];
int index = 1000;
data[index] = 12;
for語句
for ( initial; condition; increment )statement;1.執(zhí)行initial–> 2.判斷condition–> 3.假:退出循環(huán)。真:執(zhí)行statement–> 4.執(zhí)行increment
initial、increment可以使用任意合法的表達(dá)式
for ( count = 100; count > 0; count++ )count = 1; for ( printf("****"); count < 1000; count++ ) //initial可以省略或任意合法表達(dá)式,;不能省略for ( count = 0; count < 100; )printf("%d", count++); //increment可以省略,;不行//使用空語句來賦值 for ( count = 0; count < 1000; array[count++] = 50 ) {; }//使用逗號(hào)表達(dá)式和for循環(huán) for ( i = 0, j = 999; i < 1000; j-- )b[j] = a[i]嵌套for循環(huán)
/* 打印x組成的矩形 */ #include <stdio.h>void draw_box(int, int);int main(void) {draw_box(8, 35);return 0; }void draw_box(int row, int column) {int col;for (; row > 0; row--){for (col = column; col > 0; col--)printf("X");printf("\n");} }如果程序中不適用col而是column則只會(huì)打印一行X,七行空行。因?yàn)閮?nèi)層循環(huán)。
while循環(huán)
while (condition)statementcondition可以是任何合法表達(dá)式。
while語句實(shí)際就是沒有初始化部分和遞增部分的for語句。
因此for ( ; condition ; )與while ( condition )等價(jià)。
需要執(zhí)行初始化和遞增操作時(shí),使用for更好。
不要使用while ( x )而應(yīng)用while ( x != 0 )。后者更清晰,二者編譯后代碼幾乎相同。
do while循環(huán)
dostatement while(condition);至少執(zhí)行一次。while后面有;。
如果for循環(huán)后面有分號(hào),則循環(huán)后面的語句不會(huì)執(zhí)行,直到for中的條件為假時(shí)。例如下面printf輸出為10。
#include <stdio.h>int main(void) {int count;for ( count = 1; count < 10; count++ );printf("count is %d ", count);return 0; }轉(zhuǎn)義序列
| \a | 振鈴 |
| \b | 退格 |
| \f | 換頁 |
| \n | 換行 |
| \r | 回車(硬回車,回到文本開頭,繼續(xù)打印覆蓋之前文本) |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \\ | 反斜杠 |
| \ ? | 問號(hào) |
| \ ’ | 單引號(hào) |
| \’’ | 雙引號(hào) |
在格式化字符串中‘\’可以把字符串分為兩行,編譯器會(huì)將其視為一行。
三字符序列
??打頭,編譯時(shí)將被轉(zhuǎn)換。例如:??=轉(zhuǎn)換為#,??(轉(zhuǎn)換為[,等等。
轉(zhuǎn)換說明符
| %c | 單個(gè)字符 | char |
| %d | 有符號(hào)十進(jìn)制整數(shù) | int、short |
| %ld | 有符號(hào)十進(jìn)制長整數(shù) | long |
| %f | 十進(jìn)制浮點(diǎn)數(shù) | float、double |
| %s | 字符串 | char數(shù)組 |
| %u | 無符號(hào)十進(jìn)制整數(shù) | unsighed int、unsigned short |
| %lu | 無符號(hào)十進(jìn)制長整數(shù) | unsigned long |
| %% | 百分號(hào) | % |
%%打印一個(gè)百分號(hào),類似于轉(zhuǎn)義字符反斜杠。
puts()
puts()的字符串中可以包含轉(zhuǎn)義序列(\n),但不能顯示數(shù)值變量。
puts()打印后會(huì)自動(dòng)換行。
scanf()
scanf("%d", &x); &是地址運(yùn)算符,可以輸入多個(gè)數(shù):
scanf("%d %f", &x, &rate);
空白部分可以用空格、制表符或換行符。
以上為第一周內(nèi)容
總結(jié)
以上是生活随笔為你收集整理的《21天学通C语言》总结(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dex2jar java 1.8_dex
- 下一篇: 0414-复利计算再升级