計(jì)算機(jī)C語(yǔ)言第三章控制結(jié)構(gòu)_第1頁(yè)
計(jì)算機(jī)C語(yǔ)言第三章控制結(jié)構(gòu)_第2頁(yè)
計(jì)算機(jī)C語(yǔ)言第三章控制結(jié)構(gòu)_第3頁(yè)
計(jì)算機(jī)C語(yǔ)言第三章控制結(jié)構(gòu)_第4頁(yè)
計(jì)算機(jī)C語(yǔ)言第三章控制結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論