C語言三種程序結構.ppt
《C語言三種程序結構.ppt》由會員分享,可在線閱讀,更多相關《C語言三種程序結構.ppt(64頁珍藏版)》請在裝配圖網(wǎng)上搜索。
2020年4月25日星期六,游志宇,電子科技大學成都學院微電子系,,第四講,4.1順序結構,什么是順序結構??,程序按語句的先后順序依次執(zhí)行的程序,,例子:輸入三角形的三邊長,求三角形面積。,假設三個邊長a,b,c能構成三角形。則面積公式為:area=s=(a+b+c)*0.5,#include#includevoidmain(){floata,b,c,s,area;scanf(“%f,%f,%f,},數(shù)學函數(shù)庫因為要用到其中的sqrt函數(shù),4.1順序結構,例從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。#includevoidmain(){charcl,c2;cl=getchar();printf(″%c,%d\n″,cl,cl);c2=cl+32;printf(″%c,%d\n″,c2,c2);},運行情況:A↙A,65a,97,4.1順序結構,,,,,,例求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,且設>0。眾所周知,一元二次方程式的根為x1=x2=可以將上面的分式分為兩項:p=,q=x1=p+q,x2=p-q,4.1順序結構,#include#includevoidmain(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",},運行情況:a=1,b=3,c=2↙x1=-1.00x2=-2.00,4.1順序結構,4.2選擇結構,選擇結構是3種基本結構之一。,選擇結構的作用:根據(jù)所指定的條件是否滿足,決定從給定的操作中選擇其一執(zhí)行;在C語言中選擇結構是由if語句和switch語句實現(xiàn)的。正確使用選擇結構,需要充分理解關系表達式和邏輯表達式。,4.2選擇結構,一、if語句,if語句是用來判斷所給條件是否滿足,然后根據(jù)結果決定執(zhí)行給出的操作。,if語句最常用的有三種基本形式,(1)if(表達式){語句}例:if(x>y)printf(“%d”,x);,4.2選擇結構,#includevoidmain(){floata,b,t;scanf(“%f,%f”,},4.2選擇結構,例輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)。,例輸入三個數(shù)a,b,c,要求按由小到大的順序輸出。,用偽代碼寫的算法為:ifa>b將a和b對換,a中保存a、b中的小者;ifa>c將a和c對換,a中保存a、c中的小者;ifb>c將b和c對換,b中保存b、c中的小者;,4.2選擇結構,#includevoidmain(){floata,b,c,t;scanf(“%f,%f,%f”,},,4.2選擇結構,(2)if(表達式)語句1else語句2例:if(x>y)printf(“%d”,x);elseprintf(“%d”,y);,4.2選擇結構,if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3……elseif(表達式m)語句melse語句n,4.2選擇結構,例:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;,4.2選擇結構,說明:(1).3種形式的if語句中,在if后面都有表達式,一般為邏輯表達式或關系表達式。注:在執(zhí)行if語句時,先對表達式求解,然后根據(jù)表達式的值,執(zhí)行指定的語句。(2).第二,第三種形式的if語句中,在每個else前面有一個分號,整個語句結束處有一個分號。(3).在if和else后面可以只含有一個內嵌的操作語句,也可以由多個操作語句,此時用花括號將幾個語句括起來成為一個復合語句。,4.2選擇結構,二.if語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:if()if()語句1else語句2elseif()語句3else語句4,,,內嵌if,4.2選擇結構,-1(x0)算法1:算法2:輸入x輸入x若x0,則y=1若x=0,則y=0輸出y若x>0,則y=1輸出y,,4.2選擇結構,#includevoidmain(){intx,y;scanf(“%d”,},4.2選擇結構,上例中的程序段有四個,請判斷哪個是正確的?程序1:程序2:if(x=0)y=-1;if(x>0)elsey=1;if(x==0)elsey=0;y=0;elseelsey=1;y=-1;程序3:程序4:y=-1;y=0;if(x!=0)if(x>=0)if(x>0)if(x>0)y=1;y=1;elseelsey=0;y=-1;,正確,正確,錯誤,錯誤,4.2選擇結構,,,例寫程序,判斷某一年是否閏年。用下圖來表示判斷閏年的算法。,能被4整除,但不能被100整除。能被4整除,又能被400整除,#includevoidmain(){intyear,leap;scanf("%d",,,if(year%4?。剑埃﹍eap=0;elseif(year%100?。剑埃﹍eap=1;elseif(year%400?。剑埃﹍eap=0;elseleap=1;,//也可以用一個邏輯表達式包含所有的閏年條件,//將上述if語句用下面的if語句代替:if((year%4==0elseleap=0;,if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");},運行情況:1989↙1989isnotaleapyear.2000↙2000isaleapyear.,三.Switch語句,4.2選擇結構,switch語句是多分支語句,用來實現(xiàn)多分支選擇結構。if語句只有兩個分支可共選擇。在實際問題中,我們經(jīng)常會遇到多分支選擇的問題,因此引入多分支語句switch。例如:學生成績分類(90分以上為‘a’等,80~89分為‘b’等,70~79分為‘c’等……);人口統(tǒng)計分類(按年齡分為老、中、青、少、兒童);工資統(tǒng)計分類;銀行存款分類……。當然多分支選擇也可以用if語句嵌套來解決,但如果分支過多,則嵌套的if語句層數(shù)就多,程序冗長而可讀性降低。,4.2選擇結構,switch語句的格式:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2…case常量表達式n:語句ndefault:語句n+1},說明:switch后面括弧內的“表達式”,允許它為任何類型。(2)當表達式的值與某一個case后面的常量表達式的值相等時,就執(zhí)行此case后面的語句,若所有的case中的常量表達式的值都沒有與表達式的值匹配的,就執(zhí)行default后面的語句。(3)每一個case的常量表達式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象(對表達式的同一個值,有兩種或多種執(zhí)行方案)。,4.2選擇結構,4.2選擇結構,(4)各個case和default的出現(xiàn)次序不影響執(zhí)行結果。例如,可以先出現(xiàn)“default:…”,再出現(xiàn)“caseXX:…”,然后是“caseAA:…”。(5)執(zhí)行完一個case后面的語句后,流程控制轉移到下一個case繼續(xù)執(zhí)行?!癱ase常量表達式”只是起語句標號作用,并不是在該處進行條件判斷。在執(zhí)行switch語句時,根據(jù)switch后面表達式的值找到匹配的入口標號,就從此標號開始執(zhí)行下去,不再進行判斷。,例運輸公司對用戶計算運費。設每公里每噸貨物的基本運費為p,貨物重為w,距離為s,折扣為d,則總運費f的計算公式為:f=p*w*s*(1-d)路程(s)越遠,每公里運費越低。假設標準如下:s<250km沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣,4.2選擇結構,分析折扣變化的規(guī)律性:折扣的“變化點”都是250的倍數(shù)(250,500,1000,2000,3000)利用這一特點,可以在橫軸上加一種坐標c,c的值為S/250,c代表250的倍數(shù)。當:c<1時,表示S<250,無折d=0%;1≤c<2時,表示250≤S<500,折扣d=2%;2≤c<4時,表示500≤S<1000,折扣d=5%;4≤c<8時,表示1000≤S<2000,折扣d=8%;8≤c<12時,表示2000≤S<3000,折扣d=10%;c≥12時,表示3000≤S,折扣d=15%。,4.2選擇結構,4.2選擇結構,據(jù)此寫出程序如下:#includevoidmain(){intc,S;floatp,w,d,f;printf(“請輸入基本運費P、貨物重量W及運輸距離S:\n”)scanf("%f,%f,%d",i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf("%d\n″,sum);},4.3.2用while語句實現(xiàn)循環(huán),while語句用來實現(xiàn)“當型”循環(huán)結構。其一般形式:while(表達式){語句}當表達式為非0值時,執(zhí)行while語句中的內嵌語句。其特點是:先判斷表達式,后執(zhí)行語句。,流程圖,例求1到100的和#includevoidmain(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf(″%d\n″,sum);},,說明:(1)循環(huán)體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn).(2)在循環(huán)體中應有使循環(huán)趨向于結束的語句。,運行結果:5050,注意:循環(huán)體如果包含一個以上的語句,應該用花括號括起來,以復合語句形式出現(xiàn)。如果不加花括號,則while語句的范圍只到while后面的第一個分號處。在循環(huán)體中應有使循環(huán)趨向于結束的語句。如果無此語句,則i的值始終不改變,循環(huán)永不結束。(成為無限循環(huán)),4.3.3用do-while語句實現(xiàn)循環(huán),do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式:do{循環(huán)體語句}while(表達式);,執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0為止,此時循環(huán)結束。,流程圖,#includevoidmain(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d\n″,sum);},運行結果:5050,,例求1到100的和,從上面例題可以看到:對同一個問題可以用while語句處理,也可以用do-while語句處理。在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結果是不同的。,,,,例while和do-while循環(huán)的比較(1)#include(2)#includevoidmain()voidmain(){intsum=0,i;{intsum=0,i;scanf(“%d″,}},,運行結果:1↙sum=55再運行一次:11↙sum=0,運行結果:1↙sum=55再運行一次:11↙sum=11,,說明:當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結果相同。否則,二者結果不相同。,4.4用for語句實現(xiàn)循環(huán),C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結束條件的情況,它完全可以代替while語句。其一般形式:for(表達式1;表達式2;表達式3){語句},4.4用for語句實現(xiàn)循環(huán),For循環(huán)的執(zhí)行過程:(1)先求解表達式1。(2)求解表達式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結束循環(huán),轉到第(5)步。(3)求解表達式3。(4)轉回上面第(2)步驟繼續(xù)執(zhí)行。(5)循環(huán)結束,執(zhí)行for語句下面的一個語句,for(表達式1;表達式2;表達式3){語句},,4.4用for語句實現(xiàn)循環(huán),,循環(huán)初始條件,,循環(huán)控制條件,,循環(huán)體,for語句等價于下列語句:表達式1;while(表達式2){語句;表達式3;},for語句最簡單的應用形式也就是最易理解的如下形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體;,例如:求1到100的和,它相當于以下語句:i=1;while(i<=100){sum=sum+i;i++;},顯然,用for語句簡單、方便。,for(i=1;i<=100;i++)sum=sum+i;,例:求(即求1!+2!+3!+….+20!),#includevoidmain(){floats=0,t=1;intn;for(n=1;n100時,執(zhí)行break語句,提前結束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。,4.5break語句和continue語句,4.5.2continue語句作用為結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定.一般形式:continue;,4.5break語句和continue語句,continue語句和break語句的區(qū)別:continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。,while(表達式1){…if(表達式2)continue;…},流程圖,4.5break語句和continue語句,continue語句和break語句的區(qū)別:break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。,while(表達式1){…if(表達式2)break;…},流程圖,例把100~200之間的不能被3整除的數(shù)輸出。#includevoidmain(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d″,n);}},,說明:當n能被3整除時,執(zhí)行continue語句,結束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時才執(zhí)行printf函數(shù)。,說明:例中循環(huán)體也可以改用一個if語句處理:if(n%3!=0)printf(“%d”,n);,題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因為:153=13+53+33。,程序分析:利用for循環(huán)控制100-999之間的數(shù),每個數(shù)分解出個位,十位,百位,#includevoidmain(){inti,j,k,n;printf(“‘’waterflower‘’numberis:\n");for(n=100;n<1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出個位*/if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf("%-5d",n);}}printf(“\n");},題目:有1、2、3、4共四個數(shù)字,能組成多少個互不相同且無重復數(shù)字的三位數(shù)?都是多少?,程序分析:可填在百位、十位、個位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。,#includevoidmain(){inti,j,k;printf("\n");for(i=1;i<5;i++)//以下為三重循環(huán)for(j=1;j<5;j++)for(k=1;k<5;k++){/*確保i、j、k三位互不相同*/if(i!=k}},題目:猜數(shù)游戲(掌握程序結構及隨機函數(shù)應用)程序說明:游戲的開始由機器產生一個隨機數(shù)(1~100之間,用庫函數(shù)srand(),rand()),然后游戲者在程序的提示下猜數(shù),若輸入的數(shù)比這個數(shù)大,程序提示:YouranswerisHIGH,tryagain.,否則,程序提示:YouranswerisLOW,tryagain.,直到猜對為止。程序可實現(xiàn)連續(xù)猜數(shù),直到游戲者退出。voidsrand(unsignedseed)初始化隨機數(shù)發(fā)生器intrand()產生一個隨機數(shù)并返回這個數(shù)system("cls");//清屏DOS命令fflush(stdin);//清除內存getch();//從控制臺獲取一個字符,不顯示在屏幕上,題目:百錢百雞(窮舉算法)我國古代數(shù)學家張丘鍵在《算經(jīng)》中出了一道題“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?注:窮舉法是最簡單、最常見的一種程序設計方法。它充分利用了計算機處理的高速特性。使用窮舉法的關鍵是確定正確的窮舉范圍,即不能過分擴大、也不能過分縮小窮舉的范圍。,題目:簡單計算器請編寫一個程序計算表達式:data1opdata2的值。其中,op為運算符+、-、*、/。,TheEnd,Thanks!,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 語言 程序結構
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.820124.com/p-11495294.html