【文章內(nèi)容簡(jiǎn)介】
f ( a / b = %f\n, a / b )。 printf ( a / b = %e\n, a / b )。 printf ( a / b = %.9f\n, a / b )。 printf ( a / b = %.3f\n, a / b )。 printf ( a / b = %\n, a / b )。 printf ( b / a = %.3f%%\n\n, b / a * 100 )。 char c = 39。A39。 printf ( c = %c\n, c )。 printf ( c = %3c\n, c )。 printf ( c = %d\n, c )。 printf ( %c%c%c%c%c%c%\n,c+12,c+32,c+51,c+49,c+40,c+55,a35)。 9 程序輸出的結(jié)果為: Wele to 4 + 5 = 9 and 4 5 = 1 2 * a = 00204 2 * a = 2 * a = 204 2 * a = 00204 a = 39。f39。 a / b = a / b = +001 a / b = a / b = a / b = b / a = % c = A c = A c = 65 函數(shù)的定義、返回和調(diào)用 定義一個(gè)函數(shù)的格式如下: 函數(shù)返回類(lèi)型 函數(shù)名 ( 參數(shù)類(lèi)型 1 參數(shù)名 1, 參數(shù)類(lèi)型 2 參數(shù)名 2, ... , 參數(shù)類(lèi)型 n 參數(shù)名 n ) { 函數(shù)內(nèi)容 } Pascal中可以 function func1(a,b:integer。c:longint):longint。 C中必須 long func1(int a,int b,long c)。 中 的 bool型不能像 P 一樣直接輸出,我自己還猜了個(gè) %b... ,但確實(shí)比 P 的 randomize 復(fù)雜一些。 C 中沒(méi)有過(guò)程這一說(shuō)法, 如果某個(gè)函數(shù)不返回任何數(shù)據(jù)(相當(dāng)于 Pascal 中的 “ 過(guò)程 ” ),函數(shù)返回類(lèi)型要寫(xiě)成 void。 當(dāng)然你有權(quán)保持沉默, 不寫(xiě)返回類(lèi)型, 則 10 函數(shù)默認(rèn)返回類(lèi)型為 int。 如果某個(gè)函數(shù)不帶任何參數(shù),參數(shù)表一般留空(也可以用一個(gè) void 代替)。 為了強(qiáng)調(diào)某個(gè)參數(shù)在整個(gè)函數(shù)中始終不變,類(lèi)型前可以標(biāo)明 const。 這一點(diǎn) C中特色,常見(jiàn)于指針類(lèi)型。 函數(shù) 的返回使用下面的語(yǔ)句: return 表達(dá)式 。 執(zhí)行這條語(yǔ)句將立即終止該函數(shù)的運(yùn)行。 下面定義的一個(gè)函數(shù)可以返回三個(gè)數(shù)的平均值: double average (double a , double b , double c) { double sum=a+b+c。 return sum/3。 } C語(yǔ)言也支持函數(shù)的內(nèi)聯(lián),方法是在函數(shù)返回類(lèi)型前加 inline。例如: inline double average (double a , double b , double c) { double sum=a+b+c。 return sum/3。 } 函數(shù)的調(diào)用方法和 Pascal 一樣。如果調(diào)用函數(shù)所帶的參數(shù)類(lèi)型和定義的不一樣,程序會(huì)自動(dòng)轉(zhuǎn)換類(lèi)型。下面的語(yǔ)句合法地調(diào)用了剛才定義的函數(shù): num = average( 2, , )。 有一點(diǎn)不同的是,當(dāng)所調(diào)用的函數(shù)不帶參數(shù)時(shí)仍然要寫(xiě)括號(hào),例如: void writeMessage() { printf(Wele to )。 } void output() { writeMessage()。 } C語(yǔ)言同樣支持遞歸調(diào)用。由于 C語(yǔ)言也只能調(diào)用前面定義過(guò)的函數(shù),因此 C同樣需要類(lèi)似于向前引用的方法。具體方法是把需要提前引用的函數(shù)的第一行復(fù)制一份提到前面去。下面的兩種做法都是正確的,其中第一種方法允許在output 函數(shù)里調(diào)用后面的 average,第二種則允許在這句話后面的所有函數(shù)中調(diào)用它。 void output() 11 { double average (double a , double b , double c)。 printf( %f,average( 2, , ) )。 } double average (double a , double b , double c) { double sum=a+b+c。 return sum/3。 } double average (double a , double b , double c)。 void output() { printf( %f,average( 2, , ) )。 } double average (double a , double b , double c) { double sum=a+b+c。 return sum/3。 } 事實(shí)上,向前引用時(shí)參數(shù)名已經(jīng)沒(méi)有意義,因此參數(shù)名可以省略,直接寫(xiě)成這樣: double average (double , double , double )。 C語(yǔ)言中也允許在函數(shù)中定義子函數(shù)(函數(shù)的嵌套)。 標(biāo)準(zhǔn)的 C語(yǔ)言不支持在函數(shù)中定義子函數(shù)(函數(shù)的嵌套),雖然某些編譯器可能支持。 一個(gè)完整的程序代碼的構(gòu)成 代碼前幾行用于包含頭文件,每行包含一個(gè),格式如 下: include 頭文件名 常用的頭文件有 , , , 等等,分別提供一些常用函數(shù)、輸入輸出函數(shù)、字符串函數(shù)和數(shù)學(xué)相關(guān)函數(shù)。注意我們之前用的 printf 函數(shù)是屬于 里的,因此要使用該函數(shù)必須在代碼最開(kāi)頭加入include 。 接下來(lái)是若干個(gè)函數(shù)。這些函數(shù)里必須有一個(gè)名為 main 的函數(shù),它返回的值是一個(gè) int 類(lèi)型,代表程序的退出代碼 (0=正常退出 )。程序會(huì)自動(dòng)尋找這個(gè)函數(shù)作為主函數(shù)執(zhí)行。 下面的代碼是一個(gè)完整的 C 程序代碼,這是我們的第一個(gè)完整的程序代碼: include 12 double average (double a , double b , double c) { double sum=a+b+c。 return sum/3。 } int main() { double a=24。 double b=102。 double c=77。 printf(Matrix% \n轉(zhuǎn)貼請(qǐng)注明出處 , (int)average(a,b,c))。 return 0。 } C 語(yǔ)言速成手冊(cè)(二):布爾值、條件判斷、循環(huán) 邏輯運(yùn)算符 作用 | C | Pascal ++ 等于 | == | = 不等于 | != | 小 于 | | 大于 | | 小于等于 | = | = 大于等于 | = | = 且 | amp。amp。 | and 或 | || | or 非 | ! | not C 語(yǔ)言的 if 語(yǔ)句 C語(yǔ)言中 if語(yǔ)句的寫(xiě)法如下: if (表達(dá)式 ) { 13 表達(dá)式為真時(shí)執(zhí)行的內(nèi)容 } 之前說(shuō)過(guò),如果執(zhí)行的內(nèi)容只有一句話,花括號(hào)可以省略。 下面的語(yǔ)句將返回整數(shù) a的絕對(duì)值: if ( a0 ) a= a。 下面的語(yǔ)句用于實(shí)現(xiàn) 排序網(wǎng)絡(luò) 中的比較算子: if ( ab ) { int c=a。 a=b。 b=c。 } C語(yǔ)言中也有 else if 和 else 的用法,但和 Pascal 不同的是 else 的前一條語(yǔ)句末要保留分號(hào)。下面的語(yǔ)句用于判斷三邊長(zhǎng)分別為 a, b, c 的三角形是什么三角形: if ( a+bc amp。amp。 b+ca amp。amp。 a+cb ) { if ( a==b amp。amp。 b==c ) printf(Regular Triangle)。 else if ( a==b || b==c || a==c ) printf(Isosceles Triangle)。 else printf(Scalene Triangle)。 } else printf(Triangle Doesn39。t Exist.)。 程序員面試題 ( 2) P39 We have two pieces of code,which one do you prefer,and tell why.(下面 程序有兩種寫(xiě)法,請(qǐng)告訴我你青睞哪種,為什么?)美國(guó)某著名計(jì)算機(jī)嵌入式公司 10 月份面試題 // a is a variable 寫(xiě)法 1: if (?A?==a){ a++。 } 寫(xiě)法 2: if(a==?A?){ a++。 } 14 C 語(yǔ)言的 bool 類(lèi)型 C語(yǔ)言中沒(méi)有布爾類(lèi)型。任何一個(gè)整型的變量都可以充當(dāng)布爾變量,用 0表示 False,其它數(shù)(默認(rèn)為 1)表示 True。 觀察下列代碼片斷。 printf(%d \n, 3+5 == 8)。 int a。 a = 3+5==9。 printf(%d \n , a)。 a = 100 = 100。 printf(%d \n , a)。 a = 1。 if(a) printf(a is 1\n)。 a = 2。 if(a) printf(a is 2\n)。 a = 1。 if(a) printf(a is 1\n)。 a = 0。 if(a) printf(a is 0\n)。 if(!a) printf(a is not 0\n)。 這段程序的輸出為: 1 0 1 a is 1 a is 2 a is 1 a is not 0 如果覺(jué)得別扭,你可以使用 _Bool 類(lèi)型。你可以把 _Bool 看作整型,但它只能儲(chǔ)存 0 和 1 兩個(gè)值。 下面三句話將輸出數(shù)字 1,這是因?yàn)?_Bool 類(lèi)型把所有非 0數(shù)都當(dāng)做是1。 _Bool a。 a = 100。 printf(%d, a)。 如果你想像 Pascal 一樣使用 true 和 false,那么你可以包含頭文件。這樣你可以定義變量為 bool 類(lèi)型并賦值為 true 或 false。例如: bool a = true。 if (a) printf(a is true)。 下面是兩個(gè)完整的程序。第一個(gè)程序中 _Bool 可以替換成 int。三種寫(xiě)法都正確,你可以選擇一種自己喜歡的寫(xiě)法。 15 include _Bool isNegative ( int a ) { if (a0) return 1。 else return 0。 } int main() { if ( isNegative(100) ) printf(100 is Negative)。 return 0。 } include include bool isNegative ( int a ) { if (a0) return true。 else return false。 } int main() { if ( isNegative(100) ) printf(100 is Negative)。 return 0。 } C 語(yǔ)言的 for 循環(huán) for 循環(huán)使用下面的語(yǔ)句: for ( 語(yǔ)句 1。 語(yǔ)句 2。 語(yǔ)句 3 ) { 循環(huán)內(nèi)容 } 其中語(yǔ)句 1用于初始化,若語(yǔ)句 2為真(非 0)則進(jìn)入循環(huán);每次循環(huán)后將執(zhí)行語(yǔ)句 3,此時(shí)若仍然滿足語(yǔ)句 2 則繼續(xù)循環(huán),否則退出。語(yǔ)句 123 中,某一種語(yǔ)句可能為空,也可能由多條語(yǔ)句組成(多條語(yǔ)句用逗號(hào)隔開(kāi))。 下面的語(yǔ)句打印 1 到 10 這 10個(gè)數(shù)。以下所有寫(xiě)法都是正確的。通常用第一種寫(xiě)法。 int i。 for (i=1。 i=10。 i=i+1) printf(%d\n, i )。 int i=1。 16 for ( 。 i=10。 i=i+1) printf(%d\n, i )。 int i。 for (i=1。 i=10。 ) { printf(%d\n, i )。 i=i+1。 } int i。