C語言講解課件_第1頁
C語言講解課件_第2頁
C語言講解課件_第3頁
C語言講解課件_第4頁
C語言講解課件_第5頁
已閱讀5頁,還剩150頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Start

甯Algorithm

.「ArraysandPointersDataStructure

GettingStartedBasicTypes

■MemoryManagement?

StatementsFunctionsVisualComputingMultimedia9

臉FAQ

UserDefinedTypes41

CloudComputingMobile

0

ObjectOriented

ProgrammingAbstractDataTypesGraphicalUserInterface

Video

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

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

?3.1語句

3.2輸入與輸出

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

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

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

un程序設(shè)計2

3.1語句

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

程序由一條一條語句組成

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

C語言語句分為簡單語句、復(fù)合語句和控制語句

un程序設(shè)計3

3.1.1簡單語句

1.表達(dá)式語句

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

x=a+b;〃賦值語句

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

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

un程序設(shè)計4

3.1.1簡單語句

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

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

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

un程序設(shè)計5

3.1.1簡單語句

3.空語句

;//單個分號

xy

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

?4.聲明部分

聲明部分......

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

un程序設(shè)計6

3.1.2復(fù)合語句

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

簡稱塊(block)

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

語句序列......;

)

un程序設(shè)計7

3.1.2復(fù)合語句

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

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

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

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

)

un程序設(shè)計8

3.2輸入與輸出

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

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

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

un程序設(shè)計9

3.2.1字符輸入與輸出

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

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

一般形式為:

putchar(c);

un程序設(shè)計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è)計11

3.2.1字符輸入與輸出

程序運(yùn)行屏幕

C6H

un程序設(shè)計12

3.2.1字符輸入與輸出

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

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

一般形式為:

getchar()

un程序設(shè)計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è)計14

3.2.1字符輸入與輸出

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

un程序設(shè)計15

3.2.1字符輸入與輸出

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

un程序設(shè)計16

3.2.2格式化輸出

1.printf函數(shù)

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

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

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

a(1)格式控制

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

un程序設(shè)計17

3.2.2格式化輸出

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

①格式說明。格式說明總是以百分號(%)字符開

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

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

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

|F|N]type

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

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

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

un程序設(shè)計18

3.2.2格式化輸出

表3-1printf格式說明域含義

域域選描述含義

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

字符

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

十六進(jìn)制前綴。可以出現(xiàn)多個標(biāo)志

width可選寬度指定輸出項的最小顯示寬度

說明

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

說明數(shù)精度

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

/N修飾

un程序設(shè)計19

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

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

Uint無符號十進(jìn)制整數(shù)

Oint無符號八進(jìn)制整數(shù)

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

abcdef,X用ABCDEF)

un程序設(shè)計20

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

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

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

取決于數(shù)的量級;小數(shù)點后面數(shù)字個數(shù)取決于

所要求的精度

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

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

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

示指數(shù)

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

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

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

格式。尾部的0被截斷,只有小數(shù)點后跟1位

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

un程序設(shè)計21

3.2.2格式化輸出

表3-2printf類型字符含義

字符類型輸出格式

Cchar單個字符

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

指針串

%輸出百分號‘%’

un程序設(shè)計22

3.2.2格式化輸出

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

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

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

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

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

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

空格如果輸出值是有符號數(shù)或無

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

綴加到輸出值前;如果空

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

忽略空格

un程序設(shè)計23

3.2.2格式化輸出

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

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

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

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

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

字符為

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

Ox或0X

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

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

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

下輸出值中總是包含小數(shù)字時才顯示它,截斷

點并阻止截斷尾部的0尾部的0

un程序設(shè)計24

3.2.2格式化輸出

表3-4printf寬度說明

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

說明

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

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

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

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

n個,則輸出用0填充在輸出值的左邊(對于左對齊無效)

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

須在輸出項的前面

un程序設(shè)計25

3.2.2格式化輸出

表3-5printf精度說明

精度精度影響

說明

.n類型含義

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

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

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

度值范圍的字符不予輸出

un程序設(shè)計26

3.2.2格式化輸出

表3-5printf精度說明

精度精度影響

說明

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

值:

類型默認(rèn)值

e,E,f6

g,G打印6個有效數(shù)字,尾部的0串被截斷

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

.。或類型含義

僅有.

un程序設(shè)計27

3.2.2格式化輸出

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

精度精度影響

說明

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

G

s無任何字符輸出

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

值,且它必須在輸出項的前面。如果寬度說

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

接著是精度值,然后才是輸出項。

un程序設(shè)計28

3.2.2格式化輸出

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

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

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

U無符號短整型(unsignedshort)

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

u無符號長整型(unsignedlong)

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

Le,E,f,g,G長雙精度浮點型(longdouble)

un程序設(shè)計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)制、無符號、十六進(jìn)制和八進(jìn)制

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

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

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

〃-1,4294967295,ffffffff,FFFFFFFF,37777777777

un程序設(shè)計30

322格式化輸出

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

//長整型,負(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);//寬度、右對齊、左對齊、實際寬度

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

un程序設(shè)計31

322格式化輸出

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

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

//輸出結(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);//由輸出項指定寬度

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

un程序設(shè)計32

322格式化輸出

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

//精度對整型無作用

//輸出結(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);

//寬度、右對齊、左對齊

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

un程序設(shè)計33

322格式化輸出____________________________________________

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

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

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

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

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

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

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

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

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

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

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

un程序設(shè)計34

322格式化輸出

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

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

y,v,-v);

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

//[+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);

//由輸出項指定寬度、寬度與精度

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

un程序設(shè)計35

322格式化輸出

//⑧輸出字符串

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

n11nn11

6s]\nr"JavarJava"rJava);

//寬度對字符串的影響

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

nfnnnn

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

,"Basic");

//精度對字符串的影響

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

un程序設(shè)計36

322格式化輸出

//⑨特殊輸出

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

//兩個%%表示輸出一個%,輸出項

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

nn

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

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

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

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

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

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

nn

printf(%df%lf\n4xAa);

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

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

un程序設(shè)計37

3.2.3格式化輸入

1.scanf函數(shù)

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

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

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

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

]type

un程序設(shè)計38

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

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

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

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

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

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

變量地址:&變量名

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

un程序設(shè)計39

?#include"stdio.h"

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

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

?printf("Enterinta,b\nM);

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

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

)

un程序設(shè)計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è)計41

珞式說明與它控制的變量類型

必須—對應(yīng)

注意:

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

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

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

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

un程序設(shè)計42

例:

#includelvstdio.hlv

voidmain()

{longm,n;

printf("Enterlong

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

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

)

un程序設(shè)計43

A例:

?#include"stdio.h11

?voidmain()

?{floatmfn;

?printf("Enterfloat

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

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

A)

un程序設(shè)計44

A例:

?#include"stdio.h11

?voidmain()

?{doublemfn;

?printf("Enterdouble

,,

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

A)

un程序設(shè)計45

輸入項格式說明輸入數(shù)據(jù)的形式

變量類型

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

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

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

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

%e常數(shù)

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

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

un程序設(shè)計46

輸入項格式說明輸入數(shù)據(jù)的形式

變量類型

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

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

開頭)

%x

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

%u

開頭)

無符號十進(jìn)制整常數(shù)

Char型%c一個可鍵入字符(不需加單引號)

%d0?255整常數(shù)

un程序設(shè)計47

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

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

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

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

345/

un程序設(shè)計48

重點講解:scanf的使用

>書寫的scanf格式說明與對應(yīng)的變量在個數(shù)

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

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

串一致,否則變量獲值錯亂。

un程序設(shè)計49

重要提示

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

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

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

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

晰。

un程序設(shè)計50

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

1.if語句

?2.switch語句

un程序設(shè)計51

3.4.1if語句

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

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

A①if形式:

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

a②if-else形式:

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

un程序設(shè)計52

341if語句

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

(a)

un程序設(shè)計53

341if語句

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

(b)

un程序設(shè)計54

3.4.1if語句

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

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

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

于等于b。

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

un程序設(shè)計55

3.4.1if語句

(1)if語句中的子語句既可以是簡單語句,又可

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

的語法形式.

un程序設(shè)計56

3.4.1if語句

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

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

1if(a>b){

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

3}

4else{

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

6)

un程序設(shè)計57

341if語句

—邏輯錯誤的代碼

1if(a>b)

2{;

3t=a;

4a=b;

5b=t;

6}

語法錯誤的代碼

1if(a>b)

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

3else

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

un程序設(shè)計58

3.4.1if語句

數(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è)計59

3.4.1if語句

#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è)計

3.4.1if語句

例3.3

15elseprintf(nerror\nn);

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

un程序設(shè)計61

3.4.2switch語句

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

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

switch(表達(dá)式){

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

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

I

I

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

default:...語句序列

}

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

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

un程序設(shè)計62

3.4.2switch語句

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è)計63

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

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

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

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

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

的語句。

例:85頁

un程序設(shè)計64

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

A等

B等

c等

D等

un程序設(shè)計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è)計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è)計67

重點講解:

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

值類型一致。

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

構(gòu);

un程序設(shè)計68

例:對學(xué)生百分制成績分檔o財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è)計69

3case后的各常量不能相同,否則編譯無法通過;

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

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

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

default(類似else);

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

例:switch(score/10)

{case10:

case9:

case8:cl=W;break;

case7:cl='B';break;

un程序設(shè)計70

重點講解:

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

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

鍵。

un程序設(shè)計71

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

?1.if語句的嵌套

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

形式為:

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

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

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

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

else語句m

un程序設(shè)計72

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

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

un程序設(shè)計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è)計74

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

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

語法形式為:

if(表達(dá)式1)

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

else語句2

else

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

else語句4

un程序設(shè)計75

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

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

un程序設(shè)計76

難點講解:if語句嵌套

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

e1se與上面最近的未曾配對的if配對;

書寫語句時:

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

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

un程序設(shè)計77

提倡的IF語句嵌套的形式:

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

式,使IF和ELSE的配對形式十分清楚。

if(el)

if(e2)si

elses2

else

if(e3)s3

elses4

un程序設(shè)計78

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

來明確配對關(guān)系。

如:

if()

{if()語句1}

else語句2

un程序設(shè)計79

嵌套IF語句的執(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è)計

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è)計81

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

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

fbas(disc)<1e-6

因為float型實數(shù)在內(nèi)存中只有7位有效數(shù)字,

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

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

un程序設(shè)計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è)計83

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

?1.while語句

?2.do語句

a3.for語句

un程序設(shè)計84

3.5.1while語句

awhile語句

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

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

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

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

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

un程序設(shè)計85

3.5.1while語句

while語句的執(zhí)行過程是:

①計算表達(dá)式,無論表達(dá)式為何種類型均將這個值

按邏輯值處理;

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

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

un程序設(shè)計86

3.5.1while語句

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

(a)

un程序設(shè)計87

3.5.1while語句

a【例3.8】

100

求S=

n=l

即s=1+2+3+?

un程序設(shè)計88

3.5.1while語句

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

(b)

un程序設(shè)計89

3.5.1while語句

例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è)計90

3.5.1while語句

4intn=l,sum=O;

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

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

7n=n+l;

8)

第4行先做循環(huán)前的初始化,n為Lsum為0。

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

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

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

un程序設(shè)計91

3.5.1while語句

例3.8

4intn=l,sum=O;

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

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

7n=n+l;

8)

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

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

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

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

un程序設(shè)計92

3.5.1while語句

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)前的初始計算過程。

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

un程序設(shè)計93

3.5.1while語句

例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é)束的計算過程o

un程序設(shè)計94

3.5.1while語句

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

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

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

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

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

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

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

關(guān)。

un程序設(shè)計95

3.5.1while語句

awhile語句的說明。

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

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

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

用復(fù)合語句。

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

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

un程序設(shè)計96

3.5.1while語句

awhile語句的說明。

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

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

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

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

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

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

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

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

un程序設(shè)計97

3.5.2do語句

ado語句

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

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

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

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

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

un程序設(shè)計98

3.5.2do語句

d。語句的執(zhí)行過程是:

①執(zhí)行子語句;

②計算表達(dá)式,無論表達(dá)式為何種類型均將這個值

按邏輯值處理;

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

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論