版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章程序流程的控制1徐秋紅辦公地點:主樓西配樓(信息學院)310辦公電話:62336516—808E-mail:計算機通過執(zhí)行程序來完成特定的任務,而程序中的語句是控制計算機一步步的命令,每條語句所處的位置以及語句的內容決定了計算機什么時候去做、如何做。程序執(zhí)行的結果是什么,完全由算法決定。C語言提供三種程序設計結構去實現(xiàn)算法。什么是算法?算
法
對操作過程的描述叫算法。即根據(jù)要執(zhí)行的動作以及這些動作的執(zhí)行順序來求解問題的過程被稱為算法。例如:求任意兩個整數(shù)的最大公約數(shù)。算法的文字描述算法對操作過程的描述叫算法。算法可以用文字來描述,但是直觀性上差一些。常用的算法描述方法是流程圖傳統(tǒng)流程圖
N_S流程圖程序的控制語句本章的主要內容:認識流程圖
學會使用流程圖描述順序程序結構學會使用流程圖描述選擇結構學會使用流程圖描述循環(huán)結構掌握利用流程圖設計C語言程序學習建立流程圖順序結構程序的流程計算圓的周長和面積輸出周長和面積#include<stdio.h>
#definePI3.14159
/*PI將代表圓周率*/#defineR6
/*R將代表半徑值6*/intmain(void){doublegirth,area;girth=2*R*PI;area=R*R*PI;printf("girth=%f\n",girth);printf(“area=%f\n",area);return0;}輸入圓的半徑值計算圓的周長和面積輸出周長和面積輸入圓的半徑值開始結束順序結構程序設計順序結構程序中,每個可執(zhí)行語句都是按程序編寫的先后次序順序執(zhí)行,并且是無條件的全部執(zhí)行輸入矩形的長、寬值計算其周長和面積輸出其周長和面積實例:編寫一個程序,求某個矩形的周長和面積。要求從鍵盤輸入矩形的長和寬(正實型數(shù)據(jù)),程序運行的結果是在屏幕上打印該矩形的周長和面積。#include<stdio.h>intmain(void){ floatlength,width,perimeter,area; printf(“請輸入矩形的長和寬:"); scanf("%f%f",&length,&width); perimeter=(length+width)*2;printf("矩形的周長是%.3f,\t",perimeter); area=length*width;printf("矩形的面積是%.3f\n",area);system("Pause"); return0;}源程序清單選擇結構程序設計根據(jù)給定的條件,選擇其中一條運行線路執(zhí)行.單路選擇結構: 僅當條件為真時才執(zhí)行選擇結構內部的語句塊A。PA(空)真假A真假P選擇結構的流程if(表達式)
語句塊A
單路選擇結構設計程序,將不及格的成績打印出來輸入一位學生的成績,存入xx<60?輸出x真假#include<stdio.h>intmain(void){ floatx; printf("\nInputascore:"); scanf("%f",&x);
if(x<60) printf("\nFail:%.1f\n",x);
return0;}選擇結構程序設計根據(jù)給定的條件,選擇其中一條運行線路執(zhí)行.雙路選擇結構: 當條件為真時,執(zhí)行選擇結構內部的語句塊A;當條件為假時,執(zhí)行選擇結構內部的語句塊B。PAB真假A真假PBif(P)
statement_Aelse
statement_B流程圖例如,百貨商場進行打折促銷活動,購物總額x滿300元時可以打8折。scanf(“%f”,&x);if(x>=300)
printf(“應付%f,實付%f”,x,x*0.8);elseprintf(“應付%f,實付%f”,x,x);x>=300?真假輸出x*0.8輸出x輸入x輸出x*0.8輸出x
x>=300?真假輸入x開始結束雙路選擇結構設計程序:如果成績及格,則打印Pass,否則打印Failed。輸入一位學生的成績,存入xx<60?輸出“Failed”輸出“pass”真假#include<stdio.h>intmain(void){ floatx; printf("\nInputascore:"); scanf("%f",&x);
if(x<60){ puts(“\tFailed\n\t運籌學課程補考單\n"); puts("定于第6周星期二下午3:00在二教110補考\n");
}
else printf("\tPass\n\t運籌學成績:%.1f\n",x);
return0;}選擇結構程序設計根據(jù)給定的條件,選擇其中一條執(zhí)行線路.多路選擇結構:如果在多種(兩種以上)的選擇中擇一而行,則要使用if語句嵌套或if…else語句嵌套結構來實現(xiàn)。P1AP2真假BC真假多路選擇結構例如,求一元二次方程的根的算法可用如下代碼描述:doublea,b,c,d;scanf("%lf%lf%lf",&a,&b,&c);d=b*b–4*a*c;if(d==0) printf("\n有相等的兩個實根。");else if(d>0) printf("\n有不等的兩個實根。");else printf("\n有兩個復根。");用switch結構處理多選擇結構問題switch語句可以實現(xiàn)根據(jù)條件表達式運算結果,從眾多不同選項中選擇某一項去執(zhí)行。switch語句結構形式如下:switch(expression){
casetemplate_1:
statement_1;
casetemplate_2:
statement_2;
……
casetemplate_n:
statement_n;
[default:
statement;
]}必須是整型必須是整型常量或字符常量用switch結構處理多選擇結構問題例如:根據(jù)指定的定期存款年限year,顯示該年限整存整取的年利率。switch(year){ case1:puts("\t1年期的年利率是3.25\n");break; case2:puts("\t2年期的年利率是3.75\n");break; case3:puts("\t3年期的年利率是4.25\n");break; case5:puts("\t5年期的年利率是4.75\n");break; default:puts("\t更多信息請咨詢銀行機構\n");}switch結構中的break語句根據(jù)錄入的百分制成績值,選擇顯示4個等級評價中的一個,其中評價標準是:
90分~100分的評價是“Excellent”70分~89分的評價是“Good”60分~69分的評價是“Pass”0分~59分的評價是“Failed”
#include<stdio.h>intmain(void){ floatscore; intgrade; printf("Inputascore(0~100):"); scanf("%f",&score); grade=(int)(score/10); switch(grade) { case10: case9: printf("\n\tExcellent\n");break; case8:case7: printf("\n\tGood\n");break; case6: printf("\n\tPass\n");break; default: printf("\n\tFailed\n");}
return0;}必須是整型常數(shù)switch結構中的break語句循環(huán)設計一個程序,自動在屏幕上顯示一個直角三角形。設計一個程序,自動在屏幕上依次輸出三個這樣的直角三角形。循環(huán)設計一個程序,自動在屏幕上依次輸出三個直角三角形。聲明整型變量k設置k的初值為3輸出一個三角形
只要滿足k>0k自減1(即k--)設置k值是3(k是整型)輸出一個三角形k>0?k自減1真假流程圖循環(huán)結構的流程對郵件做查看、分類和存檔處理真假有新郵件
有新郵件?若有,則對郵件做查看、分類和存檔處理在一定條件下,反復執(zhí)行固定的語句塊的過程稱為循環(huán).
?循環(huán)結構C語言提供了以下三種能夠重復執(zhí)行指定操作的循環(huán)控制語句:
while語句
do…while語句
for語句循環(huán)結構------while語句
while語句的語法格式如下:while(condition){statement;}計算condition執(zhí)行statement執(zhí)行statement真假計算condition條件為假時,循環(huán)結束fcondition為真condition為假condition為真循環(huán)結構------do…while語句
do…while語句的語法格式如下:
do {
statement;
}while(condition);
計算condition執(zhí)行statement執(zhí)行statement真假計算condition先執(zhí)行循環(huán)內部的語句,再做條件的判斷。條件為假時,循環(huán)結束。initial計算condition執(zhí)行statementincrement循環(huán)結構------for語句for語句的語法格式如下:for(
initial;
condition;increment){ statement;}條件為假時,循環(huán)結束執(zhí)行statement真假計算conditioninitialincrement循環(huán)結構建立通用的除法計算器。
如果除數(shù)為零,則重新輸入除數(shù),直至正常的完成除法運算為止。#include<stdio.h>intmain(void){doublex,y,z;printf("請輸入被除數(shù)x和除數(shù)y:");scanf("%lf%lf",&x,&y);if(y!=0){z=x/y;printf("運算結果%f/%f=%f\n\n",x,y,z);}elseputs("除數(shù)y為0是無效的!\n\n");
return0;}while(y==0){puts("除數(shù)y為0是錯誤的!");printf("請重新輸入一個除數(shù)y:");scanf("%lf",&y);}z=x/y;printf("運算結果%f/%f=%f\n\n",x,y,z);例如:在屏幕上顯示20以內的自然數(shù)。#include<stdio.h>intmain(void){ intn=0; while(n<20) { printf("%d",n); n++; } return0;}聲明變量n,n=0n<20?輸出nn=n+1while循環(huán)結構的特點......應用循環(huán)結構做處理/*輸出0至20以內的奇數(shù)*/intn=1; do{ printf("%d,",n); n=n+2;}while(n<20);輸出n,n增值真假計算n<20?do...while循環(huán)結構的特點......應用循環(huán)結構做處理當輸入一個非零值后,程序以如下形式輸出該數(shù)值:
------輸入的數(shù)
------
并結束;否則(即為0時)重新輸入數(shù)據(jù)。floatzero=0;while(!zero){ printf("\nPleaseinputadata:"); scanf("%f",&zero);}printf("\n-----%f-----\n",no_zero);Pleaseinputadata:76------76------應用循環(huán)結構做處理/*打印30個星號**/intcounter; for(counter=1;counter<=30;counter++)
printf(“*”);
計數(shù)器實例4.6通過鍵盤輸入一段文本信息,以輸入Enter鍵(換行操作)表示終止輸入,統(tǒng)計在按下Enter鍵之前共輸入了多少個字符。使用while循環(huán)語句去展示處理過程。使用do...while循環(huán)去展示處理過程。使用for循環(huán)語句去展示處理過程。#include<stdio.h>intmain(void){intcounter=0;charent_char; puts("\nInputasectionoftext:");
do{ ent_char=getchar(); counter++;
}while(ent_char!=10);printf("\n\tcounter=%d\n",--counter);return0;}實例4.7使用C語言設計一個文字菜單程序,要確保只有通過鍵盤正確地選擇了菜單項以后,程序才可以繼續(xù)向下運行,否則重新顯示菜單的內容。
(1)--------Option1 (2)--------Option2 (3)--------Option3Pleaseenteryourselection(from1to3):實例4.7#include<stdio.h>intmain(void){charsel;/*存儲選項號碼的變量*/do{ printf("\n\n\t(1)----------Option1");printf("\n\t(2)----------Option2"); printf("\n\t(3)----------Option3"); printf("\nInputyourselection(from1to3):"); scanf("%c",&sel);getchar();}while(sel!='1'&&sel!='2'&&sel!='3');switch(sel){ case'1':puts("你選擇了Option1\n");break; case'2':puts("你選擇了Option2\n");break; default:puts("你選擇了Option3\n");}return0;}如果要建立一個加、減、乘法計算器程序,如何改?#include<stdio.h>intmain(void){charsel;/*存儲選項號碼的變量*/doublea,b;/*存儲兩個運算數(shù)據(jù)的變量*/do{printf("\n\n\t(1)執(zhí)行加法運算");printf("\n\t(2)執(zhí)行減法運算");printf("\n\t(3)執(zhí)行乘法運算");printf("\n輸入你的選擇項(請輸入:1、2、3):");scanf("%d",&sel);}while(sel!='1'&&sel!='2'&&sel!='3');
printf("\n你的選擇是執(zhí)行");switch(sel){case‘1’:puts("加法運算\n");printf("請輸入被加數(shù)和加數(shù):");scanf("%lf%lf",&a,&b);printf("%f+%f=%f\n",a,b,a+b);break;case‘2’:puts("減法運算\n");printf("請輸入被減數(shù)和減數(shù):");scanf("%lf%lf",&a,&b);printf("%f-%f=%f\n",a,b,a-b);break;
default:puts("乘法運算\n");printf("請輸入被乘數(shù)和乘數(shù):");scanf("%lf%lf",&a,&b);printf("%f*%f=%f\n",a,b,a*b);}puts("\n----結束----\n");return0;}實例4.8從鍵盤輸入5個實型數(shù)據(jù),求它們的平均值。#include<stdio.h>#defineN5intmain(void){ intcount;/*設置count為計數(shù)器*/ floatx,sum=0;
/*設置sum為累加器*/ printf("\nInput%dnumber:",N);
for(count=1;count<=N;count++)
{ scanf("%f",&x); sum=sum+x;
}printf(“\tAverage=%.5f\n",sum/N);return0;}實例設計一個程序,可以判別口令字(密碼)正確與否。#include<stdio.h>intmain(void){chara='$',x;printf("請輸入口令字(一個字符):");scanf("%c",&x);if(a==x) puts("\n歡迎使用本程序。\n");else puts("\n口令字不對!\n");return0;}實例輸入口令字,如果口令正確,則顯示"歡迎使用本程序";否則提示“口令錯誤”。3-19.c輸入口令字口令出錯?YN提示"口令出錯"顯示"歡迎使用本程序"假設口令字只是一個字符#include<stdio.h>intmain(void){ chara='b',b='j',c='f',d='u',x1,x2,x3,x4; printf("請輸入口令字(由4個字符組成):");scanf("%c%c%c%c",&x1,&x2,&x3,&x4);
if(x1!=a) printf("\n口令出錯!\n");elseif(x2!=b) printf("\n口令出錯!\n");elseif(x3!=c) printf("\n口令出錯!\n");elseif(x4!=d) printf("\n口令出錯!\n");elseprintf("\n------歡迎使用本程序------\n\n"); return0;}YNYNNYNY歡迎...提示出錯口令的第一個字符錯了?口令的第二個字符錯了?第三個錯了?第四個錯了?提示出錯提示出錯提示出錯口令字是4個字符組成輸入口令字口令出錯?YN提示口令出錯歡迎使用本程序修改實例給予最多3次輸入口令的機會,只有口令正確,才可以顯示“歡迎使用本程序”。3-19.c特點:循環(huán)次數(shù)已確定:3次為了程序簡單,假設口令字只一個字符輸入口令字YN提示口令出錯口令正確!將循環(huán)次數(shù)置為3輸入口令次數(shù)沒有達到3次?試用次數(shù)加1口令出錯?#include<stdio.h>#defineM3intmain(void){chara='$',x;inti;
for(i=1;i<=M;i++){printf("請輸入口令字(1個字符):");scanf("%c",&x);
getchar();if(x==a){ printf(“\n------口令正確!------\n\n");
i=M;}elsei<M?puts(“\n口令出錯!再試試。\n”):puts(“\n你無權限!\n\n");}
return0;}修改前面有關“打印成績等級”的實例打印學生成績單3-11.c輸入口令的次數(shù)沒有達到3次?輸入口令字口令字出錯?YN打?。嚎诹畛鲥e打印清單列出成績等級做結束循環(huán)的處理完整程序#include<stdio.h>#defineM3intmain(void){doublescore;chara='$',x;inti,grade;for(i=0;i<M;i++){printf("輸入口令字(1個字符):");scanf("%c",&x);getchar();
if(x==a){ printf("\n------口令正確!------\n\n"); printf("\n**歡迎使用本系統(tǒng)打印程序清單**\n"); i=M; printf("\n請輸入學生的成績:"); scanf("%lf",&score); if(score<60) {printf("\n\n*****運籌學課程補考通知單*****\n\n"); printf("請于第8周星期二下午3:40,在二教303室補考。\n"); printf("請務必帶上學生證或考試證!\n\n");} else {printf("\n\n*****成績單*****\n\n"); printf("考試課程:運籌學\n");printf("學生的成績:%.1f\n-------------\n",score);} printf("\n成績等級是"); grade=(int)(score/10); switch(grade) {case10: case9: printf("Excellent\n\n");break; case8: case7: printf("Good\n\n");break; case6: printf("Pass\n\n");break; default: printf("Failed!\n\n");}}
elsei<M?puts(“\n口令出錯!再試試。\n”):puts(“\n你無權限!\n\n"); }return0;}prt_score.c課堂練習——了解循環(huán)語句的作用1在屏幕的一行上顯示連續(xù)10個字符A2在屏幕上顯示連續(xù)10個字符A,顯示6行嵌套循環(huán)嵌套循環(huán)是指一個循環(huán)結構的循環(huán)體中包含了另一個循環(huán)。while(...){ ...
while(...) {
... } ...}打印乘法表#include<stdio.h>intmain(void){intk=2,j;
/*k是被乘數(shù),j是乘數(shù)*/
for(j=1;j<=9;j++){ printf("%d*%d=%d\t",k,j,k*j);}
putchar(‘\n’);system("Pause");return0;}2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=181*2=22*2=43*2=64*2=85*2=106*2=127*2=148*2=169*2=18打印乘法表2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=183*1=33*2=53*3=93*4=123*5=153*6=183*7=213*8=243*9=271*1=21*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9......intk,j;for(k=1;k<=9;k++){
for(j=1;j<=9;j++) {
printf("%d*%d=%d\t",k,j,k*j);
}
putchar('\n');}加入:專門限制打印的控制語句例4.11
打印乘法九九表。與循環(huán)相關的兩個語句:break;
continue;break語句的作用1)在switch語句中的作用是結束該switch語句的執(zhí)行過程。2)在循環(huán)語句中的作用是結束該循環(huán)語句的執(zhí)行過程。for(i=1;i<=10;i++){printf(“i=%d“,i);}for(i=1;i<=10;i++){if(i==5){break;
}printf(“i=%d“,i);}for(i=1;i<=10;i++){if(i==5){continue;
}printf(“i=%d“,i);}continue語句的作用1)是for、while、do...while循環(huán)結構內部使用的執(zhí)行語句。2)停止循環(huán)體當次的執(zhí)行,轉去準備下一輪的循環(huán)。#include<stdio.h>intmain(void){intk,j,n;
for(k=1;k<=9;k++)
{
for(j=1;j<=9;j++)
{if(j>k){break;} printf("%d*%d=%d\t",k,j,k*j);
}putchar('\n');
}system("Pause");return0;}#include<stdio.h>intmain(void){intk,j;
for(k=1;k<=9;k++) {
for(j=1;j<=9;j++) {if(k>j) {printf("\t");continue;} printf("%d*%d=%d\t",k,j,k*j);
}
putchar('\n');}return0;}分步執(zhí)行程序范例輸出不能被3整除的20以內的自然數(shù)for(n=1;n<20;n++){
if(n%3==0)
continue;printf("%d",n);}分步執(zhí)行程序#include<stdio.h>intmain(void){intk,j,n;
for(k=1;k<=9;k++) {
for(j=1;j<=9;j++) {if(k>j) printf("\t");else printf("%d*%d=%d\t",k,j,k*j);}putchar('\n');
}return0;}程序設計中,break和continue語句并非不可缺少for(j=1;j<=9;j++){if(j>k)j=9;elseprintf("%d*%d=%d\t",k,j,k*j);}#include<stdio.h>intmain(void){intk,j; for(k=1;k<=9;k++) { for(j=1;j<=k;j++) { printf("%d*%d=%d\t",k,j,k*j); } putchar('\n')
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中秋節(jié)聯(lián)歡會致辭范文(10篇)
- 九月大班上學期月計劃范文(5篇)
- 中秋晚會董事長致辭范文(13篇)
- 曹植課件教學課件
- 講師比賽課件教學課件
- 影響高中數(shù)學成績的原因及解決方法
- 消費品和有關服務的比較試驗 實施要求 編制說明
- 愛嬰醫(yī)院課件教學課件
- 南宮市八年級上學期語文10月月考試卷
- 八年級上學期語文期中考試卷
- 出院小結模板-2
- 旅游景區(qū)公共信息導向系統(tǒng)規(guī)范與設計(旅游)
- 過程流程圖,控制計劃,PFMEA培訓
- 六年級語文 六年級班家長會
- 內科學(腎臟-內分泌-血液)知到章節(jié)答案智慧樹2023年溫州醫(yī)科大學
- 地理教育測量與評價
- 2023上海車展展前報告
- 事業(yè)單位獎勵審批表主要事跡
- 六年級勞動與技術上冊教案
- 馬王堆導引術獨立彩圖版
- GB/T 26572-2011電子電氣產品中限用物質的限量要求
評論
0/150
提交評論