第3章 控制結(jié)構(gòu) -1_第1頁(yè)
第3章 控制結(jié)構(gòu) -1_第2頁(yè)
第3章 控制結(jié)構(gòu) -1_第3頁(yè)
第3章 控制結(jié)構(gòu) -1_第4頁(yè)
第3章 控制結(jié)構(gòu) -1_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論