C語言期末考試復(fù)習(xí)資料完整版_第1頁
C語言期末考試復(fù)習(xí)資料完整版_第2頁
C語言期末考試復(fù)習(xí)資料完整版_第3頁
C語言期末考試復(fù)習(xí)資料完整版_第4頁
C語言期末考試復(fù)習(xí)資料完整版_第5頁
已閱讀5頁,還剩113頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

考試的主要題型和分數(shù)分布:1單項選擇題(10小題,每題2分,共20分)2填空題(每空1分,共10分)3閱讀程序(每題2分,共10分)4程序填空(每空2分,共40分)5編寫程序(2小題,每題10分,共20分)第一章

第1章C語言概述本章包含4項目重點內(nèi)容:1簡單的C語言程序#include<stdio.h>voidmain(){printf("ThisisaCprogram.\n");}

2VC++6.0環(huán)境:編輯C語言源程序后綴是.c或.cpp經(jīng)過編譯產(chǎn)生目標文件,后綴是.obj再經(jīng)過連接成為可執(zhí)行文件,后綴是.exe3C語言是結(jié)構(gòu)化程序,有三種結(jié)構(gòu)(1)順序結(jié)構(gòu);(2)選擇結(jié)構(gòu);(3)循環(huán)結(jié)構(gòu);4C語言是由函數(shù)組成的,其中必須有一個并且只有一個主函數(shù)main,程序的執(zhí)行從main函數(shù)開始,到main函數(shù)結(jié)束.第二章

C的數(shù)據(jù)類型C語言提供了以下一些數(shù)據(jù)類型。

數(shù)據(jù)類型構(gòu)造類型指針類型空類型(無值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct聯(lián)合類型union基本類型整型int字符型char實型(浮點型)單精度實型float雙精度實型

double

常量與變量

常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型100,125,-100,0實型3.14,0.125,-3.1e3字符型‘a(chǎn)’,’\057’,‘\x3c’字符串“a”,“ab”,”1232”定義字符常量:#definePI3.1415926#defineN20

變量命名的規(guī)定:C語言規(guī)定標識符:1只能由字母、數(shù)字和下劃線三種字符組成;(注意不要混淆下劃線_和杠號(減號)-)2第一個字符必須為字母或下劃線;3不能使用關(guān)鍵字.

例:sum,_123,m123,Student_name1

12a,Jo-hn,¥123,a#b,int

整型常量的表示方法整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:(1)十進制整數(shù)。

如:123,-456(2)八進制整數(shù)。以0開頭的數(shù)是八進制數(shù)。

如:0123表示八進制數(shù)123,等于十進制數(shù)830129非法(每位0-7合法)(3)十六進制整數(shù)。以0x開頭的數(shù)是16進制數(shù)。如:0x123,代表16進制數(shù)123,等于十進制數(shù)291而0x12g非法(每位0-f合法)

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

字符常量(1)用單引號包含的單個字符(2)用單引號包含的由\開始的轉(zhuǎn)義字符例‘a(chǎn)’,’A’,‘1’,’\037’,’\x2d’‘a(chǎn)bc’,“a”,’\082’,’\x5g’

字符串常量字符串常量是一對雙引號括起來的字符序列.合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以輸出一個字符串,如printf(“Howdoyoudo.”);C運算符簡介

C的運算符有以下幾類:(1)算術(shù)運算符(+-*/%)(2)關(guān)系運算符(><==>=<=!=)(3)邏輯運算符(?。Γ|)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)算術(shù)運算符和算術(shù)表達式基本的算術(shù)運算符:+(加法運算符或正值運算符如:3+5、+3)-(減法運算符或負值運算符,如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符,實數(shù)相除結(jié)果是雙精度實數(shù),整數(shù)相除結(jié)果是整數(shù);兩數(shù)同號結(jié)果是正數(shù),兩數(shù)異號結(jié)果是負數(shù),且舍入得方向不固定,Vc++是“向0取整)%(求余運算符,%兩側(cè)必須為整型數(shù)據(jù),結(jié)果與被除數(shù)一致。)

自增、自減運算符作用是使變量的值增1或減1如:++i,--i(在使用i之前,使i+1或-1)

i++,i--(在使用i之后,使i+1或-1)

就是使用i的原值執(zhí)行本條語句,而在執(zhí)行下條語句前將i+1或-1

intm=5,n=10;printf("%d,%d\n",m++,--n);顯示5,9若再有:printf(“%d\n”,m);顯示6賦值運算符

賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量,如a=5;(單等號)而a==5是判斷a是否等于5;(雙等號)如inta=3;if(a==2)為假,而if(a=5)為真。第三章

C語句概述C程序源程序文件1源程序文件2源程序文件n預(yù)處理命令函數(shù)n函數(shù)1數(shù)據(jù)聲明函數(shù)首部函數(shù)體數(shù)據(jù)聲明執(zhí)行語句

C語句概述控制語句完成一定的控制功能 1if()~else條件語句6break間斷語句 2for()~循環(huán)語句7switch()開關(guān)語句 3while()~循環(huán)語句8goto轉(zhuǎn)向語句 4do~while();循環(huán)語句9return返回語句 5continue繼續(xù)語句格式輸入與輸出(一).格式輸出函數(shù)函數(shù)作用:向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個任意類型的數(shù)據(jù)。一般格式:printf(格式控制,輸出表列)%d:以帶符號的十進制形式輸出整數(shù)%o:以八進制無符號形式輸出整數(shù)%x:以十六進制無符號形式輸出整數(shù)

格式輸入與輸出%u:以無符號十進制形式輸出整數(shù)%c:以字符形式輸出,只輸出一個字符%s:輸出字符串%f:以小數(shù)形式輸出單,雙精度數(shù),隱含輸出六位小數(shù)%e:以指數(shù)形式輸出實數(shù)%g:選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0

格式輸入與輸出用printf和scanf函數(shù)輸出和輸入數(shù)據(jù)。

#include<stdio.h>

intmain()

{

inta,b,c;

scanf(“%d,%d,%d”,&a,&b,&c);

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

}

運行情況:

3,4,5(輸入a,b,c的值)

3,4,5(輸出a,b,c的值)表示a在內(nèi)存中的地址其中,&是地址運算符

在格式輸入與輸出中

格式控制是用雙引號包括的,其中一般帶有%d,%c,%f,%s等各種對數(shù)據(jù)類型的要求.第四章

關(guān)系運算符和關(guān)系表達式1.關(guān)系運算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)說明:關(guān)系運算符的優(yōu)先級低于算術(shù)運算符關(guān)系運算符的優(yōu)先級高于賦值運算符

關(guān)系運算符和關(guān)系表達式2.關(guān)系表達式用關(guān)系運算符將兩個表達式(可以是算術(shù)表達式或關(guān)系表達式,邏輯表達式,賦值表達式,字符表達式)接起來的式子,稱關(guān)系表達式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達式的值是一個邏輯值,即“真”或“假”。例:關(guān)系表達式”a>b”的值為“真”,表達式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假

邏輯運算符和邏輯表達式1.邏輯運算符及其優(yōu)先次序(1)&&(邏輯與)(2)||(邏輯或)(3)!(邏輯非)

優(yōu)先次序:邏輯非!算術(shù)運算符關(guān)系運算符邏輯與或賦值運算符

或運算中有1,值為1,與運算中有0,值為0if語句2.If語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:if()

if()語句1 else語句2else

if()語句3 else語句4內(nèi)嵌ifif語句如inta=3,b=4,c=5;if(a<b)a=b;b=c;c=a;if(a>b)a=b;b=c;c=a;第1個,因為a<b,所以a=b;b=c;c=a;都執(zhí)行,第2個,因為a不大于b,所以不執(zhí)行a=b;只執(zhí)行b=c;c=a;

則a,b,c是4,5,4則a,b,c是3,5,3條件運算符格式:表達式1?表達式2∶表達式3功能:判斷表達式1的值,如果成立就執(zhí)行表達式2,否則就執(zhí)行表達式3max=(a>b)?a:b;min=(a<b)?a:b;if語句例:輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。

#include<stdio.h>

voidmain()

{charch;

scanf(“%c”,&ch);

ch=(‘A’<=ch&&ch<=‘Z’)(ch+32):ch;

printf(“%c\n”,ch);

}

//注意:不能用‘A’<=ch<=‘Z’,它永遠為真如果字符變量ch的值為大寫字母,則條件表達式的值為(ch+32),即相應(yīng)的小寫字母。如果ch的值不是大寫字母,則條件表達式的值為ch,即不進行轉(zhuǎn)換。

幾個典型的判斷:判斷大寫字母:if(‘A’<=c&&c<=‘Z’)判斷小寫字母:if(‘a(chǎn)’<=c&&c<=‘z’)判斷數(shù)字:if(‘0’<=c&&c<=‘9’)判斷閏年:if((year%4==0&&year%100!=0)||year%400==0)注意:例如在判斷數(shù)字中:if(‘0’<=c&&c<=‘9’)不可以沒有&&,也不能沒有’’即不能用if(‘0’<=c<=‘9’)也不能用if(0<=c&&c<=9)但可以用if(48<=c&&c<=57)(想想為什么?)用switch語句實現(xiàn)(若a是整數(shù))按照考試成績輸出等級百分制分數(shù)段

switch((a/10)){case10: case9:grade='A';break; case8:grade='B';break; case7:grade='C';break; case6:grade='D';break; default:grade='E'; }第五章

用while語句實現(xiàn)循環(huán)while語句用來實現(xiàn)“當型”循環(huán)結(jié)構(gòu)。一般形式:

while(表達式)語句當表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特點是:先判斷表達式,后執(zhí)行語句。

求正整數(shù)m和n的最大公約數(shù)和最小公倍數(shù):

#include<stdio.h>

voidmain()

{

intp,r,n,m;

printf("請輸入兩個正整數(shù)n,m:");

scanf("%d,%d,",&n,&m);

p=n*m;

while(m!=0)

{r=n%m;n=m;m=r;}

printf("它們的最大公約數(shù)為:%d\n",n);printf("它們的最小公倍數(shù)為:%d\n",p/n);}其中用下面的輾轉(zhuǎn)相除法求出最大公約數(shù)nwhile(m!=0){r=n%m;n=m;m=r;}把它獨立出來就是一個函數(shù)inthcf(intm,intn){intr;while(m!=0)

{r=n%m;n=m;m=r;}return(n);}用p/n得到最小公倍數(shù)

用do-while語句實現(xiàn)循環(huán)

do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式:

do{循環(huán)體語句}while(表達式);執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達式的值等于0為止,此時循環(huán)結(jié)束。例如:為了保證輸入成績的正確,可以使用語句:printf("請輸入學(xué)生成績a(0-100):");scanf("%d",&a);while(a<0||a>100){printf("\n輸入有誤,請重輸:");scanf("%d",&a);}

我們更簡潔地用do-while語句do

{printf(“請輸入成績a(0-100):”);scanf(“%d”,&a);}while(a<0||a>100);

注意while(a<0||a>100);的含義和;號

用do-while語句計算10!i=1;s=1;do{s=s*i;i++;}while(i<=10);不是:i=1;s=0;do{s=s*i;i++;}while(i<=10);也不是:do{i=1;s=1;s=s*i;i++;}while(i<=10);do{i=1;s=0;s=s*i;i++;}while(i<=10);while語句和用do-while語句的比較:while是先判斷條件,再決定是否執(zhí)行,所以可能一次也不執(zhí)行;do-while是先執(zhí)行再判斷條件,決定是否還執(zhí)行,所以至少執(zhí)行一次.

用for語句實現(xiàn)循環(huán)C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。一般形式:

for(表達式1;表達式2;表達式3)語句注意:for中用兩個分號隔開,不能省略;for只對其后第一個語句有效,如果要求對多條語句有效,必須用花括號括之成為復(fù)合語;for()后通常沒有分號,有分號將不執(zhí)行任何語句,只執(zhí)行自己的循環(huán);

下面是用for語句顯示數(shù)組a中的最小值的程序#include<stdio.h>voidmain(){inta[5]={4,2,8,9,5},i,min;min=a[0];for(i=1;i<5;i++)if(min>a[i])min=a[i];printf("%d\n",min);}

break語句和continue語句

break語句break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán).一般形式:

break;注意:break語句只能用于循環(huán)語句或switch語句中。

continue語句作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次循環(huán)的判定.一般形式:

continue;例把100~200之間的不能被3整除的數(shù)輸出。

#include<stdio.h>

voidmain()

{intn;

for(n=100;n<=200;n++)

{if(n%3==0)continue;

printf(″%d″,n);

}

}

注意是把能被3整除的跳過.不能用n%3!=0判斷m是否素數(shù)。

#include<stdio.h>

#include<math.h>

voidmain()

{intm,i,k;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}

也可以是:

#include<stdio.h>

#include<math.h>

voidmain()

{intm,I,k,flag=1;

scanf(″%d″,&m);

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0){flag=0;break;}

if(flag)printf("%disaprimenumber\n″,m);

elseprintf("%disnotaprimenumber\n″,m);

}第六章

一維數(shù)組

所謂數(shù)組就是一組具有相同數(shù)據(jù)類型的數(shù)據(jù)的有序集合。一維數(shù)組的定義格式為:例如:inta[10];或者是:#defineN10;inta[N];

(方括號中必須是常數(shù))注意:1此數(shù)組有10個元素.分別是a[0]-a[9]

注意:從0開始編號,沒有數(shù)組元素a[10]2元素個數(shù)必須是常量.所以不可以:intn=10,a[n];//這里n是變量不可以用圓括號:inta(n);也不可是:intn,a[n];scanf(“%d”,&n);

字符數(shù)組的定義例如:charc[10]={‘I’,'‘,’a’,’m’,’‘,’h’,’a’,’p’,’p’,’y’};c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;對字符串初始化,最好的方法是:例如:Charc[]=“Iamaboy”;

字符串的初始化字符串和字符串結(jié)束標志

為了測定字符串的實際長度,C語言規(guī)定了一個“字符串結(jié)束標志”——‘\0’。字符數(shù)組的輸入輸出

字符數(shù)組的輸入輸出可以有兩種方法:逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。將整個字符串一次輸入或輸出。用“%s”格式符,意思是對字符串的輸入輸出。

如果利用一個scanf函數(shù)輸入給多個字符串,則在輸入時以空格分隔。例如:charstrl[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);輸入數(shù)據(jù):Howareyou數(shù)組中未被賦值的元素的值自動置′\0′。1.puts函數(shù)其一般形式為:puts(str);

字符串處理函數(shù)

2.gets函數(shù)其一般形式為:gets(str);說明:用scanf(“%s”,str);只能輸入單詞(不包含空格),

而gets(str);可以輸入句子(即可以包含空格);

注意不是gets(“%s”,str);

也不是gets(&str);

3.strcat函數(shù)其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2)Strcat的作用是連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面4.strcpy函數(shù)其一般形式為:strcpy(字符數(shù)組1,字符串2)

strcpy是“字符串復(fù)制函數(shù)”。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);

關(guān)于strcpy函數(shù)的幾點說明(1)字符數(shù)組1必須定義得足夠大,以便容納被復(fù)制的字符串。字符數(shù)組1的長度不應(yīng)小于字符串2的長度。(2)“字符數(shù)組1”必須寫成數(shù)組名形式(如str1),“字符串2”可以是字符數(shù)組名,也可以是一個字符串常量。如strcpy(str1,″China″);(3)復(fù)制時連同字符串后面的′\0′一起復(fù)制到字符數(shù)組1中。(4)不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。如:

str1=″China″;不合法str1=str2;不合法用strcpy函數(shù)只能將一個字符串復(fù)制到另一個字符數(shù)組中去。用賦值語句只能將一個字符賦給一個字符型變量5.strcmp函數(shù)其一般形式為:strcmp(字符串1,字符串2)例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);比較的結(jié)果由函數(shù)值返回(1)如果字符串1=字符串2,函數(shù)值為0。(2)如果字符串1>字符串2,函數(shù)值為1。(3)如果字符串1<字符串2,函數(shù)值為-1。注意:判斷str1是否大于str2,不能用以下式:if(str1>str2)只能用if(strcmp(str1,str2)>0)6.strlen函數(shù)其一般形式為:strlen(字符數(shù)組)strlen是測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實際長度(不包括′\0′在內(nèi))。例如:charstr[10]={″China″};printf(″%d″,strlen(str));輸出結(jié)果不是10,也不是6,而是5,即有效字符數(shù).strlwr(字符串)

strlwr函數(shù)7.strlwr函數(shù)其一般形式為:的作用是將字符串中大寫字母換成小寫字母。8.strupr函數(shù)其一般形式為:strupr(字符串)strupr函數(shù)的作用是將字符串中小寫字母換成大寫字母。

使用字符串函數(shù)時,必須包括字符串函數(shù)庫:#include<string.h>我們可以不使用字符串函數(shù)編寫程序:例如:不使用strcat連接兩個字符串;不使用strcpy拷貝字符串;不使用strcmp比較字符串;不使用strcpy拷貝字符串:1用數(shù)組:For(i=0;i<=strlen(s2);i++)S1[i]=s2[i];2用指針:p1=s1;p2=s2;while(*p1++=*p2++);尋找字符串尾:while(s1[i])i++;i就是字符串尾的下標,再拷貝就是連接。第七章

簡單的C語言函數(shù)#include<stdio.h>

/*文件包含*/void

main()

/*主函數(shù)*/{/*函數(shù)體開始*/

printf(“ThisisaCprogram.\n”);/*函數(shù)體語句*/}

/*函數(shù)體結(jié)束*/

說明:main是主函數(shù)名,void是函數(shù)類型每個C程序是由若干函數(shù)組成的,其中必有一個并且只能有一個主函數(shù)main()每個C程序從main函數(shù)開始執(zhí)行,到main函數(shù)結(jié)束,即執(zhí)行的是主函數(shù)的函數(shù)體,與主函數(shù)main在程序中的位置無關(guān);{}是函數(shù)開始和結(jié)束的標志,不可省略;每個C語句以分號結(jié)束;在主函數(shù)中直接或間接調(diào)用其他函數(shù);使用標準輸入出庫函數(shù)時應(yīng)寫:#include<stdio.h>使用數(shù)學(xué)庫函數(shù)和字符串函數(shù)時應(yīng)寫:#include<math.h>#include<string.h>

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

函數(shù)的首部:例1.3中的max函數(shù)首部intmax(intx,inty)

函數(shù)體:花括號內(nèi)的部分。若一個函數(shù)有多個花括號,則最外層的一對花括號為函數(shù)體的范圍。函數(shù)定義的一般形式

類型標識符函數(shù)名(形式參數(shù)表列){

聲明部分

語句部分}其中類型標識符是函數(shù)返回值的數(shù)據(jù)類型,如:int,charfloat,double等,也可以是無返回值,寫為void.也可以沒有形式參數(shù)表列,稱為無參函數(shù).例如:intmax(intx,inty){intz;/*函數(shù)體中聲明部分*/z=x>y?x∶y;/*函數(shù)體中語句部分*/return(z);/*返回值*/}

函數(shù)參數(shù)和函數(shù)的值形式參數(shù)和實際參數(shù)

形式參數(shù):函數(shù)名后面括弧中的變量名稱為“形式參數(shù)”(簡稱“形參”);實際參數(shù):主調(diào)函數(shù)中調(diào)用一個函數(shù)時,函數(shù)名后面括弧中的參數(shù)(可以是一個表達式)稱為“實際參數(shù)”(簡稱“實參”);函數(shù)返回值:return后面的括弧中的值作為函數(shù)帶回的值(稱函數(shù)返回值)。說明:

1.函數(shù)的返回值是通過函數(shù)中的return語句獲得的。一個函數(shù)中可以有一個以上的return語句,執(zhí)行到哪一個return語句,哪一個語句起作用。函數(shù)的調(diào)用

對被調(diào)用函數(shù)的聲明和函數(shù)原型在一個函數(shù)中調(diào)用另一函數(shù)(即被調(diào)用函數(shù))需要具備哪些條件呢?1.首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫函數(shù)或用戶自己定義的函數(shù))。3.如果使用用戶自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)(即主調(diào)函數(shù))的后面,應(yīng)該在主調(diào)函數(shù)中對被調(diào)用的函數(shù)作聲明,即寫上函數(shù)的原型。用函數(shù)首部加上;號表示函數(shù)聲明.2.如果使用庫函數(shù),還應(yīng)該在本文件開頭用#include命令將調(diào)用有關(guān)庫函數(shù)時所需用到的信息“包含”到本文件中來。如#include<stdio.h>#include<math.h>#include<string.h>函數(shù)調(diào)用的實例(求兩整數(shù)的最大公約數(shù)):#include<stdio.h>voidmain(){inthcf(intu,intv);//函數(shù)聲明intu,v,h;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("%d,%d的最大公約數(shù)是:%d\n",u,v,h);}//函數(shù)定義inthcf(intu,intv)//函數(shù)首部{intr;while(v!=0){r=u%v;u=v;v=r;}return(u);}

局部變量和全局變量局部變量

在一個函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在本函數(shù)范圍內(nèi)有效,也就是說只有在本函數(shù)內(nèi)才能使用它們,在此函數(shù)以外是不能使用這些變量的。這稱為“局部變量”。

全局變量在函內(nèi)定義的變量是局部變量,而在函數(shù)外定義的變量稱為外部變量,也稱全局變量.靜態(tài)局部變量是函數(shù)中保持最近值不釋放的變量在函數(shù)中用下面方式定義:staticintc=7;

考察靜態(tài)局部變量的值#include<stdio.h>voidmain(){intf(inta);inta=2,i;for(i=0;i<3;i++)printf(″%d″,f(a));}intf(inta){intb=0;staticint

c=3;b=b+3;c=c+2;return(a+b+c);}3次調(diào)用函數(shù)f后,c的值是9第八章地址和指針的概念內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是“地址”。如果在程序中定義了一個變量,在對程序進行編譯時,系統(tǒng)就會給這個變量分配內(nèi)存單元。一個變量的地址稱為該變量的“指針”。例如,地址2000是變量i的指針。如果有一個變量專門用來存放另一變量的地址(即指針),則它稱為“指針變量”。指針和指針變量的定義:指針變量的引用

注意:指針變量中只能存放地址(指針),不要將一個整數(shù)(或任何其他非地址類型的數(shù)據(jù))賦給一個指針變量。

例通過指針變量訪問整型變量#include<stdio.h>voidmain(){inta;int*p;a=100;p=&a;/*把變量a的地址賦給p*/printf(“%d,%d\n”,a,*p);}對“&”和“*”運算符說明:如果已執(zhí)行了語句p=&a則:則a和*p是相同的值所以,如果a=3;Printf(“%d,%d”,a,*p);顯示是3,3所以,如果*p=6;Printf(“%d,%d”,a,*p);顯示是6,6指針變量作為函數(shù)參數(shù)例10.3對輸入的兩個整數(shù)按大小順序輸出

#include<stdio.h>voidmain(){voidswap(int*p1,int*p2);inta,b;int*p1,*p2;scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;if(a<b)swap(p1,p2);printf(″\n%d,%d\n″,a,b);}voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}下面的函數(shù):voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;/*只在函數(shù)中交換了局部變量*/}同樣不可用函數(shù):voidswap(int*p,intb)或voidswap(inta,int*p)只能用函數(shù)voidswap(int*p1,int*p2)處理主調(diào)用函數(shù)中的變量定義一個指向數(shù)組元素的指針變量的方法例如:inta[10],*p;p=a;(a是數(shù)組的首地址,注意a前沒有地址符)或p=&a[0];雖然a和p都是地址,它們是不同的:a是數(shù)組的首地址,一旦由系統(tǒng)分配,就是一個固定的值;而p是指針變量,是可以改變的.所以a++是錯誤的,而p++是正確的.指向數(shù)組元素的指針10.3.2通過指針引用數(shù)組元素如果inta[6],*p=a;引用一個數(shù)組元素,可以用:(1)下標法,如a[i]形式;(2)地址或指針法,如*(a+i)或*(p+i)注意:a[0]-a[5]合法,a[6]非法;*(a)-*(a+5)合法,*(a+6)非法;*(p)-*(p+5)合法,*(p+6)非法;字符串與指針字符串的表示形式

例定義一個字符數(shù)組,對它初始化,然后輸出該字符串

#include<stdio.h>voidmain(){char*s=″abcdefg″;printf(″%s\n″,s);}輸出abcdefg(1)用字符數(shù)組存放一個字符串,然后輸出該字符串。輸出cdefg的語句是:printf(″%s\n″,s+2);s+2是指針輸出efg的語句是:printf(″%s\n″,s+4);s+4是指針輸出字符f的語句是:printf(″%c\n″,*(s+5));*(s+5)是字符注意:輸出字符串用%s和指針;輸出字符用%c和*(指針)指針運算與數(shù)據(jù):#include<stdio.h>voidmain(){inta[5]={2,4,6,8,10},*p;p=a;printf("%d,",*(p+2));printf("%d,",*++p);printf("%d,",*p++);printf("%d\n",*++p);}顯示6,4,4,8注意1p+2沒有改變p的值;注意2++p,和p++的區(qū)別.調(diào)用函數(shù)實現(xiàn)數(shù)組的相反順序存放:#include<stdio.h>voidmain(){voidinv(intx[],intn);//函數(shù)聲明inti,a[10]={3,7,9,11,0,6,7,5,4,2};printf("Theoriginalarray:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");inv(a,10);//調(diào)用函數(shù)printf("Thearrayhasbeeninverted:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}//用數(shù)組元素:voidinv(intx[],intn){inttemp,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i;temp=x[i];x[i]=x[j];x[j]=temp;}}//或用指針:voidinv(int*x,intn){int*p,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}}這時函數(shù)聲明要改成:voidinv(int*x,intn);用選擇法實現(xiàn)數(shù)組從大到小排序的函數(shù):voidsort(intx[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i) {t=x[i];x[i]=x[k];x[k]=t;}}}第九章問題定義:

有時需要將不同類型的數(shù)據(jù)組合成一個有機的整體,以便于引用。如:一個學(xué)生有學(xué)號/姓名/性別/年齡/地址等intnum;charname[20]; charsex;intage;charaddr[30];

聲明一個結(jié)構(gòu)體類型的一般形式為:

struct

結(jié)構(gòu)體名{成員表列};如:struct

student{

int

num;char

name[20];char

sex;

int

age;float

score;char

addr[30];}

結(jié)構(gòu)體名類型名成員名

定義結(jié)構(gòu)體類型變量的方法

可以采取以下3種方法定義結(jié)構(gòu)體類型變量:先聲明結(jié)構(gòu)體類型再定義變量名例如:structstudent

student1,student2;|||結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名

定義了student1和student2為structstudent類型的變量,即它們具有structstudent類型的結(jié)構(gòu).

圖9-2student1100101ZhangXinM1990.5Shanghai100102WangLiF2098Beijingstudent2引用結(jié)構(gòu)體變量中成員的方式為結(jié)構(gòu)體變量名.成員名例如,student1.num表示student1變量中的num成員,即student1的num(學(xué)號)項??梢詫ψ兞康某蓡T賦值和運算student1.num=10010但不能用以下語句整體讀入結(jié)構(gòu)體變量,例如:

scanf(″%d,%s,%c,%d,%f,%s″,&student1);

結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),傳遞結(jié)構(gòu)體變量的地址。

對結(jié)構(gòu)體變量初始化.

#include<stdio.h>

voidmain()

{structstudent

{longintnum;

charname[20];

charsex;

charaddr[20];

}a={10101,″LiLin″,′M′,″123BeijingRoad″};/*對結(jié)構(gòu)體變量a賦初值*/

printf(″No.:%ld\nname:%s\nsex:%c\naddress:%s\n″,a.num,,a.sex,a.addr);

結(jié)構(gòu)體數(shù)組

一個結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成績等數(shù)據(jù))。如果有10個學(xué)生的數(shù)據(jù)需要參加運算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過的數(shù)值型數(shù)組不同之處在于每個數(shù)組元素都是一個結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個成員項。定義結(jié)構(gòu)體數(shù)組

和定義結(jié)構(gòu)體變量的方法相仿,只需說明其為數(shù)組即可。例如:structstudent{intnum;charname[20];ch

溫馨提示

  • 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

提交評論