譚浩強(qiáng)教授著、清華大學(xué)出版社出版的《c程序設(shè)計(jì)》 (1)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、printf函數(shù) ——格式輸出scanf函數(shù) ——格式輸入putchar函數(shù)——輸出字符getchar函數(shù)——輸入字符數(shù)據(jù)類型 int %d, %ld float %f, %8.3f double %lf char %c,復(fù)習(xí)(Review),C語言并沒有規(guī)定函數(shù)參數(shù)的進(jìn)棧次序,也就是函數(shù)參數(shù)的求值可能是自左向右,也可能是自右向左,TC是自右向左,main(){int x=

2、3; printf("%d,%d,%d\n",x,x++,x); printf("%d\n",x); printf("%d,%d,%d\n",x,++x,x); printf("%d\n",x);}結(jié)果為4,3,345,5,45,第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),編程將大寫字母“CHINA”譯成密碼。密碼規(guī)律是:用原來字母后面第4個(gè)字母代替原來

3、的字母。,#include main(){ char c1=‘C’,c2=‘H’,c3=‘I’,c4=‘N’,c5=‘A’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; putchar(c1); putchar(c2); putchar(c3); putchar(c4); putchar(c5); printf(“%c %c %c %c %c\n”,c1,c2,c

4、3,c4,c5);},暗算—看風(fēng):安在天、黃依依,在上面的程序中,程序能夠控制用戶的輸入嗎?如果用戶輸入的不是大寫字母,結(jié)果怎樣?如何對用戶的輸入進(jìn)行合法性檢查?字符是大寫字母的條件是什么?C語言如何表示條件?,安:剛才那個(gè)就是我要你破解的密碼。黃:你這個(gè)解碼程序有問題。你要考慮下面的問題。,計(jì)算機(jī)程序只能處理數(shù)據(jù),因此,條件也只能通過數(shù)據(jù)來表示。條件可分為兩類:簡單條件:兩數(shù)據(jù)之間的關(guān)系復(fù)雜條件:由簡單條件構(gòu)成,一、

5、C語言中的條件,4.1 4.3 4.4 C語言中的條件及其表達(dá),1、 簡單條件,例: if (A>B ) {printf(“A is the big one.\n“); },A>B 是簡單條件 條件成立,執(zhí)行if后面的語句,問:簡單條件在C語言里如何表示?,關(guān)系運(yùn)算符(比較運(yùn)算符),!= (左邊是否不等于右邊)= = (左邊是否等于右邊)>= (左邊是否大于等于右邊) >(左

6、邊是否大于等于右邊) <=(左邊是否小于等于右邊) <(左邊是否小于右邊),關(guān)系運(yùn)算符和關(guān)系表達(dá)式,(1).關(guān)系運(yùn)算符及其優(yōu)先次序,,,①< ?。ㄐ∮冢?②<= (小于或等于) ③> (大于) ④>= (大于或等于) ⑤== (等于) ⑥?。?(不等于),與其它運(yùn)算符優(yōu)先級的比較:,用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子。如:(a>b)>(b

7、y 、s+f>d,(2).關(guān)系表達(dá)式,關(guān)系表達(dá)式的值,運(yùn)算結(jié)果∶邏輯值 1——“真” ,0——“假”,例如: 設(shè) a=3, b=2, c=1 求下面關(guān)系表達(dá)式 的值: c>b (a-b) = = 1 b+c<a,,值為0,值為1,值為0,如果關(guān)系運(yùn)算對象的類型不同,也要先進(jìn)行類型轉(zhuǎn)換。,2、C中的復(fù)合條件,復(fù)合條件由多個(gè)簡單條件構(gòu)成例:

8、 3=3 and x1, x1 or x<5,,,問:復(fù)合條件在C語言里如何表示?,邏輯運(yùn)算符及邏輯表達(dá)式,&& and || or ! notExample: x>=3 && x=3 and x1 || x1 or x1) x<=1,,,,,(1).邏

9、輯運(yùn)算符及其優(yōu)先次序,優(yōu)先級,,(高),(低),例如:!a a為真,則!a為假。 a||b a、b之一為真,則a||b為真。 a&&b a、b 同時(shí)為真,則 a&&b 為真。,① ! (邏輯非) ② && (邏輯與) ③ || (邏輯或),數(shù)學(xué)中

10、的100100 && x<200,數(shù)學(xué)中的x>100或x100 || x<0,邏輯運(yùn)算符與其它運(yùn)算符優(yōu)先級的比較378頁附錄D運(yùn)算符和優(yōu)先級,,(高),(低),結(jié)果:c=1,(2)、邏輯表達(dá)式,用邏輯運(yùn)算符將邏輯運(yùn)算對象連結(jié)起來的式子。如:(a>b)&&(bb,邏輯表達(dá)式的值,運(yùn)算對象∶以數(shù)值非0為真、0為假運(yùn)算結(jié)果∶邏輯值(只有假為0、真為1兩種取值)如: 5>

11、;3 && 2 || 8<4 值為 1 ‘b’&&’d’ 值為1,33&&x<5,4.2 用if語句實(shí)現(xiàn)選擇結(jié)構(gòu),1. if (表達(dá)式) 語句,一、if 語句的三種形式,執(zhí)行過程:當(dāng)表達(dá)式的值為“真”(非零)時(shí),執(zhí)行語句,否則,不執(zhí)行語句。,例1:任意輸入兩個(gè)數(shù),輸出其中最大的。,#include “st

12、dio.h”main(){float x,y;scanf(“%f%f”,&x,&y);if(x>y) y=x;printf(“the max is %f”,y);},if(x>y) printf(“the max is %f”,y);},if(x<y) x=y;printf(“the max is %f”,x);},例2:任意輸入三個(gè)數(shù),按從大到小的順序輸出。,#incl

13、ude “stdio.h”main(){ float x,y,z,t; scanf(“%f%f%f”,&x,&y,&z); if(x<y) { t=x;x=y;y=t;} if(x<z) {t=x;x=z;z=t;} if(y<z) { t=y;y=z;z=t;} printf(“%f,%f,%f”,x,y,z

14、);},,2. if (表達(dá)式) 語句1 else 語句2,執(zhí)行過程: 當(dāng)表達(dá)式的值為“真”(非零)時(shí),執(zhí)行語句1,否則執(zhí)行語句2。,例1:任意輸入一個(gè)整數(shù),判斷其是否能被3整除。,#include “stdio.h”main(){int x;scanf(“%d”,&x);if(x%3==0) printf(“yes”);else printf(“no”);},,例2:鐵路托運(yùn)行李需收取一定的費(fèi)用,行李重量

15、在50公斤以下的(含50)每公斤收取0.20元,超出50公斤的,超出部分每公斤0.30元。,#include “stdio.h”main(){float w,y;printf(“input weight”);scanf(“%f”,&w);if(w<=50) y=w*0.20;else y=50*0.20+(w-50)*0.30;printf(“%f”,y);},3. if (表達(dá)式1) 語句1

16、 else if(表達(dá)式2) 語句2 else if(表達(dá)式3) 語句3 : else if(表達(dá)式m) 語句m else 語句n,例題:#include “stdio.h”main(){float grade;char level;scanf(“%f”,&grade);if (grade>=85) level=‘A’;else if (gr

17、ade>=70) level=‘B’;else if (grade>=60) level=‘C’;else level=‘D’; printf(“your level is%c”,level);},if 語句說明:,2、if 語句中的“語句”為一個(gè)簡單語句或復(fù)合語句,if(x) if(x!=0)if(!x) if(x==0)為何不能寫成if(x) i

18、f(x==0)if(!x) if(x!=0),,,,,4.5 條件運(yùn)算符和條件表達(dá)式,例題1:main(){int a=3,b=2,max;max= (a>b) ? a : b ; printf(“%d”,max);},表達(dá)式1 ? 表達(dá)式2∶表達(dá)式3如: (a>b) ? a : b,條件運(yùn)算符的結(jié)合方向: 自右至左如:a>b ? a : c>d ? c : d 等效于:

19、a>b ? a : (c>d ? c : d),例題2 :把輸入字符中的小寫字符轉(zhuǎn)換成大寫并輸出 。,#include main(){ char ch; scanf("%c",&ch); ch=(ch>='a' && ch<='z') ? ch-32: ch; printf(“%c”,

20、ch);},main(){ int a,b,c,t,max; scanf("%d%d%d",&a,&b,&c); t=(a>b) ? a : b ; max=(t>c) ? t : c ; printf("max=%d\n",max); },例題2 :找出任意輸入的三個(gè)數(shù)中最大的數(shù)。,4.6 選

21、擇結(jié)構(gòu)的嵌套,在 if 語句中又包含一個(gè)或多個(gè)if 語句稱為 if 語句的嵌套。,一般形式:if (條件1) if (條件2)語句1 else 語句2else if (條件3)語句3 else 語句4,if(x>0) {if(y>0) printf("x>0,y>0"); else printf(“x>

22、0,y0) printf(“x0"); else printf(“x<=0, y<=0”);},說明:,else與if的匹配原則是:一個(gè)else應(yīng)與其之前距離最近且沒有與其它else配對的if 配對。,縮 排,main( ) { int x,y; scanf("%d",&x);

23、 if(x<0) y=-1; else if(x= =0) y=0; else y=1; printf("x=%d y=%d",x,y);},main( ) { int x,y; scanf("%d",&x); if(x>

24、0) y=1; else if(x= =0) y=0; else y=-1; printf("x=%d y=%d",x,y);},main( ) { int x,y; scanf("%d",&x); if(x>=0)

25、 if(x>0) y=1; else y=0; else y=-1; printf("x=%d y=%d",x,y);}加上{}更明確,if(x<=0) {if(x<0) y=-1; else y=0;}else y=1;,4.7 利用switch 語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu),一般形式: swi

26、tch(表達(dá)式){ case 常量表達(dá)式1:語句序列1 [break;] case 常量表達(dá)式2:語句序列2 [break;] : case 常量表達(dá)式n:語句序列n [break;] [default :語句序列n+1 ]},例題:任意輸入一學(xué)生成績,對成績進(jìn)行判斷。 main() {int grade;

27、 scanf(“%d”,&grade); switch(grade/10) { case 10:printf(“100”); case 9 : printf(“90~99”); case 8 : printf(“80~89”); case 7: printf

28、(“70~79”); case 6 :printf(“60~69”); default : printf(“error ”); },若grede= 89,輸出結(jié)果是什么?80~89 70 ~79 60 ~69 error,若grede= 89,輸出結(jié)果是什么?80~89,第二種形式 :,main(){ char grade; printf(“Input

29、 grade(A,B,C,D):”); scanf(“%c”,&grade); switch(grade) { case‘A’ : printf(“85~100 ”); break; case ’B’ : printf(“70~84 ”); break; case ’C’ : printf(“60~69 ”); break; case ‘D’ : pr

30、intf(“<60 ”); break; default : printf(“error !”); }},例題:#include “stdio.h”main(){float grade;char level;scanf(“%f”,&grade);if (grade>=85) level=‘A’;else if (grade>=70) level=‘B’;else

31、 if (grade>=60) level=‘C’;else level=‘D’; printf(“your level is%c”,level);},基本運(yùn)費(fèi)、貨重,路程(s)和折扣的關(guān)系標(biāo)準(zhǔn)如下:編程序,計(jì)算運(yùn)費(fèi)。 s<250km 沒有折扣 250≤s<500 2 %折扣 500≤s<1000 5%折扣 1000≤s<2000

32、 8%折扣 2000≤s<3000 10%折扣 3000≤s 15%折扣,若用if 語句實(shí)現(xiàn)上述功能: main( ) { int s; float p, w, d , f ; scanf(“%f , %f , %d”, &p, &w, &s

33、); if(s>=3000) d=15; else if (s>=2000) d=10; else if (s>=1000) d=8; else if (s>=500) d=5; else if (s>=250) d=2;

34、 else d=0; f=p*w*s*(1-d/100.0) ; printf(“freight=%15.4f ”, f ) ; },例 求 ax2+bx+c=0 方程的解 1、a=0 ,方程不是二次方程 2、b2-4ac=0, 有兩個(gè)相等的實(shí)根 3、b2-4ac>0, 有兩個(gè)不相等的實(shí)根 4、b2-4ac&l

35、t;0, 有兩個(gè)共軛復(fù)根 5、如何判斷實(shí)數(shù)為零(或大于零,或小于零),,特殊條件的處理,#includemain() else if( disc>1e-6) { float a,b,c,d,disc,x1,x2,realpart,imapart; { x1=(-b+sqrt(disc

36、))/(2*a); scanf(“%f,%f,%f”,&a,&b,&c); x2=(-b-sqrt(disc))/(2*a); printf(“The equation ”); } if(fabs(a)<=1e-6)

37、 else printf(“is not a quadratic”) ; { realpart=-b/(2*a); else imagpart=sqrt(-disc)/(2*a);

38、 disc=b*b-4*a*c; printf(“has complex roots:\n”) ; if(fabs(disc)<=1e-6) 打印虛根;}} printf(“has

39、two equal roots: %8.4f\n”,-b/(2*a));,有問題嗎?,習(xí)題 給一個(gè)不多于5位的正整數(shù),要求:①求出它是幾位數(shù);②分別打印出每一位數(shù)字;③按逆序打印出各位數(shù)字,例如原數(shù)為321,應(yīng)輸出123。,#include main(){ long int num; int n1,n2,n3,n4,n5,bits; scanf(“%ld”,&num); if (num&g

40、t;9999) bits=5 else if (num>999) bits=4; else if(num>99) bits=3; else if(num>9) bits=2; else bits=1; printf(“bits=%d\n”,bits);,n5=num/10000; n4= (int)(num-n5*10000)/1000; n3=(int)(nu

41、m- n5*10000- n4*1000)/100; n2=(int)(num- n5*10000- n4*1000- n3*100)/10; n1=(int)(num-n5*10000-n4*1000-n3*100- n2*10);,switch(bits) { case 5:printf(“Every bit is:%d,%d,%d,%d,%d\n”,

42、 n5,n4,n3,n2,n1); printf(“Reverse is: %d,%d,%d,%d,%d\n”, n1,n2,n3,n4, n5); break;

43、 case 4: printf(“Every bit is: %d,%d,%d,%d\n”, n4,n3,n2,n1); printf(“Reverse is: %d,%d,%d,%d\n”,

44、 n1,n2,n3,n4); break;,case 3: printf(“Every bit is: %d,%d,%d\n”, n3,n2,n1); printf(“Reverse is: %d,%d,%d\n”, n1,n2,n3); break; c

45、ase 2: printf(“Every bit is: %d,%d\n”, n2,n1); printf(“Reverse is:%d,%d\n”, n1,n2); break; case1: printf(“Bit is: %d\n”, n1); printf(“Reverse is: %d\n”, n1); }},作業(yè):11

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論