




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章控制結(jié)構(gòu)
主要內(nèi)容3.1基本控制結(jié)構(gòu) 3.2程序中的控制運(yùn)算符 3.3程序中的選擇結(jié)構(gòu) 3.4程序中的循環(huán)結(jié)構(gòu) 3.5蒙特卡羅法與隨機(jī)數(shù)函數(shù)3.6位運(yùn)算符/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基本語(yǔ)句空語(yǔ)句(EmptyStatement)
;表達(dá)式語(yǔ)句(ExpressionStatement)
賦值語(yǔ)句(AssignmentStatement)函數(shù)調(diào)用語(yǔ)句(FunctionInvocationStatement)控制語(yǔ)句(ControlFlowStatement)復(fù)合語(yǔ)句(CompoundStatement)/173.1.2常用的輸入輸出函數(shù)格式輸出函數(shù)printf()格式輸入函數(shù)scanf()字符輸入函數(shù)getch()和getchar()同:都是從終端輸入一個(gè)字符作為函數(shù)的值。異:getch()
無(wú)回顯讀入,不需要回車確認(rèn)。
getchar()
需要回車確認(rèn)。字符輸出函數(shù)putch()和putchar()
#include<conio.h> main(){
charc='B'; //將c的值輸出至Screen putch(65); //輸出ASCII碼為65的字母A putch('\n'); //輸出轉(zhuǎn)義字符\n,實(shí)現(xiàn)換行顯示 putch(c); //輸出字符變量c的值字母B getch(); }/17字符輸入及輸出函數(shù)示例從鍵盤(pán)輸入大寫(xiě)字母,輸出對(duì)應(yīng)的小寫(xiě)字母和ASCII碼分析:英文字母相應(yīng)的大寫(xiě)與小寫(xiě)ASCII碼相差32(=‘a(chǎn)’-‘A’),將大寫(xiě)字母的ASCII碼加32(或‘a(chǎn)’-‘A’),即可得出相應(yīng)的小寫(xiě)字母的ASCII碼。#include<stdio.h>#include<conio.h>main(){ charc1,c2; printf("char="); //prompt語(yǔ)句 c1=getchar(); //從終端輸入一字符并賦給c1 putch(c1); //將c1的值輸出至Screen printf("%4d\n",c1); //輸出c1的ASCII碼值 c2=c1+32; //大寫(xiě)字母轉(zhuǎn)小寫(xiě)字母 putch(c2); //將c2的值輸出至Screen printf("%4d\n",c2); //輸出c2的ASCII碼值 getch();}/173.1.3順序結(jié)構(gòu)程序設(shè)計(jì)示例[例]求圓的面積和周長(zhǎng)。數(shù)據(jù)分析:輸入量:半徑r,float輸出量:面積s,周長(zhǎng)l,float
算法分析:輸入半徑r。計(jì)算面積s。計(jì)算周長(zhǎng)l。輸出面積s和周長(zhǎng)l。
3.1.3順序結(jié)構(gòu)程序設(shè)計(jì)示例[例]求圓的面積和周長(zhǎng)。#definePI3.141593//定義一個(gè)宏P(guān)I,將PI作為符號(hào)常量#include<stdio.h> #include<conio.h>main(){floatr,s,m; //定義所使用的變量
printf("Entertheradius:"); //提示信息
scanf("%f",&r); //輸入已知量
s=PI*r*r //計(jì)算待求量
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)程序設(shè)計(jì)示例[例]已知三角形的兩邊邊長(zhǎng)及其夾角,求此三角形的第3邊的邊長(zhǎng)。
分析:設(shè)三角形的三邊長(zhǎng)分別為a、b、c,
已知兩邊長(zhǎng)a,b及其夾角α(取變量名為alfa)。
則由
c2=a2+b2-2abcosα可得出c。算法分析:輸入兩邊邊長(zhǎng)a,b及夾角alfa計(jì)算第三邊邊長(zhǎng)c輸出第三邊邊長(zhǎng)c3.1.3順序結(jié)構(gòu)程序設(shè)計(jì)示例[例]已知三角形的兩邊邊長(zhǎng)及其夾角,求第三邊邊長(zhǎng)。#include<stdio.h>#include<math.h>//程序中調(diào)用了數(shù)學(xué)函數(shù)sqrt及cos
#include<conio.h>main(){floata,b,c,p,alfa;//將角度α定義為變量alfa
printf("Entertwosidesofatriangleand
includedangle:\n");
//在程序運(yù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); //求第三邊邊長(zhǎng)cprintf(“c=%f\n”,c); //輸出第三邊邊長(zhǎng)c的值getch();}Entertwosidesofatriangleandincludedangle:3490
c=4.9980883.2程序中的控制運(yùn)算符
3.2.1關(guān)系運(yùn)算符(relationaloperator)關(guān)系運(yùn)算符: <小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于
Relationaloperatorstakeexpressionsasoperandsandevaluatetotypeint.Theywillalwaysevaluatetoeither1(true),or0(false).結(jié)果是一個(gè)邏輯量,即“真”或“假”,分別用整數(shù)1和0表示。注意:區(qū)分"="號(hào)和"=="號(hào)。避免對(duì)實(shí)數(shù)作相等或不等的判斷。正確表示數(shù)學(xué)上的連續(xù)不等式。3>2>1與3>2&&2>13.2.2邏輯運(yùn)算符(logicaloperator)邏輯運(yùn)算符:
!邏輯非&&邏輯與||邏輯或Thelogicaloperator!iscalledthenegationoperator.Itisaunaryoperandbecauseithasoneoperand.Don’tconfusenegationwithunaryminus.!!5=?結(jié)果是一個(gè)邏輯量,即“真”或“假”,分別用整數(shù)1和0表示。短路特性(short-circuitevaluation)a&&b&&ca||b||c只有a為真時(shí)才判斷b,只有a&&b為真時(shí)才判斷c。(若a為假,表達(dá)式的值已經(jīng)肯定為假,不必再往下判斷了。)只要a為真,就不必再繼續(xù)判斷,結(jié)果一定為真。
在C語(yǔ)言中表示條件判斷某一字符(變量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條件運(yùn)算符(ConditionalOperator)語(yǔ)法格式:表達(dá)式1?表達(dá)式2:表達(dá)式3如: max=(a>b)?a:b; 等價(jià)于 if(a>b) max=a;
else
max=b;
[例]判斷鍵盤(pán)輸入的一個(gè)字符是否為大寫(xiě)字母,如果是則轉(zhuǎn)換為小寫(xiě)字母,否則不轉(zhuǎn)換。輸出處理后的字符。#include<stdio.h>main(){
charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;//括號(hào)可不加printf("%c\n",ch);}3.3程序中的選擇結(jié)構(gòu)通常計(jì)算機(jī)按在程序中書(shū)寫(xiě)的順序執(zhí)行語(yǔ)句。但許多情況下,語(yǔ)句的執(zhí)行順序依賴于輸入數(shù)據(jù)或中間運(yùn)算結(jié)果。此時(shí),必須根據(jù)某個(gè)變量或表達(dá)式的值作出判定,以決定執(zhí)行哪些語(yǔ)句和跳過(guò)哪些語(yǔ)句不執(zhí)行。這種程序結(jié)構(gòu)叫做選擇結(jié)構(gòu)(或稱分支結(jié)構(gòu))。為實(shí)現(xiàn)選擇結(jié)構(gòu)程序設(shè)計(jì),C語(yǔ)言引入了if語(yǔ)句結(jié)構(gòu)和switch語(yǔ)句結(jié)構(gòu)。if語(yǔ)句用來(lái)判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定要執(zhí)行的語(yǔ)句。if語(yǔ)句的格式1(Singleselection)
if(表達(dá)式)
內(nèi)嵌語(yǔ)句如:
if(x>y) x++; y++;3.3.1if語(yǔ)句if語(yǔ)句格式1示例[例]從鍵盤(pán)上輸入一個(gè)數(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語(yǔ)句的格式2(Doubleselection)
if(表達(dá)式)
語(yǔ)句1
else
語(yǔ)句2如:
if(x>y) x++;
else y++;3.3.1if語(yǔ)句[例]已知三角形的三條邊a、b、c,求面積area。分析:若a、b、c滿足任意2數(shù)之和大于第3個(gè)數(shù)的條件,則三邊可以構(gòu)成三角形,此時(shí)計(jì)算并顯示結(jié)果;反之,三邊不構(gòu)成三角形,此時(shí)給出錯(cuò)誤提示。,if語(yǔ)句格式2示例if語(yǔ)句格式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語(yǔ)句中的"語(yǔ)句"處又是if語(yǔ)句,則稱為if語(yǔ)句的嵌套。一般格式如下:
if(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1
else 語(yǔ)句2 else if(表達(dá)式3) 語(yǔ)句3 else 語(yǔ)句4
在嵌套的if語(yǔ)句中,習(xí)慣寫(xiě)成鋸齒形,以增加程序的可讀性。
3.3.1if語(yǔ)句內(nèi)層的if語(yǔ)句如果是簡(jiǎn)化的if,如:if(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1else
語(yǔ)句2從最內(nèi)層開(kāi)始,else總是與它上面最近的、未曾配對(duì)的if配對(duì)。?嵌套的if語(yǔ)句{
}if語(yǔ)句的格式3(Multipleselection)
else-if格式 if(表達(dá)式1)
語(yǔ)句1 elseif(表達(dá)式2)
語(yǔ)句2 elseif(表達(dá)式3)
語(yǔ)句3 . . . elseif(表達(dá)式n)
語(yǔ)句n else
語(yǔ)句n+13.3.1if語(yǔ)句例: if(x<0) y=-1; elseif(x==0) y=0; else y=1;例:輸入考試成績(jī)的等級(jí),打印出百分制分?jǐn)?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語(yǔ)句語(yǔ)法格式:
switch(表達(dá)式){
case
常量表達(dá)式1:語(yǔ)句1
case
常量表達(dá)式2:語(yǔ)句2...
case常量表達(dá)式n:語(yǔ)句n
default:語(yǔ)句n+1}3.3.2switch語(yǔ)句上例中的if部分可以考慮寫(xiě)成下面的switch語(yǔ)句:
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語(yǔ)句?改進(jìn)的switch語(yǔ)句語(yǔ)法格式:switch(表達(dá)式){
case
常量1:語(yǔ)句1;break;
case
常量2:語(yǔ)句2;break;...
case
常量n:語(yǔ)句n;break;
default:語(yǔ)句n+1';}
改進(jìn)后的switch語(yǔ)句:
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多個(gè)case可以共用一組執(zhí)行語(yǔ)句。如:
switch(grade){
case'A':
case'B':
case'C':printf("60~100\n");break;
case'D':printf("<60\n");break;
default:printf("Error\n"); }改進(jìn)的switch語(yǔ)句就一個(gè)表達(dá)式的判斷(條件滿足/條件不滿足)而言,一次只能產(chǎn)生兩條分支。實(shí)際應(yīng)用中,選擇時(shí)常常有可能面臨多條分支,這時(shí)就會(huì)使用嵌套的if語(yǔ)句或者switch語(yǔ)句或者兩種語(yǔ)句嵌套組合。 x (x<2)[例]y=2x-1 (2≤x<10)3x+10 (x≥10)
任意輸入x,輸出y,編寫(xiě)程序?qū)崿F(xiàn)該函數(shù)。 方法一:用if語(yǔ)句形式編寫(xiě) 方法二:用if-elseif語(yǔ)句形式編寫(xiě) 方法三:用switch語(yǔ)句編寫(xiě)程序3.3.3多重選擇結(jié)構(gòu)(Multipleselectionstructure)x=3.56
3.560000,6.120000選擇結(jié)構(gòu)程序設(shè)計(jì)綜合舉例方法一:用if語(yǔ)句形式編寫(xiě)#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)程序設(shè)計(jì)綜合舉例方法二:用if-elseif語(yǔ)句#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)程序設(shè)計(jì)綜合舉例#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語(yǔ)句[例]輸入年、月,輸出該月有多少天。分析:每年的1、3、5、7、8、10、12月有31天;
4、6、9、11月有30天;2月閏年有29天,平年有28天。年號(hào)能被4整除,但不能被100整除,或者年號(hào)能被400整除的年均是閏年。設(shè)年份為year,判斷year是否閏年:if(year%4==0&&year%100!=0
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年煤氣燒嘴項(xiàng)目可行性研究報(bào)告
- 2025貸款合同范例
- 2025年熱電偶專用補(bǔ)償導(dǎo)線項(xiàng)目可行性研究報(bào)告
- 2025年炸爐加熱管項(xiàng)目可行性研究報(bào)告
- 2025年溫度校驗(yàn)儀項(xiàng)目可行性研究報(bào)告
- 2025年海蓬子密度板項(xiàng)目可行性研究報(bào)告
- 2025年簽訂汽車租賃合同的詳細(xì)說(shuō)明
- 護(hù)士資格證了解考試制度試題及答案
- 2025年務(wù)必關(guān)注簽訂房屋租賃合同的關(guān)鍵事項(xiàng)
- 合同到期協(xié)議書(shū)
- DB31-T 524-2022 道路、公共廣場(chǎng)保潔質(zhì)量與作業(yè)規(guī)范
- 部編版《道德與法治》三年級(jí)下冊(cè)第10課《愛(ài)心的傳遞者》教學(xué)課件
- GMP質(zhì)量體系成品進(jìn)出庫(kù)臺(tái)帳
- LY/T 3292-2021自然保護(hù)地生態(tài)旅游規(guī)范
- 中小學(xué)生心理健康教育主題班會(huì)PPT教學(xué)課件
- 口腔正畸病例書(shū)寫(xiě)模板
- 呼叫中心產(chǎn)業(yè)研究報(bào)告
- 人民音樂(lè)出版社六年級(jí)下冊(cè)音樂(lè)教案(全冊(cè))
- 藥物臨床試驗(yàn)概述課件(PPT 23頁(yè))
- HP系列圓錐破碎機(jī)常見(jiàn)故障
- 企業(yè)計(jì)算機(jī)基礎(chǔ)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論