




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
學習好資料歡迎下載學習好資料歡迎下載學習好資料歡迎下載C語言基礎知識重點和難點數(shù)組一維數(shù)組的定義與初始化不能在方括號中用變量來表示元素的個數(shù),但是可以是符號常數(shù)或常量表達式。例如:#defineFD5main(){inta[3+2],b[7+FD];……}是合法的。但是下述說明方式是錯誤的。main(){intn=5;inta[n];……}C語言對數(shù)組的初始化賦值還有以下幾點規(guī)定:(1)
可以只給部分元素賦初值。當{}中值的個數(shù)少于元素個數(shù)時,只給前面部分元素賦值。例如:inta[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而后5個元素自動賦0值。(2)
只能給元素逐個賦值,不能給數(shù)組整體賦值。例如給十個元素全部賦1值,只能寫為:inta[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:inta[10]=1;(3)
如給全部元素賦值,則在數(shù)組說明中,可以不給出數(shù)組元素的個數(shù)。例如:inta[5]={1,2,3,4,5};可寫為:inta[]={1,2,3,4,5};一維數(shù)組元素的引用在C語言中只能逐個地使用下標變量,而不能一次引用整個數(shù)組。例如,輸出有10個元素的數(shù)組必須使用循環(huán)語句逐個輸出各下標變量:for(i=0;i<10;i++)printf("%d",a[i]);而不能用一個語句輸出整個數(shù)組。下面的寫法是錯誤的:printf("%d",a);引用數(shù)組元素時一定注意下標不能越界例如,inti=4,n[]={0,0,0,0,0};,則可以引用n[0],n[4],n[!5],n[i++],但不能引用n[5],n[++i]例1:若有定義語句:intm[]={5,4,3,2,1},i=4;,則下面對m數(shù)組元素的引用中錯誤的是___C___。 A、m[--i]引用錯誤,主要是下標越界。選項A和B引用錯誤,主要是下標越界。選項A和B的下標分別是3和4,都沒越界。選項C中,m[m[0]]實際上是m[5],所以越界了,選項D實際上是m[1] C、m[m[0]] D、m[m[i]]一維數(shù)組的典型算法查找指定的元素,返回其下標。比如,要求查找數(shù)值5是否數(shù)組中查找數(shù)組的最大(最?。┲?,并返回最大(最?。┲导捌鋵南聵藬?shù)組的排序(升序或降序),包括冒泡排序和選擇排序兩種算法在有序數(shù)組中插入一個元素,使得數(shù)組仍然有序數(shù)組的逆序在數(shù)組中刪除滿足某條件的元素二維數(shù)組的初始化二維數(shù)組初始化也是在類型說明時給各下標變量賦以初值。二維數(shù)組可按行分段賦值,也可按行連續(xù)賦值。例如對數(shù)組a[5][3]:
按行分段賦值可寫為:inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};按行連續(xù)賦值可寫為:inta[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};對于二維數(shù)組初始化賦值還有以下說明:可以只對部分元素賦初值,未賦初值的元素自動取0值。例如:inta[3][3]={{1},{2},{3}};是對每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:100200300inta[3][3]={{0,1},{0,0,2},{3}};賦值后的元素值為:010002300如對全部元素賦初值,則第一維的長度可以不給出。例如:inta[3][3]={1,2,3,4,5,6,7,8,9};可以寫為:inta[][3]={1,2,3,4,5,6,7,8,9};例1:以下不能正確定義二維數(shù)組的選項是___D___。可以只對部分元素賦初值,未賦初值的元素自動取0值如對全部元素賦初值,則第一維的長度可以不給出,但第二維的長度必須給出。 A可以只對部分元素賦初值,未賦初值的元素自動取0值如對全部元素賦初值,則第一維的長度可以不給出,但第二維的長度必須給出。 B、inta[][2]={1,2,3,4}; C、inta[2][2]={{1},2,3} D、inta[2][]={{1,2},{3,4}}二維數(shù)組元素的引用和一維數(shù)組一樣,一定要注意下標不越界。例1:注意,a數(shù)組的下標范圍為a[0][0]到a[1][2],所以A、B、C均錯誤。C語言中,數(shù)組下標可以是表達式,并且,true是1,false是0,所以選項D實際上是a[0][0]注意,a數(shù)組的下標范圍為a[0][0]到a[1][2],所以A、B、C均錯誤。C語言中,數(shù)組下標可以是表達式,并且,true是1,false是0,所以選項D實際上是a[0][0]inta[2][3];以下選項中對a數(shù)組元素正確引用的是___D___A)a[2][!1]B)a[2][3]C)a[0][3]D)a[1>2][!1]字符數(shù)組的初始化字符數(shù)組也允許在定義時作初始化賦值。例如:charc[10]={‘c’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,’m’};賦值后各元素的值為:數(shù)組Cc[0]的值為‘c’c[1]的值為‘’c[2]的值為‘p’c[3]的值為‘r’c[4]的值為‘0c[5]的值為‘g’c[6]的值為‘r’c[7]的值為‘a(chǎn)’c[8]的值為‘m’其中c[9]未賦值,由的值為‘p’系統(tǒng)自動賦予0值。當對全體元素賦初值時也可以省去長度說明。例如:charc[]={`c`,``,`p`,`r`,`o`,`g`,`r`,`a`,`m`};這時C數(shù)組的長度自動定為9。在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串。前面介紹字符串常量時,已說明字符串總是以'\0'作為串的結束符。因此當把一個字符串存入一個數(shù)組時,也把結束符'\0'存入數(shù)組,并以此作為該字符串是否結束的標志。有了'\0'標志后,就不必再用字符數(shù)組的長度來判斷字符串的長度了。C語言允許用字符串的方式對數(shù)組作初始化賦值。例如:charc[]={'c','','p','r','o','g','r','a','m'};可寫為:charc[]={"Cprogram"};或去掉{}寫為:charc[]="Cprogram";用字符串方式賦值比用字符逐個賦值要多占一個字節(jié),用于存放字符串結束標志'\0'。上面的數(shù)組c在內(nèi)存中的實際存放情況為:C
program\0‘\0'是由C編譯系統(tǒng)自動加上的。由于采用了‘\0'標志,所以在用字符串賦初值時一般無須指定數(shù)組的長度,而由系統(tǒng)自行處理。字符串處理函數(shù)用于輸入輸出的字符串函數(shù),在使用前應包含頭文件"stdio.h",使用其它字符串函數(shù)則應包含頭文件"string.h"。輸出函數(shù)puts輸入函數(shù)gets:gets讀入字符串時,可以讀入其中的空格,直到回車。而用scanf讀入字符串時,遇到空格即停止。連接函數(shù)strcat:格式為strcat(字符數(shù)組名1,字符數(shù)組名2),一定注意,字符數(shù)組1一定要足夠大,否則將越界。拷貝函數(shù)strcpy:格式為strcpy(字符數(shù)組名1,字符數(shù)組名2)。注意,字符數(shù)組賦值,不能用等于號,而要用strcpy函數(shù)比較函數(shù)strcmp:格式為strcmp(字符數(shù)組名1,字符數(shù)組名2)。注意,字符數(shù)組的比較不能用大于、小于號比較。測字符串長度函數(shù)strlen:測字符串的實際長度(不含字符串結束標志‘\0’)并作為函數(shù)返回值。
函數(shù)形式參數(shù)和實際參數(shù)函數(shù)的形參和實參具有以下特點:形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結束時,即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結束返回主調(diào)函數(shù)后則不能再使用該形參變量。實參可以是常量、變量、表達式、函數(shù)等,無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。實參和形參在數(shù)量上,類型上,順序上應嚴格一致,否則會發(fā)生類型不匹配”的錯誤。函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。下例可以說明這個問題。ints(intn){inti;for(i=n-1;i>=1;i--)n=n+i;printf("n=%d\n",n);}main(){intn;printf("inputnumber\n");scanf("%d",&n);s(n);printf("n=%d\n",n);}數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實參數(shù)組元素就是下標變量,它與普通變量并無區(qū)別。因此它作為函數(shù)實參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時,把作為實參的數(shù)組元素的值傳送給形參,實現(xiàn)單向的值傳送。數(shù)組名作為函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)時所進行的傳送只是地址的傳送,也就是說把實參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實在的數(shù)組。實際上是形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。上圖說明了這種情形。圖中設a為實參數(shù)組,類型為整型。a占有以2000為首地址的一塊內(nèi)存區(qū)。b為形參數(shù)組名。當發(fā)生函數(shù)調(diào)用時,進行地址傳送,把實參數(shù)組a的首地址傳送給形參數(shù)組名b,于是b也取得該地址2000。于是a,b兩數(shù)組共同占有以2000為首地址的一段連續(xù)內(nèi)存單元。從圖中還可以看出a和b下標相同的元素實際上也占相同的兩個內(nèi)存單元(整型數(shù)組每個元素占二字節(jié))。例如a[0]和b[0]都占用2000和2001單元,當然a[0]等于b[0]。類推則有a[i]等于b[i]。例1:判別一個整數(shù)數(shù)組中各元素的值,若大于0則輸出該值,若小于等于0則輸出0值。編程如下:voidnzp(inta[5]){inti;printf("\nvaluesofarrayaare:\n");for(i=0;i<5;i++){if(a[i]<0)a[i]=0;printf("%d",a[i]);}}main(){intb[5],i;printf("\ninput5numbers:\n");for(i=0;i<5;i++)scanf("%d",&b[i]);printf("initialvaluesofarraybare:\n");for(i=0;i<5;i++)printf("%d",b[i]);nzp(b);printf("\nlastvaluesofarraybare:\n");for(i=0;i<5;i++)printf("%d",b[i]);}用數(shù)組名作為函數(shù)參數(shù)時應注意以下幾點:形參數(shù)組和實參數(shù)組的類型必須一致,否則將引起錯誤。形參數(shù)組和實參數(shù)組的長度可以不相同,因為在調(diào)用時,只傳送首地址而不檢查形參數(shù)組的長度。當形參數(shù)組的長度與實參數(shù)組不一致時,雖不至于出現(xiàn)語法錯誤(編譯能通過),但程序執(zhí)行結果將與實際不符,這是應予以注意的。在函數(shù)形參表中,允許不給出形參數(shù)組的長度,或用一個變量來表示數(shù)組元素的個數(shù)。例如,可以寫為:voidnzp(inta[])或?qū)憺関oidnzp(inta[],intn)其中形參數(shù)組a沒有給出長度,而由n值動態(tài)地表示數(shù)組的長度。n的值由主調(diào)函數(shù)的實參進行傳送。例1可改為例2的形式。例2:voidnzp(inta[],intn){inti;printf("\nvaluesofarrayaare:\n");for(i=0;i<n;i++){ if(a[i]<0)a[i]=0; printf("%d",a[i]);}}main(){intb[5],i;printf("\ninput5numbers:\n");for(i=0;i<5;i++)scanf("%d",&b[i]);printf("initialvaluesofarraybare:\n");for(i=0;i<5;i++)printf("%d",b[i]);nzp(b,5);printf("\nlastvaluesofarraybare:\n");for(i=0;i<5;i++)printf("%d",b[i]);}在被調(diào)用函數(shù)中改變數(shù)組元素的值,則在調(diào)用函數(shù)中,數(shù)組的值也隨之改變。局部變量和全局變量局部變量局部變量也稱為內(nèi)部變量。局部變量是在函數(shù)內(nèi)作定義說明的。其作用域僅限于函數(shù)內(nèi),離開該函數(shù)后再使用這種變量是非法的。形參變量是屬于被調(diào)函數(shù)的局部變量,實參變量是屬于主調(diào)函數(shù)的局部變量。允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。如在前例中,形參和實參的變量名都為n,是完全允許的。在復合語句中也可定義變量,其作用域只在復合語句范圍內(nèi)。全局變量全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),它屬于一個源程序文件。例1:外部變量與局部變量同名。inta=3,b=5;/*a,b為外部變量*/max(inta,intb)/*a,b為外部變量*/{intc;c=a>b?a:b;return(c);}main(){inta=8;printf("%d\n",max(a,b));}靜態(tài)局部變量靜態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個運行期間都不釋放。而自動變量(即動態(tài)局部變量)屬于動態(tài)存儲類別,占動態(tài)存儲空間,函數(shù)調(diào)用結束后即釋放。靜態(tài)局部變量在編譯時賦初值,即只賦初值一次;而對自動變量賦初值是在函數(shù)調(diào)用時進行,每調(diào)用一次函數(shù)重新給一次初值,相當于執(zhí)行一次賦值語句。如果在定義局部變量時不賦初值的話,則對靜態(tài)局部變量來說,編譯時自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。而對自動變量來說,如果不賦初值則它的值是一個不確定的值。例2:打印1到5的階乘值。intfac(intn){staticintf=1;f=f*n;return(f);}main(){inti;for(i=1;i<=5;i++)printf("%d!=%d\n",i,fac(i));}用extern聲明外部變量外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件終了。如果在定義點之前的函數(shù)想引用該外部變量,則應該在引用之前用關鍵字extern對該變量作“外部變量聲明”。表示該變量是一個已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。例3:用extern聲明外部變量,擴展程序文件中的作用域。intmax(intx,inty){intz;z=x>y?x:y;return(z);}main(){externA,B;printf("%d\n",max(A,B));}intA=13,B=-8;說明:在本程序文件的最后1行定義了外部變量A,B,但由于外部變量定義的位置在函數(shù)main之后,因此本來在main函數(shù)中不能引用外部變量A,B?,F(xiàn)在我們在main函數(shù)中用extern對A和B進行“外部變量聲明”,就可以從“聲明”處起,合法地使用該外部變量A和B。
C語言的42個運算符及15個優(yōu)先級
一、賦值運算符
賦值語句的作用是把某個常量或變量或表達式的值賦值給另一個變量。符號為‘=’。這里并不是等于的意思,只是賦值,等于用‘==’表示。
注意:賦值語句左邊的變量在程序的其他地方必須要聲明。
得已賦值的變量我們稱為左值,因為它們出現(xiàn)在賦值語句的左邊;產(chǎn)生值的表達式我們稱為右值,因為她它們出現(xiàn)在賦值語句的右邊。常數(shù)只能作為右值。
例如:
count=5;
total1=total2=0;
第一個賦值語句大家都能理解。
第二個賦值語句的意思是把0同時賦值給兩個變量。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算。這樣它先total2=0;然后total1=total2;那么我們這樣行不行呢?
(total1=total2)=0;
這樣是不可以的,因為先要算括號里面的,這時total1=total2是一個表達式,而賦值語句的左邊是不允許表達式存在的。
二、算術運算符
在C語言中有兩個單目和五個雙目運算符。
符號
功能
+
單目正
-
單目負
*
乘法
/
除法
%
取模
+
加法
-
減法
下面是一些賦值語句的例子,在賦值運算符右側的表達式中就使用了上面的算術運算符:
Area=Height*Width;
num=num1+num2/num3-num4;
運算符也有個運算順序問題,先算乘除再算加減。單目正和單目負最先運算。
取模運算符(%)用于計算兩個整數(shù)相除所得的余數(shù)。例如:
a=7%4;
最終a的結果是3,因為7%4的余數(shù)是3。
那么有人要問了,我要想求它們的商怎么辦呢?
b=7/4;
這樣b就是它們的商了,應該是1。
也許有人就不明白了,7/4應該是1.75,怎么會是1呢?這里需要說明的是,當兩個整數(shù)相除時,所得到的結果仍然是整數(shù),沒有小數(shù)部分。要想也得到小數(shù)部分,可以這樣寫7.0/4或者7/4.0,也即把其中一個數(shù)變?yōu)榉钦麛?shù)。
那么怎樣由一個實數(shù)得到它的整數(shù)部分呢?這就需要用強制類型轉換了。例如:
a=(int)(7.0/4);
因為7.0/4的值為1.75,如果在前面加上(int)就表示把結果強制轉換成整型,這就得到了1。那么思考一下a=(float)(7/4);最終a的結果是多少?
單目減運算符相當于取相反值,若是正值就變?yōu)樨撝?,若是負?shù)就變?yōu)檎怠?/p>
單目加運算符沒有意義,純粹是和單目減構成一對用的。
三、邏輯運算符
邏輯運算符是根據(jù)表達式的值來返回真值或是假值。其實在C語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值。
符號
功能
&&
邏輯與
||
邏輯或
!
邏輯非
例如:
5!3;
0||-2&&5;
!4;
當表達式進行&&運算時,只要有一個為假,總的表達式就為假,只有當所有都為真時,總的式子才為真。當表達式進行||運算時,只要有一個
為真,總的值就為真,只有當所有的都為假時,總的式子才為假。邏輯非(!)運算是把相應的變量數(shù)據(jù)轉換為相應的真/假值。若原先為假,則邏輯非以后為真,
若原先為真,則邏輯非以后為假。
還有一點很重要,當一個邏輯表達式的后一部分的取值不會影響整個表達式的值時,后一部分就不會進行運算了。例如:
a=2,b=1;
a||b-1;
因為a=2,為真值,所以不管b-1是不是真值,總的表達式一定為真值,這時后面的表達式就不會再計算了。
四、關系運算符
關系運算符是對兩個表達式進行比較,返回一個真/假值。
符號
功能
>
大于
=
大于等于
>=
右移賦值
&=
位邏輯與賦值
|=
位邏輯或賦值
^=
位邏輯異或賦值
上面的十個復合賦值運算符中,后面五個我們到以后位運算時再說明。
那么看了上面的復合賦值運算符,有人就會問,到底Total=Total+3;與Total+=3;有沒有區(qū)別?答案是有的,對于A=A+1,表達式A被
計算了兩次,對于復合運算符A+=1,表達式A僅計算了一次。一般的來說,這種區(qū)別對于程序的運行沒有多大影響,但是當表達式作為函數(shù)的返回值時,函數(shù)就
被調(diào)用了兩次(以后再說明),而且如果使用普通的賦值運算符,也會加大程序的開銷,使效率降低。
七、條件運算符
條件運算符(?:)是C語言中唯一的一個三目運算符,它是對第一個表達式作真/假檢測,然后根據(jù)結果返回兩外兩個表達式中的一個。
?:
在運算中,首先對第一個表達式進行檢驗,如果為真,則返回表達式2的值;如果為假,則返回表達式3的值。
例如:
a=(b>0)?b:-b;
當b>0時,a=b;當b不大于0時,a=-b;這就是條件表達式。其實上面的意思就是把b的絕對值賦值給a。
八、逗號運算符
在C語言中,多個表達式可以用逗號分開,其中用逗號分開的表達式的值分別結算,但整個表達式的值是最后一個表達式的值。
假設b=2,c=7,d=5,
a1=(++b,c--,d+3);
a2=++b,c--,d+3;
對于第一行代碼,有
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公戶購房合同范例
- 代充值合同標準文本
- 勘察標準合同范例
- 亞麻籽銷售合同標準文本
- 公司合股協(xié)議合同標準文本
- 公眾代運營合同標準文本
- 公司冠名活動合同標準文本
- 農(nóng)田機井電力維修合同標準文本
- 內(nèi)部股合同標準文本
- 專家勞動合同范例
- 鐵路工務課件教學課件
- 《三國志》導讀學習通超星期末考試答案章節(jié)答案2024年
- GB/T 32124-2024磷石膏的處理處置規(guī)范
- 高考志愿填報師資格新版考試題及答案
- 設計部晉升制度
- 中國海油安全知識手冊(2023版)-純文字版
- 2023年10月中國互聯(lián)網(wǎng)發(fā)展基金會招考2名工作人員筆試歷年典型考題及考點剖析附答案詳解
- 2024年廣東省公需課《百縣千鎮(zhèn)萬村高質(zhì)量發(fā)展工程與城鄉(xiāng)區(qū)域協(xié)調(diào)發(fā)展》考試答案
- 潛伏式AGV驅(qū)動電機和減速機選型計算公式說明
- 2024年紀檢監(jiān)察綜合業(yè)務知識考試題庫【綜合題】
評論
0/150
提交評論