




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第四章程序控制結(jié)構(gòu)
4.1C語(yǔ)言的執(zhí)行語(yǔ)句4.2 順序結(jié)構(gòu)4.3 選擇結(jié)構(gòu)4.4 循環(huán)結(jié)構(gòu)24.1C語(yǔ)言的執(zhí)行語(yǔ)句
C程序的結(jié)構(gòu):
3C語(yǔ)句可分為以下五類:1)表達(dá)式語(yǔ)句2)函數(shù)調(diào)用語(yǔ)句(一般包含在表達(dá)式語(yǔ)句中)3)控制語(yǔ)句4)復(fù)合語(yǔ)句5)空語(yǔ)句
C程序的執(zhí)行部分是由語(yǔ)句組成的。程序的功能也是由執(zhí)行語(yǔ)句實(shí)現(xiàn)的。44.1.1表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)“;”組成。執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。其一般形式為:表達(dá)式;例如:x=y+z;y+z;i++;x=0,y=1;賦值語(yǔ)句加法運(yùn)算語(yǔ)句,但計(jì)算結(jié)果不能保留,無(wú)實(shí)際意義自增1語(yǔ)句,i值增1逗號(hào)表達(dá)式語(yǔ)句51、賦值語(yǔ)句:由賦值表達(dá)式加上分號(hào)“;”構(gòu)成的表達(dá)式語(yǔ)。語(yǔ)法格式:變量=表達(dá)式;(1)賦值運(yùn)算符除“=”外,還包含復(fù)合賦值運(yùn)算符。例如:a-=a*a;(2)賦值運(yùn)算符右側(cè)的表達(dá)式可以又是一個(gè)賦值表達(dá)式。例如:a=b=5*3;等價(jià)a=a-a*a;等價(jià)a=(b=5*3);等價(jià)b=5*3;a=b;6(3)賦值語(yǔ)句的功能與賦值表達(dá)式相同,但性質(zhì)不同。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語(yǔ)句不能出現(xiàn)在表達(dá)式中。例如:
if(x=y+5)z=x;語(yǔ)句的功能是,若表達(dá)式x=y+5大于0則z=x。
if((x=y+5;)>0)z=x;因?yàn)閤=y+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。合法不合法7(4)賦值表達(dá)式的嵌套:賦值符右邊的表達(dá)式又是一個(gè)賦值表達(dá)式:
變量=(變量=表達(dá)式);展開(kāi)之后的一般形式為:
變量=變量=…=表達(dá)式;例如:
a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,等效于:
e=5;d=e;c=d;b=c;a=b;8(5)變量說(shuō)明中給變量賦初值和賦值語(yǔ)句的區(qū)別:給變量賦初值是變量說(shuō)明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號(hào)間隔,而賦值語(yǔ)句則必須用分號(hào)結(jié)尾。例如:
inta=5,b,c;(6)在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值:
如下述說(shuō)明是錯(cuò)誤的:
inta=b=c=5;而賦值語(yǔ)句允許連續(xù)賦值:
inta,b,c;a=b=c=5;×√92、函數(shù)調(diào)用語(yǔ)句:函數(shù)調(diào)用語(yǔ)句由函數(shù)名、實(shí)際參數(shù)加上分號(hào)“;”組成。執(zhí)行函數(shù)語(yǔ)句就是調(diào)用函數(shù)體。
一般形式為:函數(shù)名(實(shí)際參數(shù)表);例如:printf("CProgram");z=x+sin(y);調(diào)用庫(kù)函數(shù),輸出字符串賦值語(yǔ)句(表達(dá)式中包含函數(shù)調(diào)用)104.1.2空語(yǔ)句空語(yǔ)句只有分號(hào)“;”組成的語(yǔ)句稱為空語(yǔ)句??照Z(yǔ)句是什么也不執(zhí)行的語(yǔ)句。例如
while(getchar()!='\n')
;空語(yǔ)句本語(yǔ)句的功能是,只要從鍵盤(pán)輸入的字符不是回車則重新輸入。114.1.3
復(fù)合語(yǔ)句復(fù)合語(yǔ)句把多個(gè)語(yǔ)句用括號(hào){}括起來(lái)組成的一個(gè)語(yǔ)句稱復(fù)合語(yǔ)句。在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句。例如:
{x=y+z;a=b+c;printf(“%d%d”,x,a);
}是一條復(fù)合語(yǔ)句。復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句都必須以分號(hào)“;”結(jié)尾,在括號(hào)“}”外不能加分號(hào)。124.1.4控制語(yǔ)句
控制語(yǔ)句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式??煞殖梢韵氯悾?)條件判斷語(yǔ)句:ifelse語(yǔ)句;2)開(kāi)關(guān)分支語(yǔ)句:
switch語(yǔ)句;3)循環(huán)執(zhí)行語(yǔ)句:dowhile語(yǔ)句、while語(yǔ)句、for語(yǔ)句;4)中止循環(huán)語(yǔ)句:
continue語(yǔ)句、
break語(yǔ)句;5)無(wú)條件轉(zhuǎn)移語(yǔ)句:goto語(yǔ)句;6)函數(shù)返回語(yǔ)句:
return語(yǔ)句。
134.2
順序結(jié)構(gòu)
按照解決問(wèn)題的順序編寫(xiě)相應(yīng)的語(yǔ)句,程序運(yùn)行時(shí)自上而下依次執(zhí)行語(yǔ)句。14例1.輸入任意兩個(gè)整數(shù),求它們的和及平均值。#include<stdio.h>intmain(){intnum1,num2,sum;floataver;
printf("Pleaseinputtwointegers:\n");
scanf("%d,%d",&num1,&num2);sum=num1+num2; aver=(float)sum/2; printf("sum=%d,aver=%.2f\n",sum,aver);return0;}輸入:30000,5005↙輸出:sum=35005,aver=17502.50變量定義輸入提示數(shù)據(jù)輸入求累計(jì)和求平均值輸出結(jié)果?sum/2.015例2.給定一個(gè)三位正整數(shù),輸出它的個(gè)位、十位和百位數(shù)。數(shù)字分離方法:百位數(shù)m2=m/100十位數(shù)m1=(m-m2*100)/10個(gè)位數(shù)m0=m-m2*100-m1*10個(gè)位數(shù)m0=m%10十位數(shù)m1=(m/10)%10百位數(shù)m2=m/100百位:123/100=1十位:(123-1*100)/10=2個(gè)位:123-1*100-2*10=3個(gè)位:123%10=3十位:(123/10)%10=2百位:123/100=116例2.給定一個(gè)三位正整數(shù),輸出它的個(gè)位、十位和百位數(shù)。#include<stdio.h>intmain(){intm,m0,m1,m2;scanf("%d",&m);m0=m%10;m1=(m/10)%10;m2=m/100;
printf("%d,%d,%d\n",m0,m1,m2);return0;} 輸入:123↙輸出:3,2,1
個(gè)位:m0=123%10=3十位:m1=(123/10)%10=2百位:m2=123/100=117例3.取一個(gè)16位的二進(jìn)制數(shù)a的7、6、5、4四個(gè)位。如16進(jìn)制數(shù):
a=(a25d)16→(1010001001011101)2
10111010010001010154~74~71011101001000101015右移4位14~70100·10001010000a>>4~(~0<<4)00000000000000001111111111111111111111111111000000000000000011110000000000001111&0000101000100101
000000000000010118#include<stdio.h>intmain(){unsigneda,b,c,d;
scanf("%x",&a);b=a>>4;c=~(~0<<4);d=b&c;
printf("%x%x\n",a,d);return0;}輸入:a25d↙輸出:a25d5 以十六進(jìn)制形式輸入整數(shù)a以十六進(jìn)制形式輸出a和結(jié)果d右移4位求低4位19表達(dá)式可以是任意合法表達(dá)式,后面不能加;4.3選擇結(jié)構(gòu)(if語(yǔ)句)4.3.1if語(yǔ)句
1、單分支if:if(表達(dá)式)語(yǔ)句語(yǔ)義:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。20例1:intmain(){inta,b,max;
printf("\ninputtwonumbers:");
scanf("%d%d",&a,&b);max=a;if(max<b)max=b;
printf("max=%d",max);return0;}
輸入:2346
輸出:max=46此語(yǔ)句用于提示輸入max=23max=4621例2:intmain(){inta,b,c,t;
printf("\ninputtwonumbers:");
scanf("%d%d%d",&a,&b,&c);if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(b<c){t=b;b=c;c=t;}
printf("%d%d%d\n",a,b,c);return0;}
輸入:162↙
輸出:621實(shí)現(xiàn)數(shù)的互換功能:輸入三個(gè)數(shù),按照從大到小順序輸出22例3:從鍵盤(pán)輸入一個(gè)字符,判斷它是否小寫(xiě)字母。若是,將其轉(zhuǎn)換成大寫(xiě)字母,否則不進(jìn)行轉(zhuǎn)換,作后輸出該字母。#include<stdio.h>intmain(){ charc,a; c=getchar(); if(c<‘a(chǎn)’||c>‘z’)a=c;
if(c<=‘z’&&c>=‘a(chǎn)’)
a=c-32; printf("%c\n",a);return0;}main(){charc;c=getchar(); if(c<=‘z’&&c>=‘a(chǎn)’)c-=32; printf("%c\n",c);}判斷非小寫(xiě)字母情況判斷小寫(xiě)字母情況只用一個(gè)單分支語(yǔ)句實(shí)現(xiàn)232、雙分支:if-else
if(表達(dá)式)
語(yǔ)句1;
else
語(yǔ)句2;語(yǔ)義:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。
后面不能加;24
intmain(){inta,b;
printf("inputtwonumbers:");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);else
printf("max=%d\n",b);return0;}
輸入:2346
輸出:max=46
輸入兩個(gè)整數(shù)輸出其中大數(shù)例4.例1的改寫(xiě)253、多分支if-elseif
:if(表達(dá)式1)
語(yǔ)句1;
elseif(表達(dá)式2)
語(yǔ)句2;
elseif(表達(dá)式3)
語(yǔ)句3;
…
elseif(表達(dá)式m)
語(yǔ)句m;
else
語(yǔ)句n;語(yǔ)義:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。然后繼續(xù)執(zhí)行后續(xù)程序。后面不能加;26此為真,做語(yǔ)句1,其它語(yǔ)句都不做27上面的語(yǔ)句為以下三種格式:1、空語(yǔ)句2、一個(gè)語(yǔ)句(不引起轉(zhuǎn)移)3、前后加大括號(hào)的語(yǔ)句(復(fù)合語(yǔ)句),也叫程序段,如:{inta;floatb;a=3;b=7.0;};允許在復(fù)合語(yǔ)句前部定義變量,只能在復(fù)合語(yǔ)句中使用{inta;a=3;floatb;b=7.0;}變量要在最前面定義√×28a<bt=a;a=b;b=t;a<bt=a;a=b;b=t;使用復(fù)合語(yǔ)句不使用復(fù)合語(yǔ)句YYNN29
#include"stdio.h"
intmain(){輸入:Acharc;輸出:Thisisacapitalletterc=getchar();
if(c<32)
printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')
printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')
printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')
printf("Thisisasmallletter\n");else
printf("Thisisanothercharacter\n");return0;}一個(gè)語(yǔ)句例5304、在使用if語(yǔ)句中應(yīng)注意以下問(wèn)題:1)在三種形式的if語(yǔ)句中,在if之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如:if(a=5)語(yǔ)句;
if(b)語(yǔ)句;都是允許的。只要表達(dá)式的值為非0,即為“真”。如在:if(a=5)…;中表達(dá)式的值永遠(yuǎn)為非0,所以其后的語(yǔ)句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會(huì)出現(xiàn),但在語(yǔ)法上是合法的。31又如,有程序段:
if(a=b)
printf("%d",a);else
printf("a=0");
本語(yǔ)句的語(yǔ)義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。=為賦值運(yùn)算符,比較運(yùn)算符為==
322)在if語(yǔ)句中,條件判斷表達(dá)式必須用括號(hào)括起來(lái),在語(yǔ)句之后必須加分號(hào)。3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在}之后不能再加分號(hào)。例如:
if(a>b){a++;b++;}else{a=0;b=10;}
if(a>b){a++;b++;};
else{a=0;b=10;};不能寫(xiě)成復(fù)合語(yǔ)句×33例如條件語(yǔ)句:
if(a>b)max=a;elsemax=b;可用條件表達(dá)式寫(xiě)為:
max=(a>b)?a:b;(a>b)?max=a:max=b;(a>b)?(max=a):(max=b);√×用條件語(yǔ)句實(shí)現(xiàn)分支語(yǔ)句功能:34例6:計(jì)算方法一:intmain(){floatx,y;scanf(”%f”,&x);if(x>3)y=x*x+2;elsey=3*x+7*x*x;printf(”y=%f\n”,y);return0;}
x2
+2(x>3)y=3x+7x2(x≤3)表達(dá)式,成立值為1y=x>3?x*x+2:3*x+7*x*x;35例7:從鍵盤(pán)輸入任意的兩個(gè)實(shí)數(shù),按從小到大順序輸出這兩個(gè)數(shù),請(qǐng)編程實(shí)現(xiàn)。intmain(){floata,b;
scanf(”%f%f”,&a,&b);if(a>b){a=a+b;b=a-b;a=a-b;}
printf(”%f,%f\n”,a,b);return0;}可用語(yǔ)句if(a>b){floatt;t=a;a=b;b=t;}代替復(fù)合語(yǔ)句可以定義變量實(shí)現(xiàn)a與b的互換36a=a+b;b=a-b;a=a-bt=a;a=b;b=ta3+1ba-b=3aa-3=1a3b1t3b3a1a3b137例8:計(jì)算方法一:intmain(){floatx,y;
scanf(”%f”,&x);if(x<1)y=x;elseif(1<=x&&x<10)y=2*x-1;elsey=3*x-11;
printf(”y=%f\n”,y);return0;}表達(dá)式1表達(dá)式2非00語(yǔ)句1語(yǔ)句2語(yǔ)句3非001<=x&&可省略嗎?可以38方法二:intmain(){floatx,y;
scanf(”%f”,&x);if(x<1)y=x;else{if(x<10)y=2*x-1;elsey=3*x-11;}
printf(”y=%f\n”,y);return0;}{
、}
可省略y=x<1?x
:(
x<10?2*x-1:3*x-11);等價(jià)(、)可省略39方法三:if(x<10)
{
if(x<1)y=x;elsey=2*x-1;
}
elsey=3*x-11;
}
后不能加;{、}
可省略等價(jià)y=x<10?(x<1?x:2*x-1):3*x-11;
(、)
可省略404.3.4
if語(yǔ)句的嵌套
當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。其一般形式可表示如下:
if(表達(dá)式)
或
if(表達(dá)式)
if語(yǔ)句;
if語(yǔ)句;
else
if語(yǔ)句;在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問(wèn)題。
加;41其中的else究竟是與哪一個(gè)if配對(duì)呢?是if(表達(dá)式1)
還是if(表達(dá)式1)
if(表達(dá)式2)
if(表達(dá)式2)
語(yǔ)句1;
語(yǔ)句1;
else
else
語(yǔ)句2;
語(yǔ)句2;
注意:if與else的配對(duì)關(guān)系——else總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按前一種情況理解。
√×42例9:寫(xiě)出下面兩程序的輸出結(jié)果1.intmain(){intx=2,y=-1,z=2;if(x<y)if(y<0)z=0;elsez=1;
printf(”%d\n”,z);return0;}結(jié)果:一個(gè)語(yǔ)句不成立時(shí)執(zhí)行243
intmain(){inta=1,b=3,c=5,d=4;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;
printf(”%d\n”,x);return0;}
結(jié)果:244為了使邏輯關(guān)系清晰:
(1)按下面所示書(shū)寫(xiě)程序:
intmain(){inta=1,b=3,c=5,d=4;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;printf(”%d\n”,x);return0;}45(2)適當(dāng)?shù)丶哟罄ㄌ?hào):
x=-3;
if(x<0)
{
y=-1;printf(”x<0,y=%d\n”,y);}
elseif(x>0)
{
y=1;printf(”x>0,y=%d\n”,y);}把上面與下面比較x=-3;if(x>=0)if(x>0){y=1;printf(”x>0,y=%d\n”,y);
}else{
y=-1;printf(”x<0,y=%d\n”,y);}結(jié)果:x<0,y=-1無(wú)結(jié)果46例10:intmain(){inta,b;
printf("pleaseinputA,B:");
scanf("%d%d",&a,&b);
if(a==b)printf("A=B\n");elseif(a>b)printf("A>B\n");elseprintf("A<B\n");return0;}輸入:輸出:if(a!=b)if(a>b)printf("A>B\n");elseprintf("A<B\n");elseprintf("A=B\n");等價(jià)2346A<B47例11:輸入一年份,判別是否閏年。year被4整除真真真真假假假假year被100整除leap=0leap=1leap=1leap=0leapyear被400整除輸出閏年輸出非閏年48intmain(){intyear,leap;scanf(“%d”,&year);if(year%4==0){if(year(%100==0){if(year%400)==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%dis“,year);elseprintf(“%disnot“,year);printf(“aleapyear.\n“);return0;}根據(jù)leap輸出結(jié)果49不要忘記空格4.3.2
switch語(yǔ)句(另一種分支語(yǔ)句)
格式:switch(任意類型表達(dá)式)
{
case
常量表達(dá)式1:語(yǔ)句1;
case
常量表達(dá)式2:語(yǔ)句2;
…
case
常量表達(dá)式n:語(yǔ)句n;
default:語(yǔ)句n+1;
}注:①常量表達(dá)式中運(yùn)算對(duì)象只能為常量或符號(hào)常量(整型或字符型),各個(gè)值必須互不相同
②default允許出現(xiàn)在前面或中間③switch(任意類型表達(dá)式)
后不帶分號(hào),任意類型表達(dá)式的計(jì)算結(jié)果取整。不帶;50功能:若switch后面表達(dá)式值的整數(shù)(字符常量)部分與某個(gè)case后面表達(dá)式值相等,則就執(zhí)行該case后面的語(yǔ)句,否則就執(zhí)行default后面的語(yǔ)句語(yǔ)句1語(yǔ)句2語(yǔ)句3……值1,入口1繼續(xù)后面執(zhí)行繼續(xù)后面執(zhí)行值2,入口351例12:intmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){case1:printf("Monday\n");case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("error\n");}return0;}輸入:3入口執(zhí)行輸出:
WednesdaThursdayFridaySaturdaySundayerror“case常量表達(dá)式”相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。52break語(yǔ)句:專用于跳出switch語(yǔ)句在每一case語(yǔ)句之后增加break語(yǔ)句,使每一次執(zhí)行之后均可跳出switch語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果。
intmain(){
…switch(a){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");}return0;}入口
53Switch語(yǔ)句常用形式:switch(任意類型表達(dá)式){case整型或字符型常量表達(dá)式1:語(yǔ)句1;break;case整型或字符型常量表達(dá)式2:語(yǔ)句2;break;
…case整型或字符型常量表達(dá)式n:語(yǔ)句n;break;default:語(yǔ)句n+1;}
default后面不加break54注意:1)case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。
2)case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。
3)case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。
4)default子句可以省略不用。55計(jì)算后取整例13:若有宏定義:#definek2
和定義:floatw;inta=2,b;則合法的switch語(yǔ)句是[]A.switch(w)B.switch(a+b)
{case1.0:printf(”*\n”);
{case1printf(”*\n”);case2.0:printf(”**\n”);}caseaprintf(”**\n”):}C.switch(w+1)
D.switch(a);
{casek-1:printf(”*\n”);
{case1:printf(”*\n”);default:printf(”\n”);
case2:printf(”**\n”);
case1+2:printf(”***\n”);}
default:printf(”\n”);}C
不能為實(shí)型不能為變量,少;和:不能加分號(hào)56例14:
先接收從鍵盤(pán)輸入的一個(gè)等級(jí)制成績(jī),然后輸出對(duì)應(yīng)的百分制成績(jī)。轉(zhuǎn)換規(guī)則如下:
A:85——100B:70——84C:60——69D<6057intmain(){chargrade;
scanf(“%c”,&grade);
switch(grade)
{case‘A’:printf(”85~100\n”);break;case‘B’:printf(”70~84\n”);
break;case‘C’:printf(”60~69\n”);
break;case‘D’:printf(”<60\n”);
break;default:printf(”Error\n”);
}return0;}58
例15:先接收從鍵盤(pán)輸入的一個(gè)百分制成績(jī),然后輸出對(duì)應(yīng)的五分制成績(jī)。轉(zhuǎn)換規(guī)則如下:
90——100A80——89B70——79C60——69D<60E59#include<stdio.h>intmain(){intscore;printf("\nPleaseinputthescore(0-100):");scanf("%d",&score);if(score>=90)printf("A\n");elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");return0;}方法一60intmain(){intcj;printf(”Inputaintegernumber(0----100)\n”);scanf(“%d”,&cj);if(cj>100||cj<0)printf(”Inputerror!”);elseif(cj<60)printf(”E\n”);elseswitch(cj/10)
{case6:printf(”D\n”);break;case7:printf(”C\n”);
break;case8:printf(”B\n”);
break;case9:case10:printf(”A\n”);
}return0;}90~100A80~89B70~79C60~69D<60E整數(shù)除整數(shù)方法二61例16:計(jì)算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符,輸出計(jì)算結(jié)果。intmain(){floata,b;charc;
printf("inputexpression:a+(-,*,/)b\n");
scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");
}return0;}字符常量輸入:12+13輸出:25.00000062例17:求方程ax2+bx+c=0的兩個(gè)實(shí)根#include<math.h>intmain(){doublea,b,c,x1,x2,disc;
scanf(”%lf%lf%lf”,&a,&b,&c);disc=b*b-4*a*c;if(disc<=0)printf(”輸入錯(cuò)誤”);else{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(”x1=%.4f,x2=%.4f\n”,x1,x2);}return0;}b*b-4*a*c>0,有解63題目改為:求二次方程ax2+bx+c=0的兩個(gè)根
disc>=0真假輸出兩個(gè)共軛復(fù)根輸出兩個(gè)實(shí)根disc=b2-4aca==0真假輸出:“非二次方程”輸入a,b,ca!=0,一定有解要認(rèn)真分析題目,達(dá)到題目要求64intmain(){doublea,b,c,x1,x2,disc,p,q;scanf(”%lf,%lf,%lf”,&a,&b,&c);if(a==0)printf(”非二次方程”);else{disc=b*b-4*a*c;if(disc>=0)
{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(”x1=%f,x2=%f\n”,x1,x2);
}else{
p=-b/(2*a);q=sqrt(-disc)/(2*a);printf(”x1=%.4f+%.4fi,x2=%.4f-
%.4fi\n”,p,q,p,q);
}
}
return0;}65例18:輸入某年某月某日,判斷這一天是這一年的第幾天,需考慮閏年的情形。注:符合以下條件之一是閏年:①能被4整除,但不能被100整除;②能被400整除。算法分析:以5月4日為例,先把1~4月份的天數(shù)加起來(lái),然后再加上本月的4天即本年的第幾天。閏年情形只需當(dāng)輸入月份大于3時(shí)需要考慮。若是閏年,2月份應(yīng)是29天。66intmain(){intday,month,year,sum=0;scanf("%d,%d,%d",&year,&month,&day);switch(month){case12:sum+=30;/*加上11月份30天*/case11:sum+=31;/*加上10月份31天*/case10:sum+=30;/*加上9月份30天*/case9:sum+=31;/*加上8月份31天*/case8:sum+=31;/*加上7月份31天*/case7:sum+=30;/*加上6月份30天*/case6:sum+=31;/*加上5月份31天*/case5:sum+=30;/*加上4月份30天*/case4:sum+=31;/*加上3月份31天*/
計(jì)算某月以前月份的總天數(shù)67
case3:/*判斷是否閏年*/if((year%4==0&&year%100!=0)||year%400==0)sum+=29;/*加上閏年2月份29天*/elsesum+=28;/*加上非閏年2月份28天*/case2:sum+=31;/*加上1月份31天*/}sum+=day;/*再加上某天的天數(shù)*/
printf("Itisthe%dthday.",sum);return0;}68例19:運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(skm)越遠(yuǎn),每噸·千米運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:S<250沒(méi)有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s015%折扣設(shè)每噸·千米運(yùn)費(fèi)為p,貨物重量為w,距離為s,折扣為d,則總運(yùn)費(fèi)為:f=p×w×s×(1-d)輸入:p、w、s,計(jì)算運(yùn)費(fèi)69
用公式f=p*w*s*(1-d)
計(jì)算運(yùn)輸費(fèi)。噸公里運(yùn)價(jià)運(yùn)輸距離折扣貨重s<250(公里)d=0250≤s<500d=0.02500≤s<1000d=0.051000≤s<2000d=0.082000≤s<3000d=0.103000≤sd=0.15要根據(jù)距離計(jì)算折扣d,關(guān)鍵是構(gòu)造switch后的表達(dá)式,選擇
c=s/250
來(lái)求c的值。
if(s>=3000)c=12;elsec=s/250;70intmain(){intc,s;floatp,w,d,f;scanf("%f,%f,%s",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;折扣變化都是250的倍數(shù)s÷250則:S<250→<1250≤s<500→[1,2)500≤s<1000→[2,4)1000≤s<2000→[4,8)2000≤s<3000→[8,12)3000≤s0→≤1271case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0)printf(“f=%.4f=”,f);}s÷250則:S<250→<1250≤s<500→[1,2)500≤s<1000→[2,4)1000≤s<2000→[4,8)2000≤s<3000→[8,12)3000≤s0→≤12運(yùn)費(fèi)72例20:判斷以下程序?qū)崿F(xiàn)的功能:#include<stdio.h>voidmain(){charc;printf("inputacharacter:");c=getchar();if(c>='0'&&c<='9')printf("Thisisadigit.\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter.\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter.\n");elseprintf("Thisisanothercharacter.\n");return0;}輸入一個(gè)字符,判別該字符是數(shù)字、英文大寫(xiě)字母、小寫(xiě)字母還是其它字符。
數(shù)字大寫(xiě)字母小寫(xiě)字母其它字符73例22:輸入a、b、c三個(gè)整數(shù),輸出最大數(shù)和最小數(shù)。
#include<stdio.h>intmain(){inta,b,c,max,min;
scanf("%d,%d,%d",&a,&b,&c);max=a>b?a:b;min=a<=b?a:b;if(c>max)max=c;elseif(c<min)min=c;printf("max=%d\nmin=%d",max,min);return0;}比較a、b兩數(shù)的大小,大數(shù)賦給max,小數(shù)賦給min若c大于max,則把c賦給max,若c比min更小則把c賦給min。if(a>b){max=a;min=b}else{max=b;min=a;}74例21:
輸入三角形三邊長(zhǎng),求三角形面積。
#include<stdio.h>#include<math.h>intmain(){floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)
{s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%7.2f\n",area);}else
printf("Notatriangle.\n");return0;}判斷條件是否滿足75循環(huán)條件4.4
循環(huán)控制概述
循環(huán)結(jié)構(gòu)的特點(diǎn):在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。C語(yǔ)言提供的循環(huán)結(jié)構(gòu)類型如下:1)用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán);2)用while語(yǔ)句;3)用do-while語(yǔ)句;4)用for語(yǔ)句;循環(huán)體76語(yǔ)法格式:while(表達(dá)式)
語(yǔ)句
表達(dá)式值為零時(shí),立即停止循環(huán)
4.4.1用while語(yǔ)句實(shí)現(xiàn)循環(huán)沒(méi)有分號(hào)0
非0循環(huán)體語(yǔ)句表達(dá)式結(jié)構(gòu)流程圖當(dāng)表達(dá)式值為真循環(huán)體語(yǔ)句N-S圖77寫(xiě)出下面程序的運(yùn)行結(jié)果
(1)intmain(){inti=1;
while(i<=3)
{printf(”%d\n”,i);i++;}
return0;}(2)intmain(){inti=1;while(i<=3);
{printf(”%d\n”,i);i++;}return0;}結(jié)果123
結(jié)果死循環(huán)循環(huán)體空語(yǔ)句若把上面{、}
去掉也死循環(huán)復(fù)合語(yǔ)句作為循環(huán)體語(yǔ)句78語(yǔ)法格式:do語(yǔ)句
while(表達(dá)式);
表達(dá)式值為零時(shí),立即停止循環(huán),至少執(zhí)行一次循環(huán)語(yǔ)句。4.4.2用do-while語(yǔ)句實(shí)現(xiàn)循環(huán)分號(hào)非0循環(huán)體語(yǔ)句表達(dá)式式結(jié)構(gòu)流程圖當(dāng)表達(dá)式值為真循環(huán)體語(yǔ)句當(dāng)表達(dá)式為真N-S圖79intmain(){intk=1,n=1,sum=0;do{
sum+=n;n++;if(sum>=10)k=0;
}
while(k==1);printf(”sum=%d\n”,sum);return0;}改為while(k=1)死循環(huán)sumn0112336410結(jié)果:sum=10寫(xiě)出下面程序的運(yùn)行結(jié)果
80例:用while語(yǔ)句和do-while語(yǔ)句求
傳統(tǒng)流程圖表示算法
成立不成立成立不成立不81N-S圖表示算法
>100>10082intmain(){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf("%d\n",sum);return0;}int
main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("%d\n",sum);return0;}i、sum的初值為1、0i的終值為101運(yùn)行結(jié)果:5050sum=0+1sum=1+2……sum=99+10083例:計(jì)算p=1×2×3×······×nintmain(){inti,n;floatp;
scanf(”%d”,&n);
i=1;p=1;while(i<=n){p*=i;i++;}
printf(”p=%.0f\n”,p);return0;}
不用long會(huì)溢出i、p的初值為1i的終值為n+1p=1*1p=1*2……p=…*n遞推算法do{p*=i;i++;}while(i<=n);i<=n等價(jià)于i<n+184例:計(jì)算s=1!+2!+3!+······+n!(n>0)intmain(){inti,n;floats,t;scanf(”%d”,&n);
i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i<=n);printf(”s=%.0f\n”,s);return0;}
保證達(dá)到計(jì)算n次t=1×1×2×3×…S=1+1×2+1×2×3+…while(i<=n){t*=i;s+=t;i++;}
85例:統(tǒng)計(jì)從鍵盤(pán)輸入一行字符的個(gè)數(shù)。#include<stdio.h>intmain(){intn=0;printf("inputastring:\n");while(getchar()!='\n')n++;printf("%d",n);return0;}只要從鍵盤(pán)輸入的字符不是回車就繼續(xù)循環(huán)完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)。輸入:ascdf↙
輸出:586例:計(jì)算π:#include<stdio.h>#include<math.h>intmain(){inti=1,n;doublepi=0;scanf("%d",&n);
while(i<=n){pi+=1.0/(i*i);i++;}pi=sqrt(pi*6);printf("pi=%lf\n",pi);return0;}i=1,pi=1.0;i=2,pi=1.0+1.0/(2*2);i=3,pi=1.0+1.0/(2*2)+1.0/(3*3);i=4,i<=3不滿足,停止循環(huán)改為1/(i*i)出錯(cuò),為什么?輸入387例:求π#include<math.h>intmain(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;
do{pi=pi+t;n=n+2;s=-s;t=s/n;}while(fabs(t)>1e-6);
pi=pi*4;printf("pi=%10.6f\n",pi);return0;}分母每次增加2單項(xiàng)的符號(hào)變化單項(xiàng)的值t=s/n
循環(huán)結(jié)束條件是運(yùn)行某一個(gè)精度:最后一項(xiàng)的值小于10-6,fabs(t)>1e-6來(lái)控制循環(huán)是否結(jié)束。881、while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)或邏輯表達(dá)式,也可以是其它表達(dá)式,只要表達(dá)式的值為真(非0)即可繼續(xù)循環(huán)。例:
intmain(){inta=0,n;printf(“\ninputn:”);scanf("%d",&n);while(n--)printf("%d",a++*2);return0;}執(zhí)行n次,每執(zhí)行1次,n減1。(a*2;a++)等價(jià)于輸入:8輸出:02468101214892、while和do-while循環(huán)比較:intmain(){intsum=0,i;scanf(“%d”,&i);
while(i<=10){sum=sum+i;i++;}printf(“sum=%d”,sum);return0;}do{sum=sum+i;i++;}while(i<=10);輸入:8sumi088917102711輸入:11sum=0sum=11903、不管是while循環(huán),還是do-while循環(huán),在循環(huán)體內(nèi)必須要有能夠改變循環(huán)條件的語(yǔ)句,否則將構(gòu)成死循環(huán)。4、循環(huán)條件設(shè)置要合理,否則也將構(gòu)成死循環(huán)。5、不管是while循環(huán)還是do-while循環(huán),循環(huán)體如果包含一個(gè)以上的語(yǔ)句,都應(yīng)以復(fù)合語(yǔ)句的形式出現(xiàn)。91
i=1;
sum=0;
while(i<=10)sum+=i;i=1;sum=0;
while(i<=10){sum+=i;i++;}
i=100;
sum=0;
while(i<=10){sum+=i;i++;}i為循環(huán)變量
沒(méi)有改變循環(huán)i的語(yǔ)句,條件一直滿足,死循環(huán)循環(huán)體,復(fù)合語(yǔ)句執(zhí)行到i=11停止條件不滿足,循環(huán)體語(yǔ)句不執(zhí)行sum為:0+11+23+3……+10924.4.3用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)法格式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句要正確表達(dá)循環(huán)結(jié)構(gòu)應(yīng)注意三方面要求:1、循環(huán)控制變量的初始化。2、循環(huán)的條件。3、循環(huán)控制變量的值的更新for語(yǔ)句在書(shū)寫(xiě)形式上集中體現(xiàn)了這三方面要求93功能:for語(yǔ)句完全可以取代while語(yǔ)句。
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句執(zhí)行過(guò)程:1)先求解表達(dá)式1。2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行第3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。3)求解表達(dá)式3。4)轉(zhuǎn)回第2)步繼續(xù)執(zhí)行。5)循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。94計(jì)算表達(dá)式3語(yǔ)句當(dāng)表達(dá)式2值非零計(jì)算表達(dá)式195例:求intmain(){inti,sum=0;i=1;do{sum+=i;i++;}
while(i<=100);
printf("%d\n",sum);return0;}intmain(){inti,sum=0;
for(i=1;i<=100;i++)sum+=i;
printf("%d\n",sum);return0;}96例:計(jì)算p=1×2×3×······×nintmain(){inti,n;floatp;
scanf(”%d”,&n);
i=1;p=1;while(i<=n){p*=i;i++;}
printf(”p=%.f\n”,p);return0;}
for(i=1,p=1;i<=n;i++)p*=i;中間用逗號(hào)for(i=1,p=1;i<=n;p*=i,i++);97例:計(jì)算s=1!+2!+3!+······+n!(n>0)intmain(){inti,n;floats,t;
scanf(”%d”,&n);
i=1;t=1;s=0;do{t*=i;s+=t;i++;}while(i<=n);
printf(”s=%.f\n”,s);return0;}
for(i=1,
t=1,
s=0;i<=n;i++){t*=i;s+=t;}i=1;t=1;
s=0;
for(;i<=n;i++){t*=i;s+=t;}i=1;t=1;
s=0;
for(;i<=n;t*=i,s+=t,i++);
98
for語(yǔ)句形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)語(yǔ)句
總是一個(gè)賦值語(yǔ)句,
它用來(lái)給循環(huán)控制變量賦初值總是一個(gè)表達(dá)式,它用來(lái)判別循環(huán)是否終止定義循環(huán)控制變量每循環(huán)一次后按什么方式變化這三個(gè)部分之間用“;”分開(kāi)99對(duì)于for循環(huán)中語(yǔ)句的一般形式,
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句就是如下的while循環(huán)形式:
表達(dá)式1;
while(表達(dá)式2)
{語(yǔ)句表達(dá)式3;}100例:寫(xiě)出下面程序的輸出結(jié)果#include<stdio.h>intmain(){charc;for(;(c=getchar())-’#’;)putchar(c);return0;}c為’#’,值為0,結(jié)束可以是任意表達(dá)式輸入:
a56*3h#hj$↙輸出:
a56*3h101例:統(tǒng)計(jì)從鍵盤(pán)輸入一行字符的個(gè)數(shù),以回車結(jié)束。#include<stdio.h>intmain(){intn;charc;printf("Inputastring:\n");for(n=0;(c=getchar())!='\n';n++);printf("%d",n);return0;}意義是:從鍵盤(pán)輸入一個(gè)字符并賦值給變量c,將c與字符‘\n’比較,不一樣就繼續(xù)循環(huán)。完成對(duì)輸入字符個(gè)數(shù)計(jì)數(shù)
循環(huán)體是空語(yǔ)句
輸入:Abg23bs↙輸出:7102例:下面程序的輸出結(jié)果是[]intmain(){intx=10,y=10,i;
for(i=0;x>8;y=++i)printf(”%3d%3d”,x--,y);return0;}A.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣西經(jīng)濟(jì)職業(yè)學(xué)院《材料化學(xué)基礎(chǔ)(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 成都工業(yè)職業(yè)技術(shù)學(xué)院《有機(jī)合成設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 團(tuán)圓創(chuàng)意美術(shù)課件
- 長(zhǎng)春理工大學(xué)《翻譯與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州大學(xué)《聚合物成型加工原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴陽(yáng)職業(yè)技術(shù)學(xué)院《西藏近現(xiàn)代發(fā)展史》2023-2024學(xué)年第二學(xué)期期末試卷
- 濰坊職業(yè)學(xué)院《電子商務(wù)綜合》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古經(jīng)貿(mào)外語(yǔ)職業(yè)學(xué)院《事故調(diào)查與案例分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 鶴崗師范高等專科學(xué)?!赌嫦蚍治黾夹g(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京審計(jì)大學(xué)《廣播電視新聞報(bào)道》2023-2024學(xué)年第二學(xué)期期末試卷
- 留置導(dǎo)尿法操作評(píng)分標(biāo)準(zhǔn)
- 圖集04S206自動(dòng)噴水與水噴霧滅火設(shè)施安裝
- IQC來(lái)料不合格品處理流程管理規(guī)定
- 2023年拍賣師考試真題模擬匯編(共469題)
- MOOC 引領(lǐng)世界的中國(guó)乒乓-西南交通大學(xué) 中國(guó)大學(xué)慕課答案
- 低碳示范區(qū)評(píng)價(jià)技術(shù)規(guī)范低碳景區(qū)
- 語(yǔ)法填空謂語(yǔ)和非謂語(yǔ)動(dòng)詞解題技巧課件(共16張)
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)《整式的加減》單元作業(yè)設(shè)計(jì)
- 咖啡文化與飲品調(diào)制智慧樹(shù)知到期末考試答案2024年
- (2024年)勞動(dòng)法課件勞務(wù)派遣
- 兒童支氣管哮喘共患病診治專家共識(shí)
評(píng)論
0/150
提交評(píng)論