國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共139題)_第1頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共139題)_第2頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共139題)_第3頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共139題)_第4頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共139題)_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷1(共4套)(共139題)國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷第1套一、選擇題(本題共34題,每題1.0分,共34分。)1、有以下程序#includeintfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序運(yùn)行后的輸出結(jié)果是()。A、7B、6C、1D、0標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()中的while循環(huán)的邏輯是如果指針p沒有到達(dá)字符串末端,則指針p一直向后移動(dòng)。循環(huán)結(jié)束的時(shí)候,*p==’\0’,數(shù)組名s為一指針常量,始終指向字符數(shù)組的首地址,所以p-s則返回的是字符數(shù)組s中有的字符個(gè)數(shù),所以輸出結(jié)果為7,答案選A。2、若有以下程序段charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正確引用字符串的選項(xiàng)是()。A、strpB、str[0]C、strp[3]D、*strp標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:指針strp為一個(gè)指針數(shù)組,str為一個(gè)二維數(shù)組名。語(yǔ)句"strp[i]=str[i];"將str數(shù)組中第i+1個(gè)字符串的首地址賦值給strp[i],所以str[i]與strp[i]、*(strp+i)、*(str+i)等價(jià),選項(xiàng)B)、C)、D)正確,而strp為指針數(shù)組所占內(nèi)存的首地址,不能引用字符串,所以答案選A)。3、有以下程序#include#includevoidfun(char*s){chara[10];strcpy(a,"STRING");s=a;}main(){char*p="PROGRAM";fun(p);printf("%s\n",p);}程序運(yùn)行后的輸出結(jié)果是(此處□代表空格)()。A、PROGRAMB、STRING□□□□C、STRING□□□D、STRING標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)的參數(shù)傳遞過(guò)程中,形參只是實(shí)參的一個(gè)副本,如果形參和實(shí)參為兩個(gè)地址,則形參指針指向的變化不能影響到實(shí)參指針的指向。所以該函數(shù)fun()調(diào)用中,并不能改變實(shí)參p的指向,輸出結(jié)果為"PROGRAM",答案選A。4、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是()。A、6385B、9824C、6982D、9284標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:第一個(gè)for循環(huán)將數(shù)組中每個(gè)字符串的首地址賦值給了指針數(shù)組p的元素,所以p[i][j]與c[i][j]等價(jià)。第二個(gè)嵌套for循環(huán)中外層循環(huán)i從0到1,內(nèi)層循環(huán)j為偶數(shù)且從0遞增,語(yǔ)句"s=10*s+p[i][j]-?0?;"用一個(gè)整數(shù)s記錄數(shù)組c中列下標(biāo)為偶數(shù)的所有數(shù)字,并按照其先后順序放置于整數(shù)s的不同位上,所以計(jì)算得到的結(jié)果為6385,答案選A。5、下面選項(xiàng)中的程序段,沒有編譯錯(cuò)誤的是()。A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;D、charmark[];mark="PROGRAM";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符數(shù)組名為一個(gè)指針常量,在非定義狀態(tài)下,不能進(jìn)行任何賦值性操作,所以不能通過(guò)賦值操作將一個(gè)字符串的地址指給它,也不能一個(gè)字符數(shù)組的地址指給另一個(gè)字符數(shù)組名,選項(xiàng)B)、C)、D)錯(cuò)誤;但是可以通過(guò)賦值的方式把一個(gè)字符串地址指給一個(gè)字符指針,選項(xiàng)A)正確;答案選A)。6、以下敘述中正確的是()。A、字符串?dāng)?shù)組,是指數(shù)組中的每個(gè)元素都是一個(gè)存放字符串的一維數(shù)組B、charca[3][5]={"A","BB","CCC"};是不合語(yǔ)法的C、charca[][5]={"A","BB","CCC"};是不合語(yǔ)法的D、char*ca[3]={"A","BB","CCC"};是不合語(yǔ)法的標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:多個(gè)字符串可以使用二維字符數(shù)組存放,但是每個(gè)字符串的長(zhǎng)度不能超過(guò)二維數(shù)組的第二維的維數(shù)。在定義二維數(shù)組時(shí),第一維的數(shù)字可以省略,所以選項(xiàng)B)、C)、D)中定義字符串?dāng)?shù)組的語(yǔ)句都是合法的,答案選A)。7、以下敘述中正確的是()。A、函數(shù)名代表該函數(shù)的入口地址B、所有函數(shù)均不能接受函數(shù)名作為實(shí)參傳入C、函數(shù)體中的語(yǔ)句不能出現(xiàn)對(duì)自己的調(diào)用D、如果函數(shù)帶有參數(shù),就不能調(diào)用自己標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)名也是一個(gè)地址,為該函數(shù)的入口,選項(xiàng)A)正確;函數(shù)名可以作為實(shí)參,實(shí)際傳遞的是該函數(shù)的返回值,選項(xiàng)B)錯(cuò)誤;在函數(shù)體中可以調(diào)用自身,這種函數(shù)稱為遞歸函數(shù),選項(xiàng)C)錯(cuò)誤;遞歸函數(shù)也有帶參數(shù)和不帶參數(shù)的,選項(xiàng)D)錯(cuò)誤;答案選A)。8、在32位編譯器上,設(shè)有定義char*str1="Hello",str2[]="Hello";,則以下語(yǔ)句printf("%d%d",sizeof(str1),sizeof(str2));的輸出結(jié)果是()。A、46B、55C、66D、56標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:sizeof(str1)求的是一個(gè)指針占用字節(jié)數(shù),在32位的計(jì)算機(jī)上規(guī)定一個(gè)指針變量占用的內(nèi)存為32位,即4個(gè)字節(jié),所以第一個(gè)輸出結(jié)果為4;sizeof(str2)求的是字符數(shù)組str2占用內(nèi)存,包含字符串結(jié)束標(biāo)識(shí)符?\0?,所以第二個(gè)輸出結(jié)果為6。答案選A。9、以下敘述中正確的是()。A、函數(shù)既可以直接調(diào)用自己,也可以間接調(diào)用自己B、任何情況下都不能用函數(shù)名作為實(shí)參C、函數(shù)的遞歸調(diào)用不需要額外開銷,所以效率很高D、簡(jiǎn)單遞歸不需要明確的結(jié)束遞歸的條件標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)之間可以嵌套調(diào)用,選項(xiàng)A)描述正確;函數(shù)名可以作為實(shí)參,實(shí)際傳遞的是該函數(shù)的返回值,選項(xiàng)B)錯(cuò)誤;遞歸調(diào)用也是函數(shù)調(diào)用,每次調(diào)用的時(shí)候也需要記錄每一層的返回點(diǎn),也要增加許多額外的開銷的,選項(xiàng)C)錯(cuò)誤;遞歸調(diào)用和循環(huán)很相似,為了防止遞歸調(diào)用無(wú)休止地進(jìn)行,必須在函數(shù)內(nèi)添加明確的結(jié)束條件,選項(xiàng)D)錯(cuò)誤;答案選A)。10、設(shè)有定義語(yǔ)句:char*aa[2]={"abcd","ABCD"};則以下敘述正確的是()。A、aa[0]存放了字符串"abcd"的首地址B、aa數(shù)組的兩個(gè)元素只能存放含有4個(gè)字符的一維數(shù)組的首地址C、aa數(shù)組的值分別是字符串"abcd"和"ABCD"D、aa是指針變量,它指向含有兩個(gè)元素的字符型數(shù)組標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:*aa[2]為一個(gè)指針數(shù)組,存放多個(gè)字符串時(shí)aa[i]記錄的是第i+1個(gè)字符串的首地址,選項(xiàng)A)正確;并且該指針數(shù)組和aa[][2]等價(jià),第一維數(shù)字沒有寫明的話可以存放任意長(zhǎng)度的字符串,選項(xiàng)B)錯(cuò)誤;aa數(shù)組中存放的是兩個(gè)基類型為char型的指針,而不是字符串,選項(xiàng)C)錯(cuò)誤;aa是指針常量,選項(xiàng)D)錯(cuò)誤;所以答案選A)。11、有以下程序#includeintfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的輸出結(jié)果是()。A、8B、6C、0D、7標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()中的while循環(huán)的邏輯是如果指針p沒有到達(dá)字符串末端,則指針p一直向后移動(dòng)。循環(huán)結(jié)束的時(shí)候,*p==?\0?,數(shù)組名s為一指針常量,始終指向字符數(shù)組的首地址,所以p-s則返回的是字符數(shù)組s中有的字符個(gè)數(shù)(不包含結(jié)束標(biāo)識(shí)符),所以輸出結(jié)果為8,答案選A。12、有以下程序#includemain(){charc[2][5]={"6934","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>′0′&&p[i][j]<=’9’;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序的輸出結(jié)果是()。A、6385B、69825C、63825D、693825標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:第一個(gè)for循環(huán)將數(shù)組中每個(gè)字符串的首地址賦值給了指針數(shù)組p的元素,所以p[i][j]與c[i][j]等價(jià)。第二個(gè)嵌套for循環(huán)中外層循環(huán)i從0到1,內(nèi)層循環(huán)j為偶數(shù)且從0遞增,語(yǔ)句"s=10*s+p[i][j]-?0?;"用一個(gè)整數(shù)s記錄數(shù)組c中列下標(biāo)為偶數(shù)的所有數(shù)字,并按照其先后順序放置于整數(shù)s的不同位上,所以計(jì)算得到的結(jié)果為6385,答案選A。13、有以下程序#includemain(){char*s="12134";intk=0,a=0;while(s[k+1]){k++;if(k%2==0){a=a+(s[k]-’0’+1);continue;}a=a+(s[k]-’0’);}printf("k=%da=%d\n",k,a);}程序運(yùn)行后的輸出結(jié)果是()。A、k=4a=12B、k=5a=15C、k=6a=11D、k=3a=14標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:while循環(huán)的條件為s[k+1]不為?\0?,循環(huán)開始即讓k自加1,相當(dāng)于s[++k]不為?\0?。所以遍歷s指向的字符串除首位元素的之后的字符串,a累加s指向字符串中每個(gè)元素對(duì)應(yīng)的數(shù)字,若元素下標(biāo)為偶數(shù)則多加1。字符串后4位元素"2134"中下標(biāo)為偶數(shù)的元素個(gè)數(shù)為2,所以a=2+1+3+4+2=12,k記錄的是統(tǒng)計(jì)的元素個(gè)數(shù),為4,所以答案選A。14、有以下程序(其中庫(kù)函數(shù)strstr()首部格式為:char*strstr(char*p1,char*p2)其功能是確定p2字符串是否在p1中出現(xiàn),并返回p2第一次出現(xiàn)的字符串首地址)#include#includechar*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a);printf("%s\n",p);}程序的運(yùn)行結(jié)果是()。A、youtoBeijing!B、toBeijing!C、WelcomeyoutoBeijing!D、Beijing!標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語(yǔ)句"p=strstr(b,a);"將指針p指向了字符串"you"在b指向字符串中第一次出現(xiàn)的字符串首地址,即是&b[8],所以輸出結(jié)果為"youtoBeijing!",答案選A。15、有以下程序(其中的strstr()函數(shù)頭部格式為:char*strstr(char*p1,char*p2)確定p2字符串是否在p1中出現(xiàn),并返回p2第一次出現(xiàn)的字符串首地址)#include#includechar*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);}程序的運(yùn)行結(jié)果是()。A、toBeijing!B、youtoBeijing!C、WelcomeyoutoBeijing!D、Beijing!標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:表達(dá)式"strstr(b,a);"返回的是字符串"you"在b指向的字符串中第一次出現(xiàn)的字符串首地址,即是&b[8],strlen(a)求得為字符串a(chǎn)的實(shí)際長(zhǎng)度為3,所以語(yǔ)句"p=strstr(b,a)+strlen(a)+1;"計(jì)算得的p與&b[12]等價(jià),所以答案選A。16、有以下說(shuō)明語(yǔ)句char*s="\"Name\\Address\n";指針s所指字符串的長(zhǎng)度是()。A、14B、15C、17D、說(shuō)明語(yǔ)句不合法標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:該字符串中有三個(gè)轉(zhuǎn)義字符?\"?、?\\?、?\n?,分別代表一個(gè)字符,并且字符串長(zhǎng)度不包含結(jié)束標(biāo)識(shí)符,所以該字符串的長(zhǎng)度為14,答案選A。17、有以下程序#includemain(){char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"},**p;inti;p=s;for(i=0;i<4;i++)printf("%s",p[i]);printf("\n");}程序運(yùn)行后的輸出結(jié)果是()。A、ABCDEFGHIJKLMNOPB、ABCDEFGHIJKLC、ABCDD、AEIM標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語(yǔ)句"p=s",將p指向指針數(shù)組s的首地址,則p[i]與s[i]等價(jià),均是指向第i+1個(gè)字符串的首地址,輸出語(yǔ)句"printf("%s",p[i]);"會(huì)將該字符串整體輸出。所以main()函數(shù)輸出的為字符串?dāng)?shù)組s的前4個(gè)字符串,答案選A。18、若有以下程序段charstr[4][12]={"aaa","bbbb","ccccc","dddddd"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];則以下錯(cuò)誤引用字符串的選項(xiàng)是(其中0≤k<4)()。A、strpB、str[k]C、strp[k]D、*strp標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:指針strp為一個(gè)指針數(shù)組,str為一個(gè)二維數(shù)組名。語(yǔ)句"strp[i]=str[i];"將str數(shù)組中第i+1個(gè)字符串的首地址賦值給strp[i],所以str[i]與strp[i]、*(strp+i)、*(str+i)等價(jià),選項(xiàng)B)、C)、D)正確,而strp為指針數(shù)組所占內(nèi)存的首地址,不能引用字符串,所以答案選A)。19、若有說(shuō)明和語(yǔ)句:charstr[]="Hello",*p;p=str;,則此時(shí)*(p+5)中的值為()。A、’\0’B、’o’C、’o’的地址D、不確定的值標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語(yǔ)句"p=str;"將指針p指向了數(shù)組str的首地址,所以str[i]與p[i]、*(p+i)、*(str+i)等價(jià)。*(p+5)即等價(jià)于str[5],為′\0′,答案選A)。20、以下涉及字符串?dāng)?shù)組、字符指針的程序段,不會(huì)產(chǎn)生編譯錯(cuò)誤的是()。A、char*str,name[10];str="HelloWorld";B、char*str,name[10];name="HelloWorld";C、charstr1[10]="prog.c",str2[10];str2=str1;D、charhead_line[];head_line="=============";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:數(shù)組名表示該數(shù)組的首地址,是一個(gè)地址常量,不能對(duì)它重新賦值,選項(xiàng)B)、C)、D)錯(cuò)誤,答案選A)。21、有如下程序#include#includemain(){chara[]="THIS",*b="OK";printf("%d,%d,%d,%d\n",strlen(a),sizeof(a),strlen(b),sizeof(b));}程序運(yùn)行后的輸出結(jié)果是()。A、4,5,2,4B、4,4,2,1C、5,5,3,3D、4,5,2,3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:strlen()計(jì)算的是字符串的實(shí)際長(zhǎng)度(不包含結(jié)束標(biāo)識(shí)符),所以strlen(a)的結(jié)果為4,strlen(b)的結(jié)果為2。sizeof(a)求的是字符數(shù)組a占用內(nèi)存,包含字符串結(jié)束標(biāo)識(shí)符?\0?,計(jì)算結(jié)果為5,sizeof(b)求的是一個(gè)指針占用字節(jié)數(shù),在32位的計(jì)算機(jī)上規(guī)定一個(gè)指針變量占用的內(nèi)存為32位,即4個(gè)字節(jié),所以計(jì)算結(jié)果為4。答案選A。22、有如下程序#include#includemain(){charname[10]="c-book";char*str=name;printf("%d,%d,%d,%d\n",sizeof(name),strlen(name),sizeof(str),strlen(str));}程序運(yùn)行后的輸出結(jié)果是()。A、10,6,4,6B、11,6,11,6C、11,6,1,6D、10,7,1,7標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:strlen()計(jì)算的是字符串的實(shí)際長(zhǎng)度(不包含結(jié)束標(biāo)識(shí)符),所以strlen(name)和strlen(str)的結(jié)果為均為6。sizeof(name)求的是字符數(shù)組a占用內(nèi)存,數(shù)組a在定義時(shí)標(biāo)明了維數(shù)為10,所以計(jì)算的結(jié)果為10;sizeof(str)求的是指針str占用字節(jié)數(shù),在32位的計(jì)算機(jī)上規(guī)定一個(gè)指針變量占用的內(nèi)存為32位,即4個(gè)字節(jié),所以計(jì)算的結(jié)果為4。答案選A。23、有如下程序#includeintdisp(char*str){while(*str)putchar(*str++);return*str;}main(){printf("%d\n",disp("NAME"));}程序運(yùn)行后的輸出結(jié)果是()。A、NAME0B、NAMEEC、NAMED、NAME\0標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)disp()的功能是不斷輸出str指向的字符串中的字符,直到指針str指向該字符串的尾部′\0′,并返回當(dāng)前字符的ASCII碼值。main()函數(shù)中會(huì)輸出該ASCII碼值,字符′\0′的ASCII碼值為0,所以輸出結(jié)果為選項(xiàng)A)。24、有如下程序#includemain(){char*p,old_str[10]="wind";intpassword;scanf("%d",&password);p=old_str;while(*p){printf("%c",*p+password);p++;}printf("\n");}程序運(yùn)行時(shí),從鍵盤輸入2<回車>,輸出結(jié)果是()。A、ykpfB、windC、xjoeD、2222標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:這段代碼的作用是給一個(gè)字符串加密,加密的方式是將原先字符串的每個(gè)字符的ASCII碼加上password,即相當(dāng)于在ASCII碼表上取距離當(dāng)前字符為password的字符作為加密后的字符,所以答案選A。25、有如下程序#includeintsum(int*array,intlen){if(len==0)returnarray[0];elsereturnarray[0]+sum(array+1,len-1);}main(){intarray[5]={1,2,3,4,5};intres=sum(array,4);printf("%d\n",res);}程序運(yùn)行后的輸出結(jié)果是()。A、15B、10C、8D、1標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)sum()的作用是計(jì)算數(shù)組array中元素下標(biāo)為len到0的所有元素的和,所以答案選A。26、以下能正確進(jìn)行字符串賦值的語(yǔ)句組是()。A、char*ch;ch="abc";B、charch[]={’a’,’b’,’c’};C、charch[3]="abc";D、charch[4];ch="abc";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:通過(guò)賦初值的方式把一個(gè)字符串賦給字符數(shù)組必須要在字符串的末尾加上結(jié)束標(biāo)識(shí)符′\0′,沒有′\0′的不能判定該字符數(shù)組存放的是字符串,選項(xiàng)B)錯(cuò)誤;用字符數(shù)組存放字符串的時(shí)候,字符數(shù)組的元素個(gè)數(shù)至少要比存放的字符串長(zhǎng)度要多1,因?yàn)榻Y(jié)束標(biāo)識(shí)符也會(huì)被寫入到字符數(shù)組中,選項(xiàng)C)錯(cuò)誤;數(shù)組名為地址常量,不能對(duì)其進(jìn)行賦值性操作,選項(xiàng)D)錯(cuò)誤。答案選A)。27、有以下程序#includeintfun(char*s){char*p=s;while(*p++!=’\0’);return(p-s);}main(){char*p="01234";printf("%d\n",fun(p));}程序的運(yùn)行結(jié)果是()。A、6B、5C、4D、3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()中的while循環(huán)的邏輯是如果*p不為?\0?,則指針p一直向后移動(dòng)。循環(huán)結(jié)束的時(shí)候,p指向的是字符?\0?的下一位,數(shù)組名s為一指針常量,始終指向字符數(shù)組的首地址,所以p-s則返回的是字符數(shù)組s中有的字符個(gè)數(shù)(包含結(jié)束標(biāo)識(shí)符),所以輸出結(jié)果為6,答案選A。28、有以下程序#includemain(){chars[10]="verygood",*ps=s;ps+=4;ps="nice";puts(s);}程序的運(yùn)行結(jié)果是()。A、verygoodB、veryniceC、nicegoodD、nice標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:數(shù)組名s為一個(gè)指針常量,始終指向該數(shù)組的首地址,語(yǔ)句"ps="nice";"將字符指針ps指向了另一個(gè)字符串的首地址,并不能對(duì)字符數(shù)組s中的數(shù)據(jù)造成影響,所以輸出結(jié)果為"verygood",答案選A。29、有以下程序#includeintfun(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}main(){char*p="01234";printf("%d\n",fun(p));}程序的運(yùn)行結(jié)果是()。A、5B、6C、4D、3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()中的while循環(huán)的邏輯是如果*p不為?\0?,則指針p一直向后移動(dòng)。循環(huán)結(jié)束的時(shí)候,p指向的是字符?\0?,數(shù)組名s為一指針常量,始終指向字符數(shù)組的首地址,所以p-s則返回的是字符數(shù)組s中有的字符個(gè)數(shù)(不包含結(jié)束標(biāo)識(shí)符),所以輸出結(jié)果為5,答案選A。30、有以下程序#include#includevoidfun(int*p1,int*s){int*t;t=(int*)malloc(2*sizeof(int));*t=*p1+*p1++;*(t+1)=*p1+*p1;s=t;}main(){inta[2]={1,2},b[2]={0};fun(a,b);printf("%d,%d\n",b[0],b[1]);}程序運(yùn)行后的輸出結(jié)果是()。A、0,0B、2,6C、2,4D、1,2標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)調(diào)用時(shí)的參數(shù)傳遞過(guò)程中,形參只是實(shí)參的一個(gè)副本,如果形參和實(shí)參為兩個(gè)地址,則形參指針指向的變化不能影響到實(shí)參指針的指向。函數(shù)fun()中先給t分配一個(gè)空間并用指針p1給t中元素賦值,之后將指針t指向的地址賦值給了指針s,只是改變了s的指向而沒有改變s指向內(nèi)存中元素的值,所以調(diào)用結(jié)束后b中元素沒有變化,答案選A。31、有以下程序#include#includeintfun(intn){int*p;p=(int*)malloc(sizeof(int));*p=n;return*p;}main(){inta;a=fun(10);printf("%d\n",a+fun(10));}程序的運(yùn)行結(jié)果是()。A、20B、10C、0D、出錯(cuò)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是新分配一個(gè)存儲(chǔ)空間并把n的值存入該存儲(chǔ)空間內(nèi),同時(shí)返回該存儲(chǔ)空間記錄的值*p,也即是n,所以a=fun(10)=10,輸出"a+fun(10)"的結(jié)果為20,答案選A。32、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是()。A、6385B、9824C、4528D、6938標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:第一個(gè)for循環(huán)將數(shù)組中每個(gè)字符串的首地址賦值給了指針數(shù)組p的元素,所以p[i][j]與c[i][j]等價(jià)。第二個(gè)嵌套for循環(huán)中外層循環(huán)i從0到1,內(nèi)層循環(huán)j為偶數(shù)且從0遞增,語(yǔ)句"s=10*s+p[i][j]-?0?;"用一個(gè)整數(shù)s記錄數(shù)組c中列下標(biāo)為偶數(shù)的所有數(shù)字,并按照其先后順序放置于整數(shù)s的不同位上,所以計(jì)算得到的結(jié)果為6385,答案選A。33、有以下程序#include#includevoidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}程序的輸出結(jié)果是()。A、1.10B、11.10C、12.10D、21.10標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是用calloc()函數(shù)重新分配了1個(gè)長(zhǎng)度為sizeof(double)的連續(xù)空間并把返回的內(nèi)存地址賦值給s,之后對(duì)往新分配的內(nèi)存中寫入數(shù)據(jù)。由于函數(shù)傳遞過(guò)程中形參指針指向的變化不能影響到實(shí)參指針的指向,所以函數(shù)fun()并不能改變s的指向,*s與a[0]等價(jià),格式輸出的結(jié)果為1.10,答案選A。34、有以下程序#include#includevoidfun(int*p1,int*p2,int*s){s=(int*)calloc(1,sizeof(int));*s=*p1+*p2;free(s);}main(){inta[2]={1,2},b[2]={40,50},*q=a;fun(a,b,q);printf("%d\n",*q);}程序運(yùn)行后的輸出結(jié)果是()。A、1B、41C、42D、0標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是改變了指針s的指向。由于函數(shù)傳遞過(guò)程中形參只是實(shí)參的一個(gè)副本,形參指針指向的變化不能影響到實(shí)參指針的指向,所以函數(shù)fun()并不能改變實(shí)參q的指向,*q仍與a[0]等價(jià),輸出的結(jié)果為1,答案選A。國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷第2套一、選擇題(本題共35題,每題1.0分,共35分。)1、若有定義:intw[3][5];則以下不能正確表示該數(shù)組元素的表達(dá)式是()。A、*(w+1)[4]B、*(*w+3)C、*(*(w+1))D、*(&w[0][0]+1)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:若要訪問(wèn)第二行第五列的元素需要用(*(w+1))[4],選項(xiàng)A)少了一個(gè)圓括號(hào),如果不加圓括號(hào),根據(jù)結(jié)合性,(w+1)會(huì)先和[4]結(jié)合,這是沒有意義的,所以答案選A)。2、若有定義語(yǔ)句:intyear=2009,*p=&year;以下不能使變量year中的值增至2010的語(yǔ)句是()。A、*p++;B、(*p)++;C、++(*p);D、*p+=1;標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針的用法。指針變量存儲(chǔ)的是其指向的變量的地址,*p表示的是p指向的變量的值,自加運(yùn)算符(++)的優(yōu)先級(jí)要高于取值運(yùn)算符(*)的優(yōu)先級(jí),*p++表示的是先將指針p指向下一個(gè)地址然后再取該地址的值,所以得到的結(jié)果并不是把year的值增至2010選項(xiàng)A)錯(cuò)誤,答案選A)。3、若在定義語(yǔ)句:inta,b,c,*p=&c;接著執(zhí)行以下選項(xiàng)中的語(yǔ)句,則能正確執(zhí)行的語(yǔ)句是()。A、scanf("%d",p);B、scanf("%d%d%d",a,b,c);C、scanf("%d",a,b,c);D、scanf("%d",&p);標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:scanf函數(shù)的一般形式為scanf("格式控制字符串",輸入項(xiàng)1,輸入項(xiàng)2,…),其中,輸入項(xiàng)由地址運(yùn)算符"&"后跟變量名組成,取地址運(yùn)算符"&"不可以省除非輸入項(xiàng)為一指針,本身代表一個(gè)地址,所以答案選A。4、若有以下程序#includevoidsp(int*a){intb=2;a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3,*p=&k;sp(p);printf("%d,%d\n",k,*p);}則程序的輸出結(jié)果是()。A、4,3,3B、4,3,4C、6,3,6D、6,6,6標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與函數(shù)。雖然該函數(shù)進(jìn)行的是地址傳參,但只是改變了指針的指向,對(duì)原指向的數(shù)據(jù)并沒有改變,該函數(shù)仍然可以看做是值傳遞,即形參指針指向的變化不會(huì)影響到實(shí)參指針的指向。所以在函數(shù)sp()中的輸出結(jié)果為4,而指針p的指向以及k的值仍然沒有改變,答案選A。5、若有以下程序#includeintk=7;voidf(int**s){int*t=&k;*s=t;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}則程序的輸出結(jié)果是()。A、7,7,7,3,7,7B、3,7,7,7,7,7C、7,7,7,3,3,3D、3,3,3,7,7,7標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題考查指向指針的指針。i是int類型的變量,p為基本類型為int的指針變量,r為二級(jí)指針,指向的是指針p的地址,因此,*p就代表i;**r就代表*p,也等價(jià)于i。二級(jí)指針作為函數(shù)參數(shù),形參和實(shí)參指向同一個(gè)地址空間,兩者的改變保持同步。函數(shù)fun()的功能是將r指向的存有變量i的地址的指針變量改為指向存有變量k的地址的指針變量,*p的值發(fā)生了改變。函數(shù)f()中語(yǔ)句"int*t=&k;*s=t;"同樣使得**s、*t、k等價(jià),所以剛開始輸出3個(gè)7,函數(shù)調(diào)用結(jié)束之后*p與**r的值均為7,i不變,答案選A。6、若有以下程序#includeint*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}則程序的輸出結(jié)果是()。A、3,5,3,5,5B、3,5,5,3,5C、5,3,5,3,5D、5,3,3,5,5標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與函數(shù)。被調(diào)函數(shù)為指針型函數(shù),返回的是s這一指針型數(shù)據(jù)。雖然該函數(shù)進(jìn)行的是地址傳參,但只是改變了指針的指向,對(duì)原指向的數(shù)據(jù)并沒有改變。并且若以指針作為操作單元,不涉及其指向的數(shù)據(jù)時(shí),該函數(shù)仍然可以看做是值傳遞,即形參指針指向的變化不會(huì)影響到實(shí)參指針的指向。if語(yǔ)句將s指向*s、*t較大的數(shù)據(jù)的地址并返回。所以函數(shù)調(diào)用結(jié)束之后,i、j值不變,p的指向不變,r的指向和q的指向一致,輸出結(jié)果為:3,5,3,5,5,答案選A。7、若有以下程序#includevoidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3;sp(&k);printf("%d\n",k);}則程序的輸出結(jié)果是()。A、6,4,6B、6,4,3C、6,12,12D、9,4,9標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查地址傳參。地址傳參過(guò)程中,實(shí)參和形參指向同一段地址空間,所以指向的變量的變化保持同步,但是指向的地址空間實(shí)參不會(huì)隨著形參的變化而變化。函數(shù)sp()中,*a為3,所以第一次輸出值為6;之后*a指向變量b的地址,所以輸出結(jié)果為4,*a指向的變化不能改變k的地址,所以k值為6,答案選A。8、若有以下程序#includeintk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}則程序的輸出結(jié)果是()。A、7,5,5,3,3,3,B、7,5,7,3,3,3,C、7,5,7,3,5,7,D、7,7,5,3,3,3,標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:本題考查指向指針的指針。函數(shù)f()中,語(yǔ)句"s=&t;"將s指向了指針t的地址,即*s與t等價(jià),而語(yǔ)句"*s=&m;"相當(dāng)于"t=&m",即將指針t指向了變量m的地址,所以在函數(shù)f()中輸出結(jié)果為7,5,5。主函數(shù)中,i是int類型的變量,p為基本類型為int的指針變量,r為二級(jí)指針,語(yǔ)句"i=3,*p=&i,**r=&p;"使得*p、**r、i三者等價(jià)。函數(shù)f()以二級(jí)指針r作為實(shí)參,內(nèi)部重新改變了形參s的指向后再進(jìn)行操作,由于形參只是實(shí)參的一個(gè)副本,形參指針指向的變化不會(huì)影響到實(shí)參指針的指向,所以實(shí)參r的指向沒有變化,輸出結(jié)果為3,3,3,答案選A。9、若有以下程序#includeint*f(int*s,int*t){intk;if(*s<*t){k=*s;*s=*t;*t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}則程序的輸出結(jié)果是()。A、5,3,5,3,5B、3,5,5,3,5C、3,5,3,5,5D、5,3,3,5,5標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與函數(shù)。該函數(shù)進(jìn)行的是地址傳參,形參和實(shí)參指向的變量的值保持一致。函數(shù)f()中,如果(*s<*t)則將指針s、t中指向的變量的數(shù)據(jù)進(jìn)行交換,s指向的地址中存放的是值較大的數(shù)據(jù)。函數(shù)調(diào)用結(jié)束后,p、q指向的值發(fā)生了改變,r和p的指向保持一致,所以答案選A。10、有以下程序#includemain(){inty=1,x,a[]={2,4,6,8,10},*p;p=&a[1];for(x=0;x<3;x++)y=y+*(p+x);printf("%d\n",y);}程序運(yùn)行后的輸出結(jié)果是()。A、19B、17C、18D、20標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與一維數(shù)組。語(yǔ)句p=&a[1];意味著將指針p指向數(shù)組a的第二個(gè)元素,p+1則是指向數(shù)組a的第三個(gè)元素,同理,p+x則是指向數(shù)組a的第x+2個(gè)元素,x的取值為0、1、2,然后用y和對(duì)應(yīng)數(shù)組的元素累加,y=1,即是1+2+4+6+8=19,結(jié)果選A)。11、以下程序調(diào)用fun函數(shù)求數(shù)組中最大值所在元素的下標(biāo)。#includevoidfun(int*s,intn,int*k){inti;for(i=0,*k=i;is[*k])__________;}main(){inta[5]={1,6,2,8,0},k;fun(a,5,&k);printf("%d%d\n",k,a[k]);}在橫線處應(yīng)填入的內(nèi)容是()。A、*k=iB、k=iC、*k=i-sD、k=i-s標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:該代碼段的邏輯是循環(huán)判定s中的值,如果大于s[*k]則用*k記錄當(dāng)前的元素下標(biāo),記錄當(dāng)前下標(biāo)的語(yǔ)句應(yīng)為"*k=i",表示把i的值賦給了k指向的變量的值,答案選A。12、有以下程序#includemain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4]=a,i,j,k=0;for(i=0;i<3;i++)for(j=0;j<2;j++)k=k+*(*(p+i)+j);printf("%d\n",k);}程序運(yùn)行后的輸出結(jié)果是()。A、60B、68C、99D、108標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查行指針。(*p)[4]表示一個(gè)能存放四個(gè)整型元素首地址的一維數(shù)組的首地址。所以"k=k+*(*(p+i)+j)"中k累加的是數(shù)組中第i行第j列的元素。兩層循環(huán)中i從0到2,j從0到1,所以累加的值為1、3、9、11、17、19,答案選A。13、有以下程序#includemain(){intc[6]={10,20,30,40,50,60},*p,*s;p=c;s=&c[5];printf("%d\n",s-p);}程序運(yùn)行后的輸出結(jié)果是()。A、5B、50C、6D、60標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與一維數(shù)組。語(yǔ)句p=c;意味著將指針p指向數(shù)組c的第一個(gè)元素,語(yǔ)句s=&c[5];意味著將指針s指向數(shù)組c的第6個(gè)元素,指針s與指針p之間隔了5個(gè)元素,結(jié)果選A)。14、有以下程序#includemain(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf("%d",*(p++));printf("%d\n",**k);}程序運(yùn)行后的輸出結(jié)果是()。A、24B、44C、22D、46標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在該程序中,a是int類型的一維數(shù)組,p為基本類型為int的指針變量,指向數(shù)組a的第一個(gè)元素;k為二級(jí)指針,指向指針p。輸出*(p++)時(shí),自加運(yùn)算符后置即先輸出p指向的值后p再向后移動(dòng)一位,所以第一次輸出的結(jié)果為2。k指向指針p,**k與*p等價(jià),第二次輸出結(jié)果為4,答案選A。15、有以下程序#includemain(){intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}程序運(yùn)行后的輸出結(jié)果是()。A、23B、26C、43D、46標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:定義二維數(shù)組的語(yǔ)句為"intaa[3][3]={{2},{4},{6}}"表明aa[0][0]=2,aa[1][0]=4,aa[2][0]=6,指針p指向二維數(shù)組aa的第一個(gè)元素。第一次循環(huán),i值為0,則計(jì)算aa[0][1]的值為*p+1=aa[0][0]+1=3,輸出*p的值為2;第二次循環(huán),p指針移動(dòng),指向aa[0][1],輸出結(jié)果為3。答案選A。16、以下fun函數(shù)返回?cái)?shù)組中最大值的下標(biāo)#includeintfun(int*s,intn){inti,k;for(i=0,k=i;is[k])__________;return(k);}在橫線處應(yīng)填入的內(nèi)容是()。A、k=iB、i=kC、k++D、++k標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:該代碼段的邏輯是循環(huán)判定s中的值,如果大于s[k]則用k記錄當(dāng)前的元素下標(biāo),記錄當(dāng)前下標(biāo)的語(yǔ)句應(yīng)為"k=i",答案選A。17、有以下程序#includeint*f(int*s,int*t){if(*s<*t)*s=*t;returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}程序的運(yùn)行結(jié)果是()。A、5,5,5,5,5B、3,5,5,5,5C、5,3,3,3,5D、3,5,3,5,5標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與函數(shù)。該函數(shù)進(jìn)行的是地址傳參,形參和實(shí)參指向的變量的值保持一致。函數(shù)f()中,(*s<*t)成立,則將*s=*t;,*s與*t的值均為5,返回值為5,即r=5。函數(shù)調(diào)用結(jié)束后,p、q指向的值也均為5,所以答案選A。18、若有說(shuō)明語(yǔ)句:int*ptr[10];以下敘述正確的是()。A、ptr是一個(gè)具有10個(gè)指針元素的一維數(shù)組,每個(gè)元素都只能指向整型變量B、ptr是指向整型變量的指針C、ptr是一個(gè)指向具有10個(gè)整型元素的一維數(shù)組的指針D、ptr是一個(gè)指向10個(gè)整型變量的函數(shù)指針標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針數(shù)組的定義。說(shuō)明語(yǔ)句"int*ptr[10];"定義了一個(gè)具有10個(gè)元素的一維數(shù)組,每個(gè)元素都只能存放指針,這些指針的基類型必須為整型,選項(xiàng)A)描述正確,答案選A)。19、若有定義語(yǔ)句:inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下選項(xiàng)中錯(cuò)誤引用a數(shù)組元素的是(其中0≤i<10)()。A、*(*(a+i))B、a[p-a]C、p[i]D、*(&a[i])標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:數(shù)組名表示該數(shù)組的首地址,*(a+i)表示的是數(shù)組a中第二個(gè)元素的值,取值運(yùn)算符*只能對(duì)地址取值,不能作用于變量上,選項(xiàng)A)錯(cuò)誤;a表示數(shù)組a的第一個(gè)元素的地址,*p=a則將p指向了數(shù)組a的第一個(gè)元素的地址,p-a=0,所以a[p-a]即為a[0],p[i]相當(dāng)于a[i],選項(xiàng)B)、C)正確;取地址運(yùn)算符&和取值運(yùn)算符*互為逆運(yùn)算,選項(xiàng)D)正確;答案選A)。20、有以下程序#includemain(){inta[10]={11,12,13,14,15,16,17,18,19,20},*p=a,i=9;printf("%d,%d,%d\n",a[p-a],p[i],*(&a[i]));}程序運(yùn)行后的輸出結(jié)果是()。A、11,20,20B、12,20,20C、11,19,19D、12,19,20標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:a表示數(shù)組a的第一個(gè)元素的地址,*p=a則將p指向了數(shù)組a的第一個(gè)元素的地址,p-a=0,所以a[p-a]即為a[0],p[i]相當(dāng)于a[i]即a[9],輸出第一個(gè)結(jié)果為11、第二個(gè)結(jié)果為20。取地址運(yùn)算符&和取值運(yùn)算符*互為逆運(yùn)算,所以*(&a[i]))的值仍為a[i]即a[9],輸出第三個(gè)結(jié)果為20,答案選A。21、有以下程序#includevoidfun(int*s,intt,int*k){intp;for(p=0,*k=p;ps[*k])*k=p;}main(){inta[10]={11,12,13,14,15,16,20,18,19,10},k;fun(a,10,&k);printf("%d,%d\n",k,a[k]);}程序運(yùn)行后的輸出結(jié)果是()。A、6,20B、10,9C、7,20D、10,10標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:該代碼段的邏輯是循環(huán)判定s中的值,如果大于s[*k]則用*k記錄當(dāng)前的元素下標(biāo),所以k為數(shù)組a中值最大的元素的下標(biāo),答案選A。22、以下選項(xiàng)中,不能對(duì)主函數(shù)中變量i和j的值進(jìn)行交換的程序是()。A、#includevoidswap(int*p,int*q){int*t;*t=*p;*p=*q;*q=*t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d\n",i,j);}B、#includevoidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d\n",i,j);}C、#include#includevoidswap(int*p,int*q){int*t;t=(int*)malloc(sizeof(int));*t=*p;*p=*q;*q=*t;free(t);}main(){inti=10,j=20;swap(&i,&j);printf("i=%dj=%d\n",i,j);}D、#includevoidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*x=&i,*y=&j;swap(x,y);printf("i=%dj=%d\n",i,j);}標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A)中,雖然函數(shù)swap()進(jìn)行的是地址傳參,但只是改變了指針的指向,對(duì)原指向的數(shù)據(jù)并沒有改變。并且若以指針作為操作單元,不涉及其指向的數(shù)據(jù)時(shí),該函數(shù)仍然可以看做是值傳遞,即形參指針指向的變化不會(huì)影響到實(shí)參指針的指向,所以并不能將主函數(shù)中的變量i和j互換數(shù)值。答案選A)。23、有以下程序#includemain(){inta[10]={1,3,5,7,11,13,17},*p=a;printf("%d,",*(p++));printf("%d\n",*(++p));}程序運(yùn)行后的輸出結(jié)果是()。A、1,5B、3,5C、3,7D、1,3標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在該程序中,a是int類型的一維數(shù)組,p為基本類型為int的指針變量,指向數(shù)組a的第一個(gè)元素。輸出*(p++)時(shí),自加運(yùn)算符后置即先輸出p指向的值后p再向后移動(dòng)一位,所以第一次輸出的結(jié)果為1,p指向數(shù)組a中的第二個(gè)元素。輸出*(++p)時(shí),自加運(yùn)算符前置即先將p向后移動(dòng)一位后再輸出p指向的值,所以第二次輸出的結(jié)果為5,答案選A。24、有以下程序#includemain(){int*p,x=100;p=&x;x=*p+10;printf("%d\n",x);}程序運(yùn)行后的輸出結(jié)果是()A、110B、120C、100D、90標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語(yǔ)句"p=&x;"表示將p指向變量x的地址,用取值運(yùn)算符*對(duì)指針p取值能夠得到p指向的變量x的值,所以輸出的結(jié)果為100+10=110,答案選A。25、有以下程序#includevoidfun(intx,inty,int*z){*z=y-x;}main(){inta,b,c;fun(10,5,&a);fun(7,a,&b);fun(a,b,&c);printf("%d,%d,%d\n",a,b,c);}程序運(yùn)行后的輸出結(jié)果是()。A、-5,-12,-7B、5,2,3C、-5,-12,-17D、5,-2,-7標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()返回的是y-x的值并存放在指針變量z指向的變量中。所以函數(shù)fun(10,5,&a);調(diào)用結(jié)束后,a=-5;函數(shù)fun(7,a,&b);調(diào)用結(jié)束后,b=-5-7=-12;函數(shù)fun(a,b,&c);調(diào)用結(jié)束后,c=-12-(-5)=-7,答案選A。26、有以下程序#includevoidfun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(iA、5678901234B、0987654321C、4321098765D、0987651234標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是將數(shù)組s中下標(biāo)為n1和n2之間的數(shù)據(jù)逆序,所以調(diào)用語(yǔ)句fun(p,0,3);fun(p,4,9);fun(p,0,9);結(jié)束后,是先將數(shù)組p中下標(biāo)為0至3之間的元素逆序,然后將下標(biāo)為4至9之間的元素逆序,再將整個(gè)數(shù)組逆序,答案選A。27、有如下程序#includeintchange(int*data){return(*data)++;}main(){intdata=123;change(&data);printf("%d,",data);data=change(&data);printf("%d,",data);printf("\n");}程序運(yùn)行后的輸出結(jié)果是()。A、124,124,B、123,124,C、124,123,D、123,123,標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)change()為中先獲取指針data指向的變量的數(shù)值并返回之后該數(shù)值再自增。函數(shù)為地址傳參,形參與實(shí)參的變化保持同步,所以調(diào)用語(yǔ)句"change(&data);"執(zhí)行完畢后,data的值為123+1=124,調(diào)用語(yǔ)句"data=change(&data);",函數(shù)change()將返回值賦值給data,返回的是變化之前的數(shù)據(jù),所以輸出結(jié)果仍然是124,答案選A。28、有如下程序#includevoidchange(int*array,intlen){for(;len>=0;len--)array[len]+=2;}main(){inti,array[5]={1,2};change(array,4);for(i=0;i<4;i++)printf("%d,",array[i]);printf("\n");}程序運(yùn)行后的輸出結(jié)果是()。A、3,4,2,2,B、3,4,5,6,C、2,3,4,5,D、1,2,0,0,標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)change()的功能是把數(shù)組array中前l(fā)en個(gè)元素均加2,數(shù)組定義語(yǔ)句"array[5]={1,2};"定義數(shù)組的前兩個(gè)元素分別為1、2,其余元素為0,調(diào)用change()函數(shù)結(jié)束后,array={3,4,2,2,2},所以輸出答案為A)。29、以下選項(xiàng)中敘述正確的是()。A、charc1,c2,*c3,c4[40];是合法的變量定義語(yǔ)句B、數(shù)組說(shuō)明符的一對(duì)方括號(hào)中只能使用整型常量,而不能使用表達(dá)式C、數(shù)組下標(biāo)的下限可以是負(fù)值D、若有數(shù)組定義floatarray[4];則語(yǔ)句printf("%f",array[3.12]);是合法的標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:數(shù)組說(shuō)明符的方括號(hào)中可以用整型常量或者整型表達(dá)式,選項(xiàng)B)錯(cuò)誤;數(shù)組的下限只能為0,不能為負(fù)值,選項(xiàng)C)錯(cuò)誤;引用數(shù)組元素的時(shí)候只能用整型數(shù)據(jù)而不能用浮點(diǎn)數(shù)據(jù),選項(xiàng)D)錯(cuò)誤;選項(xiàng)A)描述正確,答案選A)。30、若有函數(shù)聲明voidfun(floatarray[],int*ptr);以下敘述正確的是()。A、函數(shù)參數(shù)array,ptr都是指針變量B、函數(shù)參數(shù)array不是指針變量,ptr是指針變量C、調(diào)用函數(shù)時(shí),實(shí)參數(shù)組的值將一一復(fù)制給array數(shù)組D、調(diào)用函數(shù)時(shí),array是按值傳送,ptr是按地址傳送標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:數(shù)組名表示該數(shù)組的首地址,是一個(gè)地址常量,作為函數(shù)參數(shù)時(shí)傳遞的是數(shù)組的首地址,屬于地址傳參,所以答案選A。31、有如下程序#includemain(){char*p1=0;int*p2=0;double*p3=0;printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3));}程序運(yùn)行后的輸出結(jié)果是()。A、4,4,4B、1,4,8C、0,0,0D、1,2,4標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:指針變量存放的只是對(duì)應(yīng)變量的地址,所以其占用的字節(jié)數(shù)都是一樣的,在32位的計(jì)算機(jī)上規(guī)定一個(gè)指針變量占用的內(nèi)存為32位,即4個(gè)字節(jié),所以答案選A。32、有如下程序#includemain(){inti,*ptr;intarray[3]={8,2,4};for(ptr=array,i=0;i<2;i++)printf("%d,",*ptr++);printf("\n");}程序運(yùn)行后的輸出結(jié)果是()。A、8,2,B、8,8,C、2,4,D、4,8,標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查指針與一維數(shù)組。語(yǔ)句"ptr=array"將指針ptr指向了數(shù)組array的首地址,所以*ptr與a[0]等價(jià)。輸出語(yǔ)句中"*ptr++"自加運(yùn)算符后置,所以先輸出ptr指向的變量的值,再讓ptr自加1,即指向數(shù)組array中下一個(gè)元素的地址,該程序輸出數(shù)組前兩個(gè)元素的值,答案選A。33、設(shè)有定義:inta,b[10],*c=NULL,*p;,則以下語(yǔ)句錯(cuò)誤的是()。A、p=a;B、p=b;C、p=c;D、p=&b[0];標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:p為一個(gè)指針,只能把一個(gè)地址賦值給它,選項(xiàng)A)錯(cuò)誤,答案選A)。34、有以下程序#includevoidfun(int*x,ints,inte){inti,j,t;for(i=s,j=e;iA、4567890123B、3210987654C、9876543210D、0987651234標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是將數(shù)組x中下標(biāo)為s和e之間的元素逆序,所以調(diào)用函數(shù)fun(m,0,3)后,m={3,2,1,0,4,5,6,7,8,9};調(diào)用函數(shù)fun(m+4,0,5)后,m={3,2,1,0,9,8,7,6,5,4};調(diào)用函數(shù)fun(m,0,9)后,m={4,5,6,7,8,9,0,1,2,3}。答案選A。35、有以下程序#includemain(){ints[3][2]={1,2,3,4,5,6},*ps[3],k;for(k=0;k<3;k++){ps[k]=s[k];printf("%d",*(ps[k]+1));}}程序的運(yùn)行結(jié)果是()。A、246B、135C、123D、456標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查行指針。(*ps)[3]表示一個(gè)能存放三個(gè)整型元素首地址的一維數(shù)組的首地址。"ps[k]=s[k];"表示將ps指向s的第k行數(shù)據(jù),所以"printf("%d",*(ps[k]+1));"輸出的是二維數(shù)組s中的第二列數(shù)據(jù),答案選A。國(guó)家二級(jí)C語(yǔ)言機(jī)試(指針)模擬試卷第3套一、選擇題(本題共35題,每題1.0分,共35分。)1、以下程序的功能是:通過(guò)調(diào)用calc函數(shù),把所求得的兩數(shù)之和值放入變量add中,并在主函數(shù)中輸出。#includevoidcalc(floatx,floaty,float*sum){________=x+y;}main(){floatx,y,add;scanf("%f%f",&x,&y);calc(x,y,&add);printf("x+y=%f\n",add);}calc函數(shù)中下劃線處應(yīng)填入的是()。A、*sumB、sumC、&sumD、add標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:sum為一個(gè)指針變量,所以要將x、y的和賦值給sum指向的變量,需要使用取值運(yùn)算符*,答案選A。2、有以下程序#includevoidfun(int*x,ints,intn){inti;for(i=s;i>=n;i--)*(x+i+3)=*(x+i);}main(){intm[]={0,1,2,3,4,5,6,7,8,9},k;fun(m,10-4,3);for(k=0;k<10;k++)printf("%d",m[k]);}程序的運(yùn)行結(jié)果是()。A、0123453456B、0123456345C、0123456666D、0123454569標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是將數(shù)組x下標(biāo)為n+3至s+3的元素被下標(biāo)為n到s的元素覆蓋,所以調(diào)用函數(shù)fun(m,10-4,3);結(jié)束后數(shù)組m中第7到10個(gè)元素被數(shù)組m的第4到7個(gè)元素覆蓋,數(shù)組中的元素為{0,1,2,3,4,5,3,4,5,6},答案選A。3、設(shè)有以下說(shuō)明和語(yǔ)句:intx[3][4],(*p)[4];p=a;,則與表達(dá)式*(*p+2)等價(jià)的選項(xiàng)是()。A、a[0][2]B、*(a+2)[0]C、(*a+2)[0]D、a[2][0]標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:考查行指針。(*p)[4]表示一個(gè)能存放四個(gè)整型元素首地址的一維數(shù)組的首地址。"p=a;"表示將p指向數(shù)組a的第一行第一個(gè)數(shù)據(jù)的地址,*(*p+2)與*(*(a+0)+2)等價(jià),表示數(shù)組a第一行第二個(gè)元素的值。答案選A。4、以下語(yǔ)句中存在語(yǔ)法錯(cuò)誤的是()。A、charss[6][20];ss[1]="right?";B、charss[][20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss[]={"right?"};標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符數(shù)組存放字符串的時(shí)候只有在定義數(shù)組的時(shí)候可以直接把字符串常量賦值給字符數(shù)組,其他情況則不可以,但是在非定義情況下把一個(gè)字符串常量賦值給一個(gè)指針是可以的,所以答案選A。5、以下不能將s所指字符串正確復(fù)制到t所指存儲(chǔ)空間的是()。A、do{*t++=*s++;}while(*s);B、for(i=0;t[i]=s[i];i++);C、while(*t=*s){t++;s++;}D、for(i=0,j=0;t[i++]=s[j++];);標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:選項(xiàng)A不能,因?yàn)楫?dāng)*s=?\0?時(shí),while(*s)跳出循環(huán),這樣字符串結(jié)束標(biāo)志?\0?沒有復(fù)制給*t,造成*t不完整。而其他幾個(gè)選項(xiàng)都可以將?\0?復(fù)制過(guò)去,答案選A。6、有以下程序#includevoidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;}main(){char*s1="abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2);}程序執(zhí)行后的輸出結(jié)果是()。A、1bc,a23B、abc,123C、123,abcD、321,cba標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:語(yǔ)句"char*s1="abc",*s2="123";"表示將字符串"abc"的首地址賦值給字符指針s1,把字符串"123"賦值給字符指針s2,函數(shù)swap()交換的只是兩個(gè)指針指向的變量的值,即交換的是對(duì)應(yīng)字符串的第一個(gè)字符,所以答案選A)。7、有以下函數(shù)intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++;}returnn;}函數(shù)的功能是()。A、統(tǒng)計(jì)x和y所指字符串中最前面連續(xù)相同的字符個(gè)數(shù)B、查找x和y所指字符串中是否有’\0’C、將y所指字符串賦給x所指存儲(chǔ)空間D、統(tǒng)計(jì)x和y所指字符串中相同的字符個(gè)數(shù)標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:循環(huán)判定條件"(*x==*y)&&*x!=?\0?"是如果字符指針x與y指向的字符相等并且字符指針x沒有到達(dá)字符串尾部,則讓指針x、y后移一位并讓n自加1,所以n統(tǒng)計(jì)的是x和y所指字符串中最前面連續(xù)相同的字符個(gè)數(shù),答案選A。8、下列語(yǔ)句組中,正確的是()。A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={"Olympic"};D、chars[7];s={"Olympic"};標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符串"Olympic"長(zhǎng)度為8,字符數(shù)組s放不下,選項(xiàng)B)、D)錯(cuò)誤;將字符串賦值給指針變量時(shí)不需要寫大括號(hào),選項(xiàng)C)錯(cuò)誤,答案選A)。9、有以下函數(shù)intfun(char*s){char*t=s;while(*t++);return(t-s);}該函數(shù)的功能是()。A、計(jì)算s所指字符串占用內(nèi)存字節(jié)的個(gè)數(shù)B、比較兩個(gè)字符串的大小C、計(jì)算s所指字符串的長(zhǎng)度D、將s所指字符串復(fù)制到字符串t中標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)循環(huán)"while(*t++);"的結(jié)束條件為t到達(dá)了當(dāng)前字符串的尾部,即*t==?\0?成立,之后t++,所以t-s計(jì)算的是該字符串首尾(連帶著字符串結(jié)束符)之間間隔了幾個(gè)元素,由于每個(gè)字符占用1個(gè)字節(jié),所以也相當(dāng)于計(jì)算了s所指字符串占用內(nèi)存字節(jié)的個(gè)數(shù),答案選A。10、有以下程序(注:字符a的ASCII碼值為97)#includemain(){char*s={"abc"};do{printf("%d",*s%10);++s;}while(*s);}程序運(yùn)行后的輸出結(jié)果是()。A、789B、abcC、7890D、979899標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符常量與其ASCII碼值一一對(duì)應(yīng),在計(jì)算的時(shí)候,可以用字符數(shù)據(jù)對(duì)應(yīng)的ASCII碼代表該字符參與運(yùn)算,所以輸出語(yǔ)句"printf("%d",*s%10);"輸出的結(jié)果分別為97%10、98%10、99%10,即答案選A。11、設(shè)有定義:char*c;以下選項(xiàng)中能夠使c正確指向一個(gè)字符串的是()。A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:字符指針必須指向一個(gè)地址,只有選項(xiàng)A)將c指向了一個(gè)存放字符串的字符數(shù)組的首地址,選項(xiàng)B)、C)則沒有給指針變量c賦予確定的指向,選項(xiàng)D)不應(yīng)該使用取值運(yùn)算符"*",所以答案選A)。12、有以下程序(說(shuō)明:字母A的ASCII碼值是65)#includevoidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf("\n");}程序運(yùn)行后的輸出結(jié)果是()。A、YEB、BTC、YTD、BY標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:函數(shù)fun()的功能是輸出字符數(shù)組中ASCII碼不能被2整除的字符,答案選A。13、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序運(yùn)行后的輸出結(jié)果是()。A、21B、11C、6D、120標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:靜態(tài)變量在編譯時(shí)就被分配存儲(chǔ)空間,所占用存儲(chǔ)單元直到程序結(jié)束時(shí)才釋放,其初始化只進(jìn)行一次。所以五次調(diào)用fun()函數(shù),計(jì)算的結(jié)果為s=1+2+3+4+5+6=21,答案選A。14、以下選項(xiàng)中正確的語(yǔ)句組是()。A、char*s;s="BOOK!";B、char*s;s={"BOOK!"};C、chars[10];s="BOOK!";D、chars[];s="BOOK!";標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:將字符串賦值給指針變量時(shí)不需要寫大括號(hào),選項(xiàng)B)錯(cuò)誤;字符數(shù)組存放字符串的時(shí)候只有在定義數(shù)組的時(shí)候可以直接把字符串常量賦值給字符數(shù)組,其他情況則不可以,選項(xiàng)C)、D)錯(cuò)誤;答案選A)。15、有以下程序#include

溫馨提示

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

評(píng)論

0/150

提交評(píng)論