國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共124題)_第1頁
國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共124題)_第2頁
國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共124題)_第3頁
國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共124題)_第4頁
國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共124題)_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷1(共4套)(共124題)國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷第1套一、選擇題(本題共31題,每題1.0分,共31分。)1、有以下程序段int*p;p=__________malloc(sizeof(int));若要求使p指向一個int型的動態(tài)存儲單元,在橫線處應(yīng)填入的是()。A、(int*)B、intC、int*D、(*int)標準答案:A知識點解析:語句"malloc(sizeof(int))"為動態(tài)分配了一塊內(nèi)存,因為p為int型指針,所以需要使用強制轉(zhuǎn)換將該內(nèi)存地址轉(zhuǎn)換成int*類型后再指給p,填入的內(nèi)容為(int*),答案選A。2、若有以下程序段structst{intn;structst*next;};structsta[3]={5,&a[1],7,&a[2],9,’\0’},*p;p=&a[0];則以下選項中值為6的表達式是()。A、++(p->n)B、(*p).nC、p->n++D、p->n標準答案:A知識點解析:語句"p=&a[0];"表示將指針p指向了結(jié)構(gòu)體數(shù)組a的首地址,所以++(p->n)值為6,(*p).n相當(dāng)于a[0].n,值為5,p->n++值為5,p->n值為5,答案選A。3、有以下程序#includemain(){inti=1;i=i^i;printf("%d\n",i);}程序運行后的輸出結(jié)果是()。A、0B、-1C、1D、7標準答案:A知識點解析:任何一個數(shù)值跟自身的異或運算結(jié)果均為0,答案選A。4、以下程序用來統(tǒng)計文件中字符的個數(shù)(函數(shù)feof用以檢查文件是否結(jié)束,結(jié)束時返回非零)#includemain(){FILE*fp;longnum=0;fp=fopen("fname.dat","r");while(__________){fgetc(fp);num++;}printf("num=%d\n",num);fclose(fp);}下面選項中,填入橫線處不能得到正確結(jié)果的是()。A、feof(fp)B、!feof(fp)C、feof(fp)==NULLD、feof(fp)==0標準答案:A知識點解析:while循環(huán)的作用是統(tǒng)計文件中字符的個數(shù),循環(huán)條件需為"當(dāng)前沒有到達文件結(jié)束",feof()函數(shù)檢查文件是否結(jié)束,若結(jié)束返回非零,所以要填入的內(nèi)容應(yīng)該為feof(fp)==0或者!feof(fp),若直接填feof(fp)則while循環(huán)會在文件沒結(jié)束時跳出循環(huán),答案選A。5、以下敘述中正確的是()。A、在程序中,允許用typedef來說明一種新的類型名B、使用typedef說明新類型名時,其格式是:typedef新類型名原類型名;C、使用typedef說明新類型名時,后面不能加分號D、在使用typedef改變原類型的名稱后,只能使用新的類型名標準答案:A知識點解析:typedef為類型定義符,使用的一般形式為"typedef原類型名新類型名;",它用于給已知類型取別名,作用是用"新類型名"代替"原類型名",并沒有產(chǎn)生新的數(shù)據(jù)類型,而且原有類型名依然有效,"新類型名"與"原類型名"允許同時使用,所以答案選A。6、以下敘述中正確的是()。A、一個結(jié)構(gòu)體類型可以由多個稱為成員(或域)的成分組成B、結(jié)構(gòu)體類型中的成分只能是C語言中預(yù)先定義的基本數(shù)據(jù)類型C、在定義結(jié)構(gòu)體類型時,編譯程序就為它分配了內(nèi)存空間D、結(jié)構(gòu)體類型中各個成分的類型必須是一致的標準答案:A知識點解析:結(jié)構(gòu)體中的成員可以是C語言中任意的數(shù)據(jù)類型,不僅僅是基本數(shù)據(jù)類型,選項B)、D)錯誤;定義結(jié)構(gòu)體類型時,只是對這種結(jié)構(gòu)體類型進行了說明,定義結(jié)構(gòu)體變量時編譯程序才為該變量分配內(nèi)存空間,選項C)錯誤;答案選A)。7、以下敘述中正確的是()。A、使用typedef定義新類型名后,新類型名與原類型名實際上是等價的B、結(jié)構(gòu)體類型中的各個成分均不能是數(shù)組或指針C、結(jié)構(gòu)體類型的變量,不能在聲明結(jié)構(gòu)體類型組成時一起定義D、元素為結(jié)構(gòu)體類型的數(shù)組,只能在聲明過結(jié)構(gòu)體類型之后,單獨進行定義標準答案:A知識點解析:結(jié)構(gòu)體中的成員可以是C語言中任意的數(shù)據(jù)類型,數(shù)組類型和指針類型屬于C語言的數(shù)據(jù)類型,選項B)錯誤;可以在聲明結(jié)構(gòu)體類型組成時同時定義該結(jié)構(gòu)體類型的變量或數(shù)組,選項C)、D)錯誤;答案選A)。8、下面選項中關(guān)于位運算的敘述正確的是()。A、位運算的對象只能是整型或字符型數(shù)據(jù)B、位運算符都需要兩個操作數(shù)C、左移運算的結(jié)果總是原操作數(shù)據(jù)2倍D、右移運算時,高位總是補0標準答案:A知識點解析:取反運算符"~"為單目運算符,選項B)錯誤;左移運算的結(jié)果總是原操作數(shù)據(jù)2^n倍,n為"<<"右邊移動的位數(shù),選項C)錯誤;右移運算正數(shù)高位補0,負數(shù)高位補1,選項D)錯誤;答案選A)。9、下面選項中關(guān)于"文件指針"概念的敘述正確的是()。A、文件指針是程序中用FILE定義的指針變量B、文件指針就是文件位置指針,表示當(dāng)前讀寫數(shù)據(jù)的位置C、文件指針指向文件在計算機中的存儲位置D、把文件指針傳給fscanf函數(shù),就可以向文本文件中寫入任意的字符標準答案:A知識點解析:文件指針是指在程序中定義的FILE類型的指針變量,指向的是一個FILE類型的結(jié)構(gòu)體,可以通過fopen函數(shù)的調(diào)用給文件指針賦值,使文件指針和某個文件建立聯(lián)系,選項A)正確,選項C)錯誤;文件位置指針只是一個形象化的概念,在C語言中用文件位置指針來表示文件當(dāng)前讀或?qū)懙臄?shù)據(jù)在文件中的位置,和文件指針不同,選項B)錯誤;fscanf()函數(shù)用于從文件中讀取數(shù)據(jù),選項D)錯誤;所以答案選A)。10、以下敘述中正確的是()。A、在調(diào)用函數(shù)時,可以將結(jié)構(gòu)體變量作為實參傳給函數(shù)B、函數(shù)的返回值不能是結(jié)構(gòu)體類型C、函數(shù)的返回值不能是結(jié)構(gòu)體指針類型D、結(jié)構(gòu)體數(shù)組不能作為參數(shù)傳給函數(shù)標準答案:A知識點解析:結(jié)構(gòu)體類型為用戶自定義的一種類型,其使用和C語言基本數(shù)據(jù)類型的使用方法一致,所以答案選A)。11、以下敘述中正確的是()。A、結(jié)構(gòu)體中可以含有指向本結(jié)構(gòu)體的指針成員B、結(jié)構(gòu)體變量的地址不能作為實參傳給函數(shù)C、結(jié)構(gòu)體數(shù)組名不能作為實參傳給函數(shù)D、即使是同類型的結(jié)構(gòu)體變量,也不能進行整體賦值標準答案:A知識點解析:語句"*p=&x;"將結(jié)構(gòu)體指針p指向了結(jié)構(gòu)體變量x的地址,所以*p與x等價,p->a與x.a等價,++p->a表示將a自增1,(p++)->a與p++->a等價,值均為4,*p->s++與*x.s++等價,語句"(*p)->s++"不合法,所以答案選A)。12、設(shè)有如下的說明和定義struct{inta;char*s;}x,*p=&x;x.a=4;x.s="hello";則以下敘述中正確的是()。A、語句++p->a;的效果是使成員a增1B、語句++p->a;的效果是使p增1C、(p++)->a與p++->a都是合語法的表達式,但二者不等價D、語句*p->s++;等價于(*p)->s++;標準答案:A知識點解析:語句"*p=&x;"將結(jié)構(gòu)體指針p指向了結(jié)構(gòu)體變量x的地址,所以*p與x等價,p->a與x.a等價,++p->a表示將a自增1,(p++)->a與p++->a等價,值均為4,*p->s++與*x.s++等價,語句"(*p)->s++"不合法,所以答案選A。13、下面關(guān)于位運算符的敘述,正確的是()。A、&表示"按位與"的運算B、#表示"按位異或"的運算C、||表示"按位或"的運算D、~表示"按位異或"的運算標準答案:A知識點解析:以#開頭的語句為編譯預(yù)處理命令行,||為邏輯或運算符,~表示按位取反運算符,答案選A。14、下面關(guān)于"EOF"的敘述,正確的是()。A、EOF是在庫函數(shù)文件中定義的符號常量B、EOF的值等于0C、文本文件和二進制文件都可以用EOF作為文件結(jié)束標志D、對于文本文件,fgetc函數(shù)讀入最后一個字符時,返回值是EOF標準答案:A知識點解析:EOF為一符號常量,值為-1,在C語言中常被作為文本文件的結(jié)束標志。fgetc函數(shù)讀入最后一個字符,返回值仍然是該字符,繼續(xù)讀入時,才返回EOF。答案選A。15、有以下程序#includemain(){charx=2,y=2,z;z=(y<<1)&(x>>1);printf("%d\n",z);}程序的輸出結(jié)果是()。A、0B、1C、4D、8標準答案:A知識點解析:x、y的ASCII碼為2,對應(yīng)二進制為0010,y<<1的結(jié)果為0100,x>>1的結(jié)果為0001,而0100&0001的結(jié)果為0,所以答案選A。16、有以下程序#includestructS{inta;intb;};main(){structSa,*p=&a;a.a=99;printf("%d\n",__________);}程序要求輸出結(jié)構(gòu)體中成員a的數(shù)據(jù),以下不能填入橫線處的內(nèi)容是()。A、*p.B、BC、AD、p->標準答案:A知識點解析:p為指向結(jié)構(gòu)體變量a的指針,用p引用結(jié)構(gòu)體成員需要用到指向運算符"->",或者(*p).a,選項A)的用法不正確,答案選A)。17、若fp已定義為指向某文件的指針,且沒有讀到該文件的末尾,則C語言函數(shù)feof(fp)的函數(shù)返回值是()。A、0B、非0C、-1D、EOF標準答案:A知識點解析:函數(shù)feof(fp)的功能是檢查文件是否結(jié)束,遇文件結(jié)束返回非0,否則返回0,所以答案選A)。18、有以下程序#includestructSTU{charname[9];charsex;intscore[2];};voidf(structSTUa[]){structSTUb={"Zhao",’m’,85,90};a[1]=b;}main(){structSTUc[2]={{"Qian",’f’,95,92},{"Sun",’m’,98,99}};f(c);printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);}程序運行后輸出結(jié)果是()。A、Qian,f,95,92,Zhao,m,85,90B、Qian,f,95,92,Sun,m,98,99C、Zhao,m,85,90,Sun,m,98,99D、Zhao,m,85,90,Qian,f,95,92標準答案:A知識點解析:結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)為地址傳參,形參和實參指向的為同一塊內(nèi)存地址,所以對數(shù)組元素的改變能夠影響到實參。同類型的結(jié)構(gòu)體變量之間可以直接賦值,語句"a[1]=b;"則將結(jié)構(gòu)體變量b中的數(shù)據(jù)賦值給數(shù)組a的第二個元素,所以輸出結(jié)果為選項A)。19、以下敘述中錯誤的是()。A、typedef說明的新類型名必須使用大寫字母,否則會出編譯錯誤B、typedef的作用是用一個新的標識符來代表已存在的類型名C、可以用typedef說明的新類型名來定義變量D、用typedef可以說明一種新的類型名標準答案:A知識點解析:typedef為類型定義符,作用是給已知類型取別名,用"新類型名"代替"原類型名",新類型名可以使用任意合法的用戶自定義標識符,不一定必須用大寫字母,選項A)錯誤,答案選A)。20、以下敘述中錯誤的是()。A、函數(shù)的返回值類型不能是結(jié)構(gòu)體類型,只能是簡單類型B、只要類型相同,結(jié)構(gòu)體變量之間可以整體賦值C、可以通過指針變量來訪問結(jié)構(gòu)體變量的任何成員D、函數(shù)可以返回指向結(jié)構(gòu)體變量的指針標準答案:A知識點解析:函數(shù)的返回值類型可以為C語言中任意合法的數(shù)據(jù)結(jié)構(gòu),不僅可以為簡單的數(shù)據(jù)類型,也可以為復(fù)雜的構(gòu)造類型和指針類型,選項A)描述錯誤,答案選A)。21、若有定義語句intb=2;則表達式(b<<2)/(3||b)的值是()。A、8B、2C、4D、0標準答案:A知識點解析:變量b對應(yīng)的ASCII碼為0010,b<<2的結(jié)果為1000,對應(yīng)十進制為8,3||b的結(jié)果為1,8/1=8,輸出結(jié)果為選項A)。22、有以下程序#includemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp,"%d",&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);}程序運行后輸出結(jié)果是()A、6,5,4,3,2,1,B、1,2,3,4,5,6,C、4,5,6,1,2,3,D、1,2,3,3,2,1,標準答案:A知識點解析:文件d2.dat以讀寫的方式"w+"打開,第一個for循環(huán)將數(shù)組a中的數(shù)據(jù)寫入該文件中,然后將文件指針置于文件首,順序讀出文件中的數(shù)據(jù)并逆序存放在數(shù)組a中,所以輸出結(jié)果為選項A)。23、有以下程序#includetypedefstructstu{charname[10];chargender;intscore;}STU;voidf(STU*a,STU*b){b=a;printf("%s,%c,%d,",b->name,b->gender,b->score);}main(){STUa={"Zhao",’m’,290},b={"Qian",’f’,350};f(&a,&b);printf("%s,%c,%d\n",,b.gender,b.score);}程序的運行結(jié)果是()。A、Zhao,m,290,Qian,f,350B、Qian,f,350,Zhao,m,290C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,m,290標準答案:A知識點解析:函數(shù)f()雖然為地址傳參,但是形參只是實參的一個副本,若形參和實參為地址,則形參指針指向的變化不能影響到實參指針的指向,所以該函數(shù)不能改變&b的值,也不能改變b中的值,所以在函數(shù)f()內(nèi),語句"b=a;"將當(dāng)前b的指針指向a指向的結(jié)構(gòu)體變量內(nèi)存空間,所以輸出結(jié)果為"Zhao,m,290,",但是主函數(shù)中b的值沒有改變,輸出結(jié)果為"Qian,f,350",答案選A。24、有以下程序#include#includetypedefstructstu{charname[10];chargender;intscore;}STU;voidf(STUc){strcpy(,"Qian");c.gender=’f’;c.score=350;}main(){STUa={"Zhao",’m’,290},b;b=a;f(b);printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}程序的運行結(jié)果是()。A、Zhao,m,290,Zhao,m,290B、Zhao,m,290,Qian,m,290C、Zhao,m,290,Qian,m,350D、Zhao,m,290,Qian,f,350標準答案:A知識點解析:結(jié)構(gòu)體變量作為函數(shù)參數(shù)為值傳遞,形參變量的變化不能影響實參變量的變化,所以函數(shù)f(b)調(diào)用結(jié)束后,b的值沒有改變,和a一致,所以輸出結(jié)果為選項A)。25、若有定義typedefintT[10];Ta[20];則與上述定義完全等價的說明語句是()。A、inta[20][10];B、inta[20];C、inta[10];D、inta[10][20];標準答案:A知識點解析:typedef為類型定義符,作用是用"新類型名"代替"原類型名",即為現(xiàn)有類型定義容易記憶的類型名。typedef能夠隱藏復(fù)合類型,比如指針和數(shù)組,定義語句"typedefintT[10];"表明類型T就代表了具有10個元素的整型數(shù)組,所以語句"Ta[20];"則表示定義了具有20個元素并且每個元素都為一個有10個元素的一維數(shù)組,所以答案選A。26、有以下程序#includemain(){intc,d;c=10|5;d=10+5;printf("%d,%d\n",c,d);}程序的運行結(jié)果是()。A、15,15B、10,15C、5,15D、105,15標準答案:A知識點解析:10的二進制數(shù)為1010,5的二進制數(shù)為0101,1010|0101=1111,對應(yīng)十進制數(shù)為15,所以答案選A。27、有以下程序#includemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");fprintf(fp,"%d\n",a[0]);for(i=1;i<6;i++){fseek(fp,0L,0);fscanf(fp,"%d",&k);fseek(fp,0L,0);fprintf(fp,"%d\n",a[i]+k);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}程序的運行結(jié)果是()。A、21B、6C、123456D、11標準答案:A知識點解析:該段代碼以讀寫的方式打開文件data.dat,然后把數(shù)組a的第一個元素寫入文件,接下來的for循環(huán)是不斷讀取當(dāng)前文件中的數(shù)據(jù),將該數(shù)據(jù)和數(shù)組a的下一個元素累加后又寫入到文件當(dāng)中(語句"fseek(fp,0L,0);"和"rewind(fp)"的作用是將文件指針移動至文件首),所以最終文件內(nèi)記錄的是數(shù)組a中所有元素之和,答案選A。28、有以下程序#includetypedefstructstu{charname[10];chargender;intscore;}STU;voidf(STU*a,STU*b){*b=*a;printf("%s,%c,%d,",b->name,b->gender,b->score);}main(){STUa={"Zhao",’m’,290},b={"Qian",’f’,350};f(&a,&b);printf("%s,%c,%d\n",,b.gender,b.score);}程序的運行結(jié)果是()。A、Zhao,m,290,Zhao,m,290B、Zhao,m,290,Qian,f,350C、Qian,f,350,Qian,f,350D、Qian,f,350,Zhao,m,290標準答案:A知識點解析:結(jié)構(gòu)體變量地址作為函數(shù)參數(shù)為地址傳參,形參和實參指向的為同一塊內(nèi)存地址,所以對數(shù)組元素的改變能夠影響到實參。語句"*b=*a;"則將a指向的結(jié)構(gòu)體變量中的數(shù)據(jù)賦值給b指向的結(jié)構(gòu)體變量,實參b的值也發(fā)生改變,輸出結(jié)果為選項A)。29、有以下程序#include#includetypedefstructstu{charname[10];chargender;intscore;}STU;voidf(char*name,chargender,intscore){strcpy(name,"Qian");gender=’f’;score=350;}main(){STUa={"Zhao",’m’,290},b;b=a;f(,b.gender,b.score);printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}程序的運行結(jié)果是()。A、Zhao,m,290,Qian,m,290B、Zhao,m,290,Zhao,m,290C、Zhao,m,290,Qian,m,350D、Zhao,m,290,Qian,f,350標準答案:A知識點解析:結(jié)構(gòu)體成員變量作為函數(shù)參數(shù),第一個參數(shù)為地址傳參,第二個和第三個參數(shù)為值傳參,地址傳參中形參指針指向內(nèi)容的改變能夠改變實參指針指向內(nèi)容的改變,而值傳遞過程中,形參的改變不能夠影響到實參,所以調(diào)用函數(shù)語句"f(,b.gender,b.score);"之后,b中的數(shù)據(jù)為{"Qian",?m?,290}。30、若有定義typedefintT[10];T*a[20];則與上述定義完全等價的說明語句是()。A、int*a[20][10];B、int*a[20];C、int*a[10];D、int*a[10][20];標準答案:A知識點解析:typedef為類型定義符,作用是用"新類型名"代替"原類型名",即為現(xiàn)有類型定義容易記憶的類型名。typedef能夠隱藏復(fù)合類型,比如指針和數(shù)組,定義語句"typedefintT[10];"表明類型T就代表了具有10個元素的整型數(shù)組,所以語句"T*a[20];"則表示定義了具有20個元素并且每個元素都為一個有10個元素的指針數(shù)組,所以答案選A。31、有以下程序#includemain(){intc,d;c=13&5;d=10&&5;printf("%d,%d\n",c,d);}程序的運行結(jié)果是()。A、5,1B、1,1C、18,1D、13,1標準答案:A知識點解析:按位與"&"運算符的運算規(guī)則是:只要對應(yīng)的二進制位有一個為0時,結(jié)果就為0。而邏輯與"&&"的運算規(guī)則是兩個運算對象均為真(非零)時,該邏輯表達式的值才為真(1),13的二進制數(shù)為1101,5的二進制數(shù)為0101,1101&0101=0101,對應(yīng)十進制數(shù)值為5。10&&5結(jié)果為真,用值表示是1,所以輸出結(jié)果為選項A)。國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷第2套一、選擇題(本題共30題,每題1.0分,共30分。)1、有以下程序#includemain(){chara=4;printf("%d\n",a=a<<1);}程序的運行結(jié)果是()。A、8B、16C、40D、4標準答案:A知識點解析:左移運算符"<<"的運算規(guī)則是把左邊運算數(shù)的各二進制位全部左移n位,n取決于"<<"右邊的數(shù)值,高位丟棄,低位補0。字符變量a的ASCII碼值為4,對應(yīng)二進制數(shù)值為0100,左移1位后值為1000,對應(yīng)十進制數(shù)值為8,所以輸出結(jié)果為8,答案選A。2、設(shè)文件指針fp已定義,執(zhí)行語句fp=fopen("file","w");后,以下針對文本文件file操作敘述的選項中正確的是()。A、只能寫不能讀B、寫操作結(jié)束后可以從頭開始讀C、可以在原有內(nèi)容后追加寫D、可以隨意讀和寫標準答案:A知識點解析:文件打開方式為"w"表明只寫不讀,選項A)正確,答案選A)。3、以下結(jié)構(gòu)體類型說明和變量定義中正確的是()。A、typedefstruct{intn;charc;}REC;RECt1,t2;B、structREC;{intn;charc;};RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}REC;RECt1,t2;標準答案:A知識點解析:選項B)定義變量時需要加上struct,選項C)結(jié)構(gòu)體定義不正確,選項D中REC已經(jīng)為結(jié)構(gòu)體變量,不能用它去定義其他變量,所以答案選A)。4、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結(jié)果是()。A、1001,ZhangDa,1098.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1002,ZhangDa,1202.0標準答案:A知識點解析:函數(shù)f()傳遞的參數(shù)為結(jié)構(gòu)體變量,也是一種值傳參,形參的變化不能影響到實參,所以調(diào)用函數(shù)f(a)對a中的數(shù)據(jù)沒有影響。所以輸出結(jié)果為選項A)。5、有以下程序#includemain(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序運行后的輸出結(jié)果是()。A、21B、11C、6D、1標準答案:A知識點解析:語句"t=(a<<2)|b;"先計算表達式"(a<<2)",a的二進制數(shù)值為00000101,所以左移2位之后結(jié)果為00010100,對應(yīng)十進制值為20,之后計算"00010100|b",b對應(yīng)的二進制數(shù)值為00000001,或運算的結(jié)果為00010101,對應(yīng)十進制值為21,所以答案選A。6、設(shè)fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數(shù)feof(fp)的返回值為()。A、非0值B、’\0’C、0D、NULL標準答案:A知識點解析:函數(shù)feof(fp)的功能是檢查文件是否結(jié)束,遇文件結(jié)束返回非0,否則返回0,所以答案選A。7、有以下定義和語句structworkers{intnum;charname[20];charc;struct{intday;intmonth;intyear;}s;};structworkersw,*pw;pw=&w;能給w中year成員賦1980的語句是()。A、w.s.year=1980;B、w.year=1980;C、pw->year=1980;D、*pw.year=1980;標準答案:A知識點解析:該語句段中,結(jié)構(gòu)體worker中又嵌套定義了結(jié)構(gòu)體變量s,所以要訪問s中的數(shù)據(jù)需要逐級找到最低級的成員才可以使用,引用方式可以:w.s.year或者pw->s.year,所以答案選A。8、以下敘述中錯誤的是()。A、可以通過typedef增加新的類型B、可以用typedef將已存在的類型用一個新的名字來代表C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:A知識點解析:typedef為類型定義符,使用的一般形式為"typedef原類型名新類型名;",它用于給已知類型取別名,作用僅僅是用"新類型名"代替"原類型名",并沒有產(chǎn)生新的數(shù)據(jù)類型,答案選A。9、有以下程序#includestructtt{intx;structtt*y;}*p;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main(){inti;p=a;for(i=1;i<=2;i++){printf("%d,",p->x);p=p->y;}}程序的運行結(jié)果是()。A、20,15,B、30,17C、15,30,D、20,30,標準答案:A知識點解析:語句"p=a;"將指針p指向了結(jié)構(gòu)體數(shù)組a的首地址,此時p->x與a[0].x等價,值為20,執(zhí)行語句"p=p->y;"則將指針p指向了a+1,即數(shù)組a第二個元素的地址,此時p->x與a[1].x等價,值為15,所以答案選A。10、有以下程序#includemain(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={"Zhao",’m’,85.0,90.0},b={"Qian",’f’,95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",,b.sex,b.score[0],b.score[1]);}程序的運行結(jié)果是()。A、Zhao,m,85,90B、Qian,m,85,90C、Zhao,f,95,92D、Qian,f,95,92標準答案:A知識點解析:同類型的結(jié)構(gòu)體之間可以直接賦值,所以語句"b=a;"的作用是把結(jié)構(gòu)體a中的數(shù)據(jù)賦值給結(jié)構(gòu)體b,所以答案選A。11、有以下程序#includemain(){FILE*f;f=fopen("filea.txt","w");fprintf(f,"abc");fclose(f);}若文本文件filea.txt中原有內(nèi)容為:hello,則運行以上程序后,文件filea.txt中的內(nèi)容為()。A、abcB、abcloC、helloabcD、abchello標準答案:A知識點解析:該程序段的作用是將字符串"abc"寫入到文件filea.txt中,由于打開文件時以只寫方式打開,打開已經(jīng)存在的文件會先把文件長度清0后再寫入數(shù)據(jù),所以運行結(jié)束后,文件filea.txt中的數(shù)據(jù)為"abc",答案選A)。12、設(shè)有定義:struct{charmark[12];intnum1;doublenum2;}t1,t2;若變量均已正確賦初值,則以下語句中錯誤的是()。A、t2.mark=t1.mark;B、t2.num1=t1.num1;C、t1=t2;D、t2.num2=t1.num2;標準答案:A知識點解析:同類型的結(jié)構(gòu)體之間可以直接賦值,數(shù)組卻不可以,答案選A。13、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結(jié)果是()。A、1001,ZhangDa,1098.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1002,ZhangDa,1202.0標準答案:A知識點解析:函數(shù)f()傳遞的參數(shù)為結(jié)構(gòu)體變量,也是一種值傳參,形參的變化不能影響到實參,所以調(diào)用函數(shù)f(a)對a中的數(shù)據(jù)沒有影響。所以輸出結(jié)果為選項A)。14、有以下程序#include#includetypedefstruct{charname[9];charsex;floatscore[2];}STU;STUf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){STUc={"Qian",’f’,95.0,92.0},d;d=f(c);printf("%s,%c,%2.0f,%2.0f\n",,d.sex,d.score[0],d.score[1]);}程序的運行結(jié)果是()。A、Zhao,m,85,90B、Qian,m,85,90C、Qian,f,95,92D、Zhao,f,95,92標準答案:A知識點解析:結(jié)構(gòu)體是用戶自己定義的一種數(shù)據(jù)類型,使用方法和C語言中的基本數(shù)據(jù)類型一致。函數(shù)f()中將結(jié)構(gòu)體b中成員的數(shù)據(jù)分別賦值給a,所以函數(shù)的返回值為a即{"Zhao",?m?,85,90}。15、若變量已正確定義,則以下語句的輸出結(jié)果是s=32;s^=32;printf("%d",s);()。A、0B、-1C、1D、32標準答案:A知識點解析:任何一個數(shù)值跟自身的異或運算結(jié)果均為0,答案選A。16、有以下程序#includemain(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序運行后的輸出結(jié)果是()。A、abc28B、28cC、abcD、因類型不一致而出錯標準答案:A知識點解析:該程序段的邏輯是:先以只寫方式"w"打開文件myfile.dat,寫入字符串"abc",后以附加方式打開"a+"可讀寫的文件,往文件末尾追加字符串"28",之后將文件指針fp指向文件首,讀取所有寫入的字符,所以答案選A。17、若有以下程序#include#include#includestructstu{char*name,gender;intscore;};main(){structstua={NULL,’m’,290},b;=(char*)malloc(10);strcpy(,"Zhao");b=a;b.gender=’f’;b.score=350;strcpy(,"Qian");printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}則程序的輸出結(jié)果是()。A、Qian,m,290,Qian,f,350B、Zhao,m,290,Qian,f,350C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:A知識點解析:語句"=(char*)malloc(10);strcpy(,"Zhao");"將字符串"Zhao"賦值給了a中的字符指針,之后把結(jié)構(gòu)體a中的數(shù)據(jù)賦值給b,然后改變b的gender、score這兩個成員的值,而和指向同一塊內(nèi)存地址,所以當(dāng)執(zhí)行語句"strcpy(,"Qian");"時,和的值均為"Qian",所以最終結(jié)構(gòu)體變量a的數(shù)據(jù)為{"Qian",?m?,290},b中的數(shù)據(jù)為{"Qian",?f?,350}。18、若有以下程序#include#include#includetypedefstructstu{char*name,gender;intscore;}STU;voidf(char*p){p=(char*)malloc(10);strcpy(p,"Qian");}main(){STUa={NULL,’m’,290},b;=(char*)malloc(10);strcpy(,"Zhao");b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}則程序的輸出結(jié)果是()。A、Zhao,m,290,Zhao,f,350B、Zhao,m,290,Qian,f,350C、Qian,f,350,Qian,f,350D、Qian,m,290,Qian,f,350標準答案:A知識點解析:語句"b=a;"把結(jié)構(gòu)體a中的數(shù)據(jù)賦值給b,由于結(jié)構(gòu)體的name成員為一指針變量,所以和指向同一塊內(nèi)存地址,調(diào)用函數(shù)f()后,形參指針指向的變化不能改變實參指針指向的變化,所以和的仍然相同,值均為"Zhao",所以最終結(jié)構(gòu)體變量a的數(shù)據(jù)為{"Zhao",?m?,290},b中的數(shù)據(jù)為{"Zhao",?f?,350}。19、若有定義typedefint*T;Ta[10];則a的定義與下面哪個語句等價()。A、int*a[10];B、int(*a)[10];C、int*a;D、inta[10];標準答案:A知識點解析:typedef為類型定義符,使用的一般形式為"typedef原類型名新類型名;",作用僅僅是用"新類型名"代替"原類型名",所以T與int*等價,語句"Ta[10];"與"int*a[10];"等價,答案選A。20、若有以下程序#includemain(){intc;c=10^5;printf("%d\n",c);}則程序的輸出結(jié)果是()。A、15B、10000C、5D、105標準答案:A知識點解析:異或運算符的運算規(guī)則是參與運算的兩個數(shù)相對應(yīng)的二進制位相異或運算,當(dāng)兩個對應(yīng)的二進制位相異時,結(jié)果為1。10的二進制數(shù)為1010,5的二進制數(shù)為0101,1010^0101=1111,對應(yīng)十進制數(shù)值為15,答案選A。21、若有以下程序#includemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");for(i=0;i<6;i++){fseek(fp,0L,0);fprintf(fp,"%d\n",a[i]);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}則程序的輸出結(jié)果是()。A、6B、1C、123456D、21標準答案:A知識點解析:句"fseek(fp,0L,0);"將文件指針fp指向文件首,然后再往當(dāng)前地址內(nèi)寫入數(shù)據(jù),由于每次循環(huán)都將文件指針置于文件首后再寫,之前寫入的數(shù)據(jù)會被新寫入的數(shù)據(jù)覆蓋,所以循環(huán)執(zhí)行完畢之后,文件中最終寫入的數(shù)據(jù)為6,輸出結(jié)果為選項A)。22、若有以下程序#includetypedefstructstu{charname[10],gender;intscore;}STU;voidf(STUa,STUb){b=a;printf("%s,%c,%d,",,b.gender,b.score);}main(){STUa={"Zhao",’m’,290},b={"Qian",’f’,350};f(a,b);printf("%s,%c,%d\n",,b.gender,b.score);}則程序的輸出結(jié)果是()。A、Zhao,m,290,Qian,f,350B、Zhao,m,290,Zhao,m,290C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:A知識點解析:同類型的結(jié)構(gòu)體之間可以直接賦值,所以函數(shù)f()中把結(jié)構(gòu)體變量a中的數(shù)據(jù)整體賦值給了結(jié)構(gòu)體變量b,所以第一次輸出結(jié)果為Zhao,m,290,。函數(shù)f()傳遞的參數(shù)為結(jié)構(gòu)體變量,也是一種值傳參,形參的變化不能影響到實參,所以主函數(shù)中調(diào)用函數(shù)f(a,b)對b中的數(shù)據(jù)沒有影響,所以第二次的輸出結(jié)果為Qian,f,350,答案選A。23、若有以下程序#include#includetypedefstructstu{charname[10],gender;intscore;}STU;voidf(char*p){strcpy(p,"Qian");}main(){STUa={"Zhao",’m’,290},b;b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}則程序的輸出結(jié)果是()。A、Zhao,m,290,Qian,f,350B、Zhao,m,290,Zhao,m,290C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:A知識點解析:同類型的結(jié)構(gòu)體之間可以直接賦值,所以主函數(shù)中把結(jié)構(gòu)體變量a中的數(shù)據(jù)整體賦值給了結(jié)構(gòu)體變量b。函數(shù)f()的作用是給賦值為"Qian"(注意這里結(jié)構(gòu)體的第一個稱為為數(shù)組而不是指針,所以與指向不同的內(nèi)存空間),所以輸出結(jié)果為選項A)。24、若有定義typedefcharT[10];T*a;上述定義中a的類型與下面選項中完全相同的是()。A、char*a[10];B、char(*a)[10];C、char*a;D、chara[10];標準答案:A知識點解析:typedef為類型定義符,作用是用"新類型名"代替"原類型名",即為現(xiàn)有類型定義容易記憶的類型名。typedef能夠隱藏復(fù)合類型,比如指針和數(shù)組,定義語句"typedefcharT[10];"表明類型T就代表了具有10個元素的字符數(shù)組,所以語句"T*a;"則表示定義了具有10個元素并且每個元素都為指針類型的數(shù)組a,所以答案選A。25、若有以下程序#includemain(){intc;c=13|5;printf("%d\n",c);}則程序的輸出結(jié)果是()。A、13B、15C、18D、5標準答案:A知識點解析:按位或運算"|"的運算規(guī)則是:只要對應(yīng)的二進制位有一個為1時,結(jié)果就為1。13的二進制數(shù)為1101,5的二進制數(shù)為0101,1101|0101=1101,對應(yīng)十進制數(shù)為13,所以答案選A。26、若有以下程序#includemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+b");for(i=0;i<6;i++){fseek(fp,0L,0);fwrite(&a[5-i],sizeof(int),1,fp);}rewind(fp);fread(&k,sizeof(int),1,fp);fclose(fp);printf("%d",k);}則程序的輸出結(jié)果是()。A、1B、6C、123456D、21標準答案:A知識點解析:語句"fseek(fp,0L,0);"將文件指針fp指向文件首,然后再往當(dāng)前地址內(nèi)寫入數(shù)據(jù),由于每次循環(huán)都將文件指針置于文件首后再寫,之前寫入的數(shù)據(jù)會被新寫入的數(shù)據(jù)覆蓋,而寫入順序為按照數(shù)組逆序?qū)懭耄匝h(huán)執(zhí)行完畢之后,文件中最終寫入的數(shù)據(jù)為1,輸出結(jié)果為選項A)。27、以下結(jié)構(gòu)體說明和變量定義中,正確的是()。A、typedefstructabc{intn;doublem;}ABC;ABCx,y;B、structabc{intn;doublem};structabcx,y;C、structABC{intn;doublem;}structABCx,y;D、structabc{intn;doublem;};abcx,y;標準答案:A知識點解析:選項B)定義成員變量m的語句后少了一個分號,選項C)定義完結(jié)構(gòu)體也沒有加上分號,選項D)定義結(jié)構(gòu)體變量時需要加上struct,所以答案選A)。28、有以下程序#include#includevoidfun(int*p1,int*p2,int*s){s=(int*)malloc(sizeof(int));*s=*p1+*(p2++);}main(){inta[2]={1,2},b[2]={10,20},*s=a;fun(a,b,s);printf("%d\n",*s);}程序運行后的輸出結(jié)果是()。A、1B、10C、11D、2標準答案:A知識點解析:函數(shù)fun()的作用是將s重新指向一個內(nèi)存空間并重新賦值,但是函數(shù)傳遞過程中形參只是實參的一個副本,如果形參和實參為兩個地址,則形參指針指向的變化不能影響到實參指針的指向,所以函數(shù)fun()并不能改變s的指向,所以輸出結(jié)果為1,答案選A。29、以下程序依次把從終端輸入的字符存放到f文件中,用#作為結(jié)束輸入的標志,則在橫線處應(yīng)填入的選項是#includemain(){FILE*fp;charch;fp=fopen("fname","w");while((ch=getchar())!=’#’)fputc(__________);fclose(fp);}()。A、ch,fpB、fp,chC、chD、ch,"fname"標準答案:A知識點解析:fputc()函數(shù)的一般形式為fputc(字符量,文件指針);,所以填入的內(nèi)容應(yīng)該為ch,fp,答案選A。30、有以下程序#includemain(){inti=0;i=~i;printf("%d\n",i);}程序運行后的輸出結(jié)果是()。A、-1B、0C、1D、8標準答案:A知識點解析:計算機系統(tǒng)中,數(shù)值一律使用補碼進行表示和存儲,補碼可以將符號位和數(shù)值位進行統(tǒng)一處理,正數(shù)的補碼和原碼相同,負數(shù)的補碼是原碼除符號位外的其他位取反再整體加1所得。取反運算符"~"的運算規(guī)則是對參與運算的數(shù)的各二進制位按位求反,0的二進制表示(篇幅有限,這里用八位表示)為00000000,取反后為11111111,符號位為1,所以"11111111"是一個負數(shù)的補碼,對應(yīng)原碼為10000001,對應(yīng)十進制數(shù)值為-1,答案選A。國家二級C語言機試(結(jié)構(gòu)體、共用體與文件)模擬試卷第3套一、選擇題(本題共31題,每題1.0分,共31分。)1、下面結(jié)構(gòu)體的定義語句中,錯誤的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;標準答案:A知識點解析:分號代表該結(jié)構(gòu)體定義語句的結(jié)束,選項A)的結(jié)構(gòu)體沒有定義完全就用該結(jié)構(gòu)體另外定義變量,用法有誤,所以答案選A)。2、有以下程序#includetypedefstruct{intb,p;}A;voidf(Ac)/*注意:c是結(jié)構(gòu)變量名*/{intj;c.b+=1;c.p+=2;}main(){inti;Aa={1,2};f(a);printf("%d,%d\n",a.b,a.p);}程序運行后的輸出結(jié)果是()。A、1,2B、2,4C、1,4D、2,3標準答案:A知識點解析:考查結(jié)構(gòu)體變量作為函數(shù)實參整體傳遞,也是一種值傳參,形參的變化不能影響到實參,所以調(diào)用函數(shù)f(a)對a中的數(shù)據(jù)沒有影響,輸出結(jié)果為1,2,答案選A。3、有以下程序#includemain(){unsignedchara=8,c;c=a>>3;printf("%d\n",c);}程序運行后的輸出結(jié)果是()。A、1B、16C、32D、0標準答案:A知識點解析:字符常量與其ASCII碼值一一對應(yīng),在計算的時候,可以使用該字符的ASCII碼參與運算,輸出時會根據(jù)格式控制符輸出對應(yīng)的字符或者ASCII碼。右移運算符">>"的運算規(guī)則是把左邊運算數(shù)的各二進制位全部右移n位,n取決于">>"右邊的數(shù)值。字符a的ASCII碼值為8,對應(yīng)二進制為1000,所以a>>3=1,輸出的字符c的ASCII碼值為1,答案選A。4、讀取二進制文件的函數(shù)調(diào)用形式為:fread(buffer,size,count,fp);其中buffer代表的是()。A、一個內(nèi)存塊的首地址,代表讀入數(shù)據(jù)存放的地址B、一個整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)C、一個文件指針,指向待讀取的文件D、一個內(nèi)存塊的字節(jié)數(shù)標準答案:A知識點解析:語句"fread(buffer,size,count,fp);"中,buffer為數(shù)據(jù)塊的指針,指向一個內(nèi)存塊的首地址,該內(nèi)存塊存放的是輸入的數(shù)據(jù),答案選A。5、以下敘述中錯誤的是()。A、可以通過typedef增加新的類型B、可以用typedef將已存在的類型用一個新的名字來代表C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:A知識點解析:typedef為類型定義符,使用的一般形式為"typedef原類型名新類型名;",它用于給已知類型取別名,作用僅僅是用"新類型名"代替"原類型名",并沒有產(chǎn)生新的數(shù)據(jù)類型,答案選A。6、有以下程序#includestructS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf("%d\n",++(p.a));}程序運行后的輸出結(jié)果是()。A、21B、11C、20D、10標準答案:A知識點解析:結(jié)構(gòu)體只是用戶自己定義的一種類型,使用方法和C語言中的基本數(shù)據(jù)類型一致。語句"structSp=data[1];"定義了一個結(jié)構(gòu)體類型為S的結(jié)構(gòu)體變量p,并將data第二個元素的值賦值給p,所以p.a與data[1].a等價,值為20,所以輸出的結(jié)果為21。答案選A。7、有以下程序#includemain(){unsignedchara=2,b=4,c=5,d;d=a|b;d&=c;printf("%d\n",d);}程序運行后的輸出結(jié)果是()。A、4B、3C、5D、6標準答案:A知識點解析:計算語句"d=a|b"時,字符a的ASCII碼為2,對應(yīng)二進制為0010;字符b的ASCII碼為4,對應(yīng)二進制為0100;所以按位或"|"運算之后d的二進制為0110。計算語句"d&=c;"時,字符c的ASCII碼為5,對應(yīng)二進制為0101,所以按位與"&"運算之后d的二進制數(shù)值為0100,對應(yīng)十進制值為4,所以答案選A。8、有以下程序#include#includemain(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;printf("%d,%d,%d\n",*a,*b,*c);}程序運行后的輸出結(jié)果是()。A、3,3,3B、2,2,3C、1,2,3D、1,1,3標準答案:A知識點解析:語句"a=b=c=(int*)malloc(sizeof(int));"將指針a、b、c指向了同一個內(nèi)存地址,所以,*a、*b、*c始終保持一致,語句"*a=1;*b=2,*c=3;"執(zhí)行完畢后,*a=*b=*c=3,語句"a=b"只是把b指向的地址指給指針a,執(zhí)行完畢后仍然*a=*b=*c=3,所以輸出結(jié)果為選項A)。9、以下敘述中正確的是()。A、當(dāng)對文件的讀(寫)操作完成之后,必須將它關(guān)閉,否則可能導(dǎo)致數(shù)據(jù)丟失B、打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋C、在一個程序中當(dāng)對文件進行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù)D、C語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)標準答案:A知識點解析:對已有文件進行寫操作不一定覆蓋原文件的數(shù)據(jù),可根據(jù)打開文件的方式不同在文件末尾追加寫入數(shù)據(jù),選項B)錯誤;要讀到第1個數(shù)據(jù)只需要用指針定向函數(shù)rewind()將文件指針重新指向文件首即可,選項C)錯誤;C語言中的文件分為順序讀寫文件和隨機讀寫文件兩種,隨機讀寫文件可以從任意位置開始讀寫,選項D)錯誤。答案選A)。10、設(shè)有定義:structcomplex{intreal,unreal;}data1={1,8},data2;則以下賦值語句中錯誤的是()。A、data2=(2,6);B、data2=data1;C、data2.real=data1.real;D、data2.real=data1.unreal;標準答案:A知識點解析:給結(jié)構(gòu)體變量的初始化需要用一對大括號將各成員的初始值括起來,而不是小括號,選項A)錯誤,答案選A)。11、有以下程序#includestructS{intn;inta[20];};voidf(structS*p){inti,j,t;for(i=0;in-1;i++)for(j=i+1;jn;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&s);for(i=0;iA、1,2,3,4,5,6,7,8,9,10,B、10,9,8,7,6,5,4,3,2,1,C、2,3,1,6,8,7,5,4,10,9,D、10,9,8,7,6,1,2,3,4,5,標準答案:A知識點解析:函數(shù)f()將結(jié)構(gòu)體成員的數(shù)組a中的前n個數(shù)據(jù)按照從小到大的順序排列,所以調(diào)用f(&s)結(jié)束后,輸出數(shù)組a的數(shù)據(jù)為選項A)。12、有以下程序#include#includetypedefstruct{charname[9];charsex;intscore[2];}STU;STUf(STUa){STUb={"Zhao",’m’,85,90};inti;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){STUc={"Qian",’f’,95,92},d;d=f(c);printf("%s,%c,%d,%d,",,d.sex,d.score[0],d.score[1]);printf("%s,%c,%d,%d\n",,c.sex,c.score[0],c.score[1]);}程序運行后的輸出結(jié)果是()。A、Zhao,m,85,90,Qian,f,95,92B、Zhao,m,85,90,Zhao,m,85,90C、Qian,f,95,92,Qian,f,95,92D、Qian,f,95,92,Zhao,m,85,90標準答案:A知識點解析:結(jié)構(gòu)體是用戶自己定義的一種數(shù)據(jù)類型,使用方法和C語言中的基本數(shù)據(jù)類型一致。函數(shù)f()傳遞的參數(shù)為結(jié)構(gòu)體變量,也是一種值傳參,形參的變化不能影響到實參,所以調(diào)用函數(shù)f(c)對c中的數(shù)據(jù)沒有影響。函數(shù)f()中將結(jié)構(gòu)體b中成員的數(shù)據(jù)分別賦值給a,所以函數(shù)的返回值為a即{"Zhao",?m?,85,90}。13、設(shè)有以下語句inta=1,b=2,c;c=a^(b<<2);執(zhí)行后,c的值為()。A、9B、7C、8D、6標準答案:A知識點解析:語句"c=a^(b<<2);"先計算表達式"(b<<2)",b的二進制數(shù)值為0010,所以左移2位之后結(jié)果為1000,對應(yīng)十進制值為8。表達式"a^8"即是將0001與1000做異或運算,結(jié)果為1001,對應(yīng)十進制值為9,所以答案選A。14、有以下程序#includemain(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen("d1.dat","w");for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的運行結(jié)果是()。A、123B、12300C、1D、321標準答案:A知識點解析:該段程序的邏輯是先用只寫的方式打開二進制文件"d1.dat",將數(shù)組a中的數(shù)據(jù)用for循環(huán)逐一寫入到該二進制文件中并在輸入結(jié)束后寫入回車符后關(guān)閉文件。之后再以只讀的方式打開文件"d1.dat",并將文件中的數(shù)據(jù)讀出到整型數(shù)據(jù)n上,所以輸出n的值為123,答案選A。15、以下關(guān)于typedef的敘述錯誤的是()。A、用typedef可以增加新類型B、typedef只是將已存在的類型用一個新的名字來代表C、用typedef可以為各種類型說明一個新名,但不能用來為變量說明一個新名D、用typedef為類型說明一個新名,通常可以增加程序的可讀性標準答案:A知識點解析:typedef為類型定義符,使用的一般形式為"typedef原類型名新類型名;",它用于給已知類型取別名,作用僅僅是用"新類型名"代替"原類型名",并沒有產(chǎn)生新的數(shù)據(jù)類型,答案選A。16、若有以下程序段intr=8;printf("%d\n",r>>1);輸出結(jié)果是()。A、4B、8C、16D、2標準答案:A知識點解析:右移運算符">>"的運算規(guī)則是把左邊運算數(shù)的各二進制位全部右移n位,n取決于">>"右邊的數(shù)值。整型數(shù)據(jù)r的十進制值為8,對應(yīng)二進制數(shù)值為0100,右移1位的運算結(jié)果為0010,十進制數(shù)值為4,答案選A。17、以下敘述中錯誤的是()。A、getchar函數(shù)用于從磁盤文件讀入字符B、gets函數(shù)用于從終端讀入字符串C、fputs函數(shù)用于把字符串輸出到文件D、fwrite函數(shù)用于以二進制形式輸出數(shù)據(jù)到文件標準答案:A知識點解析:getchar()函數(shù)的作用是從鍵盤上錄入一個字符,而不是從磁盤文件中讀入,所以答案選A。18、有以下程序#includemain(){FILE*pf;char*s1="China",*s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf);/*文件位置指針回到文件開頭*/fwrite(s1,5,1,pf);fclose(pf);}以上程序執(zhí)行后abc.dat文件的內(nèi)容是()。A、ChinangB、ChinaC、ChinaBeijingD、BeijingChina標準答案:A知識點解析:語句"fwrite(s2,7,1,pf);"將指針s2指向的7個字節(jié)的數(shù)據(jù)寫入到abc.dat文件中,而后將文件指針fp重定向指向文件首,再執(zhí)行語句"fwrite(s1,5,1,pf);"時將s1指向的5個字符寫入當(dāng)前文件,原先寫入的數(shù)據(jù)會被部分覆蓋,最后文件中的內(nèi)容為Chinang,答案選A。19、有以下結(jié)構(gòu)體說明、變量定義和賦值語句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則以下scanf函數(shù)調(diào)用語句有錯誤的是()。A、scanf("%d",ps->age);B、scanf("%d",&s[0].age);C、scanf("%c",&(ps->sex));D、scanf("%s",s[0].name);標準答案:A知識點解析:scanf函數(shù)的一般形式為scanf("格式控制字符串",輸入項1,輸入項2,…),輸入項由地址運算符"&"后跟變量名組成,地址符"&"不可省,選項A)的ps->age前少了取地址運算符"&",答案選A)。20、若有以下語句typedefstructS{intg;charh;}T;以下敘述中正確的是()。A、可用T定義結(jié)構(gòu)體變量B、可用S定義結(jié)構(gòu)體變量C、S是struct類型的變量D、T是structS類型的變量標準答案:A知識點解析:在該程序段中,S為結(jié)構(gòu)體名,T用typedef定義的structS類型的別名,所以可以用T或者structS定義結(jié)構(gòu)體變量,答案選A。21、有以下程序#include#includestructA{inta;charb[10];doublec;};structAf(structAt);main(){structAa={1001,"ZhangDa",1098.0};a=f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}structAf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returnt;}程序運行后的輸出結(jié)果是()。A、1002,ChangRong,1202.0B、1002,ZhangDa,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0標準答案:A知識點解析:該段程序先定義了一個結(jié)構(gòu)體A,同時定義了一個返回值類型為該結(jié)構(gòu)體類型的函數(shù)。函數(shù)f()的作用是對結(jié)構(gòu)體t做相應(yīng)修改后返回。雖然該函數(shù)屬于值傳遞,形參的變化不會影響到實參,但是返回值又被賦值給了結(jié)構(gòu)體變量a(見語句"a=f(a);"),所以輸出的為改變后的值,答案選A。22、有以下程序#includemain(){inta=1,b=2,c=3,x;x=(a^b)&c;printf("%d\n",x);}程序的運行結(jié)果是()。A、3B、1C、2D、0標準答案:A知識點解析:語句"x=(a^b)&c;"先計算表達式"(a^b)",即計算"0001^0010"結(jié)果為0011,然后計算"0011&c",即計算"0011&0011",結(jié)果為0011,對應(yīng)十進制數(shù)為3,答案選A。23、有以下程序#includemain(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);fclose(fp);fp=fopen("d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序運行后的輸出結(jié)果是()。A、123456B、14C、1234D、12標準答案:A知識點解析:該程序段的作用是把數(shù)組a中的數(shù)據(jù)分兩行寫入文件d2.dat中,每行寫三個元素,然后再用兩個整數(shù)k、n分別將這兩行數(shù)據(jù)讀取出來,所以輸出結(jié)果為選項A)。24、設(shè)有以下語句typedefstructTT{charc;inta[4];}CIN;則下面敘述中正確的是()。A、可以用CIN定義結(jié)構(gòu)體變量B、TT是struct類型的變量C、可以用TT定義結(jié)構(gòu)體變量D、CIN是structTT類型的變量標準答案:A知識點

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論