版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章
順序和選擇結構程序設計
了解C語言程序的特點C程序的三種基本結構能編寫簡單的順序結構程序。熟練掌握if語句的三種形式,掌握if語句的基本結構以及if語句的嵌套,并能將條件運算符給出的語句轉化成if語句的形式。掌握switch語句的一般形式,并能把復雜的分支選擇性結構化成switch語句來解決問題。本章重點3.1程序設計概述程序設計的最終目的是能在計算機上計算出正確的結果來。1969年,Dijkstra首先提出了結構程序設計的概念,強調從程序的結構和風格上來研究和設計程序。首先應從全局上把握系統(tǒng)所具備的功能是什么,并將系統(tǒng)劃分成幾個相對獨立的子系統(tǒng),而每個子系統(tǒng)只涉及局部的環(huán)境和條件。然后,進入第二步的實現(xiàn)階段,即進行編碼。在第一階段,只要知道“做什么”,而在實現(xiàn)階段,才考慮“如何做”。3.流程控制語句
結構化程序設計的基本思想是任何程序都可以用三種基本結構來實現(xiàn),即順序結構、選擇結構和循環(huán)結構。順序結構的程序流程是按語句書寫的順序依次執(zhí)行。選擇結構是根據給定條件進行判斷,由判斷的結果決定執(zhí)行兩條或多條路徑中的一條。循環(huán)結構是在給定條件成立的情況下反復執(zhí)行某個程序段,該程序段稱為”循環(huán)體”。實現(xiàn)上述各種程序流程的語句稱為流程控制語句。順序結構:其按語句書寫的先后順序依次執(zhí)行。例:輸入兩個變量,交換兩者的值后輸出。#include<stdio.h>voidmain(){ intx,y,z;printf("pleaseinputxandy:\n");scanf("%d,%d",&x,&y);printf("x=%d,y=%d\n",x,y);z=x;x=y;y=z;printf("x=%d,y=%d\n",x,y);}選擇結構:程序的執(zhí)行流程根據給定條件進行判斷,由判斷的結果決定在兩支或多支程序段中選擇一條分支執(zhí)行,程序執(zhí)行流程見圖3-3。
圖3-3選擇結構流程圖
循環(huán)結構:在給定條件成立的情況下程序的執(zhí)行流程反復執(zhí)行某個程序段,這種程序結構稱為循環(huán)結構,其有兩種實現(xiàn)形式:①“當型”循環(huán)結構。即當條件成立就執(zhí)行循環(huán)。②“直到型”循環(huán)結構。即執(zhí)行循環(huán)直到條件不成立時才停止循環(huán)?!爱斝汀毖h(huán)流程圖“直到型”循環(huán)流程圖C語言有9種控制語句①if-else(條件語句)②for()(循環(huán)語句)③while()(循環(huán)語句)④do-while()(循環(huán)語句)⑤continue(結束本次循環(huán)語句)⑥break(中止執(zhí)行switch或循環(huán)語句)⑦switch(多分支選擇語句)⑧goto(轉向語句)⑨return(從函數返回語句)1.表達式語句任何一個表達式加上一個分號就可以組成一條語句。例如:
表達式表達式語句
a=b+c*(d+3)a=b+c*(d+3);
a+b+ca+b+c;
i++i++;3.3C語句函數調用也是表達式,在其后加一個分號,就變成了函數調用語句。
eg:printf函數調用語句和scanf函數調用語句小結:在表達式之后加一個分號,從而構成一個語句,這是C語言的一個特色。它使C語言的程序設計的表達能力更強。2.復合語句
定義:將多個相關聯(lián)的簡單語句用一對大括號括起來就構成了復合語句,在程序中當作一個語句看待。例如:{a=1.0;b=2.0;i++;}3.4if條件語句
1.if結構2.if-else結構3.if-else-if結構3.4.1if結構if結構的一般格式為:if(表達式)語句功能:首先計算表達式的值,若其值為非0(即“真”),則執(zhí)行表達式后的語句;若其值為0(即“假”),則跳過這個語句去執(zhí)行if語句的后繼語句。注:if(表達式)后面的語句只能是一個語句或一個復合語句。流程圖假(0)表達式為真嗎?執(zhí)行語句真(非0)入口表達式為真嗎?執(zhí)行語句真(非0)假(0)入口#include<stdio.h>voidmain(){floatr;printf(“Inputtheradius:”);scanf(“%f”,&r);
if(r>0)printf(“area=%f\n”,3.14159*r*r);}例:從鍵盤輸入圓的半徑,若半徑小于等于0,則不進行計算;否則,計算圓面積。例:從鍵盤輸入圓的半徑,若為10,則計算圓的面積,若為20,則計算圓的周長。若既不等于10又不等于20,則不進行計算。
#include<stdio.h>voidmain(){floatr;printf("Inputtheradiut:");scanf("%f",&r);
if(r==10)printf("Area=%f\n",3.14159*r*r);
if(r==20)printf("Cycle=%f\n",2.0*3.14159*r);}例:輸入兩個實數,按由大到小的順序輸出這兩個數。
#include<stdio.h>voidmain(){floata,b;scanf("%f,%f",&a,&b);
if(a>b)printf("%f,%f",a,b);
if(a<b)printf("%f,%f",b,a);}分析:輸入兩個實數時,這兩個實數的大小順序是任意的。但是題中要求輸出的順序是由大到小。若a>b,則先a后b;若a<b,則先b后a。用交換變量值的方法按順序輸出這兩個數交換變量值的思想:不改變變量名,但變量值可改變的性質。若a的值大于b的值,則a與b的值不交換;若a的值小于b的值,則兩者互相交換值。從而使得無論何時,變量a的值始終大于變量b的值。最后,按先a后b的順序輸出,即可實現(xiàn)按由大到小的順序輸出的功能。實現(xiàn)方法:為了能夠進行相互交換,必須引進一個臨時變量t。用以下三個賦值語句可實現(xiàn)交換。
t=a;a=b;b=t;/*t=a,a=b,b=t;*/程序如下:#include<stdio.h>voidmain(){floata,b,t;printf("Pleaseinputtwonumbers:\n");scanf("%f%f",&a,&b);
if(a<b){t=a;a=b;/*復合語句*/b=t;}printf("%f,%f",a,b);}3.4.2if-else結構if-else結構的一般格式為:if(表達式)語句1else語句2功能:首先計算表達式的值,若其值為非0,則執(zhí)行語句1,然后跳過語句2,往下執(zhí)行if結構的后繼語句;若其值為0,則跳過語句1,執(zhí)行語句2,然后往下執(zhí)行if結構的后繼語句。注意:語句1和語句2分別都是一個語句或一個復合語句。流程圖假(0)表達式為真嗎?執(zhí)行語句1真(非0)入口執(zhí)行語句2例:求a、b中的最大值。#include<stdio.h>voidmain(){inta,b,max;scanf(“%d%d”,&a,&b);
if(a>b)max=a;
elsemax=b;printf(“Maxumis%d”,max);}例:輸入一個正整數,判斷這個數是奇數還是偶數。#include<stdio.h>voidmain(){intnumber;printf("Inputanumberfortesting:");scanf("%d",&number);
if(number%2==1)printf("%disodd.\n",number);
else
printf("%diseven.\n",number);}分析:因為對一個正整數,不是奇數就是偶數,只有兩種選擇,故使用if-else結構語句。3.4.3if-else-if結構if-else-if結構的一般格式為:if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3…else語句n注:每當選擇其中一個語句執(zhí)行完以后,整個if-else-if語句就結束了,然后執(zhí)行if-else-if語句的后繼語句流程圖例:輸入一個x值,求下列相應的y值#include<stdio.h>voidmain(){floatx,y;scanf(“%f”,&x);
if(x>0)y=1.0;
elseif(x<0)y=-1.0;
elsey=0;printf(“y=%f\n”,y);}-1.0(x<0)0(x=0)1.0(x>0)y=運行結果:-88y=-1.0000003.4.4if語句的嵌套
條件語句的嵌套就是在if語句中包含另一個if語句。
從語法上講,if語句中所包含的語句是一個語句或一個復合語句,這個語句當然也可以是另一個if語句,即內嵌if語句。例:輸入一個任意整數i,試判斷這個數是奇數還是偶數?分析:先判斷這個數是否為正數,在正數(i>0)的前提下,再判斷:若i能被2整除,則i為偶數;若i不能被2整除,則i為奇數??蓪懗鋈缦耰f語句:if(i>0)
if(i%2==0)/*i>0&&(i%2==0)*/printf("positiveandeven\n");/*正數且偶數*/else
/*否則,i>0&&(i%2!=0)*/printf(“postiveandodd\n”);/*正數且奇數*/elseprintf(“notpositive\n”);
else與前面最近(未曾配對)的if配對。如果要改變上頁中所確定的配對關系,即else要與外層的if配對,則第二個if語句必須用花括號括起來。例如:if(i>0){
if(i%2==0)printf(“positiveandeven\n”);}elseprintf(“notpositive\n”);C語言規(guī)定的配對關系花括號將內嵌的if語句孤立,形成一個獨立的復合語句,使內嵌的if不與后面的else配對,從而else必定與外一層的if配對
#include<stdio.h>voidmain(){floata,b,c,max;scanf(“%f%f%f”,&a,&b,&c);if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c)max=b;elsemax=c;}printf(“Max=%f\n”,max);}說明:(1)程序引進了一個中間變量max,用以存放最大數。(2)嵌套在內層的if語句可以不用花括號括起來。但為了使結構更清晰,添加花括號也決不是多余的。例:從鍵盤輸入三個實數,求其最大者。修改后的程序:
#include<stdio.h>voidmain(){floata,b,c,max;scanf("%f%f%f",&a,&b,&c);if(a>b)max=(a>c)?a:c;elsemax=(b>c)?b:c;printf("Max=%f\n",max);}3.4.1if結構if結構的一般格式為:if(表達式)語句注:if(表達式)后面的語句只能是一個語句或一個復合語句。3.4.2if-else結構if-else結構的一般格式為:if(表達式)語句1else語句2注意:語句1和語句2分別都是一個語句或一個復合語句。3.4.3if-else-if結構if-else-if結構的一般格式為:if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3…else語句n注:每當選擇其中一個語句執(zhí)行完以后,整個if-else-if語句就結束了,然后執(zhí)行if-else-if語句的后繼語句3.5switch語句在if語句中,用if-else-if結構可以解決多分支的選擇問題。但是,如果判斷條件太多,程序冗長,邏輯關系就變得不夠清晰。C語言中提供的switch語句可用于解決過多分支的問題。switch語句的一般格式為:switch(表達式){case常量表達式1:語句塊1break;case常量表達式2:語句塊2break;…case常量表達式n:語句塊nbreak;default:語句塊n+1break;}功能:
(1)執(zhí)行switch語句時,首先計算表達式的值,然后將此值與case后面的常量表達式的值相比較,如果某個常量表達式的值與它相等,則執(zhí)行該case后的語句塊;如果表達式的值與所有常量表達式的值都不相等,則執(zhí)行default后的語句塊。當執(zhí)行完某一個case語句塊后遇到break或執(zhí)行完default語句塊時,就跳出switch語句。case結構與else-if結構的對比if(a==1)printf("A");elseif(a==2)printf("B");elseif(a==3)printf("C");elseprintf("D");switch(a){case1:printf("A");break;case2:printf("B");break;case3:printf("C");break;default:printf("D");}(2)如果執(zhí)行完某一個case的語句塊后沒有遇到break語句,就進入到下一個case的語句塊或進入到default后的語句塊去執(zhí)行。switch(a){case1:printf(“A”);case2:printf("B");break;case3:printf("C");break;default:printf("D");}
if(a==1){printf("A");printf("B");}elseif(a==2)printf("B");elseif(a==3)printf("C");elseprintf("D");(3)多個case可以共用一個語句塊switch(a){case1:case2:case3:printf("A");break;…}
if(a==1||a==2||a==3)printf("A");elseif…幾點說明:(1)switch后的表達式的值一般是整型或字符型(2)case后的表達式是可以求得整型量或字符型量的常量表達式。常量表達式中不允許包含有變量和函數調用。(3)default通常出現(xiàn)在switch的最后部分。但這不是它的唯一位置。default可以出現(xiàn)在case之間,甚至出現(xiàn)在所有的case之前,但等效于出現(xiàn)在switch的最后部分。switch語句例:寫出下面程序的輸出結果.#include<stdio.h>voidmain(){ intx; scanf(“%d”,&x); switch(x) { case5:printf(“excellent”); case4:printf(“Good”); break; case3:printf(“Pass”);case2:printf(“Fail”);/*break;*/ default:printf(“Poor”); }}若從鍵盤輸入3輸出為:PassFailPoor程序設計舉例
例:輸入三個整數x,y,z,請把這三個數由小到大輸出#include<stdio.h>voidmain(){
intx,y,z,t;
scanf("%d,%d,%d",&x,&y,&z);
if(x>y){t=x;x=y;y=t;}/*交換x,y的值*/
if(x>z){t=z;z=x;x=t;}/*交換x,z的值*/
if(y>z){t=y;y=z;z=t;}/*交換z,y的值*/
printf("smalltobig:%d%d%d\n",x,y,z);}分析:若想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。本題是采用依次比較的方法排出大小順序。例:某產品的國內銷售價,80箱以下,每箱350元,超過80箱,超過部分每箱優(yōu)惠20元;國外銷售價,1000箱以下,每箱900元,超過1000箱,超過部分每箱優(yōu)惠15元。試編寫計算銷售額的程序。分析:題中產品分國內、國外兩種銷售價格,適宜使用if-else結構語句處理。在每一種銷售價格中,又根據銷售量的不同而計算的方法也不同。因此,可用嵌套if語句實現(xiàn)。使用整型標志變量national表示國內、國外兩種銷售。#include<stdio.h>void
main(){floatmoney;intnational,count;printf("Inputnationalorexternal:");scanf("%d",&national);printf("Inputcountofproduct:");scanf("%d",&count);
if
(national)
if(count<=80)money=count*350.0;
elsemoney=count*350.0-(count-80)*20.0;else
if
(count<=1000)money=count*900.0;elsemoney=count*900.0-(count-1000)*15.0;printf("tatal=%f",money);}程序的清晰易讀性越來越被人們所強調。scanf()函數、字符輸入函數getchar()函數,可以實現(xiàn)數據的輸入。putchar()是字符輸出函數。在任何表達式的后面加上一個分號,都可以構成一個表達式語句。復合語句在語法上等同于一個語句,它可以出現(xiàn)在一個語句所允許出現(xiàn)的地方。if語句具有三種結構:if結構、if-else結構和if-else-if結構。在if語句中可以嵌套另一個if語句,這種形式可以使if語句嵌套到任意深度。switch語句用于多路分支結構,它使得程序更加簡明清晰.但是必須注意switch語句中,與break語句的配合使用。本章小結scanf()函數
getchar()函數
putchar()函數例:在同一行中輸入三個數據#include<stdio.h>voidmain(){inta1,a2;floata3;printf("Pleaseentervalueofa1,a2,a3:");scanf("%d%d%f",&a1,&a2,&a3);printf("a1=%d,a2=%d,a3=%f\n",a1,a2,a3);}數據輸入方式:(c)123回車(a)1234567.89456回車(b)123TAB456TAB7.897.89回車3.2
getchar()函數字符輸入函數getchar()是專門用于輸入一個字符常量的函數它沒有參數,函數的值就是從鍵盤輸入的一個字符使用getchar()函數之前,必須用#include包含“stdio.h”。程序中使用getchar()從鍵盤的輸入中得到一個字符常量并賦給字符變量c,然后輸出該字符例:顯示從鍵盤輸入的一個字符。
#include<stdio.h>
voidmain()
{
ch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024物流配送員勞動協(xié)議3篇
- 2024版網絡游戲開發(fā)與運營權轉讓合同2篇
- 2024押證不押車商業(yè)地產項目貸款合同范本9篇
- 2025年度建筑安全評價與施工監(jiān)理一體化合同范本3篇
- 2025廠區(qū)食堂承包合同:廠區(qū)文化建設與餐飲服務融合協(xié)議3篇
- 二零二五版北京市金融行業(yè)勞動合同法實施標準2篇
- 2024離婚財產分割保險保障合同
- 2024施工現(xiàn)場環(huán)境信息公開與共享協(xié)議3篇
- 2025年MLB棒球帽定制加工及品牌合作框架協(xié)議3篇
- 2025年度智能制造生產線操作工勞動合同3篇 - 副本
- 2024版?zhèn)€人私有房屋購買合同
- 2025年山東光明電力服務公司招聘筆試參考題庫含答案解析
- 2024爆炸物運輸安全保障協(xié)議版B版
- 《神經發(fā)展障礙 兒童社交溝通障礙康復規(guī)范》
- 2025年中建六局二級子企業(yè)總經理崗位公開招聘高頻重點提升(共500題)附帶答案詳解
- 2024年5月江蘇省事業(yè)單位招聘考試【綜合知識與能力素質】真題及答案解析(管理類和其他類)
- 注漿工安全技術措施
- 《食品與食品》課件
- 2024年世界職業(yè)院校技能大賽“食品安全與質量檢測組”參考試題庫(含答案)
- 讀書分享會《白夜行》
- 2023上海高考英語詞匯手冊單詞背誦默寫表格(復習必背)
評論
0/150
提交評論