版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年對二甲氨基苯甲酸行業(yè)深度研究分析報告
- 2025年車牌轉(zhuǎn)讓與回收利用合作協(xié)議書4篇
- 二零二五年度木制戶外家具制作木工勞務(wù)承包服務(wù)協(xié)議3篇
- 二零二五年數(shù)字經(jīng)濟企業(yè)獨立董事數(shù)字經(jīng)濟發(fā)展與戰(zhàn)略規(guī)劃合同3篇
- 買賣合作合同完整版3篇
- 2025鉆床加工中心項目承包及工藝流程優(yōu)化合同3篇
- 2025年度智能電網(wǎng)工程轉(zhuǎn)讓協(xié)議書范本2篇
- 2025年度風(fēng)力發(fā)電場基礎(chǔ)沉降觀測合同4篇
- 2025年度航空航天器安裝與性能優(yōu)化合同4篇
- 2025年度建筑工程竣工驗收評價合同招標文件3篇
- 2024版塑料購銷合同范本買賣
- JJF 2184-2025電子計價秤型式評價大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級上學(xué)期語文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語六年級下冊全冊教案
- 汽車噴漆勞務(wù)外包合同范本
- 2024年重慶南開(融僑)中學(xué)中考三模英語試題含答案
- 2023年最新的校長給教師春節(jié)祝福語
評論
0/150
提交評論