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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第三

章結(jié)構(gòu)化程序與流程控制目錄3.1基本語句3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.3邏輯運(yùn)算符和邏輯表達(dá)式3.4分支程序設(shè)計(jì)3.5循環(huán)程序設(shè)計(jì)3.1基本語句(Statements)控制語句表達(dá)式語句函數(shù)調(diào)用語句空語句復(fù)合語句控制語句完成一定的控制功能C語言的9種控制語句if-elsewhilecontinueswitchreturnfordo-whilebreakgoto表達(dá)式語句形式expression;表達(dá)式最后加一個(gè)分號(hào)舉例a=3; /*賦值語句*/z=x*y,z++; /*一條語句*/x-y; /*語句,但無實(shí)際意義*/i++; /*語句*/i++ /*表達(dá)式,不是語句*/函數(shù)調(diào)用語句形式function(arguments);函數(shù)調(diào)用后加一個(gè)分號(hào)函數(shù)調(diào)用語句可以看作一種表達(dá)式語句舉例printf("%d",i);getchar();myfun(a,b);//自定義函數(shù)#include<stdio.h>intmax(intx,inty);//自定義函數(shù)intmain()/*主函數(shù),程序從這里開始執(zhí)行*/{ inta,b,c; printf("請(qǐng)輸入兩個(gè)整數(shù):(兩數(shù)以半角逗號(hào)分隔)"); scanf("%d,%d",&a,&b);/*標(biāo)準(zhǔn)輸入函數(shù)*/ c=max(a,b);/*調(diào)用max()函數(shù)*/ printf("%d,%d中的大數(shù)為:%d\n\n\n",a,b,c);/*標(biāo)準(zhǔn)輸出函數(shù)*/

return0;}intmax(intx,inty)/*自定義max()函數(shù),求兩個(gè)數(shù)中的大數(shù)*/{ intz; if(x>y)z=x;elsez=y; return(z);/*返回函數(shù)值*/}從鍵盤任意輸入兩個(gè)數(shù),輸出其中的大數(shù)。函數(shù)調(diào)用函數(shù)聲明函數(shù)定義空語句形式;只有一個(gè)分號(hào)用法作為轉(zhuǎn)向點(diǎn)作為循環(huán)語句中的循環(huán)體舉例for(i=1;i<=100;i++)sum+=i;for(i=1;i<=100;sum+=i++);復(fù)合語句(塊語句,Block)形式{statements}用{}把若干條語句組合成為一個(gè)復(fù)合語句{}內(nèi)可以沒有任何語句,可以只有一條語句,也可以有多條語句可以包括復(fù)合語句、空語句、控制語句等用法一個(gè)復(fù)合語句當(dāng)作一條語句來使用需要把多條語句放在只允許一條語句的場(chǎng)合復(fù)合語句舉例intx,y,t;if(x>y){ /*復(fù)合語句開始*/t=x;x=y;y=t;} /*復(fù)合語句結(jié)束*/printf("%d,%d",x,y);C語言語句使用說明除復(fù)合語句外,語句都以分號(hào);作為結(jié)束語句書寫格式比較自由,確定語句結(jié)束的唯一標(biāo)準(zhǔn)是分號(hào)(;)注意區(qū)分表達(dá)式和表達(dá)式語句,它們的用法不同舉例,if((a=b)>0)t=a;錯(cuò)例,if((a=b;)>0)t=a;舉例,if(x>y){x--;y++;}錯(cuò)例,if(x>y){x--;y++}3.2關(guān)系運(yùn)算符(RelationalOperators)運(yùn)算符名稱舉例優(yōu)先級(jí)(算術(shù)運(yùn)算符)<小于i<100高<=小于等于a<=MAX>大于f>3.14>=大于等于c>='a'==等于a==b低!=不等于x!=0(賦值運(yùn)算符)3.2關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來a+b>c+d,(a=3)>x注意區(qū)分等于(==)和賦值運(yùn)算符(=)a=b,a==b關(guān)系表達(dá)式的值是邏輯值—“真”或“假”C語言用整型表示邏輯值,“真”—1、“假”—0舉例,

a=3,b=2,c=1; d=a>b; /*d=1*/ f=a>b>c; /*f=(a>b)>c=0*/3.3邏輯運(yùn)算符(LogicalOperators)運(yùn)算符名稱舉例優(yōu)先級(jí)!邏輯非!(a>b)(算術(shù)運(yùn)算符)(關(guān)系運(yùn)算符)&&邏輯與(x>y)&&(y>z)||邏輯或(x>3)||(x<-3)(賦值運(yùn)算符)邏輯運(yùn)算規(guī)則!a若a為“真”,!a為“假”若a為“假”,!a為“真”a&&b若a、b都為“真”,則a&&b為“真”若a、b不全為“真”,則a&&b為“假”a||b若a、b都為“假”,則a||b為“假”若a、b不全為“假”,則a||b為“真”3.3邏輯表達(dá)式邏輯運(yùn)算符把邏輯量或表達(dá)式連接起來(y%4==0&&y%100!=0)||(y%400==0)邏輯表達(dá)式的值是邏輯值用整型表示邏輯值“真”

1,“假”0把一個(gè)表達(dá)式的值作為邏輯值使用非零“真”,零

“假”這里的非零與零,包括整型、浮點(diǎn)型等邏輯表達(dá)式舉例inti=3;charc='a';floatf=0.0;i==0;!i; /*兩者邏輯值相同*/i!=0;i; /*兩者邏輯值相同*/c&&!f; /*“真”*/i&&1.23||f;/*“真”*/c&&4&&f; /*“假”*/邏輯表達(dá)式求值特點(diǎn)邏輯表達(dá)式中的運(yùn)算符,只有會(huì)影響表達(dá)式求值時(shí),才會(huì)執(zhí)行a&&b&&c若a為“假”,則不再判斷b和ca||b||c若a為“真”,則不再判斷b和c舉例,(m=a>b)&&(n=c>d)DeMorgan定理!(a&&b) (!a)||(!b)!(a||b) (!a)&&(!b)!((a&&b)||c) (!a||!b)&&!c注意短路現(xiàn)象:要表示x在a,b之間,C語言中用(x>0)&&(x<10)表示。0<x<10在C語言中是錯(cuò)誤的,得不到所要的結(jié)果。3.4分支程序設(shè)計(jì)if語句條件運(yùn)算符?:switch語句分支程序設(shè)計(jì)舉例if語句的三種形式if(expression)statementif(expression)statement1

else

statement2if(expression1)statement1

elseif(expression2)statement2

elseif(expression3)statement3......

elseif(expressionn-1)statementn-1

else

statementnif語句的說明無論哪種形式,一條if語句,包括else或elseif子句,只算作一條語句if語句中的子句,可以是一條任何類型的語句,包括表達(dá)式語句、空語句、復(fù)合語句、控制語句子句末尾的分號(hào),只表示子句的結(jié)束,不表示if語句結(jié)束注意復(fù)合語句末尾沒有分號(hào)else子句都是可以沒有的if語句舉例if(x>y) /*y為x和y的較大值*/y=x;if(x>y) /*d為x和y之間的距離*/d=x-y;elsed=y-x;if(x>y); /*合法,但沒有實(shí)際操作*/if語句的嵌套if語句的各子句都可以又是if語句應(yīng)注意if-else的配對(duì)關(guān)系else總是與其上面最近的if配對(duì)可以用{}明確if-else的配對(duì)關(guān)系if(exp1) if(exp1)if(exp2) {if(exp2)

statement1

statement1}else else

statement2

statement2條件運(yùn)算符(ConditionalOperator)條件運(yùn)算符?:條件表達(dá)式exp1?exp2:exp3先判斷exp1若exp1為“真”,表達(dá)式的值為exp2的值若exp1為“假”,表達(dá)式的值為exp3的值舉例, max=(x>y)?x:y;同: if(x>y)max=x; elsemax=y;switch語句

switch(expression){

case

const-exp:statements

case

const-exp:statements......

case

const-exp:statements

default:statements }switch語句的說明先求switch后表達(dá)式的值,若此值與某個(gè)case后的常量表達(dá)式的值相等,則跳轉(zhuǎn)到這個(gè)case后的語句;若沒有相等的常量表達(dá)式,則跳轉(zhuǎn)到default跳轉(zhuǎn)后程序一直往下執(zhí)行,不會(huì)因?yàn)橛龅搅硪粋€(gè)case而直接跳出switch根據(jù)實(shí)際需要,可以沒有default若需要跳出switch,可使用break語句case和default的順序不影響執(zhí)行結(jié)果switch語句舉例(1)switch(day){ /*打印星期的縮寫*/case1:printf("Mon.\n");break;case2:printf("Tue.\n");break;case3:printf("Wed.\n");break;case4:printf("Thu.\n");break;case5:printf("Fri.\n");break;case6:printf("Sat.\n");break;default:printf("Sun.\n");}整型常量switch語句舉例(2)switch(deptno){ /*根據(jù)系編號(hào)打印學(xué)院*/case15:case16:case17:printf("商學(xué)院\n");break;case18:case25:printf("人文學(xué)院\n");break;case7:printf("地空學(xué)院\n");break;default:printf("其他學(xué)院\n");}switch語句:

一定要注意有break和沒有break的差別,沒有break時(shí)候,只要有一個(gè)case匹配了,剩下的都要執(zhí)行,有break則是直接跳出了swiche語句。

注意:如果由嵌套的switch結(jié)構(gòu),break是跳出他所在的那層switch結(jié)構(gòu),而不是所有的。continue不能用于switch語句中,只有break可以。

switch(x)//x:是整型,字符型,枚舉型數(shù)據(jù)。{ case1:…… case2:…… ……}#include<stdio.h>voidmain(){ charop; intoperand1,operand2,resault; printf("inputoperand1operator(+,-,*,/)operand2\n"); scanf("%d%c%d",&operand1,&op,&operand2); switch(op) { case'+':resault=operand1+operand2;break; case'-':resault=operand1-operand2;break; case'*':resault=operand1*operand2;break; case'/':resault=operand1/operand2;break; default:break; } printf("%d%c%d=%d\n",operand1,op,operand2,resault);}字符型常量例:從鍵盤輸入一個(gè)整數(shù),顯示與該整數(shù)對(duì)應(yīng)的枚舉常量的英文名稱。

#include<stdio.h>

voidmain()

{

enumweekday{sun,mon,tue,wed,thu,fri,sat}day;

intk;

printf("inputanumber(0--6)");

scanf("%d",&k);

day=(enumweekday)k;

switch(day)

{

casesun:printf("sunday/n");break;

casemon:printf("monday/n");break;

casetue:printf("tuesday/n");break;

casewed:printf("wednesday/n");break;

casethu:printf("thursday/n");break;

casefri:printf("friday/n");break;

casesat:printf("satday/n");break;

default:printf("inputerror/n");break;

}

}

程序運(yùn)行結(jié)果為:

inputanumber(0--6)1

monday

枚舉型常量分支程序設(shè)計(jì)舉例求一元二次方程的根當(dāng)a=0時(shí),不是一元二次方程當(dāng)a≠0時(shí),方程的根為當(dāng)b2-4ac≥0,方程有兩個(gè)實(shí)根當(dāng)b2-4ac<0,方程有兩個(gè)共軛復(fù)根例1:求一元二次方程的根N-S流程圖程序的結(jié)構(gòu)化設(shè)計(jì)描述算法常用的工具:程序流程圖常用的流程圖符號(hào)ax+b=03.5循環(huán)程序設(shè)計(jì)while語句do-while語句for語句break和continue語句循環(huán)程序設(shè)計(jì)舉例while語句while(expression) statementwhile型循環(huán)先判斷表達(dá)式,后 執(zhí)行語句一般情況下,循環(huán) 中應(yīng)含有能使循環(huán) 語句結(jié)束的操作statementabexpr.真假while語句舉例inti,sum;i=1;sum=0;while(i<=100){sum+=i; /*循環(huán)體縮進(jìn)書寫*/i++; /*使循環(huán)趨向結(jié)束*/}do-while語句do

statementwhile(expression);類似于Until型循環(huán)先執(zhí)行一次循環(huán)體 語句,后判斷表達(dá) 式statementabexpr.真假do-while語句舉例inti,sum;i=1;sum=0;do{sum+=i;i++;}while(i<=100);do-while與Until型循環(huán)do{sum+=i;i++;}while(i<=100);C語言形式repeat{sum+=i;i++;}until(i>100);Until型循環(huán)for語句for(expr1;expr2;expr3)

statementexpr1;while(expr2){

statement

expr3; }for語句的說明三個(gè)表達(dá)式的說明expr1:初始化expr2:循環(huán)條件expr3:一般是循環(huán)變量的改變?nèi)齻€(gè)表達(dá)式都可以省略分隔表達(dá)式的分號(hào)不能省略expr1省略,不進(jìn)行初始化expr2省略,認(rèn)為循環(huán)條件永為“真”expr3省略,不在這里改變循環(huán)變量for語句舉例inti,sum;for(i=1,sum=0;i<=100;i++)sum+=i;for(i=1,sum=0;i<=100;)sum+=i++;for(i=0,sum=0;i++<100;)sum+=i;break語句形式break;說明跳出switch語句跳出本層循環(huán)語句如果有多層循環(huán)存在,break只跳出它所在的那一層循環(huán)語句,不影響外層循環(huán)的執(zhí)行不能用于循環(huán)語句和switch語句之外的任何其他場(chǎng)合continue語句形式continue;說明結(jié)束本次循環(huán)跳過循環(huán)體中余下的其他語句,接著進(jìn)行下一次循環(huán)的判定只能用于循環(huán)語句中break和continue語句break語句跳出本層循環(huán)

while(i<j){...if(i>100)

break;...}continue語句結(jié)束本次循環(huán)

while(i<j){...if(i>100)

continue;...}循環(huán)程序設(shè)計(jì)舉例求最大公約數(shù)和最小公倍數(shù)例2:求最大公約數(shù)和最小公倍數(shù)輸出100-200間不能被3整除的數(shù)#include"stdio.h"voidmain(){ for(inti=100;i<=200;i++) { if(i%3==0)

continue; printf("%d\t",i); }}示例:字符計(jì)數(shù)從鍵盤讀字符并計(jì)算字符數(shù)while循環(huán)實(shí)現(xiàn)字符計(jì)數(shù)#include"stdio.h"voidmain(){ longnc; nc=0; intch=getchar(); while(ch!=EOF) { nc++; ch=getchar(); } printf("%ld\n",nc);}for循環(huán)實(shí)現(xiàn)字符計(jì)數(shù)voidmain(){ longnc;

for(nc=0;getchar()!=EOF;nc++) ; printf("%ld\n",nc);}示例:單詞計(jì)數(shù)#include"stdio.h"#defineIN1#defineOUT0voidmain(){ intstatus=OUT; intnw=0; intch; ch=getchar();while(ch!=EOF){ if(ch=='\n'&&ch=='\t'&&ch=='') status=OUT; elseif(status==OUT)

{ status=IN; nw++;

}

}}#include"stdio.h"#include"string.h“inttrim(chars[])voidmain(){ chars1[]="abc"; intlen; len=trim(s1); printf("trim(s1)is%s,len=%d\n",s1,len);}inttrim(chars[]){ intn; for(n=strlen(s)-1;n>=0;n--)if(s[n]!=''&&s[n]!='\t'&&s[n]!='\n')

break; s[++n]='\0'; returnn;}刪除串尾空格,返回刪除后的串長度示例:atoi示例

將數(shù)字字符串轉(zhuǎn)化為整數(shù);5種情況:“123”,”-123”,”-123”,”-123abc1”,“+123a1”算法:1.數(shù)字字符串轉(zhuǎn)化為數(shù)值:n=0讀一個(gè)數(shù)字字符c;n=n*10+(c-’0’);2.串前空格處理:讀字符,為空格則走過即下標(biāo)移下一位置3.符號(hào)位處理:設(shè)置變量sign=1;若讀到’-’,則sign=-1;’+’,’-’下標(biāo)移下一位置4.非數(shù)字字符處理:非數(shù)字字符則程序結(jié)束。5.按上述問題在串中出現(xiàn)順序處理:2→3→1→4#include"stdio.h"#include"ctype.h"intatoi(chars[]){ inti=0; intn=0; intsign=1; for(i=0;isspace(s[i]);i++) ; if(s[i]=='-') sign=-1; if(s[i]=='+'||s[i]=='-') i++; for(;isdigit(s[i]);i++) n=n*10+(s[i]-'0'); returnsign*n;}}voidmain(){chars1[]="123",s2[]="-123“;chars3[]="-123"; chars4[]="-123abc1",s5[]="+123a1"; printf("%stoint%d\n",s1,atoi(s1)); printf("%stoint%d\n",s2,atoi(s2)); printf("%stoint%d\n",s3,atoi(s3)); printf("%stoint%d\n",s4,atoi(s4)); printf("%stoint%d\n",s5,atoi(s5));}數(shù)組的定義和使用:intx[3];x[0]=1;x[1]=2;x[2]=3;intx[]={1,2,3}charc[]=“123”;示例:逆序字符串算法 設(shè)立兩個(gè)循環(huán)變量i,j;

i從串頭遞增獲取字符,j從串尾開始遞減獲取字符,將s[i]與s[j]交換。直到i>j代碼#include"string.h"voidreverse(chars[]){ inti,j; charc; for(i=0,j=strlen(s)-1;i<j;i++,j--) { c=s[i];s[i]=s[j];s[j]=c; }}示例:

將整形數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論