![語句與控制流課件_第1頁](http://file4.renrendoc.com/view14/M09/3E/18/wKhkGWcj37WABpTwAAGGzMx7i5k358.jpg)
![語句與控制流課件_第2頁](http://file4.renrendoc.com/view14/M09/3E/18/wKhkGWcj37WABpTwAAGGzMx7i5k3582.jpg)
![語句與控制流課件_第3頁](http://file4.renrendoc.com/view14/M09/3E/18/wKhkGWcj37WABpTwAAGGzMx7i5k3583.jpg)
![語句與控制流課件_第4頁](http://file4.renrendoc.com/view14/M09/3E/18/wKhkGWcj37WABpTwAAGGzMx7i5k3584.jpg)
![語句與控制流課件_第5頁](http://file4.renrendoc.com/view14/M09/3E/18/wKhkGWcj37WABpTwAAGGzMx7i5k3585.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第三章句與控制流
內(nèi)容提要:
C句的分句分表
空句與合句空句與合句
條件分支句條件分支句
循控制句與嵌套循控制句
行流程強制移程序示例
程常用技巧流程強制移
第三章句與控制流
C言是一很好的構化程序
言,它提供了比FCRIRW、P/SCLE更豐
富的流程控制句,提供了將多個
句合成一個句的合句
C句的分
T函數(shù)用句函數(shù)用加分號構成
表達式句表達式加分勺構成
句空句只有一個分號的句
合句花括號括起來的句
分if()~else~條件分支句
流支
svitch多分支句
程移
控break,continue,return,goto無條件移句
制vhi1e()~當循
循
句do~\^hi1e()直到型循
for()~for循
號句以上句添加號,構成號句,
C句的分
函數(shù)用句函數(shù)用加分號構成
的
相
成
行
序
一
句
的
句
定:敘述捷方便,-
句
為
分凡以后在法形式中出的‘
流
支
句
程
移
控
句'一,均指以上表中的各旬
制
循句◎
for()for循
號句以上句添加號,構成號句,
一、空句與合句
空句:只有一個分號的句,屬于不行任
何操作的句。
掉入字符流中的空白、回行和制表符的
句。循體是一個空句:
vhi1e((c=getchar())=''IIc='\n'IIc='\t')
算字符串的度句,其循體是一個空句:
for(i=0;a[i]!='\0';i++);
合句:在程序中用大括號括起來的若干
句成合句。一般形式:
?行句可以是
數(shù)據(jù)明部分;句、構造句,
可以是合句°
行句部分;?在合句內(nèi)部定
的量,其作用域
限于合句的
內(nèi)部;
t.LFinwiiase?0第二—早35c
例[1]:比a,b的大小,且把大者量X,小的
量y,并打印°
#incltide<stdio.h>
voidnain(){
inta,b,x,y;
a=2;b=3;運行果:
if(a>b){
x=a;y43;x=3y=2
)
else{
x4;y=a;
printf("x=%ly=%i\n,x,y);
畫@1431,LILcrip;自
二、條件句(if)
1.兩基本形式:
基本形式1:
if(表達式)句1
基本形式2:
if(表達式)句1
例[2]:比a,b的大小,且把大者量x,小
的量y,并打印°
#include<stdio.h>
voidnain(){
inta,b,x,y;a=2;b=3;
if(a>b){
x=a;y=b;運行果:
)x=3y=2
else{
x=b;y=a;
}
printf("x=%ly=%i\n,x,y);
2.if句的嵌套
(1)在基本形式1的else后的句2位置
嵌套基本形式1句°
if(表達式1)句1基本形式i:
if(表達式)句1
elseif(表達式2)句2
else句2
基本形式2:
if(表達式)句1
elseif(表達式n)句n
else句n+1;
2.if句的嵌套
(2)在基本形式1的句1位置嵌套基本
形式1。
if(表達式1)基本形式1:
if(表達式)句1
if(表達式2)
else句2
if(表達式2)句1基本形式2:
else句2if(表達式)句1
else句3
else句4
2.if句的嵌套
(3)在基本形式1的句1位置嵌套基本形式2
if(表達式1)基本形式1:
if(表達式)句1
if(表達式2)句1else句2
else句2基本形式2:
if(表達式)句1
else究竟與哪一個if配?
基本形式1:if(表達式)句1else句2
基本形式2:if(表達式)句1
注意:
?法定else是與它前面最接近的沒
有配的if配;
?入if句后,不管其嵌套有多
最多只行其中的一個句°
例[3]:根據(jù)學生的考分,來判斷劃分成的
'良'及格和不及格,分用5,4,3,2來
表示,且按如下劃分:100955
94804
79603
5902
完整的源程序如下:
t.LFinwiiaseA第三章
voidnain(){
intsnuniscore;chargrade;
scanf("%1%1",&snim)&core);
if(score>94)
?分的形式,
grade='5';便于,便于°
elseif(score>79)
?else是與它前面最接
grade=4,;
近的沒有配的if配
elseif(score>59)
grade=3,;?入if句后至多行
其中的一個句,即使嵌
else
套形式也不例外;
grade=2,;
printf("%i9fe\nsnumgrade);
us.|;(
1)(
三、多分之句(switch)
svdtch句形式:功能:根據(jù)表
svitch(表達式){達式的是否
與某常量表達
case常量表達式1:句1式i相同,來
case常量表達式2:句2行若干
句中的一個
句或一個句
序列。若要真
case常量表達式n:句n正起到多分支
[default:句n+1行功能
,配合使用
break句
真正能起到多分支行功能的形式:
s\Aitch(表達式){
case常量表達式1:句1;break;
case常量表達式2:句2;break;
case常量表達式n:句n;break;
[defalt:句n+1]
}break句用于JLEswitch
句的行,跳出switch相
明:
svitch(表達式){?表達式和常量表達式i要求是
case常量表達式1:整形或字符形,且兩者型相
句1;break;同;
case常量表達式2:?常量表達式i的必互不相
同,它只起相當于句入口
句2;break;
號的作用,沒有條件判斷分
支行的功能;
case常量表達式n:
?行若常量表達式i的與
句n;break;
表達式相等,就序行其后
[defalt:
的句,否行defalt后
句n+1]
的句n+1;
>0第二-早-sfe
,^入:A
voidnain(){出:gracje>g5
chargrade;grade>75
scanf("9fe",tirade);grade>60
switch(grade){grade<60
case'A:printf("grade>85\n");err°r?
case'B':printf("grade>75\n");
case'C':printf("grade>60\n");
case':printf("grade<60\n");
default:printf("error!");
t.LFinwiiase>0第二-早-sfe
?若要真正起到多分支判斷行功能,
在其后加break句°
voidnain(){入:A
chargrade;出:grade>85
scanf("9fc",tirade);
svdtch(grade){
case'A:printf(grade>85\n");break;
case'B':printf(grade>75\n");break;
case'C':printf(grade>60\n");break;
case'El:printf(grade<60\n");break;
default:printf(error!"):
IL
bqjla?u?@mHe電濡【口且
0—.sfc
t.LFinwiiase?第二早
?多個case可以共用一行句
voidmin(){.
入:A
chargrade;口
&出Hl:grade>o8c5
scanf("%",(%rade);
swtch(grade){
case'A:
case'B1:
case'C1:printf("grade>60\n");break;
case']J:printf("grade<60\n");break;
defaultprintf("error!");
翳出
IJ“%」£[.i
例同模袖珍算器的加成乘除四運算程,
入數(shù)據(jù),并按算式算果
voidmin(){
doublex,y;charoperate;
scanf("%f",&c);
vdhi1e((operate=getchar())[='='){
scanf("%f",;
swtch(operate){
case'+':x+=y;break;
case'-':x-=y;break;
case':x*=y;break;
case'/':x/=y;break;
})□人
printf("7£\n',x);10.8+0.13*10=
口出:109.300000
voidnnin(){:若去掉break
doublex,y;句行果將如何?
charoperate;
scanf("%f",&c);
vhi1e((operate^etchar())!=’='){
scanf("%f",;
swtch(operate){
case'+':x+=y;break;
case1-':x-=y;break;
case':x*=y;break;
case'/':x/=y;break;
}}□人:
}—^0rO10
---us
bqi由?UBLJ%bi.c-Tiui
voidmin(){
doublex,y;charoperate;
scanBH□rr/l£"c
vJhi11明三個:
sc;1)S\Mtch句的用;
S3
2)數(shù)據(jù)的入與取數(shù)據(jù)技巧(入
沖區(qū)概念);
3)程序的運算是一步步行的,相
當于算器,沒有運算符先
理功能。
printf(%\n",x);
四、循句
(1)當循(Wiile句)
vhi1e(表達式)句
特點:先判斷后行,它
循體可能一次也不
行。通常用于事先不能確
定循次數(shù)的情況。
例[5]求£"。源程序如下:
n-1
#include<stdio.h>循控制量:在表達式中出
voidnain(){的量稱循控制量°
inti,sum=0;必注意的幾個:
i=1;A①循控制量必有正確
\4iile(i<=100){的初;
②在循體內(nèi)有改其
句;
③其的改使得表達式
printf("%1\n",sun^;的最向于零(循束
條件),否將形成死循°
100
例[]求£〃。源程序如下:
5口出口果旦5050
n-1
#include<stdio.h>
?-注意:循體如果包
voidmin(){
含一個以上的句,
inti,sumO;
用花括號括起來
i=1;
\4iile(i<=100){1?,以合形式出,
sum=sumn;若不加花括號,
i++;\4ii1e句的范只到
)岫ile后面的第一個
printf("%1\n",sun^;
句。
(2)直到型循(do?岫ile句)
do
句
\Ahile(表達式);
特點:先行后判斷,循
體至少行一次。適用
于循體至少行一次,
且次數(shù)不確定的情況°
100
例[]求£"
5。源程序如下:口出口果旦5050
n-1
#include<stdio.h>k明:do?\Ahi1e
voidnain(){
句與vhi1e句
inti,sum=0;
似,只不是將
i=1;
do{條件表達式AA句
sum=sumH;的始移到了尾部
++;
i,因此循體至少
}vhi1e(i<=100);一
printf("%1\n",sun^;行一次
(3)for循
初始表達式循條件表達式增量表達式
for(表達式1;表達式2;表達式3)句
作用循量初循束條件循量增
表達式、可系表達式、表達式
表達表達式、也可以是
以是與循量無、自增自減
式可數(shù)和字符表達式
的其它表達式,表達式、及
以是,只要其非零
如逗萬表式,就行循體其匕表式
同循體
行由循條件確定°
句行次數(shù)
數(shù)
次只行1次(循體行皿次O
一,它行n+l次)
(11次)
100
例[5]求£"。源程序如下:口出口果旦5050
n-1
voidmin(){
inti,surnrO;
for(i=1;i<=100;i++)sum=sumn;
printf("%i\n",sun^;
For循的行可用當表達式1;
作似描述:vhi1e(表達式2){
i=1;句(循體)
Wiile(i<=100){
sum=sumn;表達式3;
i++;
明:三個表達式可根據(jù)用需要,省略其中的
一個、兩個或全部省略,但其分號必保留。如:
for(;;)句while(1)句
for(i=0;((c=getchar())!=’‘&&c!='\ii'&&c!='\t';)
s[i++]=c;
s[i]=,\(F;
此for循句無表達式3,其功能入字符
到字符數(shù)s中去,直到遇到一個空格或回符
至。表達式3的功能由數(shù)的下表達式
例[8]算入正文中字符個數(shù),行數(shù)及個數(shù)°
是一串不含有空格、行符或制表符的字符串°
★通置狀志,可以使求解的算法化支
#include<stdio.h>//字符行.c
#defineYES1//在中1
#defineND0//不在中0
voidnain(){
intc,nl,nwnc,inword;
nl=nv?ic=O;inw)rd=N35//累力口器置0,累乘器置1°
//入字符按要求分理并判斷入是否
也A第三章
vhi1e((c=getchar())!=ECF){入:countlines/
words/
”C;AD
if(c='\n')+-H11;出:2318
if(c='IIc='\n'IIc='\t')
inw3rd=N3j
elseif(inwrd==N3){
inword=^ES;++nw
printf("%1%i%1\n",nl,nv^nc);
............三OS4遍
bqj厘@u3lq“M,£k居I
例[9]用牛迭代法求解方程°
牛迭代法求解程:Y
①一個接近于x的近似根xl;
②通xl求出f(xl);
③f(xl)作f(x)的切,交X于x2;
可由公式求出x2;
由于:
xl—^2
匕
r(xi)
④通x2求出f(x2),如此重③④°
直到接近真正的根。當兩次求出
的根之差|£1
H根
X/1■足接近于真根,運算束°
f(x)=3A;3—4A:2—5x+13
其中:,
1)已知牛迭代:Xk+i=xk-f(xk)/f\xk)
2)f\x)=9x2-8x-5
3)允差(算精度):當dk=-f(xk)/f\xk)
的小于IE-6,%+1就作方程的解°
4)采用高效的算表達式形式,以提高算速度°
f(x)=3x3-4x2-5x+13=(((3*x-4)*x-5)*x+13)
/'(X)=9X2—8X—5=((9*x—8)*x—5
A第三章
#include<mth.h>★采用精度作循
#defineEPSIE-6束志,是程中常
voidmin(){使用的方法之一★
doublex,d;//d允差
printf("x=");
scanf("%f",&x);
do{
d=-(((3*x-4)*x-5)*x+13)/((9*x-8)*x-5);
x=x-Hd;
}vdhi1e(fabs(d)>EPS);
printf("therootis%\n”,x);
入:x=2
出:therootis-1.548910
I
us?:l(bt,燔濡酊自
(四)循的嵌套
□一個循體內(nèi)又包含另一個完整的循
構,稱循嵌套。內(nèi)循中可以嵌
套循,就是多重循°
口三循(\4iile,do-vhi1e,for)可以
互相多重^套.,可以與分支;-一旬i3
svdtch)構成互相多重嵌套°
口在法相上必注意:全包含不交叉!
在法相上必注意:全包含不交叉!
示例:
do{
if(){
}\4ii1e();
else{
-?
例[10]百翁五;母一----,
三一。百百翁、母、各幾何?
采用枚的算法思想,每一可能的合行判斷°
voidmainQ{果:
02575
intcock,hen,chicken;418
for(cock=0;cock<=100;cock++)78
811
for(hen=0;hen<=100;hen++)
for(chicken=0;chicken<=100;chicken+-F)
if(cock+hen+chicken==l00&&
cock*5+hen*3+chicken/3.0==100)
printf(n%d%d%d\n",cock,hen,chicken);
}
將翁、母、用三個整型量表示,采用匕
重循形成三個量的在100以內(nèi)的各合,
判斷每一*合是否足意要求°找出所
程序需要一百萬次判斷°
voidmain(){果:
02575
intcock,hen,chicken;41878
for(cock=0;cock<=100;cock++)81181
12484
for(hen=0;hen<=100;hen++)
for(chicken=0;chicken<=100;chickenH
if(cock+hen+chicken==100&&
cock*5+hen*3+chicken/3.0:.00)
printf(n%d%d%d\nu,cock,hen,chicken);
■循次數(shù)的算:外循行一次內(nèi)循需要行
100次,依次推,因此內(nèi)循體if句需要一百萬
次判斷。因此有必要考化算法°
voidmain(){
intcock,hen,chicken;
for(cock=0;cock<=100;cock++)
ici次
for(hen=0;hen<=100;hen++)
101次
for(chicken=0;chicken<=100;chicken++)
101次
if(cock+hen+chicken==100&&
cock*5+hen*3+chicken/3.0==100)
printf(n%d%d%d\nn,cock,hen,chicken);
cock數(shù)不會大于:100+5=20
化算法減
少判斷次數(shù):hen數(shù)不會大于:100+3=33
chicken數(shù):100-cock-hen
voidmain(){
intcock,hen,chicken;
for(cock=0;cock<=20;cock++)
for(hen=0;hen<=33;hen++)
for(chicken=0;chicken<=100-cock-hen;chicken++)
if(cock+hen+chicken==100&&
cock*5+hen*3+chicken/3.0==100)
printf(n%d%d%d\n1,cock,hen,chicken);
)
iTDETamTOims?第三章
要求程序按次,同的格式寫,
便于°
voidmain(){
intcock,hen,chicken;
for(cock=0;cock<=20;cock++)
for(hen=0;hen<=33;hen++)
for(chicken=0;chicken<=100-cock-hen;chicken++)
if(cock+hen+chicken==100&&
cock*5+hen*3+chicken/3.0==100)
printf(n%d%d%d\n11,cock,hen,chicken);
)
!L
—@㈱?MLLC電£—
(五)return句
Return句形式:
return(表達式);或return;
功能:
①將程序控制(行流程控制)返回到主
函數(shù)的用。
②在有表達式,將表達式的回到主
I函數(shù)的用。無表達式,用的是
不確定的°
例[11]一函數(shù),返回任一數(shù)的符號。當自量磔勺
大于0返回1;自量期勺等于0返回0;自量
儂勺小于。返回-1°
#include<stdio.h>■在一個函數(shù)中,
intsign(doublex){根據(jù)需要可多
if(x<0)return(-l);置return句,但
elsereturn((x==O)?0:1);最多只行其中的
―k個°
}
voidmain(){
doublea;
scanf(nlfn,&a);
printf(nsign=%d\n",sign(a));口入:-123
□出:sign=-1
(六)break中斷句
break句形式:break;
注意:不能用于循句和s?tch句之外的任何地方
rtr)continils句>第—早
continue句形式:continue;
功能:束本次循,即跳循體中本句
下面尚未行的句,接著行下一次是否
循的判斷°(只能用于循體)
while(){do{for(){
continue;|Mcontinue;continue;
}while();
break與continue句的區(qū)
break是中斷包含break句的最內(nèi)的整個循
句的行,止本循,或sEtch句;
while(){do{for(){switch(){
break;break;break;break;-(
_?
}vyhile();
■continue只是中斷當前循體的本次行,而不是
止整個的循
例[12]求1?指定數(shù)之的素數(shù)。素數(shù)是大于1,且除
了1和它本身外,不能被其它任何整數(shù)除的整數(shù)°
:根據(jù)素數(shù)的定可知
2,3,5,7,11,13,17等是素數(shù)°
1,4,6,8,10,12,14,15不是素數(shù)°
了判斷某數(shù)i是否素數(shù),一個最的法是用
2,3,4,5,…,i-1些數(shù)逐個去除i,看能否除盡
若被其中一個數(shù)除盡了,i不是素數(shù),否(全部除
不盡)i是素數(shù)。當i大,用法,除的次數(shù)
太多°
例[12]求1?指定數(shù)之的素數(shù)。素數(shù)是大于1,且除
了1和它本身外,不能被其它任何整數(shù)除的整數(shù)°
:根據(jù)素數(shù)的定可知
2,3,5,7,11,13,17等是素數(shù)°
1,4,6,8,10,12,14,15不是素數(shù)
根號
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深圳市出租房屋合同書(28篇)
- 湖南信息職業(yè)技術學院2024年單招考試職業(yè)技能測試E組樣題
- 設計方案優(yōu)化函
- 2025年信貸調(diào)整協(xié)商協(xié)議
- 2025年醫(yī)院合同管理策略與優(yōu)化措施
- 2025年互聯(lián)網(wǎng)電商員工保密協(xié)議規(guī)范
- 2025年獵頭項目立項申請報告模范
- 2025年二手住宅帶閣樓出售合同規(guī)范
- 2025年煙膠項目立項申請報告模稿
- 2025年二手房合同糾紛隱患與預防
- 紅色中國風2025靈蛇賀歲
- 教師校園食品安全培訓
- 烈士褒揚課件教學課件
- 公務用車分時租賃實施方案
- 《論語》原文-翻譯-完整版
- 中醫(yī)適宜技術-中藥熱奄包
- 壓瘡的預防和護理
- 《手衛(wèi)生知識培訓》培訓課件
- 算力時代全光網(wǎng)架構研究報告(2024年)
- 2024年江蘇省淮安市中考英語試題卷(含答案解析)
- 2025屆高考作文素材:《黑神話 悟空》高考作文和素材運用
評論
0/150
提交評論