版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章控制結(jié)構(gòu)
3.1C語(yǔ)言的基本語(yǔ)句
3.2數(shù)據(jù)的輸入輸出一
3.3基本控制結(jié)構(gòu)與流程控制語(yǔ)句
3.4選擇結(jié)構(gòu)控制一
3.5Switch控制
3.6循環(huán)控制Illi
3.7輔助控制語(yǔ)句II
3.8程序設(shè)計(jì)舉例
說(shuō)明語(yǔ)句是對(duì)變量或被調(diào)函數(shù)的聲明,不產(chǎn)生機(jī)
器指令,其作用是描述程序中被處理數(shù)據(jù)(變量或函
數(shù))的名稱和類型,供編譯程序使用。說(shuō)明語(yǔ)句可以
出現(xiàn)在程序中任何塊(即函數(shù)或復(fù)合語(yǔ)句)的外面
(稱為外部說(shuō)明)或塊中(稱為局部說(shuō)明)。
例:
inta;/*定義變量a為整型*/
floatz;/*定義變量n為浮點(diǎn)型*/
floatadd(floatx,floaty);/*函數(shù)的聲明*/
一般形式:
例:
x=10后面無(wú)分號(hào),是賦值表達(dá)式,但不是語(yǔ)句
x=10;后面有分號(hào),是賦值語(yǔ)句
國(guó)恒豆
一般形式:
C語(yǔ)言有豐富的標(biāo)準(zhǔn)函數(shù)庫(kù),可提供
各類函數(shù)供用戶調(diào)用調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)可完
成預(yù)先設(shè)定好的操作.
-例如調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)求數(shù)學(xué)函數(shù)值:一
sin(x)、cos(x)、exp(x)(求ex)、
fabs(x)(求x的絕對(duì)值)、log(x).
調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)應(yīng)注意:
(1)要在程序中包含相應(yīng)的頭文件。例如:
#include<stdio.h>
#include<math.h>
#include是編譯預(yù)處理命令,其作用是將
某個(gè)已經(jīng)存在的文件包含到程序中來(lái)。
(2)
有返回值的函數(shù)要作為表達(dá)式的一部分
例:Y=sin(1.7);
在表達(dá)式中調(diào)用函數(shù),實(shí)際上是轉(zhuǎn)去執(zhí)行一段
預(yù)先設(shè)計(jì)好的程序,求出結(jié)果后返回調(diào)用點(diǎn)。
所以函數(shù)的值又叫函數(shù)的返回值。
無(wú)返回值的函數(shù)可作為語(yǔ)句調(diào)用。
例:printf("%d”,a);
調(diào)用它不是為了得到返回值(函數(shù)值),
是為了完成某項(xiàng)任務(wù)。
一般形式為:
它在語(yǔ)法上占有一個(gè)簡(jiǎn)單語(yǔ)句的位置,
執(zhí)行該語(yǔ)句不做任何操作。空語(yǔ)句常用于
循環(huán)語(yǔ)句中,構(gòu)成空循環(huán)。
用一'對(duì)花括號(hào){}將多條語(yǔ)句組合在一■起,在
語(yǔ)法上相當(dāng)于一'條語(yǔ)占O
一般形式:一
注意:“}”后不加分號(hào)
例:{intx,a=3,b=5;
x=a;
a=b;
b=x;
}
\\\\\!/i/國(guó)亙W
3.2數(shù)據(jù)的輸入與輸出
▲C語(yǔ)言無(wú)工/O語(yǔ)句,工/O操作由庫(kù)函數(shù)實(shí)現(xiàn)
^#include<stdio.h>
▲本節(jié)主要介紹用于鍵盤輸入和顯示器輸出的
輸入/輸出庫(kù)函數(shù)
321字符數(shù)據(jù)的輸入與輸出函數(shù)
[■字符輸出函數(shù)putchar。
原形:intputchar(int);
功能:在顯示器上輸出單個(gè)字符一
參數(shù):可以是字符常量、字符型變量或整形
變量,即將一個(gè)整型數(shù)作為ASC工I編碼輸
出相應(yīng)的字符。
返值:正常)為顯示的代碼值;出錯(cuò))為
EOF(-l)
【例】輸出單個(gè)字符。程序運(yùn)行結(jié)果為:
#include<stdio.h>a
mainf)a
<inti=97;
charch='a';
putchar(i);
putcharCXn1);
putchar(ch);
國(guó)恒豆
原形:intgetchar();
功能:從鍵盤上輸入一個(gè)字符,它每被調(diào)用一次,
就從標(biāo)準(zhǔn)輸入設(shè)備上取一個(gè)字符,
返值:正常,返回讀取的代碼值;出錯(cuò),返回EOF(-1)
通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值
語(yǔ)句。
例:
charc;
c=getchar();
國(guó)應(yīng)豆
【例3.2】輸入單個(gè)字符。
#include<stdio.h>
main()
<intch;
ch=getchar();
putchar(ch);
\—―—I程序運(yùn)行結(jié)果如下:
a/
a
\\\\\\///W回
322格式輸出函數(shù)
1.格式輸出函數(shù)printf()
原形:intprintf(“格式控制字符串”,輸出項(xiàng)列表)
功能:按指定格式向顯示器輸出數(shù)據(jù)
返值:正常,返回輸出字節(jié)數(shù);出錯(cuò),返回EOF(?:l)
2.格式控制字符串
包含兩種信息
A格式說(shuō)明:用于指定輸出格式
%[flags][width][.prec][F|N|H|L][type]
標(biāo)志輸出最小寬度精度長(zhǎng)度類型
>普通字符或轉(zhuǎn)義序列:原樣輸出
3.輸出項(xiàng)表列:要輸出的數(shù)據(jù)(可以沒(méi)有,多個(gè)時(shí)以
分隔)
例:
輸出結(jié)果:
inti=97;
i=97,a
printf("i=0/odf°/oc\n'\i,i);
兩個(gè)輸出項(xiàng)都是變量i,但以不同的格式輸出,
一'個(gè)是輸出的整型數(shù),一個(gè)輸出的是字符a.其
格式是由,%d與%c控制的.
FKI回
格式說(shuō)明:用于指定輸出格式
%[flags][width][.prec][F|N|H|L][type
標(biāo)志輸出最小寬度精度長(zhǎng)度類型
Flags:標(biāo)志字符。
常用的有:_
-:為左對(duì)齊,否則右對(duì)齊
+:正數(shù)輸出十,負(fù)數(shù)輸出-
_空格:正數(shù)輸出空格,負(fù)數(shù)輸出?!
Width:寬度指示符。用十進(jìn)制數(shù)來(lái)設(shè)置輸出值的最
少輸出個(gè)數(shù),少則左補(bǔ)空格,多則按實(shí)際輸出。
而r<-iF^~Irm
格式說(shuō)明:用于指定輸出格式
%[flags][width][.prec][F|N|H|L][type
標(biāo)志輸出最小寬度精度長(zhǎng)度類型
.prec:精度指示符。用小數(shù)點(diǎn)加十進(jìn)制正整數(shù)構(gòu)
成,用來(lái)限制輸出數(shù)的精度。對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)
后位數(shù)(四舍五入);對(duì)字符串指定實(shí)際輸出位數(shù)
[F|N|h|L]:長(zhǎng)度修飾符
Ff遠(yuǎn)程指針地址Nf近程指針地址
hf短整數(shù)據(jù)的值Lf長(zhǎng)整(雙精度)數(shù)據(jù)的值
荷r<_iFKIrm
[type]:格式字符
d以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號(hào))
O以8進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符O)
x(X)以16進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符Ox)
u以無(wú)符號(hào)10進(jìn)制形式輸出整數(shù)
c以字符形式輸出一個(gè)字符
s輸出字符串
f以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)
e(E)以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),小數(shù)位數(shù)為6位
g(G)選用或%)e格式中輸出寬度較短的一種格式
%百分號(hào)
說(shuō)明:
格式字符與輸出項(xiàng)個(gè)數(shù)應(yīng)相同,按先后順序一一對(duì)應(yīng)
輸出轉(zhuǎn)換:格式字符與輸出項(xiàng)類型不一致,自動(dòng)按指定格式輸出
例inta=1234;
float4123.456;
charch=H;
printf(“%8d,%2d\n",a,a);
printf("%f,%8f,%8.lf,%.2f,%.2e\n”,fXf£f);
printf("%3c\n\ch);
運(yùn)行1234,1234
結(jié)果:123.456000,123.456000,123.5J23.4691.23e+02
a
國(guó)國(guó)
■【例3.3]printf函數(shù)的使用。
/*源程序名:CH0303.C*/
#include<stdio.h>
■/*01*/main()
■/*02*/{
■/*03*/inta=15;
■/*04*/floatb=123.1234567;
■/*05*/doublec=12345678.1234567;
■/*06*/chard=,p,;
,,
■/*07*/printf("a=%df%5df%of%x\nfarafafa);
,,,,
■/*08*/printf(b=%f/%lfr%5.4lff%e\nfb/bfbrb);
,
■/*09*/printfCc=%lfz%fz%8.4lf\n"zczc/c);
,,
■/*10*/printf("d=%c/%8c\n/dzd);
卜=15-15」?,£
J)=123.123459.123.123459.123.1235.1.231235e+002
c=12345678.123457,12345678.12345?.12345678.1235
H=P.P
國(guó)應(yīng)豆
3.2.3格式輸入函數(shù)
1.格式輸入函數(shù)scanf()
一般形式:scanf("格式控制字符串",地址表列)
功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指
定的存儲(chǔ)單元中,并按回車鍵結(jié)束
返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)
地址列表:變量的地址,常用取地址運(yùn)算符&——
例:scanf(“%d%d%f\&a,&b,&c);
控制字符串說(shuō)明了需輸入數(shù)據(jù)的類型,兩個(gè)整型數(shù)和一個(gè)
實(shí)型數(shù)。
&a,&b和&c是變量a,b和c的地址。
2.格式控制字符串
%[*][width][F|N][h|L]type
輸入賦值抑制字符,輸入數(shù)據(jù)但不賦值一
例:scanfC'%d%>*d%>d”,&a,&b);
當(dāng)輸入為:567時(shí),把5賦予a,6被跳過(guò),
7賦予b。
國(guó)應(yīng)豆
%[*]|[width][F|N][h|L]type
輸入賦值抑制字符,輸入數(shù)據(jù)但不賦值
寬度指示符,表示最多可輸入的字符個(gè)數(shù)。
EE豆
%[*][width][F|N][h|L]type
輸入賦值抑制字符,輸入數(shù)據(jù)但不賦值
寬度指示符,表示最多可輸入的字符個(gè)數(shù)。
地址大小修飾符。F^farNfnear
%[*][width][F|N][h|L]type
輸入賦值抑制字符,輸入數(shù)據(jù)但不賦值
寬度指示符,表示最多可輸入的字符個(gè)數(shù)。
地址大小修飾符。F^farN-^near
輸入數(shù)據(jù)類型。hl短整型,長(zhǎng)整或雙精度
\\晶國(guó)怎回
%[*][width][F|N][h|L]1type
type是必須的,表示輸入后轉(zhuǎn)換的數(shù)據(jù)類型。
d(D)十進(jìn)制整數(shù)
0(0)八進(jìn)制整數(shù)
x(X)十六進(jìn)制整數(shù)
i(I)自動(dòng)根據(jù)數(shù)頭分辨十、八、十六進(jìn)制
u(U)無(wú)符號(hào)十進(jìn)制整數(shù)[_1匚―L~j—
c單個(gè)字符
s字符串
f(e,g,G)實(shí)數(shù)
n不輸入數(shù)據(jù),將已讀入的字符輸送到對(duì)應(yīng)的地址中
%百分號(hào)
說(shuō)明:
(工)scanf函數(shù)中沒(méi)有精度控制,如:
scanfC'%S.Zf'^&a);是非法的。
(2)scanf的格式控制字符串中普通字符是不顯示的,
而是規(guī)定了輸入時(shí)必須輸入的字符。
(3)輸入分隔符的指定
?一般以空格、TAB或回車鍵作為分隔符
?其它字符做分隔符:格式串中兩個(gè)格式符間
字符
u9
例scanf(a=%d9b=%d5c=%d\&a9&b9&c);
輸入a=12,b=249c=36J
國(guó)國(guó)
例:輸入圓的半徑,輸出圓的周長(zhǎng)和面積。
分析:
L定義實(shí)型變量r、1、s用于存放半徑、周長(zhǎng)、面
—積;
2.調(diào)用輸入函數(shù),輸入r:一
3.分別利用周長(zhǎng)公式和面積公式求出1、s;-
4.調(diào)用輸出函數(shù)輸出1、So
EE豆
程序:
#include<stdio.h>
main()
(
float咽s;
scanf(n%f;&r);
l=2*3.14159*r;
s=3.14159*r*r;
printf(u\nl=%8.4f\l);/*周長(zhǎng)占8個(gè)字符寬,4位小數(shù)*/
printf(u\ns=%8.4f\s);/*面積占8個(gè)字符寬,4位小數(shù)*/
宜國(guó)應(yīng)亙
例:從鍵盤輸入一個(gè)小寫字母,用大寫形式輸出
該字母。
分析:
1.輸入小寫字母存入變量a;
2.轉(zhuǎn)換成大寫a=a-32;
3輸出a
EE豆
程序:
#include<stdio.h>
main。
<
chara;
printf(lvInputalowercaseletter:11
a=getchar();
a=a-32;
printf(,l(¥bc\rT,a);
}
3.3基本控制結(jié)構(gòu)與流程控制語(yǔ)句
3.3.1三種基本結(jié)構(gòu)
?結(jié)構(gòu)化程序設(shè)計(jì)
■基本思想:任何程序都可以用三種基
本結(jié)構(gòu)表示,限制使用無(wú)條件轉(zhuǎn)移語(yǔ)
句(goto)
■結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌
套箱成的程序叫~
■優(yōu)點(diǎn):結(jié)構(gòu)清晰,易讀,提高程序設(shè)
計(jì)質(zhì)量和藪率
3.4選擇結(jié)構(gòu)控制
問(wèn)題提出:解題的步驟:
回r<-iFKIrm
3.4.1if語(yǔ)句
if語(yǔ)句有三種形式:?jiǎn)畏种нx擇if語(yǔ)句、
雙分支選擇if語(yǔ)句、多分支選擇if語(yǔ)句。
1.單分支選擇if語(yǔ)句
if(表達(dá)式)語(yǔ)句
【例3.5】求兩個(gè)數(shù)中的較大值。
輸入兩個(gè)數(shù)a,b。把a(bǔ)先賦予變量max,再用if
語(yǔ)句判別max和b的大小,如max小于b,則把b賦
予max。因此max中總是大數(shù),最后輸出max的
值。
#include<stdio.h>
main()
inta,bfmax;
printf("\ninputtwonumbers:");
scanf('%d/cT,&a,&b);
max=a;
if(max<b)max=b;
<
printf("max=Vbd"zmax);
}
思考:如何用條件表達(dá)式來(lái)解決此問(wèn)題?
EE豆
2.雙分支if語(yǔ)句
if(表達(dá)式)
語(yǔ)句1;
else
語(yǔ)句2;
控制流程:
■【例3.6】求兩個(gè)數(shù)中的最大值。
■程序的功能是輸入兩個(gè)數(shù)a,b。用if語(yǔ)句判別a和
b的大小,如a大于b,則輸出a。否則把b輸出。
#include<stdio.h>
main()
<
intafb;
printf("\ninputtwonumbers:
scanf(“d%ci”,&a,&b);
if(a>b)
printf(,,max=<%)d\n,,,a);
else
printf("max=<Vbd\n",b);
}
\\\\\/I//回
3■多分支選擇結(jié)構(gòu)
if(表達(dá)式1)
語(yǔ)句1;
elseif(表達(dá)式2)
語(yǔ)句2;
elseif(表達(dá)式3)
語(yǔ)句3;
■■■
elseif(表達(dá)式m)
語(yǔ)句m;
else
語(yǔ)句
n;II
仲,向rwi
例4?3:計(jì)算分段函數(shù)。r
JV<1
面ran
#include<stdio.h>
main()
{floatx,y;
printf(nenterx:n);
scanf(n%f
if(x<=l)y=x+5;
elseif(x<=10)y=2*x;
elsey=3/(x-10);
n!
printf(x=%.2f9y=%.2^n\x9y);
)
合國(guó)應(yīng)豆
?說(shuō)明:
?if后面的表達(dá)式類型任意
?語(yǔ)句可以是復(fù)合語(yǔ)句
?if(x)oif(x!=O)
if(!x)=if(x=O)
rg小考慮下面程序的輸出結(jié)果:
#include<stdio.h>
main()
{intx,y;
scanf(“%d,%d”,&x,&y);
if(x>y)q
{x=y;y=x;}
else
{x++;y++;}
printff6%d,%d\n”,x,y);
EE豆
3.4.2if語(yǔ)句的嵌套
當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句
時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。
例如:
EE豆
例輸入兩數(shù)并判斷其大小關(guān)系
^include<stdio.h>
main()
{intx,y;運(yùn)行Enterintegerx,y:12,23」
printf(nEnterintegerx,y:");X<Y
scanf("%d,%d”,&x,&y);Enterintegerx,y:12,6J
X>Y
if(x!=y)Enterintegerx,y:12,12J
Hn
if(x>y)printf(X>Y\n);X==Y
elseprintf(nX<Y\nn);
else
printffX==Y\n");
說(shuō)明:
if?else配對(duì)原則:缺省{}時(shí),else總
是和它上面離它最近的未配對(duì)的if配對(duì)
「if(……)
「if(……)
rif(??????)
lelse......
Ielse......
else......
國(guó)恒豆
例:if(a==b)
y^-4f(b=c)
(printff'a==b==c'');
else
|printff'a!=b'”
修改:if(a==b)
{if(b=c)
printffE==b==c'');
)
else
printf("a!=b");
實(shí)現(xiàn)if?else正確配對(duì)方法:加{}
向國(guó)白豆
J考慮下面程序輸出結(jié)果:
main()
{intx=100,a=10,b=20;
intvl=5,v2=0;
if(a<b)
if(b!=15)
結(jié)果:
if(!vl)-1
x=l;
else
if(v2)x=10;
x=-l;
printf(“%d”,x);
國(guó)恒豆
3.5多分支選擇根據(jù)表達(dá)式的不同值
,選擇不同的程序分
1、語(yǔ)句形式支,又稱開(kāi)關(guān)語(yǔ)句。
switch
節(jié)
數(shù)值型
case?;?/p>
case常字符型
case常量表達(dá)二
常量表達(dá)式的值必須
case常量表迅互不相同,否則執(zhí)行
[default:語(yǔ)句]時(shí)將出現(xiàn)矛盾,即同
一■個(gè)開(kāi)關(guān)值,將對(duì)應(yīng)
多種執(zhí)行方案。
例4-4:假設(shè)用0、1、2.....6分別表示星期日、星期
一......星期六?,F(xiàn)輸入一個(gè)數(shù)字,輸出對(duì)應(yīng)的星期幾
的英文單詞。如果輸入3,輸出“Wednesday”。
#include<stdio.h>
程序運(yùn)行情況如下:
voidmain()
{intn;3/
scanf(n%dn,&n);
Wednesday
switch(n)
{case0:printf(nSunday\nn);Thursday
case1:printf(nMonday\nH);
Friday
case2:printf(nTuesday\nn);
case3:printf(uWednesday\nn);Saturday
case4:printf(nThursday\nn);
error
case5:printf(nFriday\nH);
case6:printf(HSaturday\nu);
default:printf(nErrorn);
耳W
在“switch”語(yǔ)句中,“case常量表達(dá)式”只
相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相
等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)
的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句,因此會(huì)
繼續(xù)執(zhí)行所有后面語(yǔ)句的情況。
為此,C語(yǔ)言提供了一種break語(yǔ)句,其功能是
可以跳出它所在的switch語(yǔ)句。
國(guó)應(yīng)豆
程序運(yùn)行情況如下:
將上面的例4-4修改如下:
3/
#includeustdio.hn
Wednesday
voidmain()
{intn;
scanf(n%dn,&n);
switch(n)
{case0:printf(nSunday\nu);break;
case1:printf(nMonday\nu);break;
case2:printf(nTuesday\nn);break;
case3:printf(nWednesday\nu);break;
case4:printf(nThursday\nn);break;
case5:printf(MFriday\nM;break;
case6:printf(nSaturday\nn);break;
default:printf(uErroru);
}
直國(guó)w
說(shuō)明:
(工)在case后的各常量表達(dá)式的值不能相同,否
則會(huì)出現(xiàn)錯(cuò)誤。
(2)多個(gè)case語(yǔ)句可以共用一組執(zhí)行語(yǔ)句。
switch(grade)
{case'A':
case'B':
case!C!:printf(ngrade>=60\nn);break;
default:printf(1!grade<60n);
)
⑶各case和default子句的先后順序可以變動(dòng),
而不會(huì)影響程序執(zhí)行結(jié)果。
(4)default語(yǔ)句可以省略不用。
(5)switch語(yǔ)句可以嵌套,break語(yǔ)句只跳出它所
在的switch語(yǔ)句。
眄voidmain()
{intx=l,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:a++;break;運(yùn)行結(jié)果:a=2,b=l
case1:b++;break;
)
case2:a++;b++;break;
case3:a++;b++;
)
printf("\na=%d,b=%d",a,b);
回國(guó)回亙
例4-5根據(jù)輸入的學(xué)生成績(jī)判斷等級(jí)。
fE0<score<60
口60<score<70
等級(jí)|C
70<score<80
B80<score<90
A90<score<100
回國(guó)回亙
scorescore/10
使用
0,123,4,5
0——59switch
解
的
題
60——69
關(guān)
鍵
,
70——79分
過(guò)
通
到
找
80——89析
式
達(dá)
90——1009,10表
問(wèn)
將
default,
成
題
分
情
幾
種
況
0
#include<stdio.h>case4:
main()case5:y='E';break;
case6:y=vD)break;
intx;case7:y=,C,;break;
chary;case8:y=B;break;
printfCAnx:");case9:
scanf(”W,&x);case10:y=,A,;break;
switch(x/10){default:y='
case0:1——-4-——[-
}
case1:if(y=='')printf("Scoreerror!");
case2:elseprintf(",Grade=%c,,,y);
case3:)
EE豆
switch^Uelse-ifW比較
■else-i£比switch的條件控制更強(qiáng)大一'些
?else-i£可以依照各種邏輯運(yùn)算的結(jié)果進(jìn)行流程控制
?switch只能進(jìn)行==判斷,并且只能是整數(shù)判斷
■switch,匕else-if更清晰
■兩者都要盡量避免用得過(guò)多、過(guò)長(zhǎng),尤其不要嵌
套得太多
?它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不
易維護(hù),易出錯(cuò)
3.6循環(huán)控制
C語(yǔ)言有while、do-while、和for語(yǔ)句三種循
環(huán)結(jié)構(gòu)語(yǔ)句。
3.6.1while語(yǔ)句
執(zhí)行流程:
一般形式:
while(表達(dá)式)
循環(huán)體語(yǔ)句;
特點(diǎn):先判斷表達(dá)式,
后執(zhí)行循環(huán)體
如果表達(dá)式的值一開(kāi)始就為0,
則語(yǔ)句一次也會(huì)被不執(zhí)行。
100
例用while循環(huán)求£n
n=1
回國(guó)回亙
程序運(yùn)行結(jié)果為:5050
*ch5_2.c*/
finclude<stdio.h>循環(huán)條件
ain()
{inti,sum=O;
循環(huán)初值-i=l;
while(^=100
=sum+i;
循環(huán)變量增值循環(huán)終值
}、
printf(n%dn,sum);
)循環(huán)體
EE豆
例顯示1?10的平方
/*ch5_21.c*/運(yùn)行結(jié)果:
^include<stdio.h>1*1=1
2*2=4
main()
3*3=9
{inti=1;4*4=16
while(i<=10)5*5=25
{printf("%d*%d=%d\n",i,i,i*i);6*6=36
i++;7*7=49
8*8=64
9*9=81
10*10=100
國(guó)應(yīng)豆
3.6.2do-while語(yǔ)句
一般形式:執(zhí)行流程:
do
循環(huán)體語(yǔ)句;
while(表達(dá)式);
特點(diǎn):先執(zhí)行循環(huán)體,
后判斷表達(dá)式
至少執(zhí)行一次循環(huán)體
100
例用do?while循環(huán)求£n
n二1
3.6.3for語(yǔ)句
for語(yǔ)句是C語(yǔ)言中最有特色的語(yǔ)句,使用更靈
活,功能比while循環(huán)更強(qiáng)。
一般形式:
for([表達(dá)式]];[表達(dá)式2];[表達(dá)式31)
循環(huán)體語(yǔ)句
國(guó)回豆
Ofor語(yǔ)句一般應(yīng)用形式:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)
(
循環(huán)體語(yǔ)句;
}
100
例用for循環(huán)求工匕
〃=1______
^include<stdio.h>
main()
{inti9sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf(n%d,\sum);
for語(yǔ)句控制流程如圖求解農(nóng)達(dá)式I
表達(dá)式2
例如:
for(i=l;i<=100;i++)
sum=sum+i;
先給i賦初值1,判斷i是否
求解衣達(dá)式3
小于等于100,若是則執(zhí)
行語(yǔ)句,之后值增加1。再
重新判斷,直到條件為假,IbriA句的卜
即i>100時(shí),結(jié)束循環(huán)。
而E,自rwi
(1)for循環(huán)中的“表達(dá)式1(循環(huán)變量賦初
值)”、“表達(dá)式2(循環(huán)條件)"和“表達(dá)式3(循
環(huán)變量增量)”都是選擇項(xiàng),即可以缺省,但
不能缺省。
(2)省略了,,表達(dá)式1(循環(huán)變量賦初值)”,
表示不對(duì)循環(huán)控制變量賦初值。
(3)省略了“表達(dá)式2(循環(huán)條件)、則不做其
它處理時(shí)便成為死循環(huán)。
(4)省略了“表達(dá)式3(循環(huán)變量增量)”,則不
對(duì)循環(huán)控制變量進(jìn)行操作,這時(shí)可在語(yǔ)句體中加
入修改循環(huán)控制變量的語(yǔ)句。
國(guó)恒豆
逗號(hào)表達(dá)式
逗號(hào)運(yùn)算符的主要應(yīng)用就在for語(yǔ)句中。for語(yǔ)句中的表達(dá)
式1和表達(dá)式3可以是逗號(hào)表達(dá)式,特別是有兩個(gè)循環(huán)變量參
與對(duì)循環(huán)的控制時(shí)。表達(dá)式1和表達(dá)式3為逗號(hào)表達(dá)式,將使程
序顯得非常清晰。
例:for(i=l,j=10;i<=j;i++,j-)
EE豆
例:求1/100+2/99+-.+1
floats=0.0;
for(i=l,j=100;i<=j;i++,j—)
s=s+i/j;
mBZ12S回
選擇三種循環(huán)的一般思路
-如果循環(huán)次數(shù)已知,用for
■如果循環(huán)次數(shù)未知,用while一
■如果循環(huán)體至少要執(zhí)行一次,用do-while
SUFE回
3.6.4循環(huán)嵌套
■在循環(huán)體語(yǔ)句中又包含有另一1個(gè)完整的循
環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。嵌套在
循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循
環(huán)體稱為外循環(huán)。如果內(nèi)循環(huán)體中又有嵌
套的循環(huán)語(yǔ)句。則構(gòu)成多重循環(huán)。
■While、do-while、for三種循環(huán)都可以互
相嵌套。
執(zhí)行語(yǔ)句段:
fdr(i=0;i<6;i++)
for(j=0;j<6;j++)printfCc%3d%3d”,i,j);
putchar('\n');
輸出結(jié)果:000102030405
101112131415
202122232425
303132333435
404142434445
505152535455
回國(guó)回亙
循環(huán)嵌套舉例
問(wèn)題:輸出圖形
*
**
***
****
EE豆
分析:一共5行,每行的inti,j;
數(shù)目與行號(hào)相同
for(i=1;i<=5;i++)
算法:行用i表示,{for0=1;j<=i;j++)
for(i=l;i<=5;i++)putcharC*1);
(輸出i個(gè)田
printf("\n");
}
}
國(guó)恒豆
3.7輔助控制語(yǔ)句
3.7.1break語(yǔ)句
■功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并
跳出循環(huán)體或開(kāi)關(guān)體
■說(shuō)明:
?break只能終止并跳出最近一層的結(jié)構(gòu)
?break不能用于循環(huán)語(yǔ)句和switch語(yǔ)
句之外的任何其它語(yǔ)句之中
例break舉例:輸出圓面積,面積大于100時(shí)停止
^include<stdio.h>
^definePI3.14159
mainQ
intr;
floatarea;
for(r=l;r<=10;r++)
{area=PI*r*r;
if(area>100)
break;
nn
printf(r=%d9area=%.2f\n9r9area);
E/扇rwi
3.7輔助控制語(yǔ)句
3.7.2continue語(yǔ)句
語(yǔ)句形式為:continue;
■功能:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中
尚未執(zhí)行的語(yǔ)句,進(jìn)行下一次是否執(zhí)
行循環(huán)體的判斷
■僅用于循環(huán)語(yǔ)句中
例求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值
include<stdio.h>
ain()
{inti,num=O,a;
floatsum=0;
for(i=0;i<10;i++)
{scanf("%d\&a);
if(a<=0)continue;
num++;
sum+=a;
nn
printf(%dplusinteger'ssum:%6.0f\n9num9sum);
print"Meanvalue:%6.2f\n”,sum/num);
向回
3.7.3非結(jié)構(gòu)化語(yǔ)句之goto
goto被稱為無(wú)條件轉(zhuǎn)移語(yǔ)句。
goto標(biāo)號(hào);
它最大的好處就是可以一下子跳出多重循環(huán),
而break卻不能做到這點(diǎn)。
3.8程序設(shè)計(jì)舉例
典型例題分析
1.“累加”類型問(wèn)題。
例:求累加和1+2+3+…+100
基本方法:
兩個(gè)變量:累加和,當(dāng)前項(xiàng)
(1)先給累加和賦初值(一般為0);
(2)用循環(huán)語(yǔ)句實(shí)現(xiàn)累加;
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量改變)
若循環(huán)次數(shù)不確定可用while或do-while循環(huán)語(yǔ)句
(3)循環(huán)體語(yǔ)句的設(shè)計(jì)。
累加和當(dāng)前值=累加器原值+當(dāng)前項(xiàng);
rw-i亙EE豆
參考程序:思考
求偶數(shù)和
#include<stdio.h>2+4+6+...+100
main()
{intk,s;
s=0;---------?累加器賦初值
for(k=l;k<=100;k++)
s=s+k;----------?累加
printf(ns=%ld''⑼;
回國(guó)回亙
71111一
例用一P1——+———+.........公式求不的近似值,直到
4357
最后一項(xiàng)的絕對(duì)值小于10一6為止
累加問(wèn)題:pi存放累加和,初值為0
一t存放當(dāng)前項(xiàng),初值為1—
循環(huán)控制:while(fabs(t)>1e-6)
——-----L循環(huán)累加:pi=pi+t-------------------------
t=s/n
\S初值為1每次S=-S
n初值為1每次n=n+2
而r<-i/i7>-|國(guó)
#include<math.h>while(fabs(t)>le-6)
#include<stdio.h>{
main()pi=pi+t;
(s=-s;
ints;n=n+2;
floatn,t,pi;t=s/n;
t=1;pi=O;s=1;n=1;
printf("\nPI=%r,pi*4);
)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 深井泵房施工組織設(shè)計(jì)
- 歷年英語(yǔ)四級(jí)真題及答案
- 2025年華師大新版七年級(jí)歷史下冊(cè)月考試卷
- 2025年外研版九年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年浙教版九年級(jí)歷史下冊(cè)階段測(cè)試試卷
- 2025年華師大版選擇性必修3歷史下冊(cè)階段測(cè)試試卷
- 2025年度農(nóng)機(jī)環(huán)保技術(shù)合作開(kāi)發(fā)合同范本4篇
- 房屋建筑設(shè)計(jì)合同(2篇)
- 擔(dān)保合同補(bǔ)充協(xié)議書(2篇)
- 2025年度綠色建筑項(xiàng)目除草與節(jié)能合同3篇
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書
- 物流有限公司安全生產(chǎn)專項(xiàng)整治三年行動(dòng)實(shí)施方案全國(guó)安全生產(chǎn)專項(xiàng)整治三年行動(dòng)計(jì)劃
- 2025屆江蘇省13市高三最后一卷生物試卷含解析
- 產(chǎn)鉗助產(chǎn)護(hù)理查房
- 招聘專員轉(zhuǎn)正述職報(bào)告
- GB/T 31525-2015圖形標(biāo)志電動(dòng)汽車充換電設(shè)施標(biāo)志
- 裝飾業(yè)務(wù)員培訓(xùn)教程方案
評(píng)論
0/150
提交評(píng)論