C語(yǔ)言講解課件_第1頁(yè)
C語(yǔ)言講解課件_第2頁(yè)
C語(yǔ)言講解課件_第3頁(yè)
C語(yǔ)言講解課件_第4頁(yè)
C語(yǔ)言講解課件_第5頁(yè)
已閱讀5頁(yè),還剩150頁(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)介

Start

甯Algorithm

.「ArraysandPointersDataStructure

GettingStartedBasicTypes

■MemoryManagement?

StatementsFunctionsVisualComputingMultimedia9

臉FAQ

UserDefinedTypes41

CloudComputingMobile

0

ObjectOriented

ProgrammingAbstractDataTypesGraphicalUserInterface

Video

c程序設(shè)計(jì)ISBN978-7-30228011-8

第3章程序控制結(jié)構(gòu)

?3.1語(yǔ)句

3.2輸入與輸出

?3.3程序順序結(jié)構(gòu)

?3.4程序選擇結(jié)構(gòu)

3.5程序循環(huán)結(jié)構(gòu)

un程序設(shè)計(jì)2

3.1語(yǔ)句

語(yǔ)句(statement)是C程序的最小單位

程序由一條一條語(yǔ)句組成

語(yǔ)句執(zhí)行的次序則稱為流程

C語(yǔ)言語(yǔ)句分為簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句和控制語(yǔ)句

un程序設(shè)計(jì)3

3.1.1簡(jiǎn)單語(yǔ)句

1.表達(dá)式語(yǔ)句

表達(dá)式;//用分號(hào)結(jié)束

x=a+b;〃賦值語(yǔ)句

t=a,a=b,b=t;//a和b交換

a+b+c;//運(yùn)算但無(wú)實(shí)際意義

un程序設(shè)計(jì)4

3.1.1簡(jiǎn)單語(yǔ)句

A2.函數(shù)調(diào)用語(yǔ)句

函數(shù)調(diào)用(實(shí)參);//用分號(hào)結(jié)束

printf(na+b=%dn,a+b);〃輸出函數(shù)調(diào)用語(yǔ)句

un程序設(shè)計(jì)5

3.1.1簡(jiǎn)單語(yǔ)句

3.空語(yǔ)句

;//單個(gè)分號(hào)

xy

printf(a+b=%d"Aa+b);;〃第2個(gè)即為空語(yǔ)句

?4.聲明部分

聲明部分......

執(zhí)行語(yǔ)句......

un程序設(shè)計(jì)6

3.1.2復(fù)合語(yǔ)句

a復(fù)合語(yǔ)句(compoundstatement),又稱語(yǔ)句塊,

簡(jiǎn)稱塊(block)

[局部聲明部分......;]

語(yǔ)句序列......;

)

un程序設(shè)計(jì)7

3.1.2復(fù)合語(yǔ)句

復(fù)合語(yǔ)句內(nèi)部可以進(jìn)行變量定義或類型聲明,這些

定義或聲明僅在復(fù)合語(yǔ)句內(nèi)部可以使用。

intt,a=10zb=7;//定義局部變量七、a>b

t=a,a=b,b=t;//僅在這個(gè)復(fù)合語(yǔ)句里使用

)

un程序設(shè)計(jì)8

3.2輸入與輸出

所謂輸入是指從外部輸入設(shè)備(如鍵盤(pán)、鼠標(biāo)等)

向計(jì)算機(jī)輸入數(shù)據(jù),輸出是指從計(jì)算機(jī)向外部輸出

設(shè)備(如顯示器、打印機(jī)等)輸出數(shù)據(jù)。

un程序設(shè)計(jì)9

3.2.1字符輸入與輸出

1.字符輸出putchar函數(shù)

putchar函數(shù)的作用是向顯示終端輸出一個(gè)字符,

一般形式為:

putchar(c);

un程序設(shè)計(jì)10

321字符輸入與輸出

1#include<stdio.h>

2intmain()

3(

4chara=1C!,b=6;

5putchar(a);//字符型變量,輸出C

6putchar(b+101);//整型表達(dá)式,輸出6

7putchar「\ll(T);//轉(zhuǎn)義字符(八進(jìn)制)輸出H

8putchar(D);//轉(zhuǎn)義字符(換行),輸出換行

9return0;

10)

un程序設(shè)計(jì)11

3.2.1字符輸入與輸出

程序運(yùn)行屏幕

C6H

un程序設(shè)計(jì)12

3.2.1字符輸入與輸出

2.字符輸入getchar函數(shù)

getchar函數(shù)的作用是從鍵盤(pán)終端輸入一個(gè)字符,

一般形式為:

getchar()

un程序設(shè)計(jì)13

321字符輸入與輸出

mH

i#include<stdio.h>田

2intmain()

3(

4charclzc2rc3;

5cl=getchar();

c2=getchar();

c3=getchar();

6putchar(cl);putchar(c2);putchar(c3);

7return0;

8)

un程序設(shè)計(jì)14

3.2.1字符輸入與輸出

例3?2程序運(yùn)行屏幕

un程序設(shè)計(jì)15

3.2.1字符輸入與輸出

例3?2程序運(yùn)行屏幕

un程序設(shè)計(jì)16

3.2.2格式化輸出

1.printf函數(shù)

printf函數(shù)的作用是向標(biāo)準(zhǔn)輸出設(shè)備(顯示終端)

輸出格式化的數(shù)據(jù),一般形式為:

printf(格式控制,輸出項(xiàng)列表......);

a(1)格式控制

格式控制為字符串形式,稱為格式控制串

un程序設(shè)計(jì)17

3.2.2格式化輸出

A它主要有兩種內(nèi)容:

①格式說(shuō)明。格式說(shuō)明總是以百分號(hào)(%)字符開(kāi)

始,后跟格式控制字符,例如%d、%f等。它的作

用是將輸出項(xiàng)轉(zhuǎn)換為指定格式輸出。

%[flags][width][.prec][h|1|L

|F|N]type

②一般字符。除格式說(shuō)明之外的其他字符,包含轉(zhuǎn)

義字符。一般字符根據(jù)從左向右的出現(xiàn)順序直接輸

出到顯示終端上,ASCII控制字符的輸出有特殊的

un程序設(shè)計(jì)18

3.2.2格式化輸出

表3-1printf格式說(shuō)明域含義

域域選描述含義

type必需類型決定輸出項(xiàng)轉(zhuǎn)換為字符、字符串還是數(shù)值

字符

flags可選志控制輸出的對(duì)齊、符號(hào)、空格及八進(jìn)制和

十六進(jìn)制前綴??梢猿霈F(xiàn)多個(gè)標(biāo)志

width可選寬度指定輸出項(xiàng)的最小顯示寬度

說(shuō)明

.prec可選精度指定輸出項(xiàng)的最大輸出字符數(shù)或浮點(diǎn)數(shù)小

說(shuō)明數(shù)精度

h/l/L/F可選大小指明輸出項(xiàng)類型大小斯旨針的遠(yuǎn)近

/N修飾

un程序設(shè)計(jì)19

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

dint帶符號(hào)的十進(jìn)制整數(shù)

Uint無(wú)符號(hào)十進(jìn)制整數(shù)

Oint無(wú)符號(hào)八進(jìn)制整數(shù)

x或Xint無(wú)符號(hào)十六進(jìn)制整數(shù)(若輸出為字母,X用

abcdef,X用ABCDEF)

un程序設(shè)計(jì)20

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

fdouble具有[―]dddd.dddd格式的帶符號(hào)數(shù)值,dddd

為一位或多位十進(jìn)制數(shù)字。小數(shù)點(diǎn)前數(shù)字個(gè)數(shù)

取決于數(shù)的量級(jí);小數(shù)點(diǎn)后面數(shù)字個(gè)數(shù)取決于

所要求的精度

e或Edouble具有[一]d.dddde[+/—]ddd格式的帶符號(hào)數(shù)值,

其中d為單個(gè)十進(jìn)制數(shù)字,dddd為一位或多位

十進(jìn)制數(shù)字,ddd為三位十進(jìn)制數(shù)。用e或E表

示指數(shù)

g或double以f或e格式輸出的帶符號(hào)數(shù)值,對(duì)給出的值及

G其精度,f和e哪個(gè)簡(jiǎn)潔就用哪個(gè)。只有當(dāng)值的

指數(shù)小于一4或大于、等于精度說(shuō)明時(shí)才使用e

格式。尾部的0被截?cái)?,只有小?shù)點(diǎn)后跟1位

或多位數(shù)字時(shí)才出現(xiàn)小數(shù)點(diǎn)。用e或E表示指數(shù)

un程序設(shè)計(jì)21

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

Cchar單個(gè)字符

S字符串直到第一個(gè)非空字符c\oo或滿足精度的字符

指針串

%輸出百分號(hào)‘%’

un程序設(shè)計(jì)22

3.2.2格式化輸出

表3-3printf標(biāo)志字符含義

標(biāo)志意義默認(rèn)

—在給定域?qū)拑?nèi)左對(duì)齊輸出右對(duì)齊(左邊用空格

結(jié)果(右邊用空格填充)或0填充)

+如果輸出值是有符號(hào)數(shù),只在負(fù)數(shù)前加(一)

則總是加上符號(hào)(+或一)

空格如果輸出值是有符號(hào)數(shù)或無(wú)

為正數(shù),則以空格作為前

綴加到輸出值前;如果空

格和+標(biāo)志同時(shí)出現(xiàn),則

忽略空格

un程序設(shè)計(jì)23

3.2.2格式化輸出

表3-3printf標(biāo)志字符含義

標(biāo)志意義默認(rèn)

#指明使用如下的“轉(zhuǎn)換樣

式”轉(zhuǎn)換輸出參數(shù)

若類型對(duì)輸出參數(shù)的影響

字符為

x或X在任何非0輸出值前加上

Ox或0X

e,E,強(qiáng)制在所有情況下輸出值只有小數(shù)點(diǎn)后面有數(shù)

f總是包含小數(shù)點(diǎn)字時(shí)才顯示它

g,G同e和E,強(qiáng)制在所有情況只有小數(shù)點(diǎn)后面有數(shù)

下輸出值中總是包含小數(shù)字時(shí)才顯示它,截?cái)?/p>

點(diǎn)并阻止截?cái)辔膊康?尾部的0

un程序設(shè)計(jì)24

3.2.2格式化輸出

表3-4printf寬度說(shuō)明

寬度對(duì)輸出域?qū)挾鹊挠绊?/p>

說(shuō)明

至少有n個(gè)字符寬度輸出,如果輸出值中的寬度小于n個(gè),

則輸出用空格填充直到最小寬度規(guī)定(如果flags為一,

則填充在輸出值的右邊,否則在左邊)

On至少有n個(gè)字符寬度輸出,如果輸出值中的字符寬度小于

n個(gè),則輸出用0填充在輸出值的左邊(對(duì)于左對(duì)齊無(wú)效)

*間接設(shè)置寬度,此時(shí)由輸出項(xiàng)列表提供寬度值,且它必

須在輸出項(xiàng)的前面

un程序設(shè)計(jì)25

3.2.2格式化輸出

表3-5printf精度說(shuō)明

精度精度影響

說(shuō)明

.n類型含義

e,E,f精度值指定小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù)。四舍五入

g,G精度值指定可輸出的有效數(shù)字的最大數(shù)目

s精度值指定可輸出字符的最大數(shù)目,超出精

度值范圍的字符不予輸出

un程序設(shè)計(jì)26

3.2.2格式化輸出

表3-5printf精度說(shuō)明

精度精度影響

說(shuō)明

(無(wú))精度按默認(rèn)

值:

類型默認(rèn)值

e,E,f6

g,G打印6個(gè)有效數(shù)字,尾部的0串被截?cái)?/p>

s輸出直到空字符(''0')為止

.。或類型含義

僅有.

un程序設(shè)計(jì)27

3.2.2格式化輸出

續(xù)表3-5printf精度說(shuō)明

精度精度影響

說(shuō)明

e,E,f,g,輸出不打印小數(shù)點(diǎn)(及其后的小數(shù))

G

s無(wú)任何字符輸出

*間接設(shè)置精度,此時(shí)由輸出項(xiàng)列表提供精度

值,且它必須在輸出項(xiàng)的前面。如果寬度說(shuō)

明和精度說(shuō)明同時(shí)使用*,則先出現(xiàn)寬度值,

接著是精度值,然后才是輸出項(xiàng)。

un程序設(shè)計(jì)28

3.2.2格式化輸出

表3-6printf類型大小修飾含義

大小修飾type類型字符輸出參數(shù)被解釋為

hd,o,x,X短整型(short)

U無(wú)符號(hào)短整型(unsignedshort)

1d,o,x,X長(zhǎng)整型(long)

u無(wú)符號(hào)長(zhǎng)整型(unsignedlong)

e,E,f,g,G雙精度浮點(diǎn)型(double)

Le,E,f,g,G長(zhǎng)雙精度浮點(diǎn)型(longdouble)

un程序設(shè)計(jì)29

322格式化輸出

inta=123,b=-lrc=12345;

longh=-l;shorti=-lrj=32767;

charcl=97;

doublex=12.3456,y=12,z=12.123456789123;

〃①輸出整型數(shù)據(jù)

printf("%d,%u,%x,%X,%o\n”,a,a,a,a,a);

//十進(jìn)制、無(wú)符號(hào)、十六進(jìn)制和八進(jìn)制

//輸出結(jié)果:123,123,7b,7B,173

printf(”%d,%u,%x,%X,%o\n”,b,b,b,b,b);

//十進(jìn)制、無(wú)符號(hào)、十六進(jìn)制和八進(jìn)制,負(fù)數(shù)為補(bǔ)碼

〃-1,4294967295,ffffffff,FFFFFFFF,37777777777

un程序設(shè)計(jì)30

322格式化輸出

printf(”%1d,%lu,%lx,%lo\n”,h,h,h,h,h);

//長(zhǎng)整型,負(fù)數(shù)為補(bǔ)碼

//輸出結(jié)果:-1,4294967295,ffffffff,37777777777

printf("%hd,%hu,%hx,%ho\n”;

//短整型,負(fù)數(shù)為補(bǔ)碼

//輸出結(jié)果:-lA65535Affff,177777

printf(n%hd,%hd\nn,j,j+1);〃短整型,數(shù)據(jù)溢出

//輸出結(jié)果:32767,-32768

//②輸出帶格式的整型數(shù)據(jù)

printf(H[%d],[%4d],[%-4d],[%4d],[%-

4d]\n”,a,a,a,c,c);//寬度、右對(duì)齊、左對(duì)齊、實(shí)際寬度

//輸出結(jié)果:[123],[123],[123]A[12345]A[12345]

un程序設(shè)計(jì)31

322格式化輸出

printf(”[%+d]r[%+d]A[%d]r[%d]\n”,a,-a,a,-a);

//填充正負(fù)符號(hào)、填充空格

//輸出結(jié)果:[+123],[-123],[123],[-123]

H

printf([%04d],[%04d],[%04d]A[%-

04d]\n”,a,b,c,a);//左邊填充0、右邊不影響

//輸出結(jié)果:[0123],[-001],[12345],[123]

printf(”%#d,%#x,%#X,%#o\n”,a,a,a,a);

//填充十六進(jìn)制、八進(jìn)制前綴

//輸出結(jié)果:123,0x7b,0X7B,0173

printf(H[%*d]\n”,5,a);//由輸出項(xiàng)指定寬度

//輸出結(jié)果:[123]

un程序設(shè)計(jì)32

322格式化輸出

printf(”[%8.2d]A[%-8.2d]\n”,a,a);

//精度對(duì)整型無(wú)作用

//輸出結(jié)果:[123],[123]

//③輸出字符型數(shù)據(jù)

printf(n%d,%c\nn,cl,cl);//字符型數(shù)值、ASC工工碼

//輸出結(jié)果:97ra

//④輸出帶格式的字符型數(shù)據(jù)

nH

printf([%12c],[%012c],[%-012c]\n,clzclAcl);

//寬度、右對(duì)齊、左對(duì)齊

//[a]4[00000000000a],[a]

un程序設(shè)計(jì)33

322格式化輸出____________________________________________

//⑤輸出浮點(diǎn)型數(shù)據(jù)

printf(”%lf,%e,%g\n”,x,x,x);

//小數(shù)格式、指數(shù)格式、最簡(jiǎn)格式

//輸出結(jié)果:12.34560041.234560e+001412.3456

printf,%e,%g\n”,v,y,y);

//小數(shù)格式、指數(shù)格式、最簡(jiǎn)格式

//輸出結(jié)果:12.000000,1.2000008+001,12

//⑥輸出指定精度的浮點(diǎn)型數(shù)據(jù)

printf(H[%工£],[%10[£],[%10.21f],

,x,x);//默認(rèn)精度、寬度、精度

//[12.345600]z[12.345600],[12.35],[12.35:

un程序設(shè)計(jì)34

322格式化輸出

//⑦輸出帶格式的浮點(diǎn)型數(shù)據(jù)

printf(H[%+lf],[%+lf],[%If],[%lf]\nn,y,-

y,v,-v);

//填充正負(fù)符號(hào)、填充空格

//[+12.000000],[-12.000000]A[12.000000]A[-

12.000000]

nn

printf([%06.11f]A[%-06.Ilf]\nAyzy);

//左邊填充0、右邊不影響

//輸出結(jié)果:[0012.0],[12.0]

printf(n[%.*£],[%★.*£]\n”,6,x,12,3,x);

//由輸出項(xiàng)指定寬度、寬度與精度

//輸出結(jié)果:[12.345600]z[12.346]

un程序設(shè)計(jì)35

322格式化輸出

//⑧輸出字符串

printf(H[%s],[%6s],[%-

n11nn11

6s]\nr"JavarJava"rJava);

//寬度對(duì)字符串的影響

//輸出結(jié)果:[Java],[Java],[Java]

nfnnnn

printf([%s]r[%.3s]r[%6.3s]\n\BasicrBasic

,"Basic");

//精度對(duì)字符串的影響

//輸出結(jié)果:[Basic],[Bas],[Bas]

un程序設(shè)計(jì)36

322格式化輸出

//⑨特殊輸出

printf("%%\n”,cl);

//兩個(gè)%%表示輸出一個(gè)%,輸出項(xiàng)

//輸出結(jié)果:%

nn

printf(%dA%d\nAa,bzc);

//格式數(shù)目小于輸出項(xiàng)數(shù),忽略多余輸出項(xiàng)

//輸出結(jié)果:123,-1

printf(”%d,%d,%d\n”,a,b);

//格式數(shù)目大于輸出項(xiàng)數(shù),輸出結(jié)果不確定

//輸出結(jié)果:123,-1,2367460

nn

printf(%df%lf\n4xAa);

//類型不對(duì)應(yīng),輸出結(jié)果不確定

//輸出結(jié)果:2075328197,0.000000

un程序設(shè)計(jì)37

3.2.3格式化輸入

1.scanf函數(shù)

scanf函數(shù)的作用是從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán)終端)

讀取格式化的數(shù)據(jù),一般形式為:

scanf(格式才空制,輸入項(xiàng)歹IJ表......);

%[*][width][h|1|L|F|N

]type

un程序設(shè)計(jì)38

2.scant格式輸入函數(shù)

調(diào)用格式:scanf(格式控制字符串,地址表列)

功能:按格式控制字符串中指定的格式,從鍵盤(pán)輸

入常數(shù),并存入對(duì)應(yīng)變量地址所表示的存儲(chǔ)單元中。

格式控制字符串:包含格式說(shuō)明、普通字符;

地址表列是要獲得數(shù)據(jù)的變量地址,逗號(hào)分隔;

變量地址:&變量名

地址運(yùn)算符&:2級(jí)、單目。

un程序設(shè)計(jì)39

?#include"stdio.h"

avoidmain()必須按格式控制字符串中

a{inta,b;的格式從鍵盤(pán)輸入數(shù)據(jù)

?printf("Enterinta,b\nM);

scanf("%d,%cT,&a,&b);

printf("a+b=%d\n",a+b);

)

un程序設(shè)計(jì)40

如:scanf("%d;%d;%cT,&a,&b,&c);

輸入:3;4;5/

如:scanf(,za=%d,b=%d,c=%d,\&a,&b,&c);

輸入:?—>a=3,b=4,c=5/

un程序設(shè)計(jì)41

珞式說(shuō)明與它控制的變量類型

必須—對(duì)應(yīng)

注意:

若違背了該規(guī)則,或沒(méi)按格式控

制字符串中指定的格式輸入數(shù)據(jù),

變量獲得的值將發(fā)生混亂,導(dǎo)致

程序運(yùn)行結(jié)果錯(cuò)誤。

un程序設(shè)計(jì)42

例:

#includelvstdio.hlv

voidmain()

{longm,n;

printf("Enterlong

scanf("%ld:%ld”,&m,&n);

printf(,im*n=%ld\n,i,m*n);

)

un程序設(shè)計(jì)43

A例:

?#include"stdio.h11

?voidmain()

?{floatmfn;

?printf("Enterfloat

scanf("%f,%F',&m,&n);

?printf("m*n=%f\n"fm*n);

A)

un程序設(shè)計(jì)44

A例:

?#include"stdio.h11

?voidmain()

?{doublemfn;

?printf("Enterdouble

,,

?printf("m*n=%f\nfm*n);

A)

un程序設(shè)計(jì)45

輸入項(xiàng)格式說(shuō)明輸入數(shù)據(jù)的形式

變量類型

long型%ld十進(jìn)制整常數(shù)

%lo八進(jìn)制整常數(shù)

%lx十六進(jìn)制整常數(shù)

float型%f小數(shù)形式實(shí)常數(shù)或指數(shù)形式實(shí)

%e常數(shù)

double型%lf小數(shù)形式實(shí)常數(shù)或整常數(shù)

%le指數(shù)形式實(shí)常數(shù)

un程序設(shè)計(jì)46

輸入項(xiàng)格式說(shuō)明輸入數(shù)據(jù)的形式

變量類型

int型%d十進(jìn)制整常數(shù)

unsigned%0無(wú)符號(hào)八進(jìn)制整常數(shù)(不需以0

開(kāi)頭)

%x

無(wú)符號(hào)十六進(jìn)制整常數(shù)(不需以O(shè)x

%u

開(kāi)頭)

無(wú)符號(hào)十進(jìn)制整常數(shù)

Char型%c一個(gè)可鍵入字符(不需加單引號(hào))

%d0?255整常數(shù)

un程序設(shè)計(jì)47

輸入整數(shù)或?qū)嵭蛿?shù)據(jù)時(shí),當(dāng)格式說(shuō)明之間無(wú)其

它字符,系統(tǒng)默認(rèn)以一個(gè)或多個(gè)空格,回車、

跳格(Tab)作為輸入數(shù)據(jù)間的分隔;

如:scanf(〃%d%d%d〃,&a,&b,&c);

345/

un程序設(shè)計(jì)48

重點(diǎn)講解:scanf的使用

>書(shū)寫(xiě)的scanf格式說(shuō)明與對(duì)應(yīng)的變量在個(gè)數(shù)

和類型上必須對(duì)應(yīng)一致。

?輸入時(shí),各常數(shù)間的分隔符必須與格式控制字符

串一致,否則變量獲值錯(cuò)亂。

un程序設(shè)計(jì)49

重要提示

scant的格式控制是為了控制鍵盤(pán)輸入數(shù)

據(jù)的格式,所以要力求簡(jiǎn)單。

printf的格式控制是為了控制輸出內(nèi)容的

屏幕顯示格式,所以要力求使得輸出結(jié)果清

晰。

un程序設(shè)計(jì)50

3.4程序選擇結(jié)構(gòu)

1.if語(yǔ)句

?2.switch語(yǔ)句

un程序設(shè)計(jì)51

3.4.1if語(yǔ)句

if語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果選擇

執(zhí)行相應(yīng)的語(yǔ)句,語(yǔ)句形式有兩種:

A①if形式:

if(表達(dá)式)語(yǔ)句1;

a②if-else形式:

if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;

un程序設(shè)計(jì)52

341if語(yǔ)句

圖3.2兩種形式的if語(yǔ)句執(zhí)行流程

(a)

un程序設(shè)計(jì)53

341if語(yǔ)句

圖3.2兩種形式的if語(yǔ)句執(zhí)行流程

(b)

un程序設(shè)計(jì)54

3.4.1if語(yǔ)句

當(dāng)a>b時(shí),執(zhí)行t二a,a二b,b二t運(yùn)算,即a和b相互交

換,若a小于等于b則什么也不做;總而言之,無(wú)

論a和b之前是什么數(shù),執(zhí)行這段程序后,a肯定小

于等于b。

if(a>b)t=a,a=b,b=t;

un程序設(shè)計(jì)55

3.4.1if語(yǔ)句

(1)if語(yǔ)句中的子語(yǔ)句既可以是簡(jiǎn)單語(yǔ)句,又可

以是復(fù)合語(yǔ)句或控制語(yǔ)句,但必須是“一個(gè)語(yǔ)句”

的語(yǔ)法形式.

un程序設(shè)計(jì)56

3.4.1if語(yǔ)句

(2)子語(yǔ)句往往會(huì)有多條語(yǔ)句,甚至更復(fù)雜的情

形,這時(shí)可以使用復(fù)合語(yǔ)句

1if(a>b){

2x=a+b;y=a-b;

3}

4else{

5x=a-b;y=a+b;

6)

un程序設(shè)計(jì)57

341if語(yǔ)句

—邏輯錯(cuò)誤的代碼

1if(a>b)

2{;

3t=a;

4a=b;

5b=t;

6}

語(yǔ)法錯(cuò)誤的代碼

1if(a>b)

2x=a+b;y=a-b;

3else

4x=a-b;y=a+b;

un程序設(shè)計(jì)58

3.4.1if語(yǔ)句

數(shù)值邏輯值

aaa!=0!aa==0

0假假真真

非0真真假假

a=5,b=2;

if(a)x=a*10;

a=5,b=2;

if(!a)x=a*10;

un程序設(shè)計(jì)59

3.4.1if語(yǔ)句

#include<stdio.h>

#include<math.h>

intmain()

{doublea,b,c;

printf(ninput

scanf,&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a){

doubleszt;

t=(a+b+c)/2.0;

s=sqrt(t*(t-a)*(t-b)*(t-c));

printf("area=%lf\n"zs);

elseprintf("error\n");

return0;

un程序設(shè)計(jì)

3.4.1if語(yǔ)句

例3.3

15elseprintf(nerror\nn);

16return0;程序運(yùn)行屏幕

un程序設(shè)計(jì)61

3.4.2switch語(yǔ)句

-switch語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果

選擇從多個(gè)分支入口執(zhí)行,語(yǔ)句形式為:

switch(表達(dá)式){

case常量表達(dá)式1語(yǔ)句序列1

case常量表達(dá)式2語(yǔ)句序列2

I

I

case常量表達(dá)式n語(yǔ)句序列n

default:...語(yǔ)句序列

}

表達(dá)式:可是任何形式,但

其值應(yīng)為整型或符號(hào)常量.

un程序設(shè)計(jì)62

3.4.2switch語(yǔ)句

1switch(n){

2case7:printf(nstep5\nn);

3case6:

4case5:printf(nstep4\nn);

5case4:

6

7printf("step3\n");printf(Hstep2\nH);

8)

9case2:printf(nstepl\nn);

10default:printf(nstepO\nn);

11)

un程序設(shè)計(jì)63

2,switch的執(zhí)行流程

首先算出表達(dá)式的值,并自上而下將其

與case后的常量相比較)選擇值相等的語(yǔ)

句執(zhí)行)直到其后所有的語(yǔ)句執(zhí)行完畢,

才退出該多分支結(jié)構(gòu),否則執(zhí)行default后

的語(yǔ)句。

例:85頁(yè)

un程序設(shè)計(jì)64

將A,B,C,D制分?jǐn)?shù)轉(zhuǎn)變?yōu)榘俜种瞥煽?jī)

A等

B等

c等

D等

un程序設(shè)計(jì)65

A等)1oo

80

等7

#include"stdio.h"B70)9分

voidmain()c60)69分

0-5分

{chargrade;D9夕

scanf("%c",&grade);

switch(grade)

{case'A':printf("80~100分\rT);

caseB:printf(“70?79分\n“);

case'C:printf(“60~69分\n“);

case'D':printf(”O(jiān)?59分\rT);

default:printf("error\n");

)

)

un程序設(shè)計(jì)66

A等80?100分

#include,,stdio.hM

B等70?79分

voidmain()C等60?69分

{chargrade;D等0?59分

scanf("%c",&grade);

switch(grade)

{case'A':printf(”80?100分\n”);break;

case'B':printf(”70?79分\n”);break;

caseC:printf《'6O?69分\n”);break;

case'D':printf(”O(jiān)?59分\rT);break;

default:printf("error\n");

)

)

un程序設(shè)計(jì)67

重點(diǎn)講解:

1在位fswitch語(yǔ)句時(shí),常量一定要與表達(dá)式的

值類型一致。

2在switch中可以使用break語(yǔ)句跳出switch結(jié)

構(gòu);

un程序設(shè)計(jì)68

例:對(duì)學(xué)生百分制成績(jī)分檔o財(cái)A

80B檔

#include"stdio.h"

7079c檔

main()6069

0檔

59分D

{charc1;intscore;

scanf("%d",&score);

switch(score/10)

{case10:

case9:

case8:c1='A';break;

case7:c1='B';break;

case6:c1='C;break;

default:c1='D';

}

printf("%c\n",c1);}

un程序設(shè)計(jì)69

3case后的各常量不能相同,否則編譯無(wú)法通過(guò);

4default為可選項(xiàng),它提供了表達(dá)式的值與任何常

量都不相同時(shí)的執(zhí)行方案;若表達(dá)式的值與任何

常量都不相同時(shí)什么也不需要做,則省略關(guān)鍵字

default(類似else);

5多個(gè)case可共用一組執(zhí)行語(yǔ)句;

例:switch(score/10)

{case10:

case9:

case8:cl=W;break;

case7:cl='B';break;

un程序設(shè)計(jì)70

重點(diǎn)講解:

/switch是用來(lái)實(shí)現(xiàn)多分支選擇算法的,

構(gòu)造表達(dá)式和與其相配的常量表達(dá)式是關(guān)

鍵。

un程序設(shè)計(jì)71

3.4.3選擇結(jié)構(gòu)的嵌套

?1.if語(yǔ)句的嵌套

(1)第一種形式,在else分支上嵌套if語(yǔ)句,語(yǔ)法

形式為:

if(表達(dá)式1)語(yǔ)句1

elseif(表達(dá)式2)語(yǔ)句2

elseif(表達(dá)式3)語(yǔ)句3

elseif(表達(dá)式n)語(yǔ)句n

else語(yǔ)句m

un程序設(shè)計(jì)72

3.4.3選擇結(jié)構(gòu)的嵌套

圖3.5嵌套if語(yǔ)句第一種形式的執(zhí)行流程

un程序設(shè)計(jì)73

343選擇結(jié)構(gòu)的嵌套

1#include<stdio.h>

2intmain()

3(

4intscore;

5scanf(”%d”,&score);

6if(score>=90)printf(nA\nn);

7elseif(score>=80)printf(nB\nn);

8elseif(score>=70)printf(nC\nn);

9elseif(score>=60)printf(nD\nn);

10elseprintf(nE\nn);

11return0;

12)

un程序設(shè)計(jì)74

343選擇結(jié)構(gòu)的嵌套

(2)第二種形式,在if和else分支上嵌套if-else語(yǔ)句,

語(yǔ)法形式為:

if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1

else語(yǔ)句2

else

if(表達(dá)式3)語(yǔ)句3

else語(yǔ)句4

un程序設(shè)計(jì)75

3.4.3選擇結(jié)構(gòu)的嵌套

圖3.6嵌套if語(yǔ)句第二種形式的執(zhí)行流程

un程序設(shè)計(jì)76

難點(diǎn)講解:if語(yǔ)句嵌套

1)C編譯系統(tǒng)確定if和else的配對(duì)原則是:

e1se與上面最近的未曾配對(duì)的if配對(duì);

書(shū)寫(xiě)語(yǔ)句時(shí):

2)對(duì)內(nèi)嵌的語(yǔ)句,采用縮進(jìn)格式,可清晰地

表示出嵌套層次關(guān)系;

un程序設(shè)計(jì)77

提倡的IF語(yǔ)句嵌套的形式:

1.外層的IF語(yǔ)句和內(nèi)嵌的IF語(yǔ)句都包含else形

式,使IF和ELSE的配對(duì)形式十分清楚。

if(el)

if(e2)si

elses2

else

if(e3)s3

elses4

un程序設(shè)計(jì)78

2.如果if和else的數(shù)目不一樣,可以加上{}

來(lái)明確配對(duì)關(guān)系。

如:

if()

{if()語(yǔ)句1}

else語(yǔ)句2

un程序設(shè)計(jì)79

嵌套IF語(yǔ)句的執(zhí)行:

它的功能是求:

Main()

-1x<0

{intx,y;

y—<0X—0

scanf(''%d';&x);

1x>0

if(x>=0)

if(x>0)y=l;

elsey=0;

elsey=-l;

printf(”x=%d,y=%”x,y);

輸入:

un程序設(shè)計(jì)

Main()它的功能是求:

{intx,y;1x>0

scanf(u%d^&x);

y=<0x<0

y=i;-1x==0

if(x!=O)

if(x>0)y=l;

elsey=0;

printf(”x=%d,y=%d';x,y);

un程序設(shè)計(jì)81

難點(diǎn)講斛:程序中如何判斷一個(gè)float型實(shí)數(shù)為零。

例:判斷float型變量disc是否為零。

fbas(disc)<1e-6

因?yàn)閒loat型實(shí)數(shù)在內(nèi)存中只有7位有效數(shù)字,

le-6=0.000001,上式表明disc的前'7佳效數(shù)學(xué)為0。

double型實(shí)數(shù)在內(nèi)存中只有16位有效數(shù)字。

un程序設(shè)計(jì)82

求ax2+bx+c=0方程的角星

Scanf("%f,%f,%f”,&a,&b,&c);

lf(fabs(a)<1e-6)

printf(“erro”);

else

{disc=b*b-4*a*c;

if(fabs(disc)<1e-6)

(}

elseif(disc>1e-6)

(}

else

un程序設(shè)計(jì)83

3.5程序循環(huán)結(jié)構(gòu)

?1.while語(yǔ)句

?2.do語(yǔ)句

a3.for語(yǔ)句

un程序設(shè)計(jì)84

3.5.1while語(yǔ)句

awhile語(yǔ)句

wMe語(yǔ)句的作用是計(jì)算給定的表達(dá)式,根據(jù)結(jié)果

判定循環(huán)執(zhí)行語(yǔ)句,語(yǔ)句形式為:

while(表達(dá)式)語(yǔ)句;

其中的語(yǔ)句稱為子語(yǔ)句,又稱循環(huán)體,圓括號(hào)內(nèi)的

表達(dá)式稱為循環(huán)條件。

un程序設(shè)計(jì)85

3.5.1while語(yǔ)句

while語(yǔ)句的執(zhí)行過(guò)程是:

①計(jì)算表達(dá)式,無(wú)論表達(dá)式為何種類型均將這個(gè)值

按邏輯值處理;

②如果值為真,則執(zhí)行子語(yǔ)句,然后重復(fù)①;

③如果值為假,則while語(yǔ)句結(jié)束,執(zhí)行后續(xù)語(yǔ)句。

un程序設(shè)計(jì)86

3.5.1while語(yǔ)句

圖3.8while語(yǔ)句執(zhí)行流程

(a)

un程序設(shè)計(jì)87

3.5.1while語(yǔ)句

a【例3.8】

100

求S=

n=l

即s=1+2+3+?

un程序設(shè)計(jì)88

3.5.1while語(yǔ)句

圖3.8while語(yǔ)句執(zhí)行流程

(b)

un程序設(shè)計(jì)89

3.5.1while語(yǔ)句

例3.8

1#include<stdio.h>

2intmain()

3

4intn=l,sum=O;

5while(n<=100){//循環(huán)直至Ijn大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

9printf(”sum=%d\n",sum);

10return0;

11)

un程序設(shè)計(jì)90

3.5.1while語(yǔ)句

4intn=l,sum=O;

5while(n<=100){//循環(huán)直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第4行先做循環(huán)前的初始化,n為L(zhǎng)sum為0。

第5行while語(yǔ)句時(shí)n<=100的結(jié)果為真,則執(zhí)行循環(huán)體;

循環(huán)體是復(fù)合語(yǔ)句,先計(jì)算sum累加,則sum變?yōu)?+1

的結(jié)果,再讓n累加1。

un程序設(shè)計(jì)91

3.5.1while語(yǔ)句

例3.8

4intn=l,sum=O;

5while(n<=100){//循環(huán)直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

重復(fù)第5行的比較和執(zhí)行過(guò)程,貝Un值越來(lái)越趨向100,

n<=100也越來(lái)越趨向假,sum逐漸為累加和的結(jié)果;

當(dāng)n為100時(shí),n<=100為真,sum為的結(jié)果,n值累加

到101,則n<=100為假,while語(yǔ)句結(jié)束。

un程序設(shè)計(jì)92

3.5.1while語(yǔ)句

4intn=l,sum=O;

5while(n<=100){//循環(huán)直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第4行叫循環(huán)初始,即進(jìn)入循環(huán)前的初始計(jì)算過(guò)程。

如果不給n和sum賦初值可不可以?

un程序設(shè)計(jì)93

3.5.1while語(yǔ)句

例3.8

4intn=l,sum=O;

5while(n<=100){//循環(huán)直到n大于100

6sum=sum+n;//累力口和

7n=n+l;

8)

第5行叫循環(huán)條件,即判斷是否繼續(xù)循環(huán)的條件或循環(huán)

終止的條件。

第7行叫循環(huán)控制,即讓循環(huán)條件趨向結(jié)束的計(jì)算過(guò)程o

un程序設(shè)計(jì)94

3.5.1while語(yǔ)句

循環(huán)結(jié)構(gòu)三要素:

A循環(huán)初始、循環(huán)條件和循環(huán)控制。

編寫(xiě)循環(huán)程序,就要精確設(shè)計(jì)三要素。循環(huán)初始發(fā)

生在循環(huán)之前,使得循環(huán)“就緒”;循環(huán)條件是循

環(huán)得以繼續(xù)或終止的判定,而循環(huán)控制是在循環(huán)內(nèi)

部實(shí)現(xiàn)循環(huán)條件的關(guān)鍵過(guò)程。循環(huán)體可以直接或間

接利用三要素來(lái)達(dá)到計(jì)算目的,也可以與三要素?zé)o

關(guān)。

un程序設(shè)計(jì)95

3.5.1while語(yǔ)句

awhile語(yǔ)句的說(shuō)明。

wMe語(yǔ)句的循環(huán)體既可以是簡(jiǎn)單語(yǔ)句,又可以是

復(fù)合語(yǔ)句或控制語(yǔ)句,但必須是“一個(gè)語(yǔ)句”的語(yǔ)

法形式。在實(shí)際編程中,當(dāng)循環(huán)體有多條語(yǔ)句時(shí)使

用復(fù)合語(yǔ)句。

在循環(huán)中應(yīng)該有使while表達(dá)式趨向假的操作,否

則表達(dá)式恒為真,循環(huán)永不結(jié)束,成為死循環(huán)。

un程序設(shè)計(jì)96

3.5.1while語(yǔ)句

awhile語(yǔ)句的說(shuō)明。

由于while語(yǔ)句先計(jì)算表達(dá)式的值,再判斷是否循

環(huán),所以如果表達(dá)式的值始終為假,則循環(huán)一次也

不執(zhí)行,失去了循環(huán)的意義。

while語(yǔ)句循環(huán)條件可以是C語(yǔ)言的任意表達(dá)式。通

常情況下,循環(huán)條件是關(guān)系表達(dá)式或邏輯表達(dá)式,

應(yīng)該謹(jǐn)慎出現(xiàn)別的表達(dá)式。

從循環(huán)結(jié)構(gòu)來(lái)看,while語(yǔ)句前應(yīng)有循環(huán)初始,循

環(huán)體內(nèi)應(yīng)有循環(huán)控制。

un程序設(shè)計(jì)97

3.5.2do語(yǔ)句

ado語(yǔ)句

do語(yǔ)句的作用是先執(zhí)行語(yǔ)句,然后計(jì)算給定的表

達(dá)式,根據(jù)結(jié)果判定是否循環(huán)執(zhí)行,語(yǔ)句形式為:

do語(yǔ)句while(表達(dá)式);

其中的語(yǔ)句稱為子語(yǔ)句,又稱循環(huán)體,圓括號(hào)內(nèi)的

表達(dá)式稱為循環(huán)條件。

un程序設(shè)計(jì)98

3.5.2do語(yǔ)句

d。語(yǔ)句的執(zhí)行過(guò)程是:

①執(zhí)行子語(yǔ)句;

②計(jì)算表達(dá)式,無(wú)論表達(dá)式為何種類型均將這個(gè)值

按邏輯值處理;

③如果值為真,則再次執(zhí)行①;如果值為假,則

溫馨提示

  • 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)論