![第3章 控制結(jié)構(gòu) -1_第1頁](http://file4.renrendoc.com/view10/M03/33/26/wKhkGWXdKQOAEAOjAAE96am8SPo916.jpg)
![第3章 控制結(jié)構(gòu) -1_第2頁](http://file4.renrendoc.com/view10/M03/33/26/wKhkGWXdKQOAEAOjAAE96am8SPo9162.jpg)
![第3章 控制結(jié)構(gòu) -1_第3頁](http://file4.renrendoc.com/view10/M03/33/26/wKhkGWXdKQOAEAOjAAE96am8SPo9163.jpg)
![第3章 控制結(jié)構(gòu) -1_第4頁](http://file4.renrendoc.com/view10/M03/33/26/wKhkGWXdKQOAEAOjAAE96am8SPo9164.jpg)
![第3章 控制結(jié)構(gòu) -1_第5頁](http://file4.renrendoc.com/view10/M03/33/26/wKhkGWXdKQOAEAOjAAE96am8SPo9165.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第3章控制結(jié)構(gòu)
主要內(nèi)容3.1基本控制結(jié)構(gòu) 3.2程序中的控制運算符 3.3程序中的選擇結(jié)構(gòu) 3.4程序中的循環(huán)結(jié)構(gòu) 3.5蒙特卡羅法與隨機數(shù)函數(shù)3.6位運算符/173.1基本控制結(jié)構(gòu)結(jié)構(gòu)名稱傳統(tǒng)流程圖N-S流程圖順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.1.1基本語句空語句(EmptyStatement)
;表達式語句(ExpressionStatement)
賦值語句(AssignmentStatement)函數(shù)調(diào)用語句(FunctionInvocationStatement)控制語句(ControlFlowStatement)復合語句(CompoundStatement)/173.1.2常用的輸入輸出函數(shù)格式輸出函數(shù)printf()格式輸入函數(shù)scanf()字符輸入函數(shù)getch()和getchar()同:都是從終端輸入一個字符作為函數(shù)的值。異:getch()
無回顯讀入,不需要回車確認。
getchar()
需要回車確認。字符輸出函數(shù)putch()和putchar()
#include<conio.h> main(){
charc='B'; //將c的值輸出至Screen putch(65); //輸出ASCII碼為65的字母A putch('\n'); //輸出轉(zhuǎn)義字符\n,實現(xiàn)換行顯示 putch(c); //輸出字符變量c的值字母B getch(); }/17字符輸入及輸出函數(shù)示例從鍵盤輸入大寫字母,輸出對應的小寫字母和ASCII碼分析:英文字母相應的大寫與小寫ASCII碼相差32(=‘a(chǎn)’-‘A’),將大寫字母的ASCII碼加32(或‘a(chǎn)’-‘A’),即可得出相應的小寫字母的ASCII碼。#include<stdio.h>#include<conio.h>main(){ charc1,c2; printf("char="); //prompt語句 c1=getchar(); //從終端輸入一字符并賦給c1 putch(c1); //將c1的值輸出至Screen printf("%4d\n",c1); //輸出c1的ASCII碼值 c2=c1+32; //大寫字母轉(zhuǎn)小寫字母 putch(c2); //將c2的值輸出至Screen printf("%4d\n",c2); //輸出c2的ASCII碼值 getch();}/173.1.3順序結(jié)構(gòu)程序設計示例[例]求圓的面積和周長。數(shù)據(jù)分析:輸入量:半徑r,float輸出量:面積s,周長l,float
算法分析:輸入半徑r。計算面積s。計算周長l。輸出面積s和周長l。
3.1.3順序結(jié)構(gòu)程序設計示例[例]求圓的面積和周長。#definePI3.141593//定義一個宏PI,將PI作為符號常量#include<stdio.h> #include<conio.h>main(){floatr,s,m; //定義所使用的變量
printf("Entertheradius:"); //提示信息
scanf("%f",&r); //輸入已知量
s=PI*r*r //計算待求量
m=2*PI*r;printf("s=%f\n",s); //輸出所求值
printf("m=%f\n",m); getch();}Entertheradius:1
s=3.141593m=6.2831863.1.3順序結(jié)構(gòu)程序設計示例[例]已知三角形的兩邊邊長及其夾角,求此三角形的第3邊的邊長。
分析:設三角形的三邊長分別為a、b、c,
已知兩邊長a,b及其夾角α(取變量名為alfa)。
則由
c2=a2+b2-2abcosα可得出c。算法分析:輸入兩邊邊長a,b及夾角alfa計算第三邊邊長c輸出第三邊邊長c3.1.3順序結(jié)構(gòu)程序設計示例[例]已知三角形的兩邊邊長及其夾角,求第三邊邊長。#include<stdio.h>#include<math.h>//程序中調(diào)用了數(shù)學函數(shù)sqrt及cos
#include<conio.h>main(){floata,b,c,p,alfa;//將角度α定義為變量alfa
printf("Entertwosidesofatriangleand
includedangle:\n");
//在程序運行輸入數(shù)據(jù)之前給出提示信息
scanf("%f%f%f",&a,&b,&alfa);//輸入兩邊及夾角
p=a*a+b*b-2*a*b*cos(alfa*3.14/180); c=sqrt(p); //求第三邊邊長cprintf(“c=%f\n”,c); //輸出第三邊邊長c的值getch();}Entertwosidesofatriangleandincludedangle:3490
c=4.9980883.2程序中的控制運算符
3.2.1關系運算符(relationaloperator)關系運算符: <小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于
Relationaloperatorstakeexpressionsasoperandsandevaluatetotypeint.Theywillalwaysevaluatetoeither1(true),or0(false).結(jié)果是一個邏輯量,即“真”或“假”,分別用整數(shù)1和0表示。注意:區(qū)分"="號和"=="號。避免對實數(shù)作相等或不等的判斷。正確表示數(shù)學上的連續(xù)不等式。3>2>1與3>2&&2>13.2.2邏輯運算符(logicaloperator)邏輯運算符:
!邏輯非&&邏輯與||邏輯或Thelogicaloperator!iscalledthenegationoperator.Itisaunaryoperandbecauseithasoneoperand.Don’tconfusenegationwithunaryminus.!!5=?結(jié)果是一個邏輯量,即“真”或“假”,分別用整數(shù)1和0表示。短路特性(short-circuitevaluation)a&&b&&ca||b||c只有a為真時才判斷b,只有a&&b為真時才判斷c。(若a為假,表達式的值已經(jīng)肯定為假,不必再往下判斷了。)只要a為真,就不必再繼續(xù)判斷,結(jié)果一定為真。
在C語言中表示條件判斷某一字符(變量ch表示)是否英文字母
A
<=ch&&ch<=
Z
||
a
<=ch&&ch<=
z
判斷某一年份(變量year表示)是否閏年。從閏年歷法規(guī)則可知,滿足下列條件之一者為閏年:(1)year能被4整除,但不能被100整除;(2)year能被400整除。則有:
year%4==0&&year%100!=0||year%400==03.2.3條件運算符(ConditionalOperator)語法格式:表達式1?表達式2:表達式3如: max=(a>b)?a:b; 等價于 if(a>b) max=a;
else
max=b;
[例]判斷鍵盤輸入的一個字符是否為大寫字母,如果是則轉(zhuǎn)換為小寫字母,否則不轉(zhuǎn)換。輸出處理后的字符。#include<stdio.h>main(){
charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;//括號可不加printf("%c\n",ch);}3.3程序中的選擇結(jié)構(gòu)通常計算機按在程序中書寫的順序執(zhí)行語句。但許多情況下,語句的執(zhí)行順序依賴于輸入數(shù)據(jù)或中間運算結(jié)果。此時,必須根據(jù)某個變量或表達式的值作出判定,以決定執(zhí)行哪些語句和跳過哪些語句不執(zhí)行。這種程序結(jié)構(gòu)叫做選擇結(jié)構(gòu)(或稱分支結(jié)構(gòu))。為實現(xiàn)選擇結(jié)構(gòu)程序設計,C語言引入了if語句結(jié)構(gòu)和switch語句結(jié)構(gòu)。if語句用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定要執(zhí)行的語句。if語句的格式1(Singleselection)
if(表達式)
內(nèi)嵌語句如:
if(x>y) x++; y++;3.3.1if語句if語句格式1示例[例]從鍵盤上輸入一個數(shù)x,若x大于等于0,
則y=1;若x小于0,則y=-1。#include<stdio.h>#include<conio.h>main(){floatx;inty;printf(“x=”);scanf(“%f”,&x);if(x>=0) y=1;if(x<0) y=-1;printf(“%f,%d\n”,x,y);getch();}x=-3.45
-3.450000,-1if語句的格式2(Doubleselection)
if(表達式)
語句1
else
語句2如:
if(x>y) x++;
else y++;3.3.1if語句[例]已知三角形的三條邊a、b、c,求面積area。分析:若a、b、c滿足任意2數(shù)之和大于第3個數(shù)的條件,則三邊可以構(gòu)成三角形,此時計算并顯示結(jié)果;反之,三邊不構(gòu)成三角形,此時給出錯誤提示。,if語句格式2示例if語句格式2示例#include<stdio.h>#include<conio.h>#include<math.h>main(){floata,b,c,s,area;printf("Sidea=");scanf("%f",&a);printf("Sideb=");scanf("%f",&b);printf("Sidec=");scanf("%f",&c);if(a+b>c&&a+c>b&&b+c>a){ s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%6.2f\n",area);}else
printf("Dataerror,reentry!");getch();}Sidea=4
Sideb=5Sidec=6area=9.92在if語句中的"語句"處又是if語句,則稱為if語句的嵌套。一般格式如下:
if(表達式1) if(表達式2) 語句1
else 語句2 else if(表達式3) 語句3 else 語句4
在嵌套的if語句中,習慣寫成鋸齒形,以增加程序的可讀性。
3.3.1if語句內(nèi)層的if語句如果是簡化的if,如:if(表達式1) if(表達式2) 語句1else
語句2從最內(nèi)層開始,else總是與它上面最近的、未曾配對的if配對。?嵌套的if語句{
}if語句的格式3(Multipleselection)
else-if格式 if(表達式1)
語句1 elseif(表達式2)
語句2 elseif(表達式3)
語句3 . . . elseif(表達式n)
語句n else
語句n+13.3.1if語句例: if(x<0) y=-1; elseif(x==0) y=0; else y=1;例:輸入考試成績的等級,打印出百分制分數(shù)段(A等85分以上,B等70~84,C等60~69,D等60以下)。main(){
chargrade; scanf("%c",&grade);
if(grade=='A')printf("85~100\n");
elseif(grade=='B')printf("70~84\n");
elseif(grade=='C')printf("60~69\n");
elseif(grade=='D')printf("<60\n");
elseprintf("Error\n");}3.3.1if語句語法格式:
switch(表達式){
case
常量表達式1:語句1
case
常量表達式2:語句2...
case常量表達式n:語句n
default:語句n+1}3.3.2switch語句上例中的if部分可以考慮寫成下面的switch語句:
switch(grade){ case'A':printf("85~100\n"); case'B':printf("70~84\n"); case'C':printf("60~69\n"); case'D':printf("<60\n"); default:printf("Error\n"); } if(grade=='A')printf("85~100\n"); elseif(grade=='B')printf("70~84\n"); elseif(grade=='C')printf("60~69\n"); elseif(grade=='D')printf("<60\n"); elseprintf("Error\n");
若grade='C',則輸出:
60~69 <60 Error3.3.2switch語句?改進的switch語句語法格式:switch(表達式){
case
常量1:語句1;break;
case
常量2:語句2;break;...
case
常量n:語句n;break;
default:語句n+1';}
改進后的switch語句:
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"); }
若grade='C',則輸出:60~69多個case可以共用一組執(zhí)行語句。如:
switch(grade){
case'A':
case'B':
case'C':printf("60~100\n");break;
case'D':printf("<60\n");break;
default:printf("Error\n"); }改進的switch語句就一個表達式的判斷(條件滿足/條件不滿足)而言,一次只能產(chǎn)生兩條分支。實際應用中,選擇時常常有可能面臨多條分支,這時就會使用嵌套的if語句或者switch語句或者兩種語句嵌套組合。 x (x<2)[例]y=2x-1 (2≤x<10)3x+10 (x≥10)
任意輸入x,輸出y,編寫程序?qū)崿F(xiàn)該函數(shù)。 方法一:用if語句形式編寫 方法二:用if-elseif語句形式編寫 方法三:用switch語句編寫程序3.3.3多重選擇結(jié)構(gòu)(Multipleselectionstructure)x=3.56
3.560000,6.120000選擇結(jié)構(gòu)程序設計綜合舉例方法一:用if語句形式編寫#include<stdio.h>#include<conio.h>main(){ floatx,y; printf("x="); scanf("%f",&x);
if(x<2) y=x;
if(2<=x&&x<10) y=2*x-1; if(x>=10) y=3*x+10; printf("%f,%f\n",x,y); getch();}選擇結(jié)構(gòu)程序設計綜合舉例方法二:用if-elseif語句#include<stdio.h>#include<conio.h>main(){ floatx,y; printf("x="); scanf("%f",&x);
if(x<2) y=x;
else
if(2<=x&&x<10) y=2*x-1;
else
if(x>=10) y=3*x+10; printf("%f,%f\n",x,y); getch();}選擇結(jié)構(gòu)程序設計綜合舉例#include<stdio.h>#include<conio.h>main(){
floatx,y;
intz; printf("x="); scanf("%f",&x);
z=1*(x<2)+2*(2<=x&&x<10)+3*(x>=10);
switch(z){
case1:y=x;break;
case2:y=2*x-1;break;
case3:y=3*x+10; } printf("%f,%f\n",x,y); getch();}方法三:用switch語句[例]輸入年、月,輸出該月有多少天。分析:每年的1、3、5、7、8、10、12月有31天;
4、6、9、11月有30天;2月閏年有29天,平年有28天。年號能被4整除,但不能被100整除,或者年號能被400整除的年均是閏年。設年份為year,判斷year是否閏年:if(year%4==0&&year%100!=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 慈善救助個人申請書
- 氣候變化對農(nóng)業(yè)生態(tài)系統(tǒng)的挑戰(zhàn)及應對策略研究
- 未來電影產(chǎn)業(yè)的商業(yè)模式與市場趨勢研究
- 湖南省長沙市2024年七年級《語文》上冊期末試卷與答案(A卷)
- 成都市武侯區(qū)2022年七年級《語文》下冊期末試卷與參考答案
- 部編版:2022年七年級《語文B卷》上冊期中試卷與參考答案
- 退籃球隊申請書
- 建筑節(jié)能技術復習題含參考答案
- 重慶城市科技學院《公共關系實務》2023-2024學年第二學期期末試卷
- 重慶外語外事學院《生物材料評價與監(jiān)督管理》2023-2024學年第二學期期末試卷
- GB/T 12496.19-2015木質(zhì)活性炭試驗方法鐵含量的測定
- GB/T 11376-2020金屬及其他無機覆蓋層金屬的磷化膜
- 讖緯神學與白虎通義
- 中醫(yī)藥膳學全套課件
- 分析化學(第6版)全套課件完整版電子教案最新板
- 海上日出配套說課PPT
- 新青島版(五年制)五年級下冊小學數(shù)學全冊導學案(學前預習單)
- (完整word版)重點監(jiān)管的危險化學品名錄(完整版)
- 詳情頁測試文檔20220802
- 專利糾紛行政調(diào)解辦案指南
- 經(jīng)編工藝基本樣布的分析
評論
0/150
提交評論