c語言專升本教案_第1頁
c語言專升本教案_第2頁
c語言專升本教案_第3頁
c語言專升本教案_第4頁
c語言專升本教案_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章C語言概述

>c程序的組成和形式

?c程序是由函數(shù)構成網(wǎng)「主函數(shù)

t其他函!

?一個函數(shù)由兩部分組成

行函數(shù)的首部

例1.3中max函數(shù)的首部為

intmax(i

;I

函數(shù)類型函數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名函數(shù)參數(shù)類型函數(shù)參數(shù)名

聲函數(shù)體「聲明部分r變量聲明

Vt函數(shù)聲明

I執(zhí)行部分

?一個C程序總是從main函數(shù)開始執(zhí)行。

?C程序書寫格式自由,一行可以寫幾個語句,一個語句可以寫在多行上。

?每個語句和數(shù)據(jù)聲明的最后必須有一個分號。

?C語言的輸入輸出功能是通過函數(shù)完成的。

?可以用/*......*/對C程序進行注釋。

第三章數(shù)據(jù)類型、運算符、與表達式

§3.1C語言的數(shù)據(jù)類型

>C語言的數(shù)據(jù)類型:整型r整型int

J短整型short

「長整型long

基本類型

單精度型float

實型’

雙精度型double

C字符類型char數(shù)據(jù)類型決定:

數(shù)枚舉類型enum1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)

據(jù)2.數(shù)據(jù)取值范圍

類結構體struct3.其上可進行的操作

型構造類型

共用體union

數(shù)組

指針類型

空類型void

§3.2常量與變量

>常量與符號常量

?常量:在程序運行過程中,其值不能被改變的量

?符號常量:用一個標識符代表一個常量的符號

*使用符號常量的好處:

①含義清楚

日能做到“一改全改”

>變量

?變量:代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),也就是變量的

值,在程序運行期間,這些值是可以改變的。

*標識符:在C語言中用來對變量、符號常量、函數(shù)、數(shù)組、類型等對象命名的有效

字符序列

*標識符的命名規(guī)則:

b只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線。

5大寫和小寫字母是不同的字符,也就是不同的標識符。

卡標識符的最大長度TuoboC規(guī)定為32個字符,一般不超過8個字符。

叱標識符應做到“見名知義”

叱標識符不能是關鍵字,如果是已經(jīng)定義標識符,比如函數(shù)名,則相當于重新定義。

?變量必須''先定義,后使用”

例:判斷下列標識待號合法性

sumSumM.D.JohndayDate

3days

studentname#33lotus_l_2_3

chara>b_above$123

§3.3整型數(shù)據(jù)

>整型常量

?十進制整數(shù):正負整數(shù)

?八進制整數(shù):以0開頭,08是錯誤的用法

?十六進制整數(shù):以0x開頭,例:0x2a是合法的

>整型常量的類型

?一個整型常數(shù)根據(jù)數(shù)據(jù)所在的范圍可自動確定它的數(shù)據(jù)類型

??個整常量后面加一個字母u或U,認為是unsignedint型

?一個整常量后面加一個字母1或L,認為是longint

整型變量

整型數(shù)據(jù)在內(nèi)存中的存放形式:補碼

正整數(shù):該數(shù)的原碼

負整數(shù):該數(shù)的絕對值按位取反再加1

例:10的補碼為0000000000001010

-10的補碼為1111111111110110

最高位是符號位,該位為0表示正,該位為1表示負。

整型變量的分類:六種

,有符號基本整型:[signed]int2-32768~32767(-215-215-1)

?無符號基本整型:unsignedint20?65535(0-291)

?有符號短整型:[signed]short[int]2-32768-32767

,無符號短整型:unsignedshort[int]20-65535

,有符號長整型:[signed]long[int]4-2147483648(-231-23|-1)

,無符號長整型:unsignedlong[int]40?4294967295(0-232-1)

t整型數(shù)據(jù)的溢出

例3.3整型數(shù)據(jù)的溢出

//include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

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

a和b在內(nèi)存中的形式:

運行結果為:0111111111111111___432767

32767,-327681000000000000000___4-32768

§3.4浮點型數(shù)據(jù)

A浮點型常量的表示方法

?十進制小數(shù)形式:(必須有小數(shù)點)如0.123,.123,123.0,0.0,123.

*指數(shù)形式:(e或E之前必須有數(shù)字;指數(shù)必須為整數(shù))如12.3e3,123E2,1.23e4,

e-5.1.2E-3.5

*規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點左邊應有一位(且

只能有一位非零的數(shù)字。

浮點型變量

*浮點型數(shù)據(jù)在內(nèi)存中的存放形式:分成小數(shù)部分和指數(shù)部分兩部分存放

例:3.14159在內(nèi)存中的形式如下(實際存儲的是它的二進制數(shù)形式):

+3141591

符號小數(shù)部分指數(shù)部分

?浮點型變量的分類

類比特數(shù)有效數(shù)字數(shù)值范圍

float326?7-3.4*10-38?34*1()38

double6415?16_]7*10-3。8?17*1()308

lingdouble12818-19-1.2*10-4932?1.2*1(/932

?浮點型變量也應先定義后使用

§3.5字符型數(shù)據(jù)

>字符常量:

?用單撇號括起來的一個字符

?轉義字符:以一個“\”開頭的字符序列:

轉義字符含義轉義字符含義

\n換行\(zhòng)t水平制表8

\b退格\r回車

\\反斜線\f換頁

\'單引雙引號

\ddd1?3位8進制數(shù)代表的字符\xhh1?2位16進制數(shù)代表的字符

main()

{print"'abc\tde\rf\tg\n");

printf("h\ti\b\bjk\n");

}

運行結果應為:

fabcgde實際運行結果為:

hjikfgde

hjk

*輸出的制表符覆蓋了

>字符變量原有字符

*字符變量的定義及使用形式:

charcl,c2;

cl='a';c2='b';

*字符變量在內(nèi)存中占一字節(jié)。

>字符數(shù)據(jù)在內(nèi)存中的存儲形式

?以字符的ASCH碼形式存放

?可以和整型數(shù)據(jù)通用,可以互相賦值,可以以%d或c式輸出,字符型數(shù)據(jù)可以參

加算術運算,但只能存放0?255(unsignedchar)或-128?127(signedchar)之間的整

數(shù)。

例3.6向字符變量賦予整數(shù)

#inchide<stdio.h>

voidmain()

{charcl;intc2;

cl=97;

c2=98;

prin氓"%c%c\nM,cl,c2);

printf("%d%d\nn,c1,c2);

}

運行結果:

ab

9798

例3.7大小寫字母的轉換

#include<stdio.h>

voidmain()

{charcl,c2;

cl=R;

c2=b;

cl=cl-32;

c2=c2-32;

printf("%c%cn,cl,c2);

}

>字符串常量:

?一對雙撇號括起來的字符序列:“abc”

*'a'是字符常量,“a”是字符串常量

?不能將一個字符串常量賦值給字符變量

?系統(tǒng)自動在字符串常量的末尾加上打結束號志

例字符串“hello”在內(nèi)存中:he11o\0

例空串“”在內(nèi)存中

§3.6變量賦初值

>變量賦初值:在定義變量的同時使變量初始化

例:inta=3;

floatf=3.56;

charc=,a,;

inti,j,k=5;

inta,b,c=5;

inta=b=c=5;

§3.7各類數(shù)值型數(shù)據(jù)間的混合運算

>各類數(shù)值型數(shù)據(jù)間的混合運算

*整型、浮點型、字符型數(shù)據(jù)間可以混合運算

*不同類型的數(shù)據(jù)要先轉換成同一類型,再進行運算

?轉換規(guī)則:

double

§3.8算術運算符和算術表達式

>C運算符簡介

算術運算符:(+-*/%++-)

關系運算符:(<<===>>=!=)

邏輯運算符:((!&&||)

位運算符:(“??|.&)

C賦值運算符:(=及其擴展)

運條件運算符:(?:)

算逗號運算符:(,)

符指針運算符:(*&)

求字節(jié)數(shù):(sizeof)

強制類型轉換:(類型)

分量運算符:(.-?

下標運算符:(□)

I其它:(()-)

>算術運算符和算術表達式

?基本算術運算符:+,*,/,%(取余)

卡結合方向:從左向右

5優(yōu)先級:-―?*/%―?+-

(2)(3)(4)

?說明:

b可為單目運算符時,右結合性

面兩整數(shù)相除,結果為整數(shù),遵守“向零取整”的原則

b%要求兩側均為整型數(shù)據(jù)

1例:5%2=1~1

例:5/2=2

-5%2=-1

-5/2=-2

1%10=1

-5/2.0=-2.5

5%1=0

5.5%2(x)I

?算術表達式:用算術運算符和括號將運算對象(操作數(shù))連接起來,符合C語法規(guī)

則的式子。

>強制類型轉換運算符

?一般形式:(類型名)(表達式)

?優(yōu)先級:2級

例:(int)(x+y)

(int)x+y

(double)(3/2)

(int)3.6

?說明:強制轉換得到所需類型的中間變量,原變量類型不變

例main()

{floatx;

inti;

x=3.6;

i=(int)x;

printf("x=%f,i=%d”,x,i);

)

結果:x=3.600000,i=3

>自增、自減運算符++-

?作用:使變量值加1或減1

?種類:

b前置++i,-i(先執(zhí)行i+1或i-1,再使用i值)

向后置i++,i-(先使用i值,再執(zhí)行i+1或i-1)

?說明:

方++-只能用于變量,不能用于常量和表達式,如5++(x),(a+b)++(x)

5++-結合方向:自右向左

優(yōu)先級:++,-----?*,/,%---?+,-

(2)(3)(4)

=i++

例:printf("%d,%d”,i,i++);1==>J>

運行結果:4,3printf("%d,%d”j,i);

例-i++6-(i++)(同一優(yōu)先級右結合性)例j+++k;〈^"?(j++)+k;

i=3;printf(“%d”,-i++);//-3______________________________

§3.9賦值運算符和賦值表達式

>簡單賦值運算符

?符號:=

?格式:變量標識符=表達式

?作用:將一個數(shù)據(jù)(常量或表達式)賦給一個變量

>賦值時若變量和表達式的類型不一致將自動進行類型轉換

例1:inti;

i=3.56;/*實際i值為3*/

例2:floatf;

423;

printf(u%f\n,,,f);結果為:23.000000

例3:doule賦值給float時,截取其前面7位有效數(shù)字,取值范圍超出時產(chǎn)生溢出錯誤。

floatf;

doubled=123.456789el00;

4d;/*出錯*/

例4:字符賦給整型時:

main()

{unsignedcharc,d;

inta,b;

c='\376';d=-125;無符號字符時,將原值存入整

a=c;b=d;型數(shù)的低八位,高八位補零。

printf(t4%d,%d,,,a,b);}

運行結果為:254,131

main()

{charc;

inta;有符號字符時,將原值存入整型數(shù)

,,

c=\376;的低八位,高八位符號擴展。原值

a=c;最高位為零則補零,為1則補1

printff<%d,,,a);)

運行結果為:一2

例5:main()

{inti=289;int,short,long賦值給字符型變

charc;量時,只將其低八位截取賦值

c=i;

printf("%d,%c”,c,c);}

運行結果為:33,!

例6:將int賦值給longint處理方法同例4

將longint賦值給血時截取低16位

main()

{longb=65536;inta;

a=b;

printf("%d”,a);}

運行結果為:0

例7:將unsigned賦給?個同字節(jié)數(shù)的signed型時,將原值保持不變,超范圍會產(chǎn)生溢出

錯誤。

例:main()

{unsignedinta=65535;

intb;

b=a;

printfC€%d,,,b);}

運行結果為:一1

例8:將signed賦給一個同字節(jié)數(shù)的unsigned型時,將原值保持不變

main()

{unsignedinta;

intb=?l;

a=b;

pr血f(“%d”,a);}

運行結果為:65535

>復合賦值運算符

?種類:+=-=*=/=%=?=?=&=A=|=

含義:變量op=表達式?——變量=變量op(表達式)

a+=3vaa=a+3

x*=y+8v>x=x*(y+8)

x%=3<c---->x=x%3

>賦值表達式

?一?般形式:變量=表達式

?賦值表達式的值與變量值相等,且可嵌套,但賦值號左邊必須為變量

正確用法:

a=b=c=5

a=(b=5)

a=5+(c=6)

a=(b=4)+(c=6)

a=(b=10)/(c=2)

錯誤用法:

3=x-2*y;

a+b=3;

a=3*5=4*3

例:a=12;

a+=a-=a*a/*a=-264等價于a=a+(a=a-(a*a))*/

例:b=3;

printf(64%d,,,a=b);

§3.10逗號運算符和逗號表達式

形式:表達式1,表達式2,……表達式n

結合性:從左向右

優(yōu)先級低于賦值表達式

逗號表達式的值:等于表達式n的值

a=3*5,a*4/*a=15,表達式值60*/

a=3*5,a*4,a+5/*a=15,表達式值20*/

x=(a=3,6*3)/*賦值表達式,表達式值表,x=18*/

x=a=3,6*a/*逗號表達式,表達式值18,x=3*/

例a=l;b=2;c=3;

printf("%d,%d,%d”,a,b,c);/*1,2,3*/

printf("%d,%d,%d",(a,b,c)bc);/*3,2,3*/

>課堂練習:

分析下面程序的運行結果:

main()

{floatfl;inta;charc=,a';

f1=32.78;

c=c-(int)f1;

a=c%15;

printf(a%d,%f,%c\nw,a,fl,c);}

第一章與第三章練習題

1.一個c程序的執(zhí)行是從一。

A)本程序的main函數(shù)開始,到main函數(shù)結束

B)本程序文件的第一個函數(shù)開始,到本程序文件的最后一個函數(shù)結束

C)本程序的main函數(shù)開始,到本程序文件的最后一個函數(shù)結束

D)本程序文件的第一個函數(shù)開始,到本程序main函數(shù)結束

2.以下敘述正確的是:

A)在C程序中,main函數(shù)必須位于程序的最前面

B)C程序的每行中只能寫?條語句

0C語言本身沒有輸入輸出語句

D)在對個C程序進行編譯的過程中,可發(fā)現(xiàn)注釋中的拼寫錯誤

3.以下敘述不正確的是。

A)一個C源程序可由一個或多個函數(shù)組成

B)一個C源程序必須包含一個main函數(shù)

C)C程序的基本組成單位是函數(shù)

D)在C程序中,注釋說明只能位于一條語句的后面

4.C語言規(guī)定:在一個源程序中,main函數(shù)的位置。

A)必須在最開始

B)必須在系統(tǒng)調(diào)用的庫函數(shù)的后面

C)可以任意

D)必須在最后

5.一個C語言程序是由

A)一個主程序和若干子程序組成B)函數(shù)組成

C)若干過程組成D)若干子程序組成

6.若x,i,j和k都是int型變量,則執(zhí)行下面表達式后x的值為

x=(i=4,j=16,k=32)

A)4B)16032D)52

7.假設所有變量均為整型,則表達式(a=2,b=5,b++,a+b)的值是:

A)7B)8C)6D)2

8.C語言中的標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符

A)必須為字母B)必須為下劃線

C)必須為字母或下劃線D)可以是字母,數(shù)字和下劃線中任一種字符

9.若有代數(shù)式3ae/bc,則不正確的C語言表達式是:

A)a/b/c*e*3B)3*a*e/b/c

C)3*a*e/b*cD)a*e/c/b*3

10.以下不正確的敘述是

A)在C程序中,逗號運算符的優(yōu)先級最低

B)在C程序中,APH和aph是兩個不同的變量

C)若a和b類型相同,在執(zhí)行了賦值表達式a=b后b中的值將放人a中,而b中的值不變。

D)當從鍵盤輸入數(shù)據(jù)時,對于整型變量只能輸入整型數(shù)值,對于實型變量只能輸入實型

數(shù)值。

11.以下正確的敘述是:

A)在C程序中,每行中只能寫一條語句

B)若a是實型變量,C程序中允許賦值a=10,因此實型變量中允許存放整型數(shù)

C)在C程序中,無論是整數(shù)還是實數(shù),都能被準確無誤地表示

D)在C程序中,%是只能用于整數(shù)運算的運算符

12.以下符合C語言語法的賦值表達式是

A)d=9+e+f=d+9B)d=9+e,f=d+9

C)d=9+e=e++,d+9D)d=9+e++=d+7

13.已知字母A的ASCII碼為十進制數(shù)65,且c2為字符型,則執(zhí)行語句c2='A'十'6'一

'3';后,c2中的值為

A)DB)68C)不確定的值D)C

14.在C語言中,要求運算數(shù)必須是整型的運算符是。

A)/B)++c)!=D)%

15.若以下變量均是整型,且num=sum=7;則執(zhí)行表達式sUM=num++,sllM++,++num后sum

的值為

A)7B)8C)9D)10

16.在C語言中,int、char和short種類型數(shù)據(jù)在內(nèi)存中所占用的字節(jié)數(shù)

A)由用戶自己定義B)均為2個字節(jié)

0是任意的D)山所用機器的機器字長決定

17.若有說明語句:charc='\72'則變量c

A)包含1個字符B)包含2個字符

C)包含3個字符D)說明不合法,c的值不確定

18.若有定義:inta=7;floatx=2.5,y=4.7;則表達式x+a%3*(int)(x+y)%2/4的值是

A)2.500000B)2.750000c)3.500000D)0.000000?

19.sizeof(float)是:

A)一個雙精度型表達式B)一個整型表達式

C)一種函數(shù)調(diào)用D)一個不合法的表達式

20.設變量a是整型,f是實型,i是雙精度型,則表達式10+'a'+i*f值的數(shù)據(jù)類型為

A)intB)floatC)doubleD)不確定

21.在C語言中,char型數(shù)據(jù)在內(nèi)存中的存儲形式是:

A)補碼B)反碼C)原碼D)ASCII碼

22.表達式18/4*sqrt(4.0)/8值的數(shù)據(jù)類型為:

A)intB)floatC)doubleD)不確定

23.設C語言中,?個int型數(shù)據(jù)在內(nèi)存中占2個字節(jié),則unsignedint型數(shù)據(jù)的取值

范圍為:

A)0—255B)0~32767C)0~65535D)0~2147483647

24.設有說明:charw;intx;floaty;doublez;則表達式w*x+z—y值的

數(shù)據(jù)類型為:

A)floatB)charC)intD)double

25.若有以下定義,則能使值為3的表達式是:

intk=7,x=12;

A)x%=(k%=5)B)x%=(k—k%5)

C)x%=k-k%5D)(x%=k)—(k%=5)

26.設以下變量均為int類型,則值不等于7的表達式是

A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)

0(x=6,x+1,y=6,x+y)D)(y=6,y+1,x=y,x+1)

第四章順序程序設計

§4.1C語句

>C語句分類

?程序控制語句(9種):

_Tif()~else~

分支

Lswitch

for()~

Jwhile()~

循環(huán)

?do~while()

continue

break

輔助控制

]goto

、return

?表達式語句:表達式加分號構成。

夕函數(shù)調(diào)用語句:函數(shù)名(實際參數(shù)表);

吠賦值語句:賦值表達式加一個分號

a=3;

i++;

吠其他表達式構成語句:表達式加一個分號

x+y;/*合法但無意義*/

?空語句:;

?復合語句:用{…}括起來的一組語句

它一般形式:{[數(shù)據(jù)說明部分;]

執(zhí)行語句部分;

句說明:

?“}”后不加分號

?語法上和單一語句相同

復合語句可嵌套

§4.2字符數(shù)據(jù)的輸入輸出

>字符輸出函數(shù):

?格式:putchar(c)

?參數(shù):c為字符常量、變量或表達式

?功能:把字符C輸出到顯示器上

ftinclude<stdio.h>

main()

{intc;

chara;

c=65;a=,B';

putchar(c);putchar('\n");putchar(a);

}

>字符輸入函數(shù)

?格式:getchar()/*無參函數(shù)*/

?功能:從輸入設備得到一個字符作為函數(shù)值賦值給一個字符變量

例:charc;

c=getchar();

putchar(getchar());

printf("%c”,getchar。);

§4.3格式輸出printf函數(shù)

Aprintf函數(shù)

?一般格式:printf(“格式控制串”,輸出表)

?功能:按指定格式向顯示器輸出數(shù)據(jù)

?輸出表:要輸出的數(shù)據(jù)(可以沒有,多個時以“,”分隔)

?格式控制串:包含兩種信息

卡格式說明:%[修飾符]格式字符,用于指定輸出格式

曲普通字符或轉義序列:原樣輸出

d,i十進制整數(shù)inta=567;printf("%d”,a);5677

x,X十六進制無符號整數(shù)inta=255;printf("%x”,a);fff

0八進制無符號整數(shù)inta=65;printfT%o”,a);1Al

4t,

u不帶符號十進制整數(shù)inta=567;printfT%u\a);567

c單一字符chara=65;printfC4%c,\a);A

s字符串print.%”,“ABC”);AB

floata=567.789;printtVu%e,,,a);

e,E指數(shù)形式浮點小數(shù)5.677890e+02

tt,

f小數(shù)形式浮點小數(shù)floata=567.789;printfi[%f,a);567.789000

g-Ge和仲較短一種floata=567.789;printf(u%g,,,a);567.789

%%百分號本身printfC%%”);%

?說明

行格式字符要用小寫(X,E,G除外)

①格式字符與輸出項個數(shù)應相同,按先后順序一一對應

#include<stdio.h>

voidmain()

{inta;

a=12;

printf("%d,%d”,a,13);

運行結果:12,13

修改:printf(〃%d,%d〃,a);

運行結果:12,0

修改:printf(〃%d〃,a,13);

運行結果:12

,輸出轉換:格式字符與輸出項類型不一致,自動按指定格式輸出(某種情況下可,某種

情況不能轉換)

?附加格式說明符(修飾符)

修飾符功先巨

m輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長度vm,左補空格;否則按實際輸出(用于整型、浮點、字待串)

對實數(shù),指定小數(shù)點后位數(shù)(四舍五入)

.n

對字符串,指定實際從左端截取的字符的個數(shù)

-輸出數(shù)據(jù)在域內(nèi)左對齊(岐省右對齊)

在d,o,x,u前,指定輸出精度為long型

1在e,f,g前,指定輸出精度為double型(double型也可以直接用%f輸出)

課堂練習:分析下列程序的運行結果:

例inta=1234;

floats123.456;

charch='a';

printfC4%8d,%2d\n,,,a,a);

printfr%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);

printfC4%3c\n,,,ch);

運行結果:

1234,1234

123.456000,123.456000,123.5,123.46,1.23e+02

a

例:無符號數(shù)據(jù)的輸出

#include<stdio.h>

voidmain()

{unsignedinta=65535;

intb=-2;

printf(na=%d,%o,%x,%u\nn,a,a,a,a);

printf(,,b=%d,%o,%x,%u\nn,b,b,b,b);

)

運行結果為:

a=-l,177777,ffff,65535

b=-2,l77776,ffife,65534

例:字符串的輸出

#include<stdio.h>

voidmain()

{

printf("%3s,%7.2s,%.4s,%-5.3s\n”JCHINA”JCHINA","CHINA”,“CHINA");

|

運行結果:

CHINA,CHIN,CHI##

(#號代表空格)

例:輸出實數(shù)時的有效位數(shù)(一般7位有效數(shù)字)

#include<stdio.h>

voidmain()

{floatx,y;

x=llllll.lll;y=222222.222;

printf(H%f,,x+y);

}

運行結果為:

333333.328125

例:輸出雙精度數(shù)時的有效位數(shù)(般16位有效數(shù)字)

#include<stdio.h>

voidmain()

{doublex,y;

111111111;

產(chǎn)2222222222222.222222222;

printf(M%f\x+y);

}

運行結果為:

3333333333333.333000

§4.4格式輸入函數(shù)scanf()

Ascanf函數(shù)

?一般格式:scanf(“格式控制串”,地址表列)

?功能:按指定格式從鍵盤輸入數(shù)據(jù)

?地址表列:由若干個地址組成的表列,可以是變量的地址,或字符串的首地址

?格式字符:d,i;o;x,X;u;c;s;f,e,E,g.,G

?附加格式說明符(修飾符)

修飾符功

h用于d,o,x前,指定輸入為short.型整數(shù)

用于d,o,x,u前,指定輸入為long型整數(shù)

1

用于e,f前,指定輸入為double型實數(shù)

?輸入數(shù)據(jù)時,遇以下情況認為該數(shù)據(jù)結束:

卡遇空格、TAB、或回車

e遇寬度結束

廿遇非法輸入

#include<stdio.h>

voidmain()

{inta,b,c;

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

printf("%d,%d,%d\n〃,a,b,c);

必,四田c,「菽贏以空格,回車鍵,Tab鍵分隔

輸入數(shù)據(jù):345------------一

運行結果:3,4,5————

以下輸入方法均正確:①345

②3

45

③3(按Tab鍵)4

5

例scanf(a%d%o%xw,&a,&b,&c);

printf(<<a=%d,b=%d,c=%d\n,',a,b,c);

輸入123123123J

輸出a=123,b=83,c=291

例scanf("%4d%2d%2d”,&yy,&mm,&dd);

輸入19991015J

則1999=>yy,10=>mm,15=>dd

例scanf("%2d%*3d%2d”,&a,&b);

輸入1234567J

則12na,67nb

例scanf("%3d%*4d%f”,&k,&f);

輸入12345678765.43J

貝1」123=>k,8765.43nf

例scanf("a=%d,b=%d,c=%dw,&a,&b,&c);

輸入a=12,b=24,c=36J

例scanf(<<%d%c%f,),&a,&b,&c);

若輸入1234al23o.26J

貝I」1234na,'a'=例intx;

例intx;charch;

scanf("%d",&x);

scanf("%c”,&.ch);

printf("x=%d,ch=%d\n>,,x,ch);

執(zhí)行:123J

輸出:x=123,ch=10

charch;

scanf("%d”,&x);

ch=getchar();

printf("x=%d,ch=%d\n”,x,ch);

執(zhí)行:123」

輸出:x=123,ch=10

例main()

{doublef;

scanf(a%lf",f);〃1不能省略

printf("%f",f);}

§4.6順序結構程序設計舉例

例4.10輸入三角形的三個邊長,求三角形的面積

分析:式假設輸入的三個數(shù)可以構成一個三角形,則由三條邊求三角形面積公式為:

s=2(〃+Z?+c)

area='sx(s-〃)x(s-b)x(s-c)

程序如下:

#include<math.h>

#include<stdio.h>

main()

{floata,b,c,s,area;

scanfC%f,%f,%f〃,&a,&b,&c);

s=l.0/2*(a+b+c);

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

printfCa=%7.2f,b=%7.2f,c=%7,2f,s=%7,2f\n\a,b,c,s);

printf("area=%7.2f\n〃,area);

輸入:3,4,6」

輸出:a=3.00,b=4.00,c=6.00s=6.50

area=5.33

例求ox2+for+c=0方程的根,設人2一4ac>0

分析:一元二次方程的根為:

-b±^lh2-4ac

x=------------------

2a

#include<stdio.h>

#include<math.h>

main()

{floata,b,c,disc,xl,x2,p,q;

scanf("a=%f,b=%f,c=%f〃,&a,&b,&c);

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

p=-b/(2*a);q=sqrt(disc)/(2*a);

xl=p+q;x2=p-q;

printf('\n\nxl=%5.2f\nx2=%5.2f\n〃,xl,x2);

)

輸入:a=l,b=3,c=2J

輸出:

xl=-1.00

x2=~2.00

第五章選擇結構程序設計

§5.1關系運算符和關系表達式

>關系運算符

?種類:<<===>=>!=

?結合方向:自左向右

?優(yōu)先級別:低于算術運算符,高于賦值運算符(算術-關系-賦值-逗號)

>優(yōu)先級6(高)

L優(yōu)先級7(低)

例c>a+b//c>(a+b)

a>b!=c//(a>b)!=c

a==b<c//a==(b<c)

a=b>c//a=(b>c)

?關系表達式的值:是邏輯值“真”或“假”,用1和0表示

例inta=3,b=2,c=l,d,f;

a>b〃表達式值1

(a>b)==c〃表達式值1

b+c<a〃表達式值0

d=a>b〃d=l

K=0,合法,但不要理解錯含義

例inti=l,j=7,a;

a=i+(j%4!=0);

結果:a=2

例3>0結果為1

4^>100結果為0

例5>2>7>8在C中是允許的,

值為0

例注意區(qū)分與“=="

inta=0,b=1;

if(a=b)〃改為if(a==b)

printff'aequaltob");

else

printff'anotequaltob");

例應避免對實數(shù)作相等或不等的判斷(有些系統(tǒng)可以)

如1.0/3.0*3.0==1.0有的系統(tǒng)結果為0,有的系統(tǒng)結果為1

可改寫為:fabs(1.0/3.0*3.0-1.0)<le-6

§5.2邏輯運算符和邏輯表達式

>邏輯運算符和表達式

?邏輯運算符

句種類:&&(與)||(或)!(非)

的邏輯運算規(guī)則:

&&:兩個操作數(shù)同時為真,其值為真,否則為假

||:兩個操作數(shù)有一者為真則其值為真,全為假則為假

1:若操作數(shù)為真,則其值為假,若操作數(shù)為假,則其值為真。

吠優(yōu)先級:!一?算術運算符—關系運算符—&&和||-?賦值—?逗號

高---------------------------------------------------?低

卡結合性:!:從右向左

&&:從左向右

||:從左向右

華說明:當邏輯運算的操作數(shù)為數(shù)值型值時,若該值為0則為假,非0則為真

例a<=x&&x<=b//(a<=x)&&(x<=b)

a>b&&x>y//(a>b)&&(x>y)

a==b||x==y//(a==b)||(x==y)

!a||a>b//(!a)||(a>b)

例a=4;b=5;

!a值為0

a&&b值為1

a||b值為1

!a||b值為1

4&&0||2值為1

5>3&&2||8<4-!0//(5>3)&&2||(8<(4-(!0)))值為1

'c'&&'d'值為1

?短路特性:邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行

下一個邏輯運算符才能求出表達式的解時.,才執(zhí)行該運算符

例a&&b&&c〃只在a為真時,才判別b的值;

只在a、b都為真時,才判別c的值

例a||b||c//只在a為假時,才判別b的值;

只在a、b都為假時,才判別c的值

例a=1;b=2;c=3;d=4;m=1;n=1;

(m=a>b)&&(n=c>d)〃結果m=0,n=l

§5.3if語句

>if語句的三種形式

?形式一:

格式:if(expression)

statement

▼執(zhí)行過程:

V

=0

條件表達式

非0

語句

例:if(x>y)

printfC%d”,x);

?形式二:

好格式:if(expression)

statement1

else

statement?

例:if(x>y)max=x;

elsemax=y;

?形式三:

▼格式:

if(表達式1)語句1

elseif俵達式2)語句2

elseif(表達式3)語句3

[else語句n]

例:if(number>500)cost=0.15;

elseif(number>300)cost=0.1;

elseif(number>100)cost=0.075;

elseif(number>50)cost=0.05;

elsecost=0;

?說明:

bif后面的表達式類型任意,按表達式值為0還是非0區(qū)分真假,一般為邏輯或

關系表達式

b語句可以是復合語句

bif(x)oif(x!=0)例:if(3)為真;if(3)為真

if<!x)oif(x==0)

例51輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)

程序如下:

#include<stdio.h>

voidmain()

(

floata,b,t;

scanff%f,%F,&a,&b);

if(a>b)

{t=a;a=b;b=t;}

printf(n%5.2f,%5.2f\nn,a,b);

)

例52輸入3個數(shù)a,b,c,要求按由小到大的順序輸出

程序如下:

#include<stdio.h>

voidmain()

floata,b,c,t;

scanf("%f,%f,%f',&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if{b>c)

{t=b;b=c;c=t;}

printfC%5.2f,%5.2f,%5.2f\n”,a,b,c);

}

?if語句嵌套:

團一般形式:(else總是與離它最近的if配對)

if(exprl)

if(e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論