




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
statements&flowcontrolof計算機軟件架如何寫出更復雜、功能更強大的程對程序機制要現(xiàn)實中要…因此需要 的程序機制本部分主要內(nèi)語句及其類函數(shù)定義與調(diào)用初表達式與運算運算符優(yōu)先本部分主要內(nèi)結(jié)構(gòu)化程序的三種基本流程結(jié)各種分支與循環(huán)結(jié)ifswitchcasewhiledowhile其它流程控制語break;continue;一、語句及其類語句、語法和語語語語已經(jīng)出現(xiàn)過的語Variable=如n=a=如a=空語C語句的空語句,只有一個分;注 PASCAL的空語NOP;//No復合結(jié)構(gòu)(復合語句語語空復合結(jié)構(gòu)中沒有語句,執(zhí)行時立即結(jié){PASCAL的復合語BEGIN程序中的注注釋對程序意義(執(zhí)行)/*任何字符的序列 簡單計算程#include/* 其 ,則要寫入其它頭文件/*如用數(shù)學函數(shù),要寫#include<math.h>intmain{/*若干變量定義(及可能的初始化)/*若干計算和賦值語句/*若干輸出語句*/return0;}二、函數(shù)定義與調(diào)用初如何定義和調(diào)用一個函數(shù)函數(shù)定如標準函數(shù)sindouble例,求一些圓盤的面積,圓盤半徑分別3.24、2.13、0.865、3.746、12.3364、設(shè)圓周率用3.1416,可寫出下面程序:#include<stdio.h>intmain{printf("radius:%f,area:%f\n",3.24*3.24*printf("radius:%f,area:%f\n",2.13*2.12*……}用函數(shù)改進程如果有以半徑為參數(shù)計算圓盤面積的函double程序就可簡化。如第一個語句可寫printf("radius:%f,area:%f\n",3.24,打印圓盤面積的函數(shù)pc_area,只需函數(shù)能使程序變短,變函數(shù)定義與調(diào)用示定義函數(shù)c_areadoublec_area(double{returnr*r*}2.4*c_area(3.24)/(c_area(5.3)-/*定義函數(shù),重寫程序#include<stdio.h>doublec_area(doubler){returnr*r*3.1416;/*容易修改圓周率近似值}intmain{printf("Radius:%f,area:%f\n",3.24,printf("Radius:%f,area:%f\n",2.13,c_area(2.13));printf("Radius:%f,area:%f\n",0.865,c_area(0.865));printf("Radius:%f,area:%f\n",3.746,printf("Radius:%f,area:%f\n",12.3364,c_area(12.3364));printf("Radius:%f,area:%f\n",8.421,c_area(8.421));return0;}進料口數(shù)目:0…函數(shù)與加工進料口數(shù)目:0…函數(shù)定義形函數(shù)返回值類型函數(shù)名(參數(shù)表{…}doubleDoSomething(double{…}局部變返回表達式結(jié)
intdoublesum=…return}函數(shù)調(diào)用、執(zhí)函數(shù)調(diào)函數(shù)名(實際參數(shù)表函數(shù)的執(zhí)行過函數(shù)的調(diào)用、執(zhí)行與返調(diào)用者程序執(zhí)
被調(diào)用函數(shù)執(zhí)
續(xù)t具有多個參數(shù)的函參數(shù)表里寫多對類型參數(shù)t_area,3個double參數(shù),返回doubledoublet_area(double,double,doublet_area(doublea,doubleb,double{doubles=(a+b+c)/returnsqrt(s*(s-a)*(s-b)*(s-}無返回值的函語法:返回值類型處寫voidpc_area(double{printf("Radius:%f,area:%f\n",r,3.1416*r*r);}#includevoidpc_area(double{printf("Radius:%f,area:%f\n",r,3.1416*r*r);
}/*很容易修改輸出格式,圓周率等intmain{return0;}函數(shù)與程程序里不允許寫調(diào)用main函數(shù)與類例intfun(int{return3.2*m+}類型轉(zhuǎn)換的各種情計賦參數(shù)傳返回函數(shù)返回函數(shù)調(diào)用時的類型問intfun(int{return3.2*m+}設(shè)x是雙精度變量,執(zhí)行語句xfun(2.56);包含一個或多個函數(shù)定義的程序模#include /*函數(shù)定義寫在這里*/intmain(){……/*主程序體,包含函數(shù)調(diào)用}三、表達式與運算Expressions&一些程序功 一個小例已問他們各在哪一排另外一個例A、B、C、D、E、F共6人參加程序競賽已問哪些人獲了獎問問關(guān)系運算符和關(guān)系表達RelationalOperators&小例doubledmax(double,需要做的工關(guān)系運算關(guān)系運算符relational關(guān)系運算符共6 等于/關(guān)系運算符可用于算術(shù)類關(guān)系表達關(guān)系表達式relational關(guān)系表達的結(jié)3.2<= y!=x+計算結(jié)果表結(jié)果為int,成立、不成立時值分別是1、(3.242.98)的值,int類型的(531)的值,int類型的關(guān)系運算符的優(yōu)先低于二元算術(shù)運算符34高于賦值運算符分為兩 低 高結(jié)果結(jié)果5>=3>=條件運算C語言中一種特殊的運算符:?條件表達條件運算符“條件表達式的語法形表達式1表達式2表達式語例:函數(shù)doubledmax(doublex,{returnx>y?x:
}z=dmax(2,例:符號函數(shù)signdoublesigndoublex){
每個:與前面最近的沒有匹配的匹returnx>0?1:(x==0?0:-}LogicLogicOperatorsand邏輯與邏輯Thenon-arithmeticoperationsperformedbyacomputer,suchassorting,comparing,andmatching,thatinvolveyes-nodecisions關(guān)系表達式與邏輯判邏輯值(真假值)的表邏輯表達Logical3≤x≤5時z取值2,否則取值1z=(x>=3?(x<=5?2:1):某條件為真而且某條件不為真或者關(guān)鍵字眼:不,而且,或者復雜條件的表缺解決辦邏輯運算三個邏輯運算符 !表達表達式1&&表達式表達式1||表達式邏輯運算真值aba&&a||真真假假真真真假假真假真假真真假假真假假真真假假例:zx3&&x計算方式與順&&和||的計算方例x!=0.0&&y/x>優(yōu)先級問優(yōu)先級&&優(yōu)先級高于||設(shè)邏輯表達(((x+3)>(y+z))&&(y<10))||(y>寫為下面形式意義不變x+3>y+z&&y<10||y>從自然語言到邏輯表達邏輯表達式舉例1,判斷變量year表示的年是否為閏year%4==0&&year%100!=0%400==判斷年份是否閏年的函數(shù)intintercalary(intintintercalary(int{return(year%4==0&&year%100!=0year%400==0?1:0}intintercalary(int{return(year%4==0&&year%100!=0||year%400==0);}printf("DaysofFeb.is%d.\n",intercalary(year)?29:判斷獲A和B中至少一人獲獎→a||A、C、D中至少二人獲獎→(a&&c)||a&&d)||(c&&d)A和E中至多一人獲獎→!(a&&B和F或者同時獲獎,或者都未獲獎→(b&&f)||(&&C和E或者同時獲獎,或者都未獲獎→(c&&e)||&&如果E未獲獎,則F也不可能獲獎→e||C、D、E、F中至多3人獲獎→c+d+e+f<=誰站哪一A不在第1排→a!=A與B前后相鄰→(a==b+1)||(a==b-C在D前面→c==d-E在B的前兩排→e==b-C在F后的第4排→c==f+也可以通過程序流程控 來表 算術(shù)運算關(guān)系運算&&(與||(或賦值運算低賦值運算
例:1.x<y&&等效于(x<y)&&A==b||等效于(a=b)||(c=!a&&等效于(!a)&&4.5>3&&4||8<低等效于((53)&&4||8達式(m=a>b)&&(n=c>d)后m和n的值各為多少?分析:a>b的值為0→(m=a>b)值為0→表達式(m=a>b)&&(n=c>d0賦值運算→0||0+1&&c<d→0||1&&15<20→0||1&&1→0||1四、C語言其它特色運算C語言的特色運算自增、自減運算逗號運算實現(xiàn)二元運算符操作的賦值運算條件運算自增、自減運算增量和減量運算自增自減運算 ++,-增、減量運算將變量值加、減1將x的值加將x將x的值加將x的值減--x-以增量為例,兩種寫法在給變量加1方面表達式++x的值是x增量后的值自增和自減運算++和--可以寫在變量的左側(cè)或右側(cè);而且其意“變量名++”和“變量名--”:說語句x++;和語句xx1;有所不x可以是實數(shù)類型,計算中做類型轉(zhuǎn)自增自增和自減運算變量0變量0N=I變量變量0變量0N=++練練若k和j為int執(zhí)行后,變量k的值 ,變量j的值 執(zhí)行完三執(zhí)行完三條語句后,x、yz的值分別例x=2;y=x+++2;z=++x+例inta[5]={0,1,2,3,4},a[0]=a[1]=--p&a[3];將a[3]的地址存到變量p(*p對p將指向的整型單元a[3]的值做自執(zhí)行完上執(zhí)行完上述語句后:數(shù)組中的五個為:1,1,1,4,4;p指向逗號運算計算表達式逗號計算表達式計算表達式計算表達式求值過 順序求表達式1→表達式n整個表整個表式的計算表達式a=3*5,a*x=(a=3,6*x=a=3,6*復合賦值運算 +=,-=,*=,/=,%=,<<=,>>=,&=,^=,如i=1;j3;i好“sumsumn;”形式的賦值,可以寫成sum+=n;五、語句與控制結(jié)高級語言流程控制概語句與流基本語復雜計執(zhí)行流程的描硬件層次的流程控制機三種基本流程模程序設(shè)計實踐總結(jié)出三種基本流程 順序執(zhí) 選擇執(zhí) 重復執(zhí)
次性,易分解,意義較易把已證明,這三種模式對寫任何程序都夠結(jié)整體可作為抽式中,形成更雜的流程C的流程控制機C提供了很豐富的程序流程控制機制,對應(yīng)控制語復合結(jié)構(gòu)是一種控制結(jié)構(gòu),實現(xiàn)順序執(zhí)順序結(jié)構(gòu)示abab344444abc34?343443433intinta=3,b=a=b=intinta=3,b=4,c;c=a;a=b=C語言的分支結(jié)構(gòu)—if語條件語句—if語if(<條件表達式>)<語句if條件表達式>)<語句1>else語句形式二:求值條件,條件時執(zhí)行語句12例#includevoid{floata,b,t;//定義三個變量a、b、scanf(“%f%f”,&a&b);//輸入兩個數(shù)到a、bif(a<b)//如果a小于b,則將a的值與b{t=a;a=b;b=printf(“a=%5.2f,b=}例voidpc_area(doubler){if(r<printf("radiuserror:%f\n",r);printf("radius:%f,area:%f\n",r,3.14159265*r*r);}例:判斷一個數(shù)是偶數(shù)還是奇#include<stdio.h>voidmain(){intn,printf("enteranumber:");scanf("%d",&n);ifprintf("thenumber%disanevennumber\n",n);ilrem!=0)printf("thenumber%disanoddnumber!\n",}1)if
寫形當“語句”為復合語句時,常用寫法有兩種if{}{
if(expr)}else}}if語句嵌套問if有兩種形式,嵌套可能出問題。問題出在一個條件語句后直if(x>if(y>z=elsez2;/*屬于哪個規(guī)缺省時,else部分屬于前面最近的無對應(yīng)else的ifififif(……)
要使else部分屬于外層if,可用if(x>{if(y>z=}elsez=當有嵌套的if語句時的兩種書寫形if{}if{}if{
if{}elseif{}elseif{}elseif}if例:求方程ax2+bx+c=0分析:方程ax2+bx+c=0的解的情況b!=0唯一根c==0:無窮多個根c!=0:無解b2-4ac==0:兩個相同的實根,-b2-4ac>0兩個不同的實根,(-b+sqrt(b2-/(2*a)(-b-sqrt(b2-4ac))b2-4ac<0:兩個不同的虛根,-b/(2*a)+i*sqrt(b2-4ac)(2*a)、-b/(2*a)-i*sqrt(b2-例:求方程ax2+bx+c=0voidroot2(doublea,doubleb,doublevoidroot2(doublea,doubleb,double{/*1.計算判別式d/*2.根據(jù)d大于、等于、小于0分別處理}voidroot2(doublea,doubleb,double{
計算判別doubled=b*b–4*a*if(d>{d=
判斷條printf("Tworealroots:%f,(-b+d)/2./a,(-b-d)/2./ if(d==
}
printf("Onerealroot:-b/2./printf("Noreal空語句與if(x>if(y>1)z=1;else;elsez=寫ifif 多分支語句—switch語多分支語句字符字符型或枚舉類switch{caseconst-expr1:caseconst-expr2:…caseconst-exprn:default:每個case每個case說Expression必須為整型表達式常量表達式常用整數(shù)、字符等case整型常量表達式:看作標號整型常量表達式的值必須各不相switch執(zhí)行過求值整型表達式的將值順序與各整型常量表達式比遇到相等時轉(zhuǎn)入執(zhí)行,直到碰到一個rbreakswc語句結(jié)束;如果找不無匹配的整數(shù),但有default則default:處繼續(xù);沒有default時結(jié)束例例,按x的值確定分支,1和2分別處理,其他統(tǒng)一處switch{case1:...case2:......default:......}關(guān)于據(jù)月份判斷季switch{case2:case3:caseprintf(“Month%disSpring\n”,case5:case6:caseprintf(“Month%disSummer\n”,month);case8:case9:caseprintf(“Month%disAutumn\n”,case11:case12:caseprintf(“Month%disWinter\n”,printf(“Month%disnotvalid\n”,month);}#includevoidmain({intscore,printf("Inputascore(0~100):scanf("%d",grade=score/10;//將成績整除10,轉(zhuǎn)化成switch語句中的case標switch{casecase9:printf("grade=A\n");break;//標號10和9,都執(zhí)行本行的這條case8:printf("grade=B\n");case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:casecasecasecasecase0printf("grade=E\nbreak;//標號5、4、3、2、1和0都執(zhí)行本行的這條語句default:printf("Thescoreisoutofrange!\n}//成績超出范圍時,提示出錯}循環(huán)語句—while語循環(huán)語句while語while條件表達式語(1)求值條件表達式,將它的值作邏輯(2)若第1步得到值0則循環(huán)結(jié)束;則(3)執(zhí)行作為循環(huán)體的語句,而后到先判斷表達式,再執(zhí)行循環(huán)
while語句執(zhí)行流程
循
知道控制循環(huán)的條件為某個而且在循環(huán)中該表達式的值會被改變。例,求1..100的平方sum=n=
初始化累加量和循環(huán)變
while(n<={sum=sum+n*
}關(guān)于循典型形如何分析問題、寫出循環(huán)很重例:寫程序從攝氏0度到300度,每20度一項,輸出#includeintmain{printf("C:0,F:%f\n",0.0);printf("C:20,F:%f\n",20.0*9/5+32);printf("C:40,F:%f\n",/*還有13行類似代碼}用循 來解決問循環(huán)前賦初始值0,每次循環(huán)加20,直到攝氏→F=C*9/5+臨時變量取名c,結(jié) #includeintmain{intc=
初始狀
循環(huán)條while(c<={=%d,=c*/5.0c=c+}
改變循環(huán)變量反映循環(huán)進return}C=0,F=例:求滿足123中最大的N分復執(zhí)行循環(huán),否則結(jié)束分定義變量:sum和n別賦初值步步當sum500,語句為{++n;sum+=程1+2+3+…+程voidmain(){intn=0,sum=0;while(sum<500)
為什么不是 ++n; sum+=n;}printf("n=%d,sum=%d\n",n-1,sum-n);}結(jié)n=31結(jié)n=31例:輸入兩個正整數(shù)m、n,最大公約數(shù)——輾轉(zhuǎn)相除法兩個整數(shù)m和n分設(shè)r表示m除以n的余數(shù);即分如果,r==0則n的值為m的最大公約數(shù);否則執(zhí)行:mnnr回“如果”處,繼續(xù)執(zhí)行最小公倍數(shù)——m和n的乘積#include<stdio.h>voidmain(){intm, ,LCM,rscanf(“%d,%d”,&m,&nr=m%n;{m=n;n=r;r=m%n;=n;LCM=p/ printf(“thegreatestcommondivision printf(“theleasecommonmultiple=%d例用戶輸入多個字符,要求按以下規(guī)律進行翻譯如:將A變成B,B變成C,,Z變成A。‘!’作為用戶輸入結(jié)束的標志分讀入第分讀入第一個字符當其不是“!”時,進入循環(huán)將其翻譯成該字母的后繼樣輸出再讀入下一個字符,返回2步當輸入字符為“!”時結(jié)束voidmain(){charscanf("%c",while(ch!={if((ch>='a'&&ch<='z')||(ch>='A'&&{if(ch=='z')elseif(ch=='Z')else}printf("%c",scanf("%c",}printf("字符串結(jié)束}循環(huán)語句—for語循環(huán)語句for語12)34)for結(jié)構(gòu)是這種常見模式的規(guī)范化。for也是最for(expr1;expr2;for循環(huán)的執(zhí)行過執(zhí)行(語義1)求值表達式1(只做一次),3)4)求值表達式35)轉(zhuǎn)到可用其他機制退出循環(huán),
計算計算真(非循環(huán)
假用break跳出循for(expr1;;expr3)for(;;)for(;expr2;expr3)for(expr1;expr2;)
缺
計算for(表達式1;表達式2;表達式3)語句for語句執(zhí)行流程0表達式表達式for句for(表達式1;表達式2;表達式語句執(zhí)行流3回到表達式2處。20
假真
22
逗號表達式與逗號表達式經(jīng)常用在for頭部做變量初置和例,求平方for(sum=0,n=1;n<=100;++n)sum=sum+n*n;#includeintmain{int
expr1常初
for(c=0;c<=300;c=c+20)printf("C=%d,F=%f\n",c,c*9.0/5.0+return}
例intData[10],for(i=0;i<10;i++)Data[i]=for(i=0;i<10;Data[i++]=;for(i=0;i<10;i++){scanf(“%d”,}//公式cij=aij+inti,j;…for(i=0;i<N;{for(j=0;j<N;{c[i][j]=a[i][j]+}}例:打印乘法“九九表” 12
6分析i表示行,從1j表示列,從1mi*jij1im=i*j,輸ii9
voidmain(){intfor(i=1;i<=9;i++printf(“%4d”,i);for(i=1;i<=9;i++){printf(“%for(j=1;j<=i;j++){printf(“%4d”,m);printf(“\n”);}執(zhí)執(zhí)行結(jié)果輸行(外循環(huán))i123456789計算出每一列的98162432404856918273645546372intfor(j=1;j<=9;j++)printf(“%d”;i);printf(“\n”);}71421283542612182430每一5依次輸362并輸出循環(huán)語句—dowhile循do-while循do語句while(條件
條件成
語語條條件不成出do-while結(jié)構(gòu)的執(zhí)行流1+2+3+#include<stdio.h>voidmain(){inti=0,do
inti=1,while(i<=10000{sum+=}}while(i<10000);printf("sum=%d\n",sum);}使用迭代法求立方xn+1=(2xn+x/xn2)/滿足|xn1xn|<10-停止計算,xn1為結(jié)例用do-while結(jié)構(gòu)寫求立方根函數(shù)doublecbrt(double{doublex1,x2;//代表xn與ifx1E-6&&x1E-6x約為0return0.0;/*處理特殊情況*/x2=dox1=x2=(2.0*x1+x/(x1*x1))/}while(fabs((x2-x1)/x1)>=1E-return}其它三個流程控制語break,continue,break,
while(...).........while
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)購物合同范本
- 2025年新余貨運資格證模擬考試新題庫
- 上海賣房定金合同范本
- 儀器采購合同范本模板
- 農(nóng)業(yè)打藥合同范本
- 第五章 第二節(jié) 一 氣溫 世界氣溫的分布教學設(shè)計-2024-2025學年湘教版初中地理七年級上冊
- 業(yè)主安裝電梯合同范本
- 全國物業(yè)服務(wù)合同范本
- 代理經(jīng)銷產(chǎn)品合同范本
- 借款合同范本擔保人范本
- 2025年度會計人員繼續(xù)教育會計法律法規(guī)答題活動測試100題答案
- 第15課 人機對話的實現(xiàn) 說課稿 六上信息科技浙教版(2023)001
- 消防維保年度工作計劃
- 統(tǒng)編版(2025新版)七年級下冊語文第一單元綜合測試卷(含答案)
- 棗莊學院《電力拖動與自動控制系統(tǒng)》2023-2024學年第一學期期末試卷
- 醫(yī)師手術(shù)權(quán)限申請流程
- 2025年四川省宜賓敘州區(qū)事業(yè)單位考調(diào)83人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 米非司酮使用培訓
- 二氧化碳捕集、運輸和地質(zhì)封存 - 地質(zhì)封存 征求意見稿
- 2024-2030年中國淀粉糖行業(yè)運行態(tài)勢與發(fā)展趨勢分析報告
- 診所信息保密和安全管理制度
評論
0/150
提交評論