版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第三章句與控制流
內(nèi)容提要:
C句的分句分表
空句與合句空句與合句
條件分支句條件分支句
循控制句與嵌套循控制句
行流程強制移程序示例
程常用技巧流程強制移
第三章句與控制流
C言是一很好的構(gòu)化程序
言,它提供了比FCRIRW、P/SCLE更豐
富的流程控制句,提供了將多個
句合成一個句的合句
C句的分
T函數(shù)用句函數(shù)用加分號構(gòu)成
表達(dá)式句表達(dá)式加分勺構(gòu)成
句空句只有一個分號的句
合句花括號括起來的句
分if()~else~條件分支句
流支
svitch多分支句
程移
控break,continue,return,goto無條件移句
制vhi1e()~當(dāng)循
循
句do~\^hi1e()直到型循
for()~for循
號句以上句添加號,構(gòu)成號句,
C句的分
函數(shù)用句函數(shù)用加分號構(gòu)成
的
相
成
行
序
一
句
的
句
定:敘述捷方便,-
句
為
分凡以后在法形式中出的‘
流
支
句
程
移
控
句'一,均指以上表中的各旬
制
循句◎
for()for循
號句以上句添加號,構(gòu)成號句,
一、空句與合句
空句:只有一個分號的句,屬于不行任
何操作的句。
掉入字符流中的空白、回行和制表符的
句。循體是一個空句:
vhi1e((c=getchar())=''IIc='\n'IIc='\t')
算字符串的度句,其循體是一個空句:
for(i=0;a[i]!='\0';i++);
合句:在程序中用大括號括起來的若干
句成合句。一般形式:
?行句可以是
數(shù)據(jù)明部分;句、構(gòu)造句,
可以是合句°
行句部分;?在合句內(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(表達(dá)式)句1
基本形式2:
if(表達(dá)式)句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(表達(dá)式1)句1基本形式i:
if(表達(dá)式)句1
elseif(表達(dá)式2)句2
else句2
基本形式2:
if(表達(dá)式)句1
elseif(表達(dá)式n)句n
else句n+1;
2.if句的嵌套
(2)在基本形式1的句1位置嵌套基本
形式1。
if(表達(dá)式1)基本形式1:
if(表達(dá)式)句1
if(表達(dá)式2)
else句2
if(表達(dá)式2)句1基本形式2:
else句2if(表達(dá)式)句1
else句3
else句4
2.if句的嵌套
(3)在基本形式1的句1位置嵌套基本形式2
if(表達(dá)式1)基本形式1:
if(表達(dá)式)句1
if(表達(dá)式2)句1else句2
else句2基本形式2:
if(表達(dá)式)句1
else究竟與哪一個if配?
基本形式1:if(表達(dá)式)句1else句2
基本形式2:if(表達(dá)式)句1
注意:
?法定else是與它前面最接近的沒
有配的if配;
?入if句后,不管其嵌套有多
最多只行其中的一個句°
例[3]:根據(jù)學(xué)生的考分,來判斷劃分成的
'良'及格和不及格,分用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(表達(dá)式){達(dá)式的是否
與某常量表達(dá)
case常量表達(dá)式1:句1式i相同,來
case常量表達(dá)式2:句2行若干
句中的一個
句或一個句
序列。若要真
case常量表達(dá)式n:句n正起到多分支
[default:句n+1行功能
,配合使用
break句
真正能起到多分支行功能的形式:
s\Aitch(表達(dá)式){
case常量表達(dá)式1:句1;break;
case常量表達(dá)式2:句2;break;
case常量表達(dá)式n:句n;break;
[defalt:句n+1]
}break句用于JLEswitch
句的行,跳出switch相
明:
svitch(表達(dá)式){?表達(dá)式和常量表達(dá)式i要求是
case常量表達(dá)式1:整形或字符形,且兩者型相
句1;break;同;
case常量表達(dá)式2:?常量表達(dá)式i的必互不相
同,它只起相當(dāng)于句入口
句2;break;
號的作用,沒有條件判斷分
支行的功能;
case常量表達(dá)式n:
?行若常量表達(dá)式i的與
句n;break;
表達(dá)式相等,就序行其后
[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)程序的運算是一步步行的,相
當(dāng)于算器,沒有運算符先
理功能。
printf(%\n",x);
四、循句
(1)當(dāng)循(Wiile句)
vhi1e(表達(dá)式)句
特點:先判斷后行,它
循體可能一次也不
行。通常用于事先不能確
定循次數(shù)的情況。
例[5]求£"。源程序如下:
n-1
#include<stdio.h>循控制量:在表達(dá)式中出
voidnain(){的量稱循控制量°
inti,sum=0;必注意的幾個:
i=1;A①循控制量必有正確
\4iile(i<=100){的初;
②在循體內(nèi)有改其
句;
③其的改使得表達(dá)式
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(表達(dá)式);
特點:先行后判斷,循
體至少行一次。適用
于循體至少行一次,
且次數(shù)不確定的情況°
100
例[]求£"
5。源程序如下:口出口果旦5050
n-1
#include<stdio.h>k明:do?\Ahi1e
voidnain(){
句與vhi1e句
inti,sum=0;
似,只不是將
i=1;
do{條件表達(dá)式AA句
sum=sumH;的始移到了尾部
++;
i,因此循體至少
}vhi1e(i<=100);一
printf("%1\n",sun^;行一次
(3)for循
初始表達(dá)式循條件表達(dá)式增量表達(dá)式
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)句
作用循量初循束條件循量增
表達(dá)式、可系表達(dá)式、表達(dá)式
表達(dá)表達(dá)式、也可以是
以是與循量無、自增自減
式可數(shù)和字符表達(dá)式
的其它表達(dá)式,表達(dá)式、及
以是,只要其非零
如逗萬表式,就行循體其匕表式
同循體
行由循條件確定°
句行次數(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循的行可用當(dāng)表達(dá)式1;
作似描述:vhi1e(表達(dá)式2){
i=1;句(循體)
Wiile(i<=100){
sum=sumn;表達(dá)式3;
i++;
明:三個表達(dá)式可根據(jù)用需要,省略其中的
一個、兩個或全部省略,但其分號必保留。如:
for(;;)句while(1)句
for(i=0;((c=getchar())!=’‘&&c!='\ii'&&c!='\t';)
s[i++]=c;
s[i]=,\(F;
此for循句無表達(dá)式3,其功能入字符
到字符數(shù)s中去,直到遇到一個空格或回符
至。表達(dá)式3的功能由數(shù)的下表達(dá)式
例[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),如此重③④°
直到接近真正的根。當(dāng)兩次求出
的根之差|£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)允差(算精度):當(dāng)dk=-f(xk)/f\xk)
的小于IE-6,%+1就作方程的解°
4)采用高效的算表達(dá)式形式,以提高算速度°
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)又包含另一個完整的循
構(gòu),稱循嵌套。內(nèi)循中可以嵌
套循,就是多重循°
口三循(\4iile,do-vhi1e,for)可以
互相多重^套.,可以與分支;-一旬i3
svdtch)構(gòu)成互相多重嵌套°
口在法相上必注意:全包含不交叉!
在法相上必注意:全包含不交叉!
示例:
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(表達(dá)式);或return;
功能:
①將程序控制(行流程控制)返回到主
函數(shù)的用。
②在有表達(dá)式,將表達(dá)式的回到主
I函數(shù)的用。無表達(dá)式,用的是
不確定的°
例[11]一函數(shù),返回任一數(shù)的符號。當(dāng)自量磔勺
大于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只是中斷當(dāng)前循體的本次行,而不是
止整個的循
例[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ù)。當(dāng)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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 籃球租場合同模板
- 2024年品牌代理權(quán)標(biāo)準(zhǔn)協(xié)議模板版
- 2024年先進起重設(shè)備采購與銷售協(xié)議模板
- 2024年度防水堵漏服務(wù)協(xié)議版
- 項目設(shè)計顧問合同模板
- 單日旅行團體客運服務(wù)協(xié)議樣本版
- 香港工程中標(biāo)合同模板
- 建筑設(shè)備采購合同模板
- 2024年度建筑二次施工協(xié)議制定本版
- 自建三層房產(chǎn)買賣合同模板
- 【講座】初中語文部編本教材解讀課件
- 公開課聽課教師簽到表
- 開展新技術(shù)、新項目科室內(nèi)討論記錄
- 主題班會-同學(xué)情教學(xué)課件
- 道德與法治《健康看電視》優(yōu)秀課件
- 泌尿系統(tǒng)完整結(jié)構(gòu)培訓(xùn)課件
- 規(guī)培體表腫物切除術(shù)
- 新教材北師大版高中數(shù)學(xué)必修一 2.3函數(shù)的單調(diào)性和最值 課時練(課后作業(yè)設(shè)計)
- DB32∕T 943-2006 道路聲屏障質(zhì)量檢驗評定
- 四年級(上冊)綜合實踐活動課教學(xué)案(貴州科學(xué)技術(shù)出版社)
- 腹瀉教學(xué)課件
評論
0/150
提交評論