C程序設(shè)計[劉曉霞]_第1頁
C程序設(shè)計[劉曉霞]_第2頁
C程序設(shè)計[劉曉霞]_第3頁
C程序設(shè)計[劉曉霞]_第4頁
C程序設(shè)計[劉曉霞]_第5頁
已閱讀5頁,還剩305頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1C程序設(shè)計程序設(shè)計劉曉霞教授劉曉霞教授2 第一章 C語言概述 第二章 數(shù)據(jù)類型、運算符和表達(dá)式第三章 最簡單的程序設(shè)計第四章 邏輯運算和判斷選取控制第五章 循環(huán)控制第六章 數(shù)組第七章 函數(shù)第八章 編譯預(yù)處理第九章 指針第十章 結(jié)構(gòu)體與共用體第十一章 文件C 程序設(shè)計3第一章 C 語言概述1. C語言的發(fā)展 與計算機(jī)對話是從低級語言開始逐步發(fā)展起來的。 機(jī)器語言 低級語言 匯編語言FORTRAN語言 ALGOL 60語言 COBOL語言 BASIC語言 PASCAL語言 C/C+語言 ADA語言 Java語言高級語言4ALGOL 60 (1960年) CPL語言 (1963年)C語言的發(fā)展 B

2、CPL 語言(1967年) B語言(1970年) C語言(19721973年)2. C語言的特點提供了一整套控制語句(9種),實現(xiàn)了對程序邏輯流的有效控制,這有利于結(jié)構(gòu)化程序設(shè)計。數(shù)據(jù)類型豐富,提供了整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等數(shù)據(jù)類型。可以直接訪問物理地址,進(jìn)行位操作。提供了34種豐富的運算符。具有預(yù)處理功能。具有很好的可移植性。生成目標(biāo)程序質(zhì)量高,程序執(zhí)行效率高。53. 簡單的C程序介紹例1.1 main() printf(This is a c program.n); 例1.2 main() int a,b,sum; a=123;b=456; sum=

3、a+b; printf(sum is %dn,sum); 6例1.3 main() int a,b,c; scanf(%d,% d,&a,&b); c=max(a,b); printf(”max=%dn,c); int max(x,y) int x,y; int z; if (xy) z=x; else z=y; return(z) ; C函數(shù)從main()開始執(zhí)行。變量定義和語句之后必須有一個分號(;)。一行內(nèi)可寫幾個語句,一個語句可分寫在多行??梢杂?*/作注釋。語言沒有輸入輸出語句。7C 程序是由函數(shù)組成的,每一個源程序至少包含一個main()函數(shù)。一個函數(shù)是由函數(shù)的說明

4、部分和函數(shù)體兩部分組成。 函數(shù)的說明部分 函數(shù)類型 函數(shù)名 函數(shù)參數(shù) 形參類型 形參 函數(shù)體 (括在一對大括弧-中的部分) 變量定義(int a,b,c;) 函數(shù)體 執(zhí)行部分(由若干語句組成) 特例:空函數(shù) dump() int max(x,y)int x,y;8第二章數(shù)據(jù)類型、運算符和表達(dá)式1.4 C程序的上機(jī)部驟 三個步驟:編輯,編譯(F9),運行(F10)。1. C的數(shù)據(jù)類型整型字符型實型(浮點型)枚舉類型數(shù)組類型結(jié)構(gòu)體類型共用體類型單精度型雙精度型指針類型空類型構(gòu)造類型基本類型數(shù)據(jù)類型92. 常量常量:程序中其值不發(fā)生變化的量。語言中有數(shù)值常量字符常量字符串常量符號常量整型實型十進(jìn)制八

5、進(jìn)制(由數(shù)字開頭)十六進(jìn)制( 由0 x 或0X 開頭)常用形式(3.14159 , -0.555 , .666)指數(shù)形式(0.55e5 , 3.33E-3 , 4e+2(用單引號括起來的一個字符。如: a, D)(用雙引號括起來的一串字符。如:abcd)(用一個標(biāo)識符代表一個常量)轉(zhuǎn)義字符:常用“”開頭后跟一個字符,但含義改變。見下表:注意: a 和a的區(qū)別10字符形式功能n 換行t 橫向跳格(即跳到下一個輸出區(qū)) v 橫向跳格 b 退格 r 回車 f 走紙換頁 反斜杠字符“” 和 ” 單引號字符();雙引號字符(”) ddd 1到3位8進(jìn)制數(shù)所代表的字符 xhh 1到2位16進(jìn)制數(shù)所代表的字

6、符例ls2_1: main() printf( ab ct derftgn); printf(htibbj k);11例ls2_2 #define PRICE 30 main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);符號常量例2.3: 整型數(shù):125 , 0125 , 0 x125 , +35 , -235 , -035 實型數(shù):3.14159 , -555.6 , 888.0 , 0.88 , 8.88e+18 注意: 用指數(shù)形式表示的浮點數(shù)必須有尾數(shù),指數(shù)部分必須是整數(shù)。如:e4 , .e3 , 0.

7、25e4.5 , e 等是錯誤的。12. 變量變量:程序中其值可發(fā)生變化的量。每一個變量都應(yīng)有一個名字,稱為變量名。而且在內(nèi)存中占據(jù)一定的存儲空間,用來存放變量的值。 標(biāo)識符:由程序員定義的單詞,用它來命名程序中的一些實體(如函數(shù)名、變量名、類型名、數(shù)組名等)。語言規(guī)定標(biāo)識符由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。(注意: 大小寫字母不一樣。 長度任意。 不要采用系統(tǒng)保留字。)語言規(guī)定對使用的變量必須先定義,后使用。目的:保證程序中變量名的正確使用。可分配相應(yīng)的存儲空間。便于檢查變量所進(jìn)行的運算是否合法。13整型變量:(四種類型) 類型 所占位數(shù) 數(shù)的范圍 基本型(i

8、nt) 16 -3276832767 短整型(short int) 16 -3276832767 長整型(long int) 32 -21474836482147483647 無符號整型(unsigned int) 16 065535 無符號短整型(unsigned short) 16 065535 無符號長整型(unsigned long) 32 04294967295 整型變量的定義格式: 類型 變量名表列; 例ls2-4 main() int a,b,c,d; c=a+u;d=b+u; unsigned u; printf(a+u=%d,b+u=%dn,c,d); a=12;b=-24;

9、u=10; 無符號型14實型變量:(兩類) 類型 所占位數(shù) 數(shù)的范圍 單精度實型(float) 32 10 10 雙精度實型(double) 64 10 10 單精度實型提供7位有效數(shù)字,雙精度實型提供1516位有效數(shù)字。 如:float a; a=111111.111 (最后兩位小數(shù)不起作用) 而:double a; a=111111.111 (全部接收)-3838-308308字符變量:char 用來存放一個字符常量。占一個字節(jié)(8位),存放該字符的ASCII碼值。 如:char c1,c2; c1=a;c2=b;15例2.5:main() char c1,c2; c1=97;c2=98;

10、 printf(%c %c,c1,c2); 例2.6: main() char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; printf(%c %c,c1,c2); 97980110000101100010c1c1c2c2c1=a;c2=b;a=A+32ASCII碼表中大小寫字母之間具有:C語言中允許字符型數(shù)據(jù)與整型數(shù)據(jù)互相賦值。如: int i; i=a; char c; c=97;16例2.7:main() int i; char c; i=a; c=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 輸出結(jié)果:a,97 a

11、,97變量賦初值:在定義變量的同時給變量初始化。如:int a=10; float f=5.55; char c=a; int a=15,b=15,d=15;不能寫成:int a=b=d=15;格式為:類型變量名常量值請分析下面程序:相當(dāng)于:int a; a=10;17main() int a; printf(n%d,a); 輸出結(jié)果是什么?沒有賦初值的變量,其值為一個不定的值。引用該變量,就回出現(xiàn)上面程序中的問題,產(chǎn)生莫名奇妙的結(jié)果。數(shù)據(jù)類型轉(zhuǎn)換: C語言允許不同類型的數(shù)值型數(shù)據(jù)可以混合運算,運算時系統(tǒng)自動將數(shù)據(jù)轉(zhuǎn)換成同一類型數(shù)據(jù)。doublelongunsignedintfloatchar

12、,short低級高級必定的轉(zhuǎn)換必定的轉(zhuǎn)換18例如: 若有 int i, float f, double d, long e 則 10+a+i*f-d/e 表達(dá)式運算次序為: 將a轉(zhuǎn)換成97,然后10+a運算。 將i和f都轉(zhuǎn)換成double型,然后i*f運算。 將的結(jié)果轉(zhuǎn)換為double型,然后與的結(jié)果相加。 將e轉(zhuǎn)換成double型,然后d/e運算。 用的結(jié)果減的結(jié)果。強(qiáng)制類型轉(zhuǎn)換:格式如下 例如:(double) a、(int)(x+y)、(float)(5%3)、(int)x+y算術(shù)運算符和算術(shù)表達(dá)式基本算術(shù)運算符:+ 、 - 、 * 、 / 、 %(注:兩個整數(shù)相除,結(jié)果為整數(shù)。)(類型

13、名)(表達(dá)式)19算術(shù)表達(dá)式和運算符的優(yōu)先級與結(jié)合性:用算術(shù)運算符和括號“( )”將運算對象連接起來,符合語法規(guī)則的式子稱為算術(shù)表達(dá)式。運算對象:常量、變量、函數(shù)等。優(yōu)先級:先乘除后加減。結(jié)合性:自左至右。例如:a*b/c-1.5+a ; a-(b*c)自增、自減運算符:+ , - (使變量的值增或減)結(jié)合性:自右至左。 例如: +i , -i (先自增或自減,后引用) i+ , i- (先引用,后自增或自減) i=3; printf(“%d”,+i); i=3; printf(“%d”,i+);20賦值運算符和賦值表達(dá)式賦值符號: (將賦值符右邊表達(dá)式的值賦給賦值符左邊的一個變量。) 賦值運

14、算符的數(shù)據(jù)類型若不一致,則要進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換方式為: 將實型數(shù)據(jù)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。如:i=5.65 , i 的值為 5。 將整型數(shù)據(jù)賦給實型變量時,數(shù)值不變。 將字符數(shù)據(jù)賦給整型變量時,將字符數(shù)據(jù)放到整型變量低8位中。 兩種情況: 若字符最高位為1,整型變量的高8位置1,否則高8位置0。若把字符處理為無符號的量,整型變量的高8位置0。1 1 11 11 1011 11 11 101 1 11 11 11C=37611 11 11 10 11 11 11 100 0 00 00 00C=376i的值為254i的值為-221 將整型數(shù)據(jù)賦給長整型變量時,將整型數(shù)據(jù)放入長整型變量

15、的低16位,若整型數(shù)為負(fù)數(shù),長整型變量的高16位置1,否則長整型變量的高16位置0。 將長整型數(shù)據(jù)賦給整型變量時,取長整型數(shù)據(jù)低16位。 將unsigned int 賦給 long int 時,將unsigned int 放入long int的低16位,高16位置0。 unsigned int 賦給 int 將unsigned long 賦給 long 時,原樣賦值。 unsigned short 賦給 short 例如:若unsigned int a=65535; int b; b=a; 則:b的值為-1。 int 賦給 unsigned int 將 long 賦給 unsigned lon

16、g 時,原樣賦值。 short 賦給 unsigned short 例如:main() unsigned a; int b=-1; a=b; printf(“%u”,a); 應(yīng)注意數(shù)值的范圍,超出則數(shù)據(jù)出錯在負(fù)數(shù)時,數(shù)值發(fā)生變化。11 11 11 11 11 11 11 111 1 11 11 11 11 11 11 11ba11 11 11 11 11 11 11 111 1 11 11 11 11 11 11 11ba22復(fù)合的賦值運算符:(共十個)+= , = , *= , /= , %= , = , &= , = , |=例如:a+=3 等價于 a=a+3 x*=y+8 等價于

17、 x=x*(y+8) x%=3 等價于 x=x%3賦值表達(dá)式:由賦值運算符將一個變量和一個表達(dá)式連接起來的式子。格式為: 位運算注:若右邊為表達(dá)式應(yīng)加圓括號“( )”!23 賦值運算符結(jié)合性為:“自右而左”。 例如:a=b=c=5 a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) a+=a =a*a 若 a=5,則賦值表達(dá)式的值為40。 逗號運算符和逗號表達(dá)式 逗號運算符: ,格式:表達(dá)式1,表達(dá)式2,表達(dá)式3,表達(dá)式n 優(yōu)先級:最低。逗號表達(dá)式的值為表達(dá)式n的值。例如:a=3*5,a*4 (a=3*5,a*4),a+5 x=(a=3,6*3) x=a=3,6*a若

18、x的值是8, 則表達(dá)式x*=x-=x+=x的值?24第三章 最簡單的程序設(shè)計、語句概述語言的語句是用來向計算機(jī)系統(tǒng)發(fā)出操作指令。每一個為實現(xiàn)特定目的的程序都包含若干個語句。語句的五種分類: 控制語句:完成一定的控制功能(條)。 函數(shù)調(diào)用語句:由一次函數(shù)調(diào)用加一個分號構(gòu)成。 如:scanf(%dn,&a); 表達(dá)式語句:由表達(dá)式加一個分號構(gòu)成。如:i=i+1; 空語句:由一個分號構(gòu)成。 復(fù)合語句;由一對大括號“”組成。 如:z=x+y; b=15; printf(%d,b); 25、程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu):從前向后順序執(zhí)行程序。選擇結(jié)構(gòu):根據(jù)判斷條件的結(jié)果選擇執(zhí)行程序。ABABN-S

19、流程圖流程圖PABP真假AB流程圖N-S流程圖26另:由選擇結(jié)構(gòu)派生出的多分支選擇結(jié)構(gòu):A1A2AiAnk=k1k=k2k=kik=knkB27循環(huán)結(jié)構(gòu):根據(jù)條件反復(fù)的執(zhí)行某一段程序若干次。 當(dāng)型循環(huán)結(jié)構(gòu):PA真假當(dāng)P為真AN-S流程圖流程圖 直到型循環(huán)結(jié)構(gòu):PA真假直到P為真A流程圖N-S流程圖28、賦值語句由賦值表達(dá)式加一個分號構(gòu)成。 如:h=49; 注意:賦值語句與賦值表達(dá)式的區(qū)別。 如:if (a=b)0) t=a;賦值表達(dá)式賦值語句、數(shù)據(jù)輸出語言數(shù)據(jù)輸出,是由調(diào)用輸出函數(shù)來完成。putchar函數(shù)功能:向終端輸出一個字符。 格式: putchar (ch)函數(shù)名參數(shù)29例4.1:#i

20、nclude stdio.h main() char a,b,c; a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c);putchar(n); 格式輸出函數(shù)printf() 功能:輸出若干個任意類型的數(shù)據(jù)。格式:printf(格式控制,參數(shù)1,參數(shù)2,參數(shù)3, )由格式說明和普通字符構(gòu)成輸出數(shù)據(jù)。由表達(dá)式構(gòu)成。格式說明:由%后跟一個格式字符組成。中間可插入l、m、n、和幾個附加符號。 普通字符:照原樣輸出。30例如:printf(a=%d b=%d,a,b); (設(shè)a=12;b=15;) 輸出結(jié)果為: a=12 b=15 格式字符: 格式字符 作用 d

21、以帶符號的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號)。 o以8進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0)。 x以16進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0 x)。 u 以無符號十進(jìn)制形式輸出整數(shù)。 c 以無符號形式輸出,只輸出一個字符。 s 輸出字符串。 f以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)。 e 以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位數(shù)為6位。 g選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0。31例:long a=135790; printf(%ld,a );例:a=-1; printf(%d,%o,%x,a,a,a);例:main() unsined int a=

22、65535; int b= -2; printf(a=%d,%o,%x,%un,a,a,a,a); printf(b=%d,%o,%x,%un,b,b,b,b); 例:main() int i=234; char c=a; printf(%d,%5d,%c,%3c,i,i,c,c); 1 1 11 11 11 11 11 11 11a=-1輸出為:-1,177777,ffffa=-1,177777,ffff,65535b=-2,177776,fffe,65534結(jié)果為234, 234,a, a結(jié)果為指定輸出寬度。數(shù)據(jù)寬度不夠,前面補(bǔ)空格,超過原樣輸出。32 附加格式說明字符: 字 符 作用 字

23、母 用于長整型整型,可加在格式符d、o、x、u前面。 m(代表一個正整數(shù)) 數(shù)據(jù)最小寬度。 .n(代表一個正整數(shù)) 對實數(shù),表示輸出n位小數(shù);對字符串,表示截取的字符個數(shù)。 一 輸出的數(shù)字或字符在域內(nèi)向左靠。例:main() printf(%3s,%7.2s,%.4s,%-5.3sn, CHINA, CHINA, CHINA, CHINA); 例:main() float f=123.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 輸出為: CHINA, CH,CHIN,CHI 輸出為: 123.455994 123.455994 12

24、3.46 123.46 123.4633例:main() float f=123.456; printf(%e %10e %10.2e %.2e %-10.2en,f,f,f,f,f); 輸出結(jié)果為: 1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002 13列13列10列9列10列例: main() float f=123.456; printf(%f %10e %gn,f,f,f); 輸出為:123.456000 1.234560e+002 123.45613列10列10列格式控制字符串中用連續(xù)兩個%,表示輸出一個%。 如:pr

25、intf(“%f%”,1.0/3); 輸出為:0.333333%345、數(shù)據(jù)輸入語言數(shù)據(jù)輸入,是由調(diào)用輸入函數(shù)來完成。getchar函數(shù)功能: 從輸入設(shè)備輸入一個字符。 格式: getchar () 例5.1 #include stdio.h main() char c; c=getchar(); putchat(c); 格式輸入函數(shù)scanf() 功能:輸入若干個任意類型的數(shù)據(jù)。 格式:scanf(格式控制,參數(shù)1,參數(shù)2,參數(shù)3, ) 只能接收一個字符!由格式說明和普通字符構(gòu)成變量的地址或字符串的首地址。35格式說明:由%后跟一個格式字符組成。中間可插入、h、m、幾個附加字符。 普通字符:

26、照原樣輸入。例如:main() int a,b,c; scanf(%d%d%d, &a,&b,&c); printf(%d,%d,%dn,a,b,c); 輸入格式為:5 6 7若用:scanf(%d,%d,%d, &a,&b,&c); 則輸入格式為:5,6,7若用:scanf(%d:%d: %d, &a,&b,&c); 則輸入格式為:5:6: 736 格式字符:格式字符 作用 d 用來輸入十進(jìn)制整數(shù)。 o 用來輸入8進(jìn)制整數(shù)。 x 用來輸入16進(jìn)制整數(shù)。 c 用來輸入單個字符。 用來輸入字符串,在輸入時以非空白字符開始,以

27、第一個空白字符 結(jié)束。字符串以串結(jié)束標(biāo)志0作為其最后一個字符。 f用來輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入。 e 與f作用相同,e與f可以互相替代。s例如:main() int a; char b; float c; scanf(%d%c%f, &a,&b,&c); printf(%d,%c,%fn,a,b,c); 對unsigned型數(shù)據(jù)可以用d,o,x格式輸入37 附加格式說明字符: 字 符 作用 字母l 用于輸入長整型數(shù)據(jù),可加在格式符d、o、x、f、e前面。 字母h 對實數(shù),表示輸出n位小數(shù);對字符串,表示截取的字符個數(shù)。 m(一個正整數(shù)) 指定輸入數(shù)據(jù)所占寬

28、度。 * 表示本輸入項在讀入后不賦給相應(yīng)的變量。例 :scanf(%3d%3d,&a,&b); 若輸入數(shù)據(jù)格式為:123456則將123賦給a,456賦給b。例: scanf(%c%c%c,&c1,&c2,&c3); 若輸入數(shù)據(jù)格式為: a b c則將a賦給c1, 賦給c2,b賦給c3。 例: scanf(%d%c%f,&a,&b,&c); 若輸入數(shù)據(jù)格式為:1234a123o.26 例: scanf(%2d %*3d %2d,&a,&b); 若輸入數(shù)據(jù)格式為: 12 345 67 則將12賦給a,67賦給b。ab

29、c38、程序舉例ls3_10輸入三角形的三邊長,求三角形的面積。(設(shè)輸入的三邊長a,b,c能構(gòu)成三角形) #include math.h” main() float a,b,c,s,area; scanf(“%f,%f,%f”,&a,&b,&c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2fn,a,b,c,s); printf(area=%7.2fn,area); ls3_11從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。ls3_12

30、求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,設(shè)b2-4ac039main()int a=0123,b=0 x123;float c=111111.1111111111,d=1.23e3;double x=111111.1111111111,y=1.23e3;printf(%o,%dn,a,a);printf(%x,%dn,b,b);printf(%f,%fn,c,x);printf(%f,%en,d,y);例ls3_140main()int i=0,j=0, x,y; i=i+1; j+;printf(%d,%dn,i,j); /* 1,1 */x=+i; y=j+;printf(%

31、d,%dn,x,y); /* 2,1 */printf(%d,%dn,+y,y); /*from right to leght 2,1*/printf(%d,%dn,+x,y+); /*3,2 */printf(%d,%d,%dn,i,(i+)+(i+)+(i+),i); /*5,9,2*/printf(%d,%d,%dn,i,(+i)+(+i)+(+i),i); /*8,21,5*/例ls3_241第四章 邏輯運算和判斷選取控制1. 關(guān)系運算符和關(guān)系表達(dá)式關(guān)系運算符用于兩個數(shù)值之間的比較運算。語言提供6種關(guān)系運算符,它們是:、=、=、!=優(yōu)先級相同優(yōu)先級相同高到低關(guān)系運算符、算術(shù)運算符和賦值

32、運算符的優(yōu)先級為:算術(shù)運算符關(guān)系運算符賦值運算符低高42 例如: ca+b 等效于 c(a+b) ab!=c 等效于 (ab)!=c a=bc 等效于 a=(bc 等效于 a=(bc)關(guān)系表達(dá)式:用關(guān)系運算符將兩個表達(dá)式連接起來的式子。關(guān)系表達(dá)式運算結(jié)果為:“真”或“假”值。語言用1代表“真”值,用0代表“假”值。同時系統(tǒng)在運算時以非0為“真”值,以0為“假”值。例如:若 a=3,b=2,c=1 f=abc 則f的值為0。. 邏輯運算符和邏輯表達(dá)式語言提供3種邏輯運算符:邏輯運算符 結(jié)合性 優(yōu)先級& 與 自左至右 中 | 或 自左至右 低 ! 非 自右至左 高43邏輯表達(dá)式:用邏輯運算

33、符將關(guān)系表達(dá)式或邏輯量連接起來的式子。運算結(jié)果為:“真”或“假”值。系統(tǒng)在運算時以非0為“真”值,以0為“假”值。邏輯運算:ab&00010011ab|0111001101a!a例如: 4&0|2 的值為1 5&!0 的值為1與運算或運算非運算44 運算符 優(yōu)先級 邏輯非! 高算術(shù)運算符 關(guān)系運算符 &和| 賦值運算符 低邏輯、關(guān)系、算術(shù)和賦值運算符的優(yōu)先級為:例如:(ab)&(xy) 可以寫成ab&xy (a=b)|(x=y) 可以寫成 a=b|x=y (!a)|(ab) 可以寫成 !a|ab 53&2|8b)&n=c4) 設(shè)

34、a=1,b=2,c=3,m=1,n=1。 則 m為0 , n 為 1。請問表達(dá)式 x0&xb?a:b 條件運算符的優(yōu)先級低于邏輯、關(guān)系、算術(shù)運算符高于賦值運算符。如: ab?a:b+1 相當(dāng)于 (ab)?a:(b+1) 47條件運算符的結(jié)合性為:“自右至左”。如: ab?a:cd?c:d 相當(dāng)于 ab?a:(cd?c:d)注意:條件表達(dá)式中的表達(dá)式1、表達(dá)式2、表達(dá)式3可以是不同的類型。如ls4_1: main() float p; char x,y;scanf(%c%c,&x,&y); p=xy?1:1.5; printf(n%f,p); xy真(非0)假(0) p=

35、1 p=1.5 輸出p值48. if 語句 作用:判定給定的條件,決定執(zhí)行不同段的程序。if語句的格式: (a)if (表達(dá)式) 語句1 else 語句2 表達(dá)式語句1語句2真(非0)假(0)只能用一個語句,若有多個語句可用復(fù)合語句。執(zhí)行過程:括號“()”不能缺省49例:if (xy) z=x; else z=y;例:if (xy) printf(%d,%d,x,y); else printf(%d,%d,y,x);(b) if 語句可以省略else部分,變?yōu)槿缦赂袷剑篿f (表達(dá)式) 語句執(zhí)行過程:表達(dá)式結(jié)果為真,執(zhí)行表達(dá)式后面的語句,否則不執(zhí)行該語句,而執(zhí)行if語句下面的語句。 例ls4_

36、5 輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。main() float a,b,t; scanf(%f,%f,&a,&b); if (ab) t=a; a=b; b=t; printf(%5.2f,%5.2f,a,b); abt tab例:if (x%2=0) printf(“It is an even numbern”); else printf(“It is an odd numbern”);50例ls4_6 輸入三個實數(shù),按代數(shù)值由小到大次序輸出這三個數(shù)。main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&

37、c); if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (bc) t=b;b=c;c=t; printf(%5.2f,%5.2f,%5.2f,a,b,c); abcabc小大(c) if語句實現(xiàn)多分支選擇結(jié)構(gòu)的格式: if (表達(dá)式1) 語句1 else if (表達(dá)式2) 語句2 else if (表達(dá)式m) 語句m else 語句n51表達(dá)式1語句1語句2真(非0)假(0)執(zhí)行過程:表達(dá)式2真(非0)表達(dá)式3語句3真(非0)表達(dá)式4語句4語句5假(0)假(0)假(0)真(非0) if (score=90) l=A; else if (score=8

38、0) l=B; else if (score=70) l=C; else if (score=60) l=D; else l=E; Example52if語句的嵌套:在if語句的語句1或語句2部分,若使用if語句,稱為if語句 的嵌套。如: if (表達(dá)式1) if (表達(dá)式2) 語句1 else 語句2 else if (表達(dá)式3) 語句3 else 語句4內(nèi)嵌if語句例ls4_7 有一函數(shù)如下,編一程序,輸入一個x值,輸出y值。 -1 (x0)main() int x,y; scanf(%d,&x); if (x0) y=1; printf(x=%d,y=%dn,x,y);main

39、()int x,y; scanf(%d,&x); if (x=0) if (x0) y=1; else y=0; else y=-1;53注意:If語句嵌套使用時,if與else是以最近匹配規(guī)則來匹配。例: y=-1; if (x!=0) if(x0) y=1; else y=0;例 : y=0; if (x=0) if(x0) y=1; else y=-1;請分析它們的運行結(jié)果?例: y=-1; if (x0) y=1; if (x=0) y=0;例: y=0; if (x!=0) if(x0) y=1; else y=-1;54.多分支選擇結(jié)構(gòu)亦可用switch語句實現(xiàn):A1A2A

40、iAnKk=k1k=k2k=kik=knKB55switch 語句 格式:switch(表達(dá)式) case 常量常量表達(dá)式1:語句序列1 case 常量常量表達(dá)式2:語句序列2 case 常量常量表達(dá)式3:語句序列3 case 常量常量表達(dá)式n:語句序列n default: 語句序列n+1 執(zhí)行過程為:當(dāng)表達(dá)式的值等于常量表達(dá)式i的值,則則從語句序列從語句序列i開始執(zhí)行到語句序列開始執(zhí)行到語句序列n+1為止為止 。若表達(dá)式的值不等于任何一個常量表達(dá)式的值,則只執(zhí)行default后面的語句。 一般在每個語句序列之后加一個break語句,這樣在執(zhí)行語句序列i之后,使流程跳出switch結(jié)構(gòu),實現(xiàn)多

41、分支選擇結(jié)構(gòu)。一般為整型或字符型表達(dá)式可以是一個語句,也可以是幾個語句。Ls4_2.c56例:編寫一個能進(jìn)行兩個操作數(shù)加減乘除四則運算的計數(shù)器模擬程序。(ls4_3.c)main()char op; float x,y; printf(“Please input an arithmetic expression:); scanf(%f%c%f,&x,&op,&y); switch (op) case + : printf(=%fn,x+y); break; case - : printf(=%fn,x-y); break; case * : printf(=%fn,x*

42、y); break; case / : if (y!=0.0) printf(=%fn,x/y); else printf(Divisor is zeron); break; default: printf(Illegal operatorn); 輸入:兩個操作數(shù)和運算符計算:根據(jù)運算符確定運算輸出:運算結(jié)果+進(jìn)行加運算。-進(jìn)行減運算。*進(jìn)行乘運算。/進(jìn)行除運算。57例:分析下列程序的輸出結(jié)果。(ls4_.c) main() int i=1,j=0,m=1,n=2; switch(i+) case 1: m+;n+; case 2: switch(+j) case 1: m+; case 2:

43、 n+; case 3: m+;n+;break; case 4: m+;n+; printf(m=%d,n=%dn,m,n); 執(zhí)行結(jié)果為:m=4,n=5switch語句的嵌套58程序舉例 寫程序,判某一年是否閏年。輸入:年(year)計算:判是否閏年輸出:閏年或非閏年(leap)能被4整除,但不能被100整除。能被4整除,又能被400整除。59main()int year, leap; scanf(“%d”,&year); if (year%4=0) if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1;

44、else leap=0; if (leap) printf(“%d is”,year); else printf(“%d is not”,year); printf(“ a leap yearn”); Lx4_1.c60main()int x,x1; scanf(“%d”,&x1); if (x10) x=-x1; if (x10) printf(“x=%d y=1n”,x1); else if (x100) printf(“x=%d y=2n”,x1); else if (x1000) printf(“x=%d y=3n”,x1); else if (x0,有兩個不等實根。b2-4a

45、c0,有兩個共軛復(fù)根。62#include math.hmain()float a,b,c,disc,x1,x2,realpart,imagpart; scanf(%f,%f,%f,&a,&b,&c); printf(The equation ); if (fabs(a)=1e-6) printf(is not quadratic); else disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf( has distinct real ro

46、ots:%8.4fand%8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(has complex roots:n); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); Lx4_2.c請問該程序有無問題?63給出一百分制成績,要求輸出成績等級A、B、。90分以上為A ,8089分為B ,7079分為 ,6069分為 ,60分以下為 。64main()int x; scanf(%d,&am

47、p;x); if (x100|x0) printf(“input errorn); else x=x/10; switch (x) case 10: case 9: printf(An);break; case 8: printf(Bn);break; case 7: printf(Cn);break; case 6: printf(Dn);break; default: printf(En); Lx4_3.c65 運輸公司對用戶計算運費,距離越遠(yuǎn),每公里的費用越低。標(biāo)準(zhǔn)如下:main()int s;float p,w,d,f; scanf(“%f,%f,%d”,&p,&w,&

48、amp;s); if (s250 ) d=0; else if (s500) d=2; else if (s1000) d=5; else if (s2000) d=8; else if (s3000) d=10; else d=15; f=p*w*s*(1-d/100.0); printf(“freight=%f”,f); S250 沒有折扣 250s500 2%折扣 500s1000 5%折扣 1000s2000 8%折扣 2000s3000 10%折扣3000s 15 %折扣運費f=每噸每公里運價p*重量w*距離s*(1-折扣d/100)66S250 S/250=0沒有折扣250s500

49、 S/250=12%折扣500s1000 S/250=2,35%折扣1000s2000 S/250=4,5,6,78%折扣2000s=3000) c=12;else c=s/250;switch(c)case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4:case 5:case 6:case 7: d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;f=p*w*s*(1-d/100.0);printf(“%f”,f);將第一欄

50、的條件轉(zhuǎn)換為第二欄的常量,才可用switch 語句注意67 輸入一個日期(含年、月、日),輸出該日是該年的第幾天。main() int year,month,day,d=0,flag=1; printf(“nplease input year,month,day:”); scanf(“%d%d%d”,&year,&month,&day); switch(month) case 1:d=0;break; case 2:d=31;break; case 3:d=31+28;break; case 4:d=31+28+31;break; case 5:d=31+28+31+3

51、0;break; case 6:d= 31+28+31+30+31;break; case 7:d= 31+28+31+30+31+30;break;68 case 8:d= 31+28+31+30+31+30+31;break; case 9:d= 31+28+31+30+31+30+31+31;break; case 10:d= 31+28+31+30+31+30+31+31+30;break; case 11:d= 31+28+31+30+31+30+31+31+30+31;break; case 12:d= 31+28+31+30+31+30+31+31+30+31+31;break;

52、 default :printf(input error of month!n);flag=0; if (m2)&(year%4=0)&year%100!=0|(year%400=0) d+; d=d+day; if (flag) printf(year=%d month=%d day=%d-no=%dn”,year,month,day,d);小結(jié)本章69 第五章 循 環(huán) 控 制循環(huán)控制結(jié)構(gòu)在程序中是指對某段程序或某條語句根據(jù)條件重復(fù)執(zhí)行。語言提供了while、do-while和for三種支持循環(huán)控制結(jié)構(gòu)的語句。1. while語句while語句是支持“當(dāng)型”循環(huán)控制結(jié)構(gòu)的語句

53、。一般格式為:while (表達(dá)式) 語句執(zhí)行過程:表達(dá)式語句真(非0)假(0)當(dāng)表達(dá)式為真語句N-S流程圖若有多個語句可用復(fù)合語句70 100例5.1 求n。 n=1輸入:無計算:1+2+3+100輸出:計算的和sum=0;i=0當(dāng)i100i=i+1 sum=sum+imain()int sum=0;i=0; while (i=100main()int sum=0;i=0; do i+; sum=sum+i; while (i100); printf(sum=%dn,sum);注意:兩者的不同73輸入100個字符,統(tǒng)計其中空格、星號及小寫字母的個數(shù)。# include “stdio.h”ma

54、in()int i=1,blank=0,star=0,letter=0; char c;while (i=a &c=z) letter+; i+; printf(“blank=%dnstar=%dnlletter=%dn”,blank,star,letter);能否將if 語句改為:if (c= ) blank+;else if (c=*) star+;else letter+; 74 while和do_while語句的比較:main()int sum=0;i=0; scanf(%d,&d); while (i10) i+; sum=sum+i; printf(sum=%dn,

55、sum);main()int sum=0;i=0; scanf(%d,&d); do i+; sum=sum+i; while (i10) printf(sum=%dn,sum);我們看到:當(dāng)i=10時,兩程序的結(jié)果就不同了。753. for 語句for語句是一種使用比while語句更加靈活的循環(huán)控制語句。一般格式為:for (表達(dá)式表達(dá)式1;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 語句 執(zhí)行過程:表達(dá)式2語句真(非0)表達(dá)式1表達(dá)式3假(0)先求解表達(dá)式;(只求一次)求解表達(dá)式2,若為真(非0)值,則執(zhí)行語句,然后求解表達(dá)式3,再轉(zhuǎn)到求解表達(dá)式2。若為假(0)值, 則結(jié)束for語句的執(zhí)行。

56、76例如: main() int i,sum=0; for (i=1;i=100;i+) sum=sum+i; printf(“sum=%dn”,sum); 和下面程序比較,我們可以看出功能一樣。main()int sum=0;i=1; while (i=100) sum=sum+i; i+; printf(sum=%dn,sum);練習(xí):計算 12+22+32+ +10277For語句三個表達(dá)式的使用說明:三個表達(dá)式都可缺省,但分號(;)不能省略。若表達(dá)式1缺省,則從表達(dá)式2開始執(zhí)行。若表達(dá)式2缺省,則認(rèn)為表達(dá)式2始終為真,循環(huán)無終止地進(jìn)行下去。例如: for ( ;i=100;i+) su

57、m=sum+i; for (i=1; ;i+) sum=sum+i; for (i=1;i=100; ) sum=sum+i;i+; for ( ;i=100; ) sum=sum+i;i+; for ( ; ; ) 語句省略表達(dá)式1省略表達(dá)式2省略表達(dá)式3省略表達(dá)式1,3循環(huán)無終止地進(jìn)行下去78三個表達(dá)式可以是語言的任意型表達(dá)式。例如: for ( sum=0,i=1;i=100;i+) sum=sum+i; for (i=0,j=100 ;i=j;i+,j-) k =i+j; for (i=0 ;(c=getchar()!=n;i+=c) ; for (i=0,j=100 ;i+,i=j;

58、j-) k=i+j; 逗號表達(dá)式逗號表達(dá)式i=0;j=100當(dāng)i=jk=i+j;i+;j-;空語句逗號表達(dá)式79例:輸入10個整數(shù),輸出其中最大的一個。main()int x,max,i; scanf(“%d”,&max); for (i=1;i=9;i+) scanf(“%d”,&x); if (maxx) max=x; printf(“max=%dn”,max);請將此程序改為求10個數(shù)中的最大數(shù)和最小數(shù)?main()int x,max,min,i; scanf(“%d”,&max);min=max; for (i=1;i=9;i+) scanf(“%d”,&

59、;x); if (maxx) min=x; printf(“max=%dn”,max); printf(“min=%dn”,min); 80例5.3:用for語句編寫一個計算1+3+5+ +(2*i-1)的程序,其中 i=1,2,3, ,100。輸入:無計算:1+3+5+(2*i-1)輸出:計算的和sum=0;i=1當(dāng)i=100 sum=sum+(2*i-1) i=i+1main()int sum=0,i; for (i=1;i=100;i+) sum=sum+2*i-1; printf(sum=%dn,sum);練習(xí):任給正整數(shù)n,計算 1!+2!+3!+ +n!81例5.4:任給正整數(shù)n,

60、計算1!+2!+3!+ +n! 。輸入:無計算: 1!+2!+3!+ +n!輸出:計算的和sum=0;i=1;t=1;當(dāng)i=n t=t*i sum=sum+ti+main()long sum,t; int i,n; printf(input n=); scanf(%d,&n); t=1;sum=0; for (i=1;i=n;i+) t=t*i; sum=sum+t; printf(sum=%ldn,sum);對數(shù)列的任一項都是在其前一項的基礎(chǔ)上計算出來的,設(shè)t為第i項的前一項,則第i項的值為t*i。4. 程序舉例82 例:求Sn=a+aa+aaa+aaa之值,其中a是一個數(shù)字,n由鍵盤輸入。n個amain()int a,n,i; long int sum=0,term=0; scanf(“%d,%d”,&a,&n); for (i=1;i=10-6 pi=pi+term n=n+2 sign=-sign term=sign*1/n pi=pi*4輸出pi#include “math.h”main()int sign=1 ;float n=1.0,term=1,pi=0; while (fabs(term)=1e-6) pi=pi+term; n=n+2; sign=-sign; term=sign*1/n; pi=pi*4; printf(“pi=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論