順序結(jié)構(gòu)和兩分支結(jié)構(gòu)程序_第1頁(yè)
順序結(jié)構(gòu)和兩分支結(jié)構(gòu)程序_第2頁(yè)
順序結(jié)構(gòu)和兩分支結(jié)構(gòu)程序_第3頁(yè)
順序結(jié)構(gòu)和兩分支結(jié)構(gòu)程序_第4頁(yè)
順序結(jié)構(gòu)和兩分支結(jié)構(gòu)程序_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C程序設(shè)計(jì)ProgramminginC

西安電子科技大學(xué)計(jì)算機(jī)學(xué)院張淑平上次課的主要內(nèi)容C語(yǔ)言提供了豐富的運(yùn)算符,其中一些并非必要,只是為了表達(dá)的簡(jiǎn)潔性而引入的,使用時(shí)應(yīng)盡量避免出現(xiàn)歧義。+、-、*、/、%

=、+=、-=、*=、/=、%=++、--表達(dá)式是表達(dá)運(yùn)算過(guò)程的基本結(jié)構(gòu),應(yīng)掌握表達(dá)式的書(shū)寫(xiě)形式、含義和運(yùn)算方式(涉及運(yùn)算符的優(yōu)先級(jí)、結(jié)合性,參看附錄Ⅲ)類型轉(zhuǎn)換:強(qiáng)制類型轉(zhuǎn)換、自動(dòng)類型轉(zhuǎn)換C語(yǔ)言的輸入和輸出處理是以標(biāo)準(zhǔn)函數(shù)的方式由編譯系統(tǒng)提供的,因此,每個(gè)C程序的開(kāi)頭都應(yīng)有以下代碼:#include<stdio.h>或者#include"stdio.h“字符數(shù)據(jù)輸入、輸出:getchar()、putchar()格式化輸入、輸出:scanf()、printf()格式:%格式字符,例如%d、%c、%f、%e這次課的主要內(nèi)容順序結(jié)構(gòu)程序設(shè)計(jì)邏輯運(yùn)算及邏輯表達(dá)式選擇結(jié)構(gòu)程序順序結(jié)構(gòu)程序設(shè)計(jì)對(duì)程序而言,順序結(jié)構(gòu)就是指按照書(shū)寫(xiě)順序,自上而下順次執(zhí)行每一條語(yǔ)句AB順序結(jié)構(gòu)ab回顧順序結(jié)構(gòu)的含義順序結(jié)構(gòu)程序例1#include<stdio.h>main(void){intinches,feet,fathoms;printf("inputfathoms:");scanf("%d",&fathoms);feet=6*fathoms;inches=12*feet;printf("%dfathoms\n",fathoms);printf("%dfeet\n",feet);printf("%dinches\n",inches);}計(jì)算對(duì)應(yīng)的英寸數(shù)輸出英噚數(shù)、英尺數(shù)、英寸數(shù)輸入英噚數(shù)計(jì)算對(duì)應(yīng)的英尺數(shù)開(kāi)始結(jié)束英噚轉(zhuǎn)換為英尺和英寸順序結(jié)構(gòu)程序例2#include<stdio.h>/*輸入圓半徑radius,求圓周長(zhǎng)和圓面積。*/#definePI3.1415926main(){floatradius,length,area;

printf("inputtheradiusofacircle:");scanf("%d",&radius);length=2*PI*radius; /*求圓周長(zhǎng)*/area=PI*radius*radius; /*求圓面積*/printf("radius=%f\n",radius); /*輸出圓半徑*/printf("length=%7.2f,area=%7.2f\n",length,area);}計(jì)算面積輸出半徑、周長(zhǎng)、面積值輸入半徑值計(jì)算周長(zhǎng)開(kāi)始結(jié)束順序結(jié)構(gòu)程序例4.11#include<stdio.h>/*輸入大寫(xiě)字母,輸出小寫(xiě)字母。*/main(){charc1,c2;/*聲明變量*/c1=getchar(); /*輸入一個(gè)大寫(xiě)字母*/printf(“%c,%d\n”,c1,c1);/*輸出字母和其ASCII碼值*/c2=c1+32;

printf(“%c,%d\n”,c2,c2);/*輸出對(duì)應(yīng)的小寫(xiě)字母和ASCII碼值*/}TC2.0順序結(jié)構(gòu)程序設(shè)計(jì)小結(jié)將需要使用的標(biāo)準(zhǔn)庫(kù)函數(shù)包含到到程序中,格式為#include<stdio.h>/*包含標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)*/#include<math.h>/*包含常用的數(shù)學(xué)函數(shù)庫(kù)*/編寫(xiě)順序結(jié)構(gòu)程序的步驟:聲明變量名及類型;為變量賦值,或?yàn)樽兞孔x取值;運(yùn)算;輸出運(yùn)算結(jié)果。將以上內(nèi)容寫(xiě)在main函數(shù)中,一個(gè)簡(jiǎn)單的C程序就編寫(xiě)好了用語(yǔ)句描述這些操作一元二次方程求根問(wèn)題:求一元二次方程為ax2+bx+c=0的根已知:令:則:順序結(jié)構(gòu)程序例4.12/*輸入系數(shù),求一元二次方程的根*/#include<stdio.h>#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;/*聲明變量*/scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("\n\nx1=%5.2f,x2=%5.2f\n",x1,x2);/*輸出根*/}TC2.0程序書(shū)寫(xiě)風(fēng)格使用空格和注釋使代碼更容易閱讀例如,在二元運(yùn)算符兩側(cè)各加一個(gè)空格,以提高可讀性適當(dāng)?shù)目s進(jìn)簡(jiǎn)單C程序的框架#inlcude<stdio.h>#definePI3.1415926main(){......}選擇結(jié)構(gòu)程序選擇結(jié)構(gòu)選擇結(jié)構(gòu)表達(dá)的含義是根據(jù)指定的條件(即產(chǎn)生真/假值的表達(dá)式),從兩條路徑中選擇一條執(zhí)行路徑回顧選擇結(jié)構(gòu)的含義pAB成立不成立ab選擇結(jié)構(gòu)1pA成立不成立ab選擇結(jié)構(gòu)2產(chǎn)生真/假值的表達(dá)式關(guān)系運(yùn)算的結(jié)果為真/假六種關(guān)系運(yùn)算:>、<、>=、<=、==、!=關(guān)系表達(dá)式只能表示單一條件邏輯運(yùn)算符&&(與,同時(shí))、||(或,或者)、!(非,否定)a&&b:當(dāng)且僅當(dāng)a與b同時(shí)為真時(shí),a&&b為真a||b:當(dāng)且僅當(dāng)a與b同時(shí)為假時(shí),a||b為假!a:若a為真,則!a為假;若a為假,則!a為真邏輯運(yùn)算符用于連接產(chǎn)生真/假值的表達(dá)式例如:表示“a>b>c”的邏輯表達(dá)式為:

(a>b)&&(b>c)

若直接表示為a>b>c,結(jié)果如何?C語(yǔ)言中的邏輯例如,表示某條件為“真”整數(shù)k能被4整除(k%4==0)或者:!(k%4)整數(shù)k不能被4整除(k%4!=0)或者:(k%4)關(guān)系表達(dá)式和邏輯表達(dá)式的值為真或假,在C語(yǔ)言中分別用數(shù)值1和0表示。特別提醒:C語(yǔ)言程序中,只要條件表達(dá)式的值為0,則判定為假,否則判定為真邏輯表達(dá)式例如,判斷閏年的條件(給定一個(gè)年號(hào)k)能被4整除,但是不能被100整除的年份是閏年偽代碼表示:(kmod4=0)and(kmod100≠0)C語(yǔ)言表達(dá)式:

(k%4==0)&&(k%100!=0)簡(jiǎn)化形式:!(k%4)&&(k%100)能同時(shí)被100和400整除的年份是閏年偽代碼表示:

(kmod400=0)C語(yǔ)言表達(dá)式:

(k%400==0)簡(jiǎn)化形式:

(k%400)因此,給定一個(gè)年號(hào)k,判斷是否為閏年的條件是:((k%4==0)&&(k%100!=0))||((k%400==0))或者:(!(k%4)&&(k%100))||(!(k%400))邏輯運(yùn)算符的優(yōu)先級(jí)從高到低依次是:!,&&,||回到選擇結(jié)構(gòu)基本的選擇結(jié)構(gòu)表示了從兩條路徑中選擇一條執(zhí)行的邏輯pAB成立不成立ab選擇結(jié)構(gòu)1C語(yǔ)言提供了語(yǔ)句“if...else”來(lái)表達(dá)兩分支的選擇結(jié)構(gòu)if(a>b)max=a;elsemax=b;例如,用max表示整數(shù)a和b中的較大者選擇結(jié)構(gòu)2選擇語(yǔ)句的另一種形式“if...”pA成立不成立ab選擇結(jié)構(gòu)2max=b;if(a>b)max=a;例如,用max表示整數(shù)a和b中的較大者選擇結(jié)構(gòu)程序示例abc問(wèn)題:給定三角形的三個(gè)邊長(zhǎng)值a,b,c,求其面積。我們已經(jīng)知道,若已知a、b、c是三角形的邊長(zhǎng),則其面積area可由下式計(jì)算:其中,abc求三角形的面積/*輸入三角形的邊長(zhǎng),求其面積*/#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;/*聲明變量*/scanf("%f,%f,%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("\narea=%7.2f\n",area);}TC2.0abc輸入的三個(gè)數(shù)能否表示三角形的邊長(zhǎng)?選擇結(jié)構(gòu)程序示例#include<stdio.h>/*輸入三角形的邊長(zhǎng),求其面積*/#include<math.h>main(){floata,b,c,s,area,p;scanf("%f,%f,%f",&a,&b,&c);s=(a+b+c)/2;p=

(s-a)*(s-b)*(s-c);

if(a+b<c||b+c<a||a+c<b){printf("cannotmakeatriangle!\n");}else{area=sqrt(s*

p);printf("\narea=%7.2f\n",area);}}TC2.0就算是編寫(xiě)最簡(jiǎn)單的程序,也需要選擇結(jié)構(gòu)程序中的復(fù)合語(yǔ)句程序中的復(fù)合語(yǔ)句:一個(gè)順序執(zhí)行的語(yǔ)句序列,用“{”和“}”將這些語(yǔ)句括起來(lái)。if(p<=0){printf("cannotmakeatriangle!\n");}else{area=sqrt(s*p);printf("\narea=%7.2f\n",area);}邏輯表達(dá)式的短路計(jì)算對(duì)于邏輯與運(yùn)算,例如“a&&b”,若a的邏輯值為“假”,則無(wú)需計(jì)算b的邏輯值,就可得知表達(dá)式“a&&b”的邏輯值為“假”。能被4整除,但是不能被100整除的年份是閏年

(k%4==0)&&(k%100!=0)對(duì)于邏輯或運(yùn)算,例如“a||b”,若a的邏輯值為“真”,則無(wú)需計(jì)算b的邏輯值,就可得知表達(dá)式“a||b”的邏輯值為“真”。因此,對(duì)于邏輯表達(dá)式,可以進(jìn)行短路計(jì)算(既只計(jì)算表達(dá)式的部分項(xiàng))。練習(xí)設(shè)a=3,b=4,c=5,試計(jì)算以下表達(dá)式的值a+b>c&&b==ca||b+c&&b–c(!(a+b)+c–1)&&(b+c/2)if語(yǔ)句使用舉例1問(wèn)題:從鍵盤上輸入一個(gè)字符,如果它是大寫(xiě)字母,則把它轉(zhuǎn)換成小寫(xiě)字母輸出;否則,直接輸出。/*程序功能:若輸入大寫(xiě)字母,則輸出小寫(xiě)字母;否則直接輸出*/#include<stdio.h>main(){charc1;printf("inputacharacter:");c1=getchar();

if(c1>='A'&&c1<='Z')c1=c1+32;

printf("%c,%d\n",c1,c1); }TC2.0if語(yǔ)句的內(nèi)嵌語(yǔ)句pAB成立不成立if...elsepA成立不成立if...if(a>b)max=a;elsemax=b;if(a>b)printf("%d",a);

if語(yǔ)句的條件成立/不成立時(shí)執(zhí)行的語(yǔ)句是if語(yǔ)句的內(nèi)嵌語(yǔ)句內(nèi)嵌語(yǔ)句用塊表示內(nèi)嵌語(yǔ)句超過(guò)一條時(shí),在程序中用復(fù)合語(yǔ)句表示例如,若a>b,則交換二者的值if(a>b){temp=a;a=b;b=temp;}一個(gè)復(fù)合語(yǔ)句,邏輯上是一個(gè)整體使用if語(yǔ)句的要點(diǎn)條件表達(dá)式p語(yǔ)句塊A語(yǔ)句塊B成立不成立if(表達(dá)式)

{表達(dá)式為真時(shí)將執(zhí)行的語(yǔ)句;

}else

{表達(dá)式為假時(shí)將執(zhí)行的語(yǔ)句;}if語(yǔ)句的表達(dá)式要用括號(hào)括起來(lái),為了避免出錯(cuò),始終將if的內(nèi)嵌語(yǔ)句用塊表示if語(yǔ)句的嵌套若if的內(nèi)嵌語(yǔ)句還是if語(yǔ)句,則形成嵌套例如條件表達(dá)式p1語(yǔ)句塊A語(yǔ)句塊C成立不成立條件表達(dá)式p2成立不成立條件表達(dá)式p3成立不成立語(yǔ)句塊B語(yǔ)句塊D嵌套層次不宜過(guò)多,否則可能造成理解程序邏輯困難if語(yǔ)句的嵌套舉例1例如y=-1 (x<0)0(x=0)1(x>0)x<0y=-1y=1成立不成立成立不成立y=0x=0可用if語(yǔ)句分別表示每種情況if(x<0){y=-1;}elseif(x==0){y=0;}else{y=1;}x<0y=-1y=1成立不成立成立不成立y=0x=0if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;判斷閏年的流程圖k能被4整除?輸入一個(gè)年份值k開(kāi)始結(jié)束輸出k不是閏年輸出k是閏年YNk能被100整除?Yk能被400整除?YNN輸出k是閏年輸出k不是閏年判斷閏年的程序k能被4整除?輸入一個(gè)年份值k開(kāi)始結(jié)束輸出k是閏年YNk能被100整除?Yk能被400整除?YNN輸出k是閏年輸出k不是閏年輸出k不是閏年#include<stdio.h>main(){

intk;

printf("whatyear?");scanf("%d",&k);

if(k%4==0)if(k%100==0)if(k%400==0)printf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);elseprintf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);}if(k%4==0)elseif(k%100==0)elseprintf("%disnotaleapyear!\n",k);printf("%disaleapyear!\n",k);if(k%400==0)elseprintf("%disaleapyear!\n",k);printf("%disnotaleapyear!\n",k);intk;printf("whatyear?");scanf("%d",&k);程序書(shū)寫(xiě)風(fēng)格#include<stdio.h>/*縮進(jìn)*/main(){intk;

printf("whatyear?");scanf("%d",&k);if(k%4==0)if(k%100==0)if(k%400==0)printf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);elseprintf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);}#include<stdio.h>/*全部語(yǔ)句左對(duì)齊,不好的風(fēng)格*/main(){intk;

printf("whatyear?");scanf("%d",&k);if(k%4==0)if(k%100==0)if(k%400==0)printf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);elseprintf("%disaleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);}intisLeap;isLeap=(k%4==0)&&(k%100!=0)||(k%400==0);if(isLeap!=0)printf("%daleapyear!\n",k);elseprintf("%disnotaleapyear!\n",k);條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符號(hào):?:基本使用形式:表達(dá)式1?表達(dá)式2:表達(dá)式3if(a>b)max=a;elsemax=b;例如,用max表示整數(shù)a和b中的較大者max=(a>b)?a:b;條件運(yùn)算符的使用例如:從鍵盤上輸入一個(gè)字符,如果它是大寫(xiě)字母,則把它轉(zhuǎn)換成小寫(xiě)字母輸出;否則,直接輸出。/*若輸入大寫(xiě)字母,則輸出小寫(xiě)字母;否則直接輸出*/#include<stdio.h>main(){charc1;printf("inputacharacter:");c1=getchar();c1=(c1>='A'&&c1<='Z')?(c1+32):c1;

printf("%c,%d\n",c1,c1); }TC2.0if語(yǔ)句小結(jié)if語(yǔ)句用于表示兩分支的選擇結(jié)構(gòu),即需要根據(jù)判定條件以決定進(jìn)行/不進(jìn)行某計(jì)算,或者進(jìn)行哪一種計(jì)算的處理步驟。if語(yǔ)句有兩種基本形式:邏輯表達(dá)式的主要用途之一就是作為if語(yǔ)句的條件。if(condition)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論