計算機培訓(xùn) c語言知識點概要_第1頁
計算機培訓(xùn) c語言知識點概要_第2頁
計算機培訓(xùn) c語言知識點概要_第3頁
計算機培訓(xùn) c語言知識點概要_第4頁
計算機培訓(xùn) c語言知識點概要_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言章節(jié)復(fù)習(xí)

第一章:c語言概述

1、c語言的特點

1)任何一個C程序有且有一個main。函數(shù)。

2)任何一個C程序文件有且有一個main()函數(shù),

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

3)C程序的基本單位是函數(shù)。

4)C函數(shù)的基本單位是語句。

5)C程序的每個語句必須以;結(jié)束。

6)C程序的以/**/作注釋的開始和結(jié)尾。

7)C程序的每個語句可以寫多行。

8)C程序的每行可以寫多個語句

如:a=10;printf("%d\n",a);

9)C語言區(qū)分大小寫。_

10)C語言沒有輸入輸出語句,由函數(shù)代替。

11)“#"為編譯以預(yù)處理,“include”包含語句。

12)在C只能識別半角語言字符,不能用全角。如果想輸出漢字,必須在函數(shù)內(nèi)用“”括

起來。

第二、三章:數(shù)據(jù)類型、運算符和表達式及標準輸入輸出

1、C程序的標識符只能由字母、數(shù)字、下劃線組成、并且第1個字符必須為字

母___和下劃線。

2、常量

整型:三種表示形式:a)十進制整數(shù),例:12;b)八進制整數(shù),例:012;c)十六進

制整數(shù),如0、258、-3875、0357、0x35b、-6945L

實型:兩種表示形式:a)十進制小數(shù)形式,例:123.456;b)指數(shù)形式,例:le3,2.3e-3。

13.6795、-0.58、-.45、100.、0.5e5、-12.4e-10>12.5E-2

注意:1)E后的指數(shù)部分必須為整數(shù)

2)在字母E或e的前后必須有數(shù)據(jù)

3)在字母E或e的前后及數(shù)字之間不能有空格

字符型:用''括號括起來的單個字符

1)普通字符:一、B、一、文、小、丫

2)轉(zhuǎn)義字符:,\n'、'\t'、''r'、'\b'、'\\'、'\"、

3)用外”加上1~3位八進制表示一個字符(范圍0~377),如35夕、3127,、\07,

用“\x”加上1~2位16進制表示一個字符,如,\x54,、,\xa7,、

字符串型:用””括號括起來的多個字符,c語言自動在后面加上。

如"Thisisamap!”、“bdWQ\\hm\bab\'89\"4A\tOU”

符號常量:#definePI3.14

#defineEOF(-1)

3、一個變量包含五個要素望、名彝、內(nèi)容、地址、存儲類型。

4、填寫下表

類型表示占用字節(jié)數(shù)表數(shù)范圍/有效位數(shù)輸出格式

(視系統(tǒng)而

定)

整型Int2-32768-4-32767%d%o%x

無符號整型unsigned20?65535%u%o%x

長整型Long4-2147483648+2147483647%ld%lo%lx

單精度浮點型Float4%f%e%g

雙精度浮點型Double8%lf%f%e

字符型Char10-255%c

字符串型charNn%s

5、不同類型的數(shù)據(jù)進行混合運算時,數(shù)據(jù)的轉(zhuǎn)換方式有兩種:自動轉(zhuǎn)換和強制類型轉(zhuǎn)換,

其中前一種轉(zhuǎn)換方式的規(guī)則是:低類型轉(zhuǎn)換成高類型、賦值號右邊的類型轉(zhuǎn)換成左邊的

類型

6、printf(“格式控制”,輸出列表)

1)格式控制包括:原樣輸出字符、格式符、轉(zhuǎn)義字符、

格式符包括(d、o、x或X、u、f、e或E、g或G、c、s、p)

2)輸出列表可以是常量、變量、表達式,都是輸出它們的值,各項之間用“,“分隔。

3)格式控制與輸出列表類型和項數(shù)相同

4)指定寬度m或m.n

A)m表示輸出的總寬度。實際寬度<m時左邊補0,實際寬度>m時則按實際位數(shù)

輸出。如printf(“%6d,%3d\n”,3587,3587);

B)n表示按四舍五人輸出的小數(shù)位數(shù),或表示只取字符串左端n個字符。

如printf(“%7.3f,%5.4s”,590.5327,”abcder「);

5)加L或1:用于輸出long型和double型

6)加減號-:左對齊

7)加0:左邊補0

7、scanf((“格式控制”,輸入的地址列表)

1)格式控制包括:格式符、原樣輸入字符

2)地址列表一定是地址:普通變量地址、字符串數(shù)組名(首地址)

3)輸入的各項之間用空格、Tab鍵、回車分隔。

4)格式符前加1,表示輸入長整型數(shù)據(jù)(可用%ld、%加、%lx、%lu)及double數(shù)據(jù)

(可用%If、%le).

5)格式符前加數(shù)字m,用來指定輸入數(shù)據(jù)的寬度,但不能指定精度m.n。

如:scanf("%3d%4d”,&a,&b);

6)%后加*m,表示跳過(丟掉)m歹

如:scanf("%4d%*3d%4d”,&a,&b);(分別輸入1234567和123456789)

7)scanf()輸入字符串時,遇空格則輸入結(jié)束。如

8、算術(shù)運算(+、-、*、/、%、++、--)

1)兩個整數(shù)相除“/“,結(jié)果為整數(shù),兩個實數(shù)相除“/“,結(jié)果為double實數(shù)。

如:50/8值:650./8值:6.125

printf(M%d,%f\n,,,50/8,50./8);結(jié)果

2)取余運算%只適用于整數(shù),且余數(shù)的符號與被除數(shù)的符號相同。

如:50%8值:,-50%8值:

50%-8值:,-50%-8值:

3)自增自減運算

A)++i、--i:變量的值先加1或減1,然后以新值進行其他運算。

B)i++,i-:變量先以原值參與其他運算,然后其值再加1或減1,新值在下一個表

達式或語句生效。如:

main()

{inti=3J,k;

j=i++,k=i;i++;

printf(w%d,%d,%d\n,,,i,j,k);

執(zhí)行i=3;j=(i++)+(i++)+(i++);后i的值是§、j的值是£

執(zhí)行i=3;j=(++i)+(++i)+(++i);后i的值是、j的值是18

C)++、--運算只能用于變量,不能用于常量和表達式。

D)注意區(qū)別普通變量的自增、數(shù)組指針變量和結(jié)構(gòu)數(shù)組指針變量的自增自減的意義。

如:inta=3,b[5],*p=b;

貝!Ia++、p++的意義是__________________________

4)算術(shù)運算的優(yōu)先級++--、*/%、+-

9、賦值運算(=、+=、-=、*=、/=、%=、...)

a)賦值號左邊必須是變量,右邊可以是常量、變量、表達式。

b)賦值后變量的值變?yōu)樾沦x的值,原值被沖掉且無法恢復(fù)。

0賦值運算的結(jié)合性為“自右至左“。

如:執(zhí)行a=10;a+=a-=a*a;后a的值:

a=5,則執(zhí)行a+=a*=a-3后,a的值是

4)區(qū)別a-10>與a=a-10,~a,a?2

10、關(guān)系運算(>、<、>=、<=、==、!=)

a)關(guān)系運算的結(jié)果為:0或1

b)關(guān)系運算把非零數(shù)都看成為了1

c)>^<、>=^<=的優(yōu)先級高于==、!=

11、邏輯運算(與&&、或||、非!)

a)與&&:兩數(shù)都為“r結(jié)果為“1"。

b)或||:兩數(shù)都為”0,結(jié)果為“0"。

c)非!:"0”的非是“1“,"1”的非是“0"。

d)優(yōu)先級:!最高、&&居中、||最低。

e)注意短路現(xiàn)象。

12、條件運算(式1?式2:式3)

1)條件運算的優(yōu)先級僅高于賦值運算和逗號運算。

2)如:x=4,y=6,z=x>y?x+y:x-y,z的值是

x=4,y=6,z=x+5>y?x+y:x-y,z的值是

x=4,y=6,z=5,z+=x+5>y+3?x+y:x-y,z的值是

13、逗號運算(式1,式2,…,式n);

1)依次計算各表達式的值,最后一個表達式的值作為整個逗號表達式的值。

2)逗號運算的優(yōu)先級最低

如:表達式(x=(a=2,a+7),b=5))的值是

a=5;執(zhí)行語句x=a+7,b=5;后x=;

3)一個逗號表達式可以與另一個表達式構(gòu)成新的逗號表達式。

如:表達式(x=2*5,x*5),x+5的值是

4)并不是所有出現(xiàn)“,”的地方都作逗號運算符。(int、printLscanf)

如:printf("%d,%d\n”,(x,y,z),z);

14、sizeof()運算符

1)計算各類數(shù)據(jù)所占存儲空間的字節(jié)數(shù)。

2)括號可以是常量、變量、類型說明符等

若inta,b[20];char*p="abcdefghi”;

如sizeof(5)、sizeof(5.2)、sizeof('a')、sizeof("abcde")、

sizeof(a)、sizeof(b)、sizeof(p)

sizeof(char)、sizeof(double),sizeof(strucustudent)

15、所有運算的優(yōu)先級。

1級、()、[]、.、->

2級、單目運算?、!、*、&、++、--從右向左

3、4級算術(shù)運算:*、/、%、+、-

5級、移位運算:<<?

每左移一位,等于該數(shù)*2,每右移一位,等于該數(shù)/2取整。

6、7級關(guān)系運算:>、<、>=、<=、==、!=

8、9、10級位運算:&位與、入(異或)、|位或

先化二進制,再進行位運算。其中異或算法是兩位相同則為0,兩位相異則為1

11、12級邏輯運算:&&、||

13級、條件運算:式1?式2:式3;從右向左

14級、賦值運算:=、+=、*=、/=、%=,結(jié)合性從右向左。

15級、逗號運算:式1,式2,…式n;

第四章:選擇結(jié)構(gòu)

特別要注意:C語言中是用匪可表示邏輯真的,甬也表示邏輯假的。

C語言有構(gòu)造類型,沒有邏輯類型。

關(guān)系運算符號:注意<=的寫法,==和=的區(qū)別!(考試重點)

if只管后面一個語句,要管多個,請用大括號!

If(a),if(!a)表示什么意思

1、單分支:if(表達式)

語句;

功能:先計算表達式的值,若為“1”,則執(zhí)行“語句”,然后再執(zhí)行后續(xù)語句;

若為“O”,直接執(zhí)行后續(xù)語句;

2、雙分支:if(表達式)

語句1;

else

語句2;

功能:先計算表達式的值,若為"1”,則執(zhí)行“語句1”,然后再執(zhí)行后續(xù)語句;

若為“0”,則執(zhí)行“語句2”,然后執(zhí)行后續(xù)語句;

說明:1)應(yīng)把if語句看成一條語句,分為兩部分,寫兩行,并后縮。

2)語句包含多個條時,用{}括起來組成復(fù)合語句。

3)多分支由雙分支構(gòu)成。

4)else總是與最靠近的if結(jié)合。

5)多分支的形式有多種,構(gòu)成if…else嵌套。

6)任何多分支都可用多個單分支完成。

7)”條件表達式”中若為與運算&&,若&&前面的式子值為0,則不再運算&&后

面的式子。如:

main。

{inta,b,k;

if(++a<0&&b—<=b-+l)ab結(jié)果

printf(M%d,%d\n5\a,b);-1550

else-454-3

printf(u%d,%d\nw,b,a);-40-3-1

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

3、多分支:if(表達式1)

語句1;

elseif(表達式2)

語句2;

elseif(表達式3)

語句3;

else

語句4;

4、多分支:switch(表達式)

{case常量表達式1:語句1;

break;

case常量表達式2:語句2;

break;

case常量表達式n:語句n;

break;

default:語句n+1;

1)功能:先計算表達式的值,與case后的常量表達式相同時,則進入,若都不相同則

從default中進入。進入后順序執(zhí)行,遇break則退出switch語句。

2)default語句可有可無,位置可先可后。

3)表達式的結(jié)果只能是整型值或字符值,case后面一定要只能是整型常量或字符常量

表達式,如0、4、?5、3+2、50、'A'、%’等,不能i+3、“abed”等。

例:main()

{inta;

scanf(n%dn,&a);

switch(a-3)

{case1:a+=l;

case2:a+=2;

case3:a+=3;

case4:a+=4;

case5:a+=5;

default:a+=l();

)

printf(Ha=%dK,a);

}

4)寫出下列程序的結(jié)果

main()

{intx,y;

scanf(u%d9,,&x);

y=i;

if(x<=0)輸入X值丫值

if(x=0)5-1

y=o;00

else-41

y=-i;

printf(u%d\nv,y);

第五章:循環(huán)結(jié)構(gòu)

1、while循環(huán)

while(表達式)

循環(huán)體;

2、do…while循環(huán)

do{

循環(huán)體;

}

while(表達式);

3、for循環(huán)

for(表達式1;表達式2;表達3)

循環(huán)體;

4、說明

1)理解三種循環(huán)的執(zhí)行過程

條件為“1”,執(zhí)行循環(huán)體;條件為“0”,退出循環(huán),執(zhí)行后續(xù)語句。

2)整個循環(huán)語句作為一個語句,寫成兩行,注意后縮。

3)注意與if語句區(qū)別:都有條件表達式,if語句只判斷并執(zhí)行一次,循則多次判斷執(zhí)

4)注意用簡易方法分析循環(huán)。

5)注意與if語句連用時的分析

6)理解雙循環(huán)的執(zhí)行過程。

7)進入循環(huán)前,注意某些變量賦初值,如:求和s=0,求積n=l,排序、求最大公約數(shù)等。

8)”條件表達式”中若為與運算&&,若&&前面的式子值為0,則不再運算&&后面的

式子。如:

main()

{inta=5,b=8;ab結(jié)果

while(++a>7&&-b<7)

77

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

86

printf(u%d,%d\n,9,a,b);

84

|

5、break;:①用于結(jié)束整個循環(huán),

②它只能跳出其所在的循環(huán)不能跳出外層循環(huán),

③只能用于循環(huán)和switch語句。

6、continue;:用于結(jié)束本次循環(huán),開始下一次循環(huán)。

7、程序舉例:

1)判斷一個數(shù)是否為素數(shù),輸出100?200之間所有素數(shù)的個數(shù);(例5.7,5.8)

2)計算II的值(見例5.4,plOO)

3)計算級數(shù)的值(見習(xí)題5-8,P113)

4)求階乘n!。

第六章:數(shù)組

數(shù)組

一、一維數(shù)組

1、定義、意義

格式:數(shù)據(jù)類型數(shù)組名[整型數(shù)];

如:inta[10];

意義:定義了10個變量(元素),每個變量存放一個整數(shù)。

a[0]、a[l],a[2]、a[3],a[4],a[5]、a[6],a[7]>a[8]、a[9]

說明:下標從0開始,定義時的下標可以是整型數(shù)、整型數(shù)的表達式或符號常量。

不能使用變量。

如:#defineN10

inta[10],score[N],b[4+6];

2、賦值:

1)直接賦值:a[0]=6;a[l]=5,a[2]=a[0]+a[l];

2)定義時賦值

inta[10]={7,5,3,8,9,l,2,10,6,4};

floatb[20]={6.5,8.9,4.6};

注意:A)定義時不賦初值,所有元素的值不確定。賦值一部分,其余元素值為

0或,\0二

B)可以省略下標inta[]={7,5,3,8,9,1,2,10,6,4);

C)賦值個數(shù)不能多于下標數(shù),否則系統(tǒng)會報錯。

D)不能inta[10]={};或inta[10]={7,5,,,9,1,2);

3)鍵盤賦值:scanf("%d”,&a[O]);(可用循環(huán)對所有元素賦值)

3^輸出:數(shù)值數(shù)組,必須一個個單獨輸出。如printf("%d”,a[O]);

4、數(shù)組的存儲:按元素的先后順序存儲。數(shù)組名表示首地址,是常量,定義后不能賦

值。

5、注意區(qū)別:定義時賦值與非定義時賦值。

如:inta[10]={7,5,3,8,9,l,2,10,6,4};

a[10]={7,5,3,8,9,l,2,10,6,4};(錯誤!!)

6、例題:

1)找出下列數(shù)據(jù)的最小值輸出(用三種方法編程)。

32596471081

2)輸入10個整數(shù),找出它們的最小值,輸出最小值和位置。

3)從鍵盤輸入10個整數(shù),輸出它們并計算它們的平均值。

4)從鍵盤輸入10個整數(shù),存入一個數(shù)組中,然后對其數(shù)據(jù)倒置并輸出。

5)對下列數(shù)據(jù)按從小到大排序輸出。(分別用選擇排序、冒泡排序、直接交換排序編程)

3,8,5,9,6,2,10,7,1,4

二、字符數(shù)組

1、字符數(shù)組的作用:用于存放字符串(string)。字符串是用雙引號括起來的一串字符,

后面自動加,MT,如“ABCDE"、"Student"、"Thisisamap”

2、字符數(shù)組的定義、意義

格式:數(shù)據(jù)類型數(shù)組名[整型數(shù)];

如:chars[10];

意義:定義了10個變量(元素),每個變量存放一個字符。

s[0]>s[l],s[2]、s[3],s[4]、s[5],s[6]、s[7],s[8]、s[9]

3、賦值:

1)直接賦值:s[0尸A,;s[l]=,m,,s[2]=7;

2)定義時賦值

chars[10]={'A','B','C','D','E','F','G','H',T,'',''0'};/*需手工加'\0'*/

chars[10|={,,ABCDEFGHr,);

chars[10]=,,ABCDEFGHr,;

注意:定義時不賦初值,所有元素的值不確定。賦值一部分,其余元素值為0

或'\0'。

3)鍵盤賦值:

scanf("%c”,&s[0]);/*可用循環(huán)對所有元素賦值。可以接收任意字符*/

scanf("%s”,s);/*后面只寫數(shù)組名,輸入時以空格、回車、Tab鍵作結(jié)束,

字符串自動加'\0'*/

gets(s);/*輸入時以回車鍵作結(jié)束,字符串自動加,\0力

strcpy(s,,,ABCDE,,)5

4、輸出:

printf(M%cM,s[i]);/*用循環(huán)一個個輸出*/

printf("%s”,s);/*整體輸出,后面寫數(shù)組名,遇,\0,則結(jié)束*/

puts(s);/*整體輸出,后面寫數(shù)組名,遇、(F則結(jié)束,輸出完后換行*/

5、數(shù)組的存儲:按元素的先后順序存儲。數(shù)組名表示首地址,是常量,定義后不能賦

值。

6、字符串的處理:從前到后一個個看一遍。

7,例題

1)輸入一個字符串,然后輸出。(用三種方法輸入輸出“ABCDEFGIHJ”)

2)輸入一句英文,統(tǒng)計出英文字符的個數(shù)

3)輸入一段文字,將其中的小寫字母轉(zhuǎn)換為大寫,然后輸出。

4)輸入一行字符,統(tǒng)計其中字母、數(shù)字和其他字符的個數(shù)。

5)輸入一行字符串,把它復(fù)制到另一個字符數(shù)組中

6)輸入兩個字符存入S、t數(shù)組中,把t連接到s后面

三、字符串處理函數(shù)

1、輸入一個字符

格式:c=getcher()scanf("%c",&c);相同

功能:從鍵盤接收一個字符存到變量C中??梢越邮杖我庾址?。

2、輸出一個字符

格式:putchar(c)

功能:把C中的字符顯示到屏幕上。

如:這putchar('A');charc='A';putchar(c);

3、輸入一個字符串

格式:gets(s);

功能:接收一個字符串存入數(shù)組s中。輸入時以回車鍵作結(jié)束,字符串后自動加、(F

4、輸出一個字符串

格式:puts(s);

功能:把數(shù)組s中的字符串輸出到屏幕上,遇、(T則結(jié)束,輸出完后換行。

5、求字符串長度

格式:strlen(s)

功能:返回字符串所含字符個數(shù)(長度),、(r不記。

如:chars[50]="ABCDEF”;

strlen(s)結(jié)果為:6

strlen(wThisisamap!^^)結(jié)果為:14

6、字符串的復(fù)制

格式:strcpy(s,t);

功能:把數(shù)組t(源)中的字符串復(fù)制到s(目標)中。

如:chars[20],t[20]="ABCDE”

strcpy(s,t);

strcpy(s,"student");

說明:源二定是字符串變量,目標可以是字符串變量,也可以字符串常量。

7,字符串連接

格式:strcat(s,t)

功能:把字符串t連接到字符串s之后。

如:chars[50]="abcde”,t[20]=”ml23”

strcat(s,t)結(jié)果:^^abcdeml23^^

strcat(s,"xyz")結(jié)果:^^abcdexyz^^

說明:源一定是字符串變量,目標可以是字符串變量,也可以字符串常量。

8、字符串比較

格式:strcmp(s,t)

功能:對s、t中字符一個個比較,s大則返回正整數(shù)n,s小則返回負整數(shù)n,相等則返

回0.

如:strcmpdabcP-abcdefg");結(jié)果2

strcmp("abcd","abcdefg");結(jié)果-101

strcmp("ABCDE”,”ABCDE”);結(jié)果0

說明:兩個字符串都可以是字符串變量,也可以字符串常量。

9、說明:

getcher。、putchar(c)、gets(s)、puts(s)包含在stdio.h中。

strlen(s)、strcpy(s,t)、strcat(s,t)>strcmp(s,t)包含在string.h中

10、例:

任意輸入兩個字符串,把大的存入a中,小的存入b中然后輸出。

四、二維數(shù)組

1、定義、意義

格式:數(shù)據(jù)類型數(shù)組名

如:inta[3][4];

意義:定義了3行4列3*4個變量(元素),每個變量存放一個整數(shù)。

a[0][0],a[0][1]>a[0][2],a[0][3]

a[l][0],a[l][1],a[l][2],a[l][3]

a[2][0]>a[2][1],a[2][2]>a[2][3]

2、賦值:

1)直接賦值:a[0][0]=6;a[0][l]=5;

2)定義時賦值

inta[3][4]={l,2,3,4,5,6,7,8,9,10,H,12);

inta[3][4]={{l,2,3,4},{5,6,7,8},{9,10,ll,12});

inta[][4]={{l,2,3},{5,6},(9?;

注意:A)定義時不賦初值,所有元素的值不確定。賦值一部分,其余元素值為

0或'\(『。

B)可以省略第一個下標inta[][4]={1,2,3,4,5,6,7,8,9,10};

3)鍵盤賦值:scanf("%d”,&a[0][0]);(只能一個個輸入,可用雙循環(huán)對所有元素賦

值)

3、輸出:數(shù)值數(shù)組,必須一個個單獨輸出,可用雙循環(huán)輸出所有元素。

如printf(“%d”,a[0][0]);

4、數(shù)組的存儲:按行順序存儲。數(shù)組名表示首地址,是常量,定義后不能賦值。

如:main()

{inta[3][4]={l,2,3,4,5,6,7,8,9,10,ll,12},ij;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

printf("%d",a[i]U]);

printf("\n%u",a);

5、例

1)編程:求5行5列矩陣對角線元素之和。

2)編程:對4行4列矩陣轉(zhuǎn)置。

3)某班有30人,有四門課程語文、數(shù)學(xué)、英語、專業(yè)課。編程輸入各人的成績,求

各人的總分、平均分及各科科平分。

五、二維字符數(shù)組

1、定義、意義

格式:數(shù)據(jù)類型數(shù)組名

如:chars[3][10];

意義:定義了3行10列3*10個變量(元素),每個變量存放一個字符。

每行存放一個字符串,存到s[0]、s[l],s[2]中

s[0]s[0][0],s[0][1],s[0][2],s[0][3]……s[0][9]

s[l]s[l][0bs[l][l]^s[l][2],s|l||3|……s|l||9|

s[2]s[2][0]ss[2][1]>s[2][2].s[2][3]……s[2][9]

2、賦值:

1)直接賦值:s[0][0]=,A,;s[0][l]=B;

2)定義時賦值

ints[3]|10|={<A,,,B,,,C,,,\0,};

ints[3][10]={“ABC”,“XYZ”,”MNOPQ”};

ints[][10]={“chism”,"change”,"chank","char",”check");

3)鍵盤賦值:

一次輸入一個字符:scanf(“%c”,&s[0][0]);

s[0][0]=getchar();

一次輸入一^個字符串:scanf("%s",s[0]);

gets(s[0]);

3、輸出:

一次輸出一個字符:printf(?%cw,s[0][0]);

putchar(s[0][0]);

一次輸出一個字符串:printf(tt%sM,s|0]);

puts(s[0]);

4、例

1)輸入下列五個字符串,從小到大排序輸出

“chism","change”,"chank”,“char”Jcheck”

第七章函數(shù)

1、函數(shù)的定義

1)函數(shù)的定義格式

類型函數(shù)名(形參列表)/*函數(shù)首部*/

{語句組;/*函數(shù)體*/

return式子;

)

2)類型:指函數(shù)返回值的類型,可以是int、float,char、long、void、…

其中int型可以省略。

3)形參列表:是子函數(shù)要從主調(diào)函數(shù)接收數(shù)據(jù)的變量(等同于賦值的左邊),每個形

參要說明其類型,且用“,“分隔??梢詻]有形參。

4)函數(shù)體:用于完成相應(yīng)的功能。

2、函數(shù)的調(diào)用:

1)格式:函數(shù)名(實際參數(shù));

2)說明:實際參數(shù)是主函數(shù)要傳遞到子函數(shù)的數(shù)據(jù),等同于賦值的右邊,可以是數(shù)、

變量、式子。

3)調(diào)用形式:

①函數(shù)作為單獨一行語句進行調(diào)用mj(a,b);

printf(…);

②函數(shù)作為表達式的部分使用x=mj(a,b);

n=sqrt(x);

③函數(shù)作為另一個函數(shù)的參數(shù)進行調(diào)用:printf("%f\n”,mj(a,b));

printf("%f\n",sqrt(x));

3、函數(shù)的返回:函數(shù)返回可以使用return返回,也可以執(zhí)行到函數(shù)尾自動返回調(diào)用函數(shù)。

函數(shù)無返回值時,須將函數(shù)定義為void型。

4、函數(shù)的說明:

A)一般地,子函數(shù)應(yīng)寫在前面,主函數(shù)寫在后面。如果函數(shù)定義在調(diào)用之后,則應(yīng)先

進行說明,才能正確調(diào)用。

B)說明方法:與定義時的函數(shù)首部相似,加分號,可以省略形參。int型函數(shù)可以不說

明。如floatmj(floata,float*b);

或floatmj(float,float*);

。說明位置:在函數(shù)內(nèi)部或外部。

5、函數(shù)的運行過程:

運行主函數(shù)前部一調(diào)用子函數(shù)f運行子函數(shù)一返回主函數(shù)一運行主函數(shù)后部

6、函數(shù)的參數(shù)傳遞(特別注意主函數(shù)與子函數(shù)中的變量同名一同意的情況)

1)賦值調(diào)用:賦值調(diào)用時,函數(shù)將實參的值復(fù)制一份傳遞給形參,只進行單向傳遞。

實參可以是常量、變量、表達式。

2)傳址調(diào)用:傳址調(diào)用的函數(shù),主調(diào)函數(shù)把變量的地址傳到子函數(shù)中,調(diào)用語句采用

swap(&a,&b)傳遞內(nèi)存地址。子函數(shù)的參數(shù)一般為指針型,如swap(int*a,int*b)

7,數(shù)組的調(diào)用

1)一維數(shù)組如inta[10]={1,2,3,4,5,6,7,8,9,10};

①調(diào)用時一般傳遞數(shù)組名和數(shù)組大小到子函數(shù),如fun(a,10);

②子函數(shù)首部形式:fun(inta|],intn)或fun(int*a,intn);

不論哪種形式,都是子函數(shù)用指針指向主函數(shù)的首地址。

2)二維數(shù)組ft!inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

①調(diào)用時一般傳遞數(shù)組名和行數(shù)到子函數(shù),如fun(a,3);

②子函數(shù)首部形式:fun(inta[][4],intn)或fun(int(*a)[4],intn);

3)字符串數(shù)組,一般只傳遞數(shù)組名。

8、函數(shù)的嵌套

1)意義:在一個函數(shù)中調(diào)用另一個函數(shù),叫函數(shù)的嵌套

如main。調(diào)用a()函數(shù),a()函數(shù)調(diào)用b()函數(shù),b()函數(shù)調(diào)用c。函數(shù)….

2)函數(shù)的遞歸調(diào)用:

函數(shù)自身調(diào)用自身,即main。調(diào)用a()函數(shù),a()函數(shù)再調(diào)用a()函數(shù),….

9、局部變量和全局變量

1)局部變量:在函數(shù)內(nèi)定義或函數(shù)塊內(nèi)定義,只在函數(shù)內(nèi)或塊內(nèi)有效,當退出函數(shù)或塊

內(nèi)時自動釋放。定義后初值不定。

2)全局變量:定義在函數(shù)外,從變量定義開始,到程序文件結(jié)束,變量一直有效。初值

為0

3)分析下列程序的運行結(jié)果

練習(xí)1練習(xí)2

intm=13;main()

intfun2(intx,inty){inta=3,b=2,c=l;

{intm=3;c-=++b;

return(x*y-m);b*=a+c;

){intb=5,c=12;

c/=b*2;

main()a-=c;

{inta=7,b=5;printf(w%d,%d,%d,,9,a,b,c);

printf(n%d\nM,fun2(a,b)/m);a+=-c;

))

printf(w%d,%d,%d\n5,,a,b,c);

)

10、變量的存儲類型

r-動態(tài)存儲自動變量:auto

1)變量的存儲類型一-寄存器變量:register

匚靜態(tài)存儲

靜態(tài)變量:static

外部變量:extern

2)特點

名稱表示初值函數(shù)結(jié)束后,其存儲空間各自特點

自動變量auto不定自動釋放默認為auto變量

存放在cpu寄存器中,cpu

寄存器變量register不定自動釋放寄存器

寄存器不夠時,轉(zhuǎn)為auto

多次進入,只進行一次定義

靜態(tài)變量statico或,\(r不釋放

和初始化

1)對外部變量進行說明

2)后面定義的變量提前使用

外部變量externo或,\(r不釋放

3)多個程序文件之間變量的

引用

11.程序舉例

P184-185:習(xí)題1、3、9、11

第八章:指針

一、指針的基本知識

引例:inta,b,x[10]={l,2,3,4,5,6,7,8,9,10},*p,*q;

通過下列程序可以看到各變量的名稱、內(nèi)容、地址。

#include<graphics.h>

#defineN10

main()

{intx=100,y=200,a[N]={l,2,3,4,5,6,7,8,9,10},*p=&a,*q=x,i;

printf(n\n\n\n\n\n\n\n\n\ii\n\n\n\n\n\iixy");/*顯示x、y的名稱

for(i=0;i<N;i++)/*顯示數(shù)組元素的名稱*/

printf(Ma[%d]H,i);

printf(u\n%6d%6d,\x,y);/*顯示x、y的內(nèi)容*/

for(i=0;i<N;i++)/*顯示數(shù)組元素的內(nèi)容刃

printf(H%6dH,a[i]);

printfr'\n%6u%6un,&x,&y);/*顯示x、y的地址*/

for(i=0;i<N;i++)信顯示數(shù)組元素的名稱*/

printf(M%6uH,&a[i]);

1、指針變量:定義時帶*號的變量,它用于存放變量地址,這種變量稱為指針變量

指針變量存放哪個變量的地址,我們就說它指向哪個變量。

2、指針的定義方式和意義

類型*變量名;

如:inta=5,b=10,*p=&a,*q=&b;

floatm,n,*x;

chars[10]="ABCD”產(chǎn)ch;

int*p⑸;意義是:

int(*p)[5];意義是:

int**pl;意義是:

一個指針變量有六個屬性:

指針變量名稱、類型、內(nèi)容、地址、存儲類型、指針變量指向的內(nèi)容。

3、指針的賦值(賦值后要能畫指向圖)

1)把一個變量的地址賦給指針變量。如:inta,*p;p=&a;

2)數(shù)組名賦給指針變量:floata[10],*x,;x=a;

3)一個指針變量賦給另一個指針變量。如:inta=10,*p=&a,*q;q=p;

4)賦空值:(0、9\0\NULL)如:char*c;c=NULL;

5)賦值的形式有:定義時賦值inta,*p=&a;

定義后賦值p=&a;

6)注意:指針變量的值只能是內(nèi)存中的一個地址,不能用數(shù)值或表達式給指針變量賦

值。指針變量只能存放同類型變量的地址。

如:int*p;

p=1000;p=400+1500;(錯)

charc;p=&c;(錯)

4、指針的引用:用取值運算符來存、取指向的變量的值。

如:*p=5;*x=45.65;

b=*p+*x;printf(u%d%d\n”,*p,*x);

5、說明:

1)注意區(qū)別定義時的*p和引用時的*p。

如int*a;

*a=8;

2)一個任何類型的指針變量,占用存儲空間2個字節(jié)。(因為內(nèi)存地址只有0?65535)

6、例從鍵盤輸入兩個整數(shù),用交換它們的值后輸出。

二、指針與數(shù)組(把數(shù)組的首地址或某元素的地址給指針后,指針與數(shù)組則建立了聯(lián)系)

1、一維數(shù)組:如inta[10]={2,4,6,8,10,12,14,16,18,20},*p=a;

內(nèi)容:a[0]~a[9]xp[0]~p[9]

*a、*(a+0)?*(a+9)、*(p+0)-*(p+9)

地址:&a[0]?&a[9]、&p[0]-&p[9]

a^(a+0)?(a+9)、p、(p+0)?(p+9)

2、指針的運算(指針運算前,必須先將指針指向一個數(shù)組)

指針加(減)一個整數(shù),結(jié)果是指向該數(shù)組的另一個元素。

指針自增(自減),結(jié)果是指向該數(shù)組的下(上)一個元素。

兩個指針相減,結(jié)果是相距的元素個數(shù)。

3、二維數(shù)組與指針:

1)二維數(shù)組轉(zhuǎn)化為一維指針。

如inta[3][4]={2,4,6,8,10,12,14,16,18,20,22,24},*p=a;

內(nèi)容:a[0][0]~a[2][3]>p[O]~p[ll]

**a、*(*(a+0)+0)-*(*(a+2)+3)、*p、*(p+0)?*(p+ll)、*(a[i]+j)>*(a+i)[j]o

如:a[l]⑵可以表示為:*(p+7)、p[7]、*(*(a+l)+2)、*(a[l]+2)、*(a+l)[2]

地址:&a[0][0]~&a[2][3]>&p[O]~&p[ll]

a>(a+0)?(a+2)、*a、*(a+0)+0?*(a+2)+3>p>(p+0)-(p+11)

2)二維數(shù)組a[n][m]轉(zhuǎn)化為二維指針:建立一個行指針(*p)[m]

3)二維數(shù)組a[nHm]轉(zhuǎn)化為二維指針:建立一個指針數(shù)組*p[n]

已知inta[4][5]={l,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

數(shù)組a[n][m]一維指針p行指針(*q)[m]數(shù)組指針*r[n]

inta[n][m],*p,(*q)[m],*r[n];

賦值P=a;q=aka(賦值錯誤)

r[0]=a[0]

a[l][2]P(6]q⑴⑵r[l][2]

*(a[l]+2)*(p+6)*(q[l]+2)*(r[l]+2)

(*(a+l))[2](*(q+l))[2](*(r+l))[2]

*(*(a+l)+2)*(*(q+l)+2)*(*(r+l)+2)

4、例題:

例1:用多種方法顯示一維數(shù)組內(nèi)容(或地址)。(共4種方法)

2,4,6,8,10,12,14,16,18,20

例2:用多種方法顯示下列二維數(shù)組內(nèi)容(或地址)。

inta[4][5]={l,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);

main()

{

int*p,(*q)[5],*r[4],ij;

P=a;

q=a;

for(i=0;i<4;i++)/*不能用r=a賦值*/

r[i]=a[i];〃行地址

for(i=0;i<4;i++)

{for(j=0;j<5;j++)

printf(M%4dn,(*(a+i))[j]);/*注意(*(a+i))的外括號不能少*/

printf(n\nn);

例3:intid,a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24},*p=a,*q=a+l;

如何顯示內(nèi)容14,如何顯示14的地址。

三、字符數(shù)組與指針

1、一維字符數(shù)組與指針

1)字符串的兩種存儲方式及意義:

chara[10],*p=a;采用字符數(shù)組方式

char*p=9,Studenr;采用字符指針方式

p=MxyzM

2)字符串數(shù)組與字符串指針的區(qū)別

(1)字符數(shù)組已經(jīng)事先預(yù)備了空間,字符串一定要存入它的空間里,且數(shù)組名是常

量。

(2)字符指針不事先預(yù)備空間,字符串放在哪里,它就指向哪里,指針名是變量。

注意:如果指針沒有指向,則不能一個個賦值。

如:char*p;是錯誤的。

(3)賦值方法:

定義時賦值chara[10]="abcd'',*b="abcde";

鍵盤輸入賦值gets(a)gets(b)

直接賦值a[0]=,a,;a[l]=,b,;b="xyz”

a="Student";(錯誤)b="Student";(正確)

2、二維字符數(shù)組與指針

1)定義和意義

chars[5][20];

char*p[5];

二維字符數(shù)組,第一維表示有多少個字符串,第二維表示每個字符串最多有多少

個字符

字符指針數(shù)組,表示多少個指針,每個指針可以指一個字符串。

2)賦值方法:

定義時賦值:chars[5][20]={"abc","mnopq","xyxze","1235","ml235"}

char*p[5]={"abc","mnopq","xyxze","1235","ml235")

鍵盤輸入賦值:scanf("%s",s[i]);

scanf("%s",p[i]);

直接賦值:s[0][0]=W;

p[0]="abcdef";

3、注意區(qū)別數(shù)值數(shù)組和字符數(shù)組,

1)數(shù)值數(shù)組名只表示首地址,字符數(shù)組名表示首地址,同時也表示整個字符串。

inta[]={l,2,3,…};charb[]=wThisw;

printf("%d\n%s”,a,b);(a的使用錯誤)

2)在定義并賦初值時不同

inta[10]={l,2,3,…};charb[10]={“Student"},c[]="map”;

3)輸入輸出時的方式不同。

數(shù)值數(shù)組只能一個個輸入輸出,字符數(shù)組既可一個個輸入輸出,也可整體輸入輸

出。

4)一維字符數(shù)組表示一個字符串,二維字符數(shù)組表示多個字符串。如

溫馨提示

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

評論

0/150

提交評論