版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
國家二級C語言(結(jié)構(gòu)體、共用體、位運算及文件操作)機試模擬試卷1(共9套)(共237題)國家二級C語言(結(jié)構(gòu)體、共用體、位運算及文件操作)機試模擬試卷第1套一、選擇題(本題共26題,每題1.0分,共26分。)1、有以下程序#includemain(){chara=4;printf("%d\n",a=a<<1);}A、8B、16C、40D、4標準答案:A知識點解析:本題主要考查按位右移運算。a=4的二進制為00000100,a<2、有以下程序#includemain(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}A、11B、6C、21D、1標準答案:C知識點解析:本題考查位操作運算符?!?lt;<’是左移運算符,左移一位相當于乘2,‘|’是按位或運算符。5左移兩位相當于乘4,得到20,20的二進制數(shù)是00010100,和0000000l進行按位或操作得到00010101,即十進制的21。3、若變量已正確定義,則以下語句的輸出結(jié)果是s=32;s^=32;printf("%d",s);A、-1B、1C、32D、0標準答案:D知識點解析:“按位異或”運算的規(guī)則是:參與運算的兩個運算數(shù)中相對應(yīng)的二制位上,若數(shù)相同,則該位的結(jié)果為0;若數(shù)不同,則該位的結(jié)果為1。因為語句s=32;s^=32:相當于s與自身做按位異或運算,所以其結(jié)果等于0。4、若有以下程序main(){intc;c=10^5;printf("%dkn",c);}則程序的輸出結(jié)果是A、15B、10000C、5D、105標準答案:A知識點解析:按位異或(^)的運算規(guī)則是:參與運算的兩個運算數(shù)中相對應(yīng)的二進制位上,若數(shù)相同,則該位的結(jié)果為0;若數(shù)不同,該位的結(jié)果為1。整數(shù)10和5的二進制編碼分別為1010和0101,異或結(jié)果為1111,其十進制數(shù)據(jù)位15。5、若有以下程序main(){intc;C=1315;printf("%d\n",c);}則程序的輸出結(jié)果是A、15B、18C、13D、5標準答案:C知識點解析:按位或(1)的運算規(guī)則是:參加運算的兩個運算數(shù)中,只要兩個相應(yīng)的二進制位中一個為1,則該位的運算結(jié)果即為1;只有當兩個相應(yīng)位的數(shù)都為0時,該位的運算結(jié)果才為0。13的二進制位1101,5的二進制位0101,或運算的結(jié)果為1101,因此值為13。6、有以下程序main(){inti=0;i=~i;printf("%d\n",i);}程序運行后的輸出結(jié)果是A、0B、1C、8D、-1標準答案:D知識點解析:運算符(~)是位運算符中唯一的一個單目運算符,運算對象應(yīng)置于運算符的右邊,其運算功能是把運算對象的內(nèi)容按位取反(使每一位上的0變1,1變0)。i的初值為0,二進制位00000000,因此取反后結(jié)果為11111111,最高位為符號位,為-1的補碼形式,因此輸出結(jié)果為-1.7、有以下程序main(){inti=1;i=i^iprintf("%d\n",i);}程序運行后的輸出結(jié)果是A、-1B、0C、1D、7標準答案:B知識點解析:按位異或(^)的運算規(guī)則是:參與運算的兩個運算數(shù)中相對應(yīng)的二進制位上,若數(shù)相同,則該位的結(jié)果為0;若數(shù)不同,該位的結(jié)果為1。本題中表達式i^i的值必為0,因為i的各個位置的二進制值相同。8、下面關(guān)于位運算符的敘述,正確的是A、#表示“按位異或”的運算B、‖表示“按位或”的運算C、~表示“按位異或"的運算D、&表示“按位與”的運算標準答案:D知識點解析:C語言提供了6種位運算符,各種位運算符的含義見下表:各種位運算符及其含義9、以下敘述中正確的是A、打開一個已存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋B、在一個程序中當對文件進行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第個數(shù)據(jù)C、C語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)D、當對文件的讀(寫)操作完成之后,、必須將它關(guān)閉,否則可能導(dǎo)致數(shù)據(jù)丟失標準答案:D知識點解析:在C語言中,有兩種對文件的存取方式;順序存取和直接存??;如果以“a”的方式對一個已打開的文件進行寫操作后,則原有文件中內(nèi)容將保存,新的數(shù)據(jù)寫在原有內(nèi)容之后。如果以“a+”的方式為讀和寫而打開一個文件,則既可以對文件進行讀,也可以對文件進行寫,而且在讀和寫操作之間不必關(guān)閉文件,可以從頭開始讀。當對文件的讀(寫)操作完成之后,必須將它關(guān)閉。10、下列關(guān)于C語言文件的敘述中正確的是A、文件由結(jié)構(gòu)序列組成,可以構(gòu)成二進制文件或文本文件B、文件由一系列數(shù)據(jù)依次排列組成,只能構(gòu)成二進制文件C、文件由數(shù)據(jù)序列組成,可以構(gòu)成二進制文件或文本文件D、文件由字符序列組成,其類型只能是文本文件標準答案:C知識點解析:在C語言中,對輸入、輸出的數(shù)據(jù)都按“數(shù)據(jù)流”的形式進行處理。數(shù)據(jù)可以按文本形式或二進制形式存放在介質(zhì)上,因此文件可以按數(shù)據(jù)的存放形式分為文本文件和二進制文件。11、下面選項中關(guān)于“文件指針”概念的敘述正確的是A、文件指針就是文件位置指針,表示當前讀寫數(shù)據(jù)的位置B、文件指針指向文件在計算機中的存儲位置C、文件指針是程序中用FILE定義的指針變量D、把文件指針傳給fscanf函數(shù),就可以向文本文件中寫入任意的字符標準答案:C知識點解析:文件指針實際上是指向一個結(jié)構(gòu)體類型的指針,這個結(jié)構(gòu)體中包含如緩沖區(qū)的地址、在緩沖區(qū)中當前存取的字符的位置、對文件是“讀”或“寫”、是否出錯、是否已經(jīng)遇到文件結(jié)束標志等信息。一般稱文件指針結(jié)構(gòu)體類型名為FILE,可以用此類型名來定義文件指針。[格式]FILE+指針變量名[說明]FILE是一個存儲文件信息的結(jié)構(gòu)體類型的變量。注意不要和文件位置指針混淆,在文件內(nèi)部有一個位置指針,傭以指示文件內(nèi)部的當前讀寫位置。使用fgetc函數(shù),每讀寫一次,該指針均向后移動,它不需在程序中定義說明,而是由系統(tǒng)自動設(shè)置的。而文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。fscanf函數(shù)可以向文本文件和二進制文件輸入數(shù)據(jù)。12、設(shè)文件指針fp已定義,執(zhí)行語句fp=fopen("file","W");后,以下針對文本文件file操作敘述的選項中正確的是A、寫操作結(jié)束后可以從頭開始讀B、可以在原有內(nèi)容后追加寫C、可以隨意讀和寫D、只能寫不能讀標準答案:D知識點解析:在題目中函數(shù)fopen以“只寫”方式打開文件file。13、有以下程序#includemain(){FILE*f=f=fopen("filea.txt","W");fprintf(f,"abc");fclose(f);}若文本文件filea.txt中原有內(nèi)容為:hello,則運行以上程序后,文件filea.txt中的內(nèi)容為A、abc!oB、abcC、helloabcD、abchello標準答案:B知識點解析:本題考查文件打開方式。格式:文件指針名=fopen(文件名,使用文件方式)需要注意的是:用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。14、有以下程序#inchldemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+t");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]);}A、1,2,3,4,5,6B、6,5,4,3,2,1,C、4,5,6,1,2,3,D、1,2,3,3,2,1,標準答案:B知識點解析:在程序中定義了一個整型數(shù)組a[6],并對它賦初值,并以寫入的方式打開了文件d2.dat。然后利用一個for循環(huán)把數(shù)組a中的元素數(shù)據(jù)寫入文件d2.dat中,調(diào)用函數(shù)rewind把將文件內(nèi)部的位置指針重新指向一個文件的開頭,再利用for循環(huán)語句把文件中的數(shù)據(jù)依次寫入到倒序排列的數(shù)組a中,最后輸出數(shù)組a中的數(shù)組元素。15、讀取二進制文件的函數(shù)調(diào)用形式為:fread(buffer,size,count,fp);其中buffer代表的是A、一個整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)B、一個內(nèi)存塊的首地址,代表讀入數(shù)據(jù)存放的地址C、一個文件指針,指向待讀取的文件D、一個內(nèi)存塊的字節(jié)數(shù)標準答案:B知識點解析:buffer是數(shù)據(jù)塊的指針,對舶ad來說,它是內(nèi)存塊的首地址,輸入的數(shù)據(jù)存入此內(nèi)存塊中。16、有下列程序:#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);f-p=open("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的運行結(jié)果是A、12300B、123C、1D、321標準答案:B知識點解析:本題考查以讀和寫的方式打開文件對文件內(nèi)容操作的不同,fp=fopen("d1.dat","w");以可寫的方式為輸出建立新文本文件,調(diào)用printf,輸出“123”,fp=fopen("d1,dat","r");以只讀的方式打開文本文件,不能對文件內(nèi)容進行操作。17、以下敘述中錯誤的是A、gets函數(shù)用于從終端讀入字符串B、getchar函數(shù)用于從磁盤文件讀入字符C、fputs函數(shù)用于把字符串輸出到文件D、fwrite函數(shù)用于以二進制形式輸出數(shù)據(jù)到文件標準答案:B知識點解析:本題考查的是輸入輸出函數(shù)的使用,gets和getchar函數(shù)用于從標準輸入設(shè)備終端讀入字符串和字符,并非從磁盤文件讀入,fputs用于把字符串輸出到文件,fwrite用于以二進制形式輸出數(shù)據(jù)到文件。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知識點解析:本題主考查函數(shù)fwrite的使用。函數(shù)fwrite的調(diào)用形式為:Intfwrite(chat*pt,unsignedsize,unsignedn,F(xiàn)ILE*fp);其功能是把pt所指向的n*size個字節(jié)輸出到fp所指文件中。在本題中fwrite(s2,7,1,pf);的功能是把字符串“Beijing”輸入到文件abc.dat中.然后調(diào)用rewind(pf),把文件位置指針回到文件開頭,再調(diào)用fwrite(s1,5,1,pf)把字符串“China”寫入到文件abc.dat中,所以此時文件abc.dat的內(nèi)容為Chinang。19、有下列程序:#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[31,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、14B、123456C、1234D、12標準答案:B知識點解析:用文件函數(shù)fopcn打開d2.dat文件并把數(shù)組a[6]中的元素分兩行寫入到d2.dat文件中,關(guān)閉文件。然后再次打開文件d2.dat,用fscanf()函數(shù)讀取文件d2.dat中的數(shù)據(jù),因為每行沒有分隔符,所以每一行會被認為是一個完整的數(shù),并存入到變量k和n中,輸出變量k和n的值為123.456。20、有下列程序:#includemain(){FILE*fp;inta[10]={1,2,3,0,0),i;fp=fopen("d2.dat","wb");fwtite(a,sizeof(int),5,f1));fwrite(a,sizeof(int),5,f1));fclose(fp);fp=fopen("d2.dat","rb");fread(a,sizeof(int),10,f(p);fclose(fp);for(i=0;i<10;i++)printf("%d",a[i]);}程序的運行結(jié)果是A、1,2,3,1,2,3,0,0,0,0,B、1,2,3,0,0,1,2,3,00,C、123,0,0,0,0,123,0,0,0,0,D、1,2,3,0,0,0,0,0,0,0,標準答案:B知識點解析:首先用函數(shù)fopen()以“wb”的方式開打文件“d2.dat”,然后調(diào)用兩次fwrile函數(shù)將數(shù)組a的5個元素,依次輸出到文件fp中,共10個字節(jié),關(guān)閉文件。再次打開文件,使用文件指針指向文件的開頭,調(diào)用fread函數(shù)從文件fp中讀取這10個字節(jié)的數(shù)據(jù)到數(shù)組a中,此時數(shù)組a的內(nèi)容就變?yōu)閧1,2,3,0,0,1,2,3,0,0},最后的輸?shù)沤Y(jié)果為“1,2,3,0,0,1,2,3,0,0”。21、設(shè)fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數(shù)feof(f1))的返回值為A、’\0’B、0C、NULLD、非0值標準答案:D知識點解析:ANSIC提供的feof函數(shù)的功能是判斷fb所指的文件的位置是否已達到文件尾,如果達到文件尾,則feof函數(shù)的值為1,否則為0,表示文件尚未結(jié)束。22、有以下程序#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、28cB、abe28C、abcD、因類型不一致而出錯標準答案:B知識點解析:在程序中首先把字符串a(chǎn)be寫入到文件myfile.dat中,然后再把整數(shù)28追加到字符串a(chǎn)bc的后面.最后把文件myfile.dat的內(nèi)容讀入到字符串str中,井把其內(nèi)容輸出。23、以下程序依次把從終端輸入的字符存放到f文件中,用#作為結(jié)束輸入的標志,則在橫線處應(yīng)填入的選項是#includemain(){FILE*fp;charch;fp=fopen("fname","W");while((ch=getchar())!=’#’)fputc(_________);fclose(fp);)A、fp,chB、chC、ch,"fname"D、ch,fp標準答案:D知識點解析:fputc()是以字符(字節(jié))為單位的讀寫函數(shù)。每次可從文件讀出或向文件寫入一個字符。使用格式為fputc(ch,fp);其中ch是待輸出的某個字符,它可以是一個字符常量,也可以是一個字符變量;fb是文件指針。fputc(ch,fp)的功能是將字符ch寫到文件指針fp所指的文件中。如果輸出成功,fputc函數(shù)返回所輸出的字符;如果輸出失敗,則返回一個EOF值。EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1。24、以下程序用來統(tǒng)計文件中字符的個數(shù)(函數(shù)feof用以檢查文件是否結(jié)束,結(jié)束時返回非零)#includemain(){FILE*fp;longnum=O:fp=fopen(“fname.dat","r”);while(_________){fgetc(fp);num++;)printf("num=%d\n",num);fclose(fp);}下面選項中,填入橫線處不能得到正確結(jié)果的是A、feof(fp)B、feof(fp)=NULLC、!feof(fp)D、feof(fp)=0標準答案:C知識點解析:feof函數(shù)用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fb)的值為1,否則為0。題目橫線用于判斷文件不結(jié)束,讀出字符。文件不結(jié)束feof值為0,若執(zhí)行循環(huán)則應(yīng)用表達式!feof(fp)。25、下面關(guān)于“EOF”的敘述,正確的是A、EOF的值等于0B、文本文件和二進制文件都可以用EOF作為文件結(jié)束標志C、EOF是在庫函數(shù)文件中定義的符號常量D、對于文本文件,龜etc函數(shù)讀入最后一個字符時,返回值是EOF標準答案:C知識點解析:EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1。EOF用作文件結(jié)束標志,在二進制或者文本文件內(nèi)部有一個位置指針,用以指示文件內(nèi)部的當前讀寫位置。使用fgetc函數(shù),每讀寫一次,該指針均向后移動,26、若fp已定義為指向某文件的指針,且沒有讀到該文件的末尾,則C語言函數(shù)feof(fp)的函數(shù)返回值是A、0B、非0C、-1D、EOF標準答案:A知識點解析:feof用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fb)的值為1,否則為0。國家二級C語言(結(jié)構(gòu)體、共用體、位運算及文件操作)機試模擬試卷第2套一、選擇題(本題共26題,每題1.0分,共26分。)1、以下敘述中錯誤的是A、可以用typedef將已存在的類型用一個新的名字來代表B、可以通過typedef增加新的類型C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:B知識點解析:C語言允許用typedef說明一種新類型名,說日月新類型名的語句一般形式為:typedef類型名標識符;在此,“類型名”必須是在此語句之前已有定義的類型標識符?!皹苏`符”是一個用戶定義標識符,用作新的類型名。tVpedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。2、以下關(guān)于typedef的敘述錯誤的是A、typedef只是將已存在的類型用一個新的名字來代表B、用typedef可以為各種類型說明一個新名,但不能用來為變量說明一個新名C、用typedef可以增加新類型D、用typedef為類型說明一個新名,通常可以增加程序的可讀性標準答案:C知識點解析:C語言允許用typedef說明一種新的類型名,其一般形式為:typedef類型名標識符;在此“類型名”必須是在此語句之前已有定義的類型標識符?!皹俗R符”是一個用戶定義標識符,用作新的類型名。Typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原來的類型名依然有效,這樣可以增加程序的可讀性。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知識點解析:定義結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體名{成員列:表};struct結(jié)構(gòu)體名后不能加“;”號,所以選項B)、C)錯誤,選項D)中定義無名稱的結(jié)構(gòu)體類型同時定義結(jié)構(gòu)體變量形式應(yīng)為structt1,t2;選項A)為用戶自定義類型,其為正確的定義形式。4、以下敘述中錯誤的是A、可以用typedef將已存在的類型用一個新的名字來代表B、可以通過typedef增加新的類型C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:B知識點解析:C語言允許用typedef說明一利新類型名。typedef類型名標識符:其中“類型名”必須是在此語句之前己定義的類型標識符;“標識符”是一個用戶定義標識符,用作新的類型名;typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。5、若有定義typedefint*T;Ta[10];則a的定義與下面哪個語句等價A、int*a[10];B、int(*a)[10];C、int*a;D、inta[10];標準答案:A知識點解析:tvpedef的主要功能是為存在的類型命名,后面的代碼中可以利用該新定義的類型名定義變量,題目中定義了整型指針類型T,而后利用T定義了整型指針數(shù)組a,含有10個元素,選項A)中定義了整型指針數(shù)組a,選項B)定義了一個指向一維數(shù)組的指針a,選項C)定義指針變量,,而選項D)為定義整型數(shù)組最常用的形式,數(shù)組a中可以存放10個數(shù)據(jù)元素。6、若有定義typedefcharT[10];T*a;上述定義中a的類型與下面選項中完全相同的是A、char(*a)[10];B、char*a;C、chara[10];D、char*a[10];標準答案:D知識點解析:題目中利用typedef定義了與字符數(shù)組類型T,而后定義了該類型的指針a,因此a為指針數(shù)組。7、以下結(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)中結(jié)構(gòu)體定義中每個成員后面的分號都不能省略,doublem后沒分號,因此錯誤。選項C)結(jié)構(gòu)體類型定義完畢后,}外沒加分號。選項D)中定義變量要加上關(guān)鍵字struct。8、以下敘述中正確的是A、使用typedef說明新類型名時,其格式是:typedef新類型名原類型名;B、使用typedef說明新類型名時,后面不能加分號C、在程序中,允許用typedef來說明一種新的類型名D、在使用typedef改變原類型的名稱后,只能使用新的類型名標準答案:C知識點解析:C語言允許用typedef說明一種新類型名。定義形式如下:typedef類型名標識符:其中,“類型名”必須是在此語句之前已定義的類型標識符;“標識符”是一個用戶定義標識符,用作新的類型名;typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。9、以下敘述中錯誤的是A、typedef的作用是用一個新的標識符來代表已存在的類型名B、typedef說明的新類型名必須使用大寫字母,否則會出編譯錯誤C、可以用typedef說明的新類型名來定義變量D、用typedef可以說明一種新的類型名標準答案:B知識點解析:tvpedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原來類型名依然有效。為了便于識別,一般習(xí)慣將新的類型名用大寫字母表示。10、下面結(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;標準答案:B知識點解析:在選項B)中,由于在定義完結(jié)構(gòu)體后缺少分號“;”,所以這是一條不完整的語句,因而是錯誤的。11、有以下程序#includetypedefstruct{intb,p;)A;voidf(Ac)/*注意:c是結(jié)構(gòu)變量名*/{intj;c.b+=1;c.p+=2;}main(){i;Aa={1,2};f(a);printf("%d,%d\n",a.b,a.p);}程序運行后的輸出結(jié)果是A、2.4B、1,2C、1,4D、2,3標準答案:B知識點解析:在C語言中,數(shù)據(jù)只能從實參單向傳遞給形參,稱為“按值”傳遞。也就是說,當簡單變量作為實參時,用戶不可能在函數(shù)中改變對應(yīng)實參的值。所以本題中在main()函數(shù)f(a)語句中結(jié)構(gòu)體實參a作為值,傳遞給函數(shù)f(Ac)中的形參c;這種值傳遞的方式不會對實參a產(chǎn)生任何影響,所以結(jié)構(gòu)體實參a的值不會發(fā)生變化。12、有以下程序structs{inta,b;)data[2]={10,100,20,200);main(){structsp=data[1];printf("%d\n",++(p.a(chǎn)));}程序運行后的輸出結(jié)果是A、11B、20C、21D、10標準答案:C知識點解析:存題目中定義了結(jié)構(gòu)體s類型的數(shù)組變量data,并對其賦初值。在程序中定義了指向結(jié)構(gòu)體S類型的變量p,并把數(shù)組data的第二個元素data[1]的值賦給它,所以此時成員變量p.a(chǎn)的值等于20,存輸出時分別加1,所以輸入結(jié)果為選項A)。13、設(shè)有定義:structcomplex{intreal,unreal;}datal={1,8),data2;則以下賦值語句中錯誤的是A、data2=(2,6);B、data2=datal:C、data2.real=datal.real;D、data2.real=datal.unreal;標準答案:A知識點解析:本題主要考查結(jié)構(gòu)體變量的定義與初始化。題目中定義了complex類型的結(jié)構(gòu)體變量data1和data2,并對data1進行了初始化??梢杂靡粋€結(jié)構(gòu)體變量對另一個結(jié)構(gòu)體變量賦值,用一個結(jié)構(gòu)體變量的成她對另一個結(jié)構(gòu)體變量的成員賦值。14、有以下程序structs{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、10,9,8,7,6,5,4,3,2,1,B、2,3,1,6,8,7,5,4,10,9,C、10,9,8,7,6,1,2,3,4,5,D、1,2,3,4,5,6,7,8,9,10,標準答案:D知識點解析:voidf(structS*p)函數(shù)的功能使用了結(jié)構(gòu)體指針變量實現(xiàn)對一維數(shù)組的元素從小到人排序。用關(guān)系表達式p->a[i]>p->a[j]實現(xiàn)一維數(shù)組中相鄰元素兩兩比較,大的元素向后移,小的元素向前移。在主函數(shù)中語句f(&s);的功能實現(xiàn)對結(jié)構(gòu)體變量s中一維數(shù)組的元素從小到大的排序,所以循環(huán)語句的輸出結(jié)果為1,2,3,4,5,6,7,8,9,10。15、有以下程序#include#includetypedefstruct{charname[9];charsex;intscore[2];)STU;STUf(STUa){STUb={"Zhao",’m’,85,90};inti;strcpy(a.name,b.name);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.name,d.sex,d.score[0],d.score[1]);printf("%s,%c,%d,%d,",c.name,c.sex,c.score[0],c.score[1]);}A、Zhao,m,85,90,Zhao,m,85,90B、Qian,f,95,92,Qian,f,95,92C、Zhao,m,85,90,Qian,f,95,92D、Qian,t,95,92,Zhao,m,85,90標準答案:C知識點解析:在C語言中,函數(shù)實參與形參之間數(shù)據(jù)的傳遞是傳值,也就是說在用實參訓(xùn)用形參時,是把實參的值拷貝一份給形參,而實參的值并不變化,仍是原米的值。所以對十本題來說,在主函數(shù)中調(diào)f(e)后,實參c的值并不會變化,仍是原值。在函數(shù)f中把局部變量b的值依次返回給變量d。16、程序中已構(gòu)成如下圖所示的不帶頭結(jié)點的單向鏈表結(jié)構(gòu),指針變量s、p、q均已正確定義,并用于指向鏈表結(jié)點,指針變量s總是作為頭指針指向鏈表的第一個結(jié)點。若有以下程序段:q=s;s=s->next;p=s;while(p->next)p=p->next;p->next=q;q->next=NULL;該程序段實現(xiàn)的功能是A、尾結(jié)點成為首結(jié)點B、首結(jié)點成為尾結(jié)點C、刪除首結(jié)點D、刪除尾結(jié)點標準答案:B知識點解析:分析程序可知,程序段首先讓:q指向鏈表的首結(jié)點,s指向鏈表的第二結(jié)點,p此時指向鏈表的第二個結(jié)點。然后在while循環(huán)中,當p的后繼結(jié)點非空時,讓p指向鏈表的最后一個結(jié)點,退出循環(huán)。然后讓尾結(jié)點指向首結(jié)點,并使首結(jié)點的后繼結(jié)點為NULL。所以最終實現(xiàn)鏈表的首結(jié)點成為尾結(jié)點。17、有以下結(jié)構(gòu)體說明、變量定義和賦值語句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則以下scanf函數(shù)調(diào)用語句有錯誤的是A、scanf("%d",&s[0].a(chǎn)ge);B、scanf("%c",&(ps->sex));C、scanf("%s",s[0].name);D、scanf("%d",ps->age);標準答案:D知識點解析:程序段定義了結(jié)構(gòu)體變量數(shù)組s[5]和指針變量ps,然后ps指向數(shù)組s[5]中的第一個元素,因而ps->age引用s[0].a(chǎn)ge。因為在輸入scanf()函數(shù)中,第2個參數(shù)應(yīng)該表示為地址變量,而選項A)表示的值,而不是一個地址值。18、若有以下語句typedefstructS{intg;charh;}T;以下敘述中正確的是A、可用S定義結(jié)構(gòu)體變量B、S是struct類型的變量C、T是structS類型的變量D、可用T定義結(jié)構(gòu)體變量標準答案:D知識點解析:本題考查typedef,T是structS的新名稱,因此可用T定義結(jié)構(gòu)體變最,但是T并不是變量,只是structS的新名稱。19、有以下程序#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(chǎn),a.b,a.c);}structAf(StructAt){t.a(chǎn)=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returnt;}程序運行后的輸出結(jié)果是A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0標準答案:B知識點解析:在主函數(shù)中定義結(jié)構(gòu)體A的變最a,并對其賦初值,再調(diào)用函數(shù)f(a),在函數(shù)f(a)中對結(jié)構(gòu)體變量a的各個成員重新進行了賦位操作,并把其值返回在屏幕上輸出。20、設(shè)有以下語句typedefstructTT{chalc:inta[4]:}CIN;則下面敘述中正確的是A、TT是struct類型的變量B、可以用TT定義結(jié)構(gòu)體變量C、CIN是structTT類型的變量D、可以用CIN定義結(jié)構(gòu)體變量標準答案:D知識點解析:c語苦允許用typedef說明一種新的類犁名,說明新類型名的語句為一般形式為:typcdef類型名標識符在此,“類型名”必須是此語句之前已有定義的類型標識符。“標識符”是一個用戶定義標識符,用作新的類型名。typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型.原有類型名依然有效。在本題中用typedef定義C1N為TT的一種新的類型名,因而可以用它定義一個結(jié)構(gòu)休變量。21、有以下程序#includestructord{intx,y;}dt[2]={1,2,3,4};main(){structord*p=dt;printf("%d,",++(p一>x));printf("%d\n",++(p一>y));}程序運行后的輸出結(jié)果是A、4.1B、2,3C、3,4D、1,2標準答案:B知識點解析:在題目中定義了結(jié)構(gòu)體ord類型的數(shù)組變量dt,井對具賦初值。任程序中定義了指向結(jié)構(gòu)體ord類犁的指針變量p,并且它指向變量數(shù)組dt的第一個元素dt[0],所以此時成員變量p->x的值等于1,成員變量p->y的值等于2,在輸出時分別加1,所以輸出結(jié)果為選項B)。22、有以下程序段structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};structstc[2]={10,a,20,b);pt=c;以下選項中表達式的值為11的是A、pt->xB、*pt->yC、++pt->xD、(pt++)->x標準答案:C知識點解析:由題目的已知條件可知,pt指向結(jié)構(gòu)體數(shù)組c[2]的第一元素c[0],所以pt->x=10,執(zhí)行自加運算后為11。23、有下列程序:structS{intn;inta[20];};voidf(int*a,intn){inti;for(i=0;iA、3,4,2,7,9,8,6,5,11,10,B、2,3,1,6,8,7,5,4,10,9,C、2,4,3,9,12,12,11,11,18,9,D、1,2,3,6,8,7,5,4,10,9,標準答案:C知識點解析:voidf(int*a,intn)函數(shù)的功能是對數(shù)組a[]的每一個元素加上其下標的值。所以在main()函數(shù)中f(s.a(chǎn),s.n)語句會調(diào)用f(int*a,intn)函數(shù),此時指針a指向數(shù)組s.a(chǎn)={2,3,1,6,8,7,5,4,10,9}.n=10;然后執(zhí)行for(i=0;i24、有下列程序:#include#includetypedefstruct{charname[9];charsex;float:score[2];)STU;STUf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(a.name,b.name);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.Of,%2.Of\n",d.neme,d.sex,d.score[0],d.score[1]);}程序的運行結(jié)果是A、Qian,m,85,90B、Zhao,f,95,92C、Zhao,m,85,90D、Qian,f,95,92標準答案:D知識點解析:f()函數(shù)的功能是對形參a的各個成員用結(jié)構(gòu)體變量b的各個成員進行賦值后,然后返同變量a。在主函數(shù)中調(diào)用f(c)函數(shù)時,將STU類型的結(jié)構(gòu)體變量c的值傳遞給形參a,函數(shù)f()在對a的各個成員進行重新賦值后,再將返回變量a的值傳給d,最后輸出結(jié)構(gòu)變量d的各個成員的值。25、假定已建立以下鏈表結(jié)構(gòu),且指針p和q已指向如圖所示的節(jié)點:則以下選項中可將q所指節(jié)點從鏈表中刪除并釋放該節(jié)點的語句組是A、p=q->next;free(q);B、p=q;free(q);C、(*p).next=(*q).next;free(p);D、p->next=q->next;free(q);標準答案:D知識點解析:本題考查了在線性鏈表刪除一個節(jié)點的方法,要刪除q所指向的節(jié)點,只需要把q所指向的節(jié)點的前一個節(jié)點中的后繼指針指向q所指向的節(jié)點的下一個節(jié)點即可,即p->next=q->next。再釋放q所指向的節(jié)點,即free(q)。26、有以下程序#include#includeStructA{inta;charb[10];doublec;);VOidf(StructAt);main(){struerAa={1001,"ZhangDa",1098.0);f(a);printf("%d,%s,%6.1f\n",a.a(chǎn),a.b,a.c);}voidf(struerAt){t.a(chǎn)=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結(jié)果是A、1002,ChangRong,1202.0B、1001,ChangRong,1098.0C、1001,ZhangDa,1098.0D、1002,ZhangDa,1202.0標準答案:C知識點解析:本題主要考查是的函數(shù)調(diào)用時參數(shù)之間的傳遞問題。在C語言中參數(shù)之間的傳遞是傳值,也就是把實參的值復(fù)制一份傳遞給形參,而實參的值不發(fā)生變化。所以對于本題來說,在主函數(shù)中執(zhí)行f(a),把結(jié)構(gòu)體變量a的值復(fù)制一份傳遞給形參變量t,而實參變量a的值保持不變。國家二級C語言(結(jié)構(gòu)體、共用體、位運算及文件操作)機試模擬試卷第3套一、選擇題(本題共26題,每題1.0分,共26分。)1、以下敘述中錯誤的是A、可以用typedef將已存在的類型用一個新的名字來代表B、可以通過typedef增加新的類型C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:B知識點解析:C語言允許用typedef說明一種新類型名,說明新類型名的語句一般形式為:typedef類型名標識符;在此,“類型名”必須是在此語句之前已有定義的類型標識符?!皹苏`符”是一個用戶定義標識符,用作新的類型名。typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。2、以下關(guān)于typedef的敘述錯誤的是A、typedef只是將已存在的類型用一個新的名字來代表B、用typedef可以為各種類型說明一個新名,但不能用來為變量說明一個新名C、用typedef可以增加新類型D、用typedef為類型說明一個新名,通??梢栽黾映绦虻目勺x性標準答案:C知識點解析:C語言允許用typedef說明一種新的類型名,其一般形式為:typedef類型名標識符;在此“類型名”必須是在此語句之前已有定義的類型標識符?!皹俗R符”是一個用戶定義標識符,用作新的類型名。Typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型.原來的類型名依然有效,這樣可以增加程序的可讀性。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知識點解析:定義結(jié)構(gòu)體類型的一般形式為:struet結(jié)構(gòu)體名{成員列表};struet結(jié)構(gòu)體名后不能加“;”號,所以選項B、C)錯誤,選項D中定義無名稱的結(jié)構(gòu)體類型同時定義結(jié)構(gòu)體變量形式應(yīng)為struett1,t2;選項A為用戶自定義類型,其為正確的定義形式。4、以下敘述中錯誤的是A、可以用typedef將已存在的類型用一個新的名字來代表B、可以通過typedef增加新的類型C、用typedef定義新的類型名后,原有類型名仍有效D、用typedef可以為各種類型起別名,但不能為變量起別名標準答案:B知識點解析:C語言允許用typedef說明一種新類型名。typedef類型名標識符:其中“類型名”必須是在此語句之前已定義的類型標識符;“標識符”是一個用戶定義標識符,用作新的類型名:typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。5、若有定義typedefint*T;Ta[10];則a的定義與下面哪個語句等價A、int*a[10];B、int(*a)[10];C、int*a;D、inta[10];標準答案:A知識點解析:typedef的主要功能是為存在的類型命名,后面的代碼中可以利用該新定義的類型名定義變量,題目中定義了整型指針類型T.而后利用T定義了整型指針數(shù)組a,含有10個元素,選項A中定義了整型指針數(shù)組a,選項B定義了一個指向一維數(shù)組的指針a,選項C定義指針變量,而選項D為定義整型數(shù)組最常用的形式,數(shù)組a中可以存放10個數(shù)據(jù)元素。6、若有定義typedefcharT[10];T*a;上述定義中a的類型與下面選項中完全相同的是A、char(*a)[10];B、char*a;C、chara[10];D、char*a[10];標準答案:D知識點解析:題目中利用typedef定義了字符數(shù)組類型T,而后定義了該類型的指針a,因此a為指針數(shù)組。7、以下結(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中結(jié)構(gòu)體定義中每個成員后面的分號都不能省略,doublem后沒分號,因此錯誤。選項C結(jié)構(gòu)體類型定義完畢后,}外沒加分號。選項D中定義變量要加上關(guān)鍵字struct。8、以下敘述中正確的是A、使用typedef說明新類型名時,其格式是:typedef新類型名原類型名;B、使用typedef說明新類型名時,后面不能加分號C、在程序中,允許用typedef來說明一種新的類型名D、在使用typedef改變原類型的名稱后,只能使用新的類型名標準答案:C知識點解析:C語言允許用typedef說明一種新類型名。定義形式如下:typedef類型名標識符:其中“類型名”必須是在此語句之前已定義的類型標識符;“標識符”是一個用戶定義標識符,用作新的類型名:typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。9、以下敘述中錯誤的是A、typedef的作用是用一個新的標識符來代表已存在的類型名B、typedef說明的新類型名必須使用大寫字母,否則會出編譯錯誤C、可以用typedef說明的新類型名來定義變量D、用typedef可以說明一種新的類型名標準答案:B知識點解析:typedef語句的作用僅僅是用“標識符”來代表己存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原來類型名依然有效。為了便于識別,一般習(xí)慣將新的類型名用大寫字母表示。10、下面結(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;標準答案:B知識點解析:在選項B中,由于在定義完結(jié)構(gòu)體后缺少分號“:”,所以這是一條不完整的語句,因而是錯誤的。11、有以下程序#includetypedefstruct{intb,p;}A;voidf(Ac)/*注意:C是結(jié)構(gòu)變量名*/{intj;c.b+=1;c.p+=2;}main(){i;Aa={1,2);f(a);printf("%d,%dha",a.b,a.p);}程序運行后的輸出結(jié)果是A、2,4B、1,2C、1,4D、2,3標準答案:B知識點解析:在C語言中,數(shù)據(jù)只能從實參單向傳遞給形參,稱為“按值”傳遞。也就是說,當簡單變量作為實參時,用戶不可能在函數(shù)中政變對應(yīng)實參的值。所以本題中在main()函數(shù)f(a)語句中結(jié)構(gòu)體實參a作為值,傳遞給函數(shù)f(Ac)中的形參c:這種值傳遞的方式不會對實參a產(chǎn)生任何影響,所以結(jié)構(gòu)體實參a的值不會發(fā)生變化。12、有以下程序structS{inta,b;)data[2]={10,100,20,200);main(){structSp=data[1];printf("%d\n",++(p.a(chǎn)));}程序運行后的輸出結(jié)果是A、11B、20C、21D、10標準答案:C知識點解析:在題目中定義了結(jié)構(gòu)體s類型的數(shù)組變量data,并對其賦初值。在程序中定義了指向結(jié)構(gòu)體S類型的變量p,并把數(shù)組data的第:個元素data[1]的值賦給它,所以此時成員變量p.a(chǎn)的值等于20,在輸出時分別加1,所以輸入結(jié)果為選項A。13、設(shè)有定義:structcomplex{intreal,unreal;)datal={1,8),data2;則以下賦值語句中錯誤的是A、data2=(2,6);B、data2=data1:C、data2.real=datal.real;D、data2.real=data1.unreal;標準答案:A知識點解析:本題主要考查結(jié)構(gòu)體變量的定義與初始化。題目中定義了complex類型的結(jié)構(gòu)體變量data1和data2,并對data1進行了初始化??梢杂靡粋€結(jié)構(gòu)體變量對另一個結(jié)構(gòu)體變量賦值,用一個結(jié)構(gòu)體變量的成員對另一個結(jié)構(gòu)體變量的成員賦值。14、有以下程序structS{intn;inta[201;};voidf(structS*p){intij,t;for(i=0;in一1;i++)for(j=i+1.jnIj++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[i]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&s);for(i=0;iA、10,9,8,7,6,5,4,3,2,1,B、2,3,1,6,8,7,5,4,10,9,C、10,9,8,7,6,l,2,3,4,5,D、1,2,3,4,5,6,7,8,9,10,標準答案:D知識點解析:voidf(structS*p)函數(shù)的功能使用了結(jié)構(gòu)體指針變量實現(xiàn)對一維數(shù)組的元素從小到大排序。用關(guān)系表達式p->a[i]>p->a[j]實現(xiàn)一維數(shù)組中相鄰元素兩兩比較,大的元素向后移,小的元素向前移。在主函數(shù)中語句f(&s):的功能實現(xiàn)對結(jié)構(gòu)體變量s中一維數(shù)組的元素從小到大的捧序,所以循環(huán)語句的輸出結(jié)果為1,2,3,4,5,6,7,8,9,10。15、有以下程序#include#includetypedefstruct{charname[9];charsex;intscore[2];)STU;STUf(STUa){STUb={"Zhao",’m’,85,90};inti;strcpy(a.name,b.name);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.name,d.sex,d.score[0],d.score[1]);printf("%s,%c,%d,%d,",c.name,c.sex,c.score[0],C.score[1]);}A、Zhao,m,85,90,Zhao,m,85,90B、Qian,f,95,92,Qian,f,95,92C、Zhao,m,85,90,Qian,f,95,92D、Qian,f,95,92,Zhao,m,85,90標準答案:C知識點解析:在C語言中,函數(shù)實參與形參之間數(shù)據(jù)的傳遞是傳值,也就是說在用實參調(diào)用形參時,是把實參的值拷貝一份給形參,而實參的值并不變化,仍是原來的值。所以對于本題來說,在主函數(shù)中調(diào)f(e)后,實參e的值并不會變化,仍是原值。在函數(shù)f中把局部變量b的值依次返回給變量d。16、程序中已構(gòu)成如下圖所示的不帶頭結(jié)點的單向鏈表結(jié)構(gòu),指針變量s、p、q均已正確定義,并用于指向鏈表結(jié)點,指針變量S總是作為頭指針指向鏈表的第一個結(jié)點。若有以下程序段:q=s;s=s->next;p=s;while(p->next)p=p->next;p->next=q;q->next=NULL;該程序段實現(xiàn)的功能是A、尾結(jié)點成為首結(jié)點B、首結(jié)點成為尾結(jié)點C、刪除首結(jié)點D、刪除尾結(jié)點標準答案:B知識點解析:分析程序可知,程序段首先讓q指向鏈表的首結(jié)點,s指向鏈表的第二結(jié)點,p此時指向鏈表的第二個結(jié)點。然后在while循環(huán)中,當p的后繼結(jié)點非空時,讓p指向鏈表的最后一個結(jié)點。退出循環(huán)。然后讓尾結(jié)點指向首結(jié)點,并使首結(jié)點的后繼結(jié)點為NULL。所以最終實現(xiàn)鏈表的首結(jié)點成為尾結(jié)點。17、有以下結(jié)構(gòu)體說明、變量定義和賦值語句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];則以下scanf函數(shù)調(diào)用語句有錯誤的是A、scanf("%d",&s[0].a(chǎn)ge);B、scanf("%c",&(ps->sex));C、scanf("%s",s[0].name);D、scanf("%d",ps->age);標準答案:D知識點解析:程序段定義了結(jié)構(gòu)體變量數(shù)組s[5]和指針變量ps.然后ps指向數(shù)組s[5]中的第一個元素,因而ps->age引用s[0].a(chǎn)ge。因為在輸入scanf()函數(shù)中,第2個參數(shù)應(yīng)該表示為地址變量,而選項A表示的值.而不是一個地址值。18、若有以下語句typedefstructS{intg;charh;)T;以下敘述中正確的是A、可用S定義結(jié)構(gòu)體變量B、S是struct類型的變量C、T是structS類型的變量D、可用T定義結(jié)構(gòu)體變量標準答案:D知識點解析:本題考查typedef,T是structS的新名稱,因此可用T定義結(jié)構(gòu)體變量,但是T并不是變量,只是slructS的新名稱。19、有以下程序#include#includeStructA{inta;charb[10];doublec;};structAf(structAt);main(){structAa={1001,"ZhangDa",1098.0};a=fla);printf("%d,%s,%6.1fln",a.a(chǎn),a.b,a.c);}structAf(StructAt){t.a(chǎn)=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returnt;}程序運行后的輸出結(jié)果是A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0標準答案:B知識點解析:在主函數(shù)中定義結(jié)構(gòu)體A的變量a,并對其賦初值,再調(diào)用函數(shù)f(a),在函數(shù)f(a)qp對結(jié)構(gòu)體變量a的各個成員重新進行了賦值操作,并把其值返回在屏幕上輸出。20、設(shè)有以下語句typedefstructTT{charc;inta[4];}CIN;則下面敘述中正確的是A、TT是struct類型的變量B、可以用TT定義結(jié)構(gòu)體變量C、CIN是structTT類型的變量D、可以用CIN定義結(jié)構(gòu)體變量標準答案:D知識點解析:C語言允許用typedef說明一種新的類型名,說明新類型名的語句為一般形式為:typedef。類型名標識符在此,“類型名”必須是此語句之前已有定義的類型標識符?!皹俗R符”是一個用戶定義標識符,用作新的類型名。typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。在本題中用typedef定義CIN為TT的一種新的類型名.因而可以用它定義一個結(jié)構(gòu)體變量。21、有以下程序#includestructord{intx,y;)dt[2]={1,2,3,4);main(){structord*p=dt;printf("%d,++(p->x));printf("%d\n",++(p->y));}程序運行后的輸出結(jié)果是A、4,1B、2,3C、3,4D、1,2標準答案:B知識點解析:在題目中定義了結(jié)構(gòu)體ord類型的數(shù)組變量dt,并對其賦初值。在程序中定義了指向結(jié)構(gòu)體ord類型的指針變量p,并且它指向變量數(shù)組dI的第一個元素dt[0]。所以此時成員變量p->x的值等于1,成員變量p->y的值等于2,在輸出時分別加1。所以輸出結(jié)果為選項B。22、有以下程序段structst{intx;int*y;)*pt;inta[]={1,2},b[]={3,4};structstc[2]={10,a,20,b};pt=c;以下選項中表達式的值為11的是A、pt->xB、*pt->yC、++pt->xD、(pt++)->x標準答案:C知識點解析:由題目的已知條件可知,pt指向結(jié)構(gòu)體數(shù)組c[2]的第一元素c[0],所以pt->x=10,執(zhí)行自加運算后為11。23、有下列程序:structS{intn;inta[20];};voidflint*a,intn){inti;for(i=0;iA、3,4,2,7,9,8,6,5,11,10B、2,3,1,6,8,7,5,4,10,9,C、2,4,3,9,12,12,11,11,18,9,D、1,2,3,6,8,7,5,4,10,9,標準答案:C知識點解析:voidf[int*a,intn)函數(shù)的功能是對數(shù)組a[]的每一個元素加上其下標的值。所以在main()函數(shù)中f(s.a(chǎn),s.n)語句會調(diào)用f(in*a,intn)函數(shù),此時指針a指向數(shù)組s.a(chǎn)={2,3,1,6,8,7,5,4,10,9},n=10:然后執(zhí)行for(i=0;i24、有下列程序:#include#includetypedefstruct{charname[9];charsex;floatscore[2];)STU;STUf(STUa){STUb={"Zhao",’m’,85.0,90.0);inti;strcpy(a.name,b.name);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.Of\n",d.neme,d.sex,d.score[0],d.score[1]);}程序的運行結(jié)果是A、Qian,m,85,90B、Zhao,f,95,92C、Zhao,m,85,90D、Qian,f,95,92標準答案:D知識點解析:f()函數(shù)的功能是對形參a的各個成員用結(jié)構(gòu)體變量b的各個成員進行賦值后,然后返回變量a。在主函數(shù)中調(diào)用f[c)函數(shù)時,將STU類型的結(jié)構(gòu)體變量c的值傳遞給形參a,函數(shù)f()在對a的各個成員進行重新賦值后,再將返回變量a的值傳給d,最后輸出結(jié)構(gòu)變量d的各個成員的值。25、假定已建立以下鏈表結(jié)構(gòu),且指針p和q已指向如圖所示的節(jié)點:則以下選項中可將q所指節(jié)點從鏈表中刪除并釋放該節(jié)點的語句組是A、p=q->next;free(q);B、p=q;free(q);C、(*p).next=(*q).next;free(p);D、p->next=q*>next;free(q);標準答案:D知識點解析:本題考查了在線性鏈表刪除一個節(jié)點的療法,要刪除q所指向的節(jié)點,只需要把q所指向的節(jié)點的前一個節(jié)點中的后繼指針指向q所指向的節(jié)點的下一個節(jié)點即可,即p->next=q->next。再釋放q所指向的節(jié)點,即flree(q)。26、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a(chǎn),a.b,a.c);}voidf(structAt){t.a(chǎn)=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結(jié)果是A、1002,ChangRong,1202.0B、1001,ChangRong,1098.0C、1001,ZhangDa,1098.0D、1002,ZhangDa,1202.0標準答案:C知識點解析:本題主要考查是的函數(shù)調(diào)用時參數(shù)之間的傳遞問題。在C語言中參數(shù)之間的傳遞是傳值,也就是把實參的值復(fù)制一份傳遞給形參,由實參的值不發(fā)生變化。所以對于本題來說,在主函數(shù)中執(zhí)行f(a),把結(jié)構(gòu)體變量a的值復(fù)制一份傳遞給形參變量t,而實參變量a的值保持不變。國家二級C語言(結(jié)構(gòu)體、共用體、位運算及文件操作)機試模擬試卷第4套一、選擇題(本題共26題,每題1.0分,共26分。)1、有以下定義和語句:structworkers{intnum;charname[20];charc;struct{intday;intmonth;intyear;)s;};structworkersw,*pw;pw=&w;能給w中year成員賦1980的語句是A、w.year=1980;B、pw->year=1980;C、w.s.year=1980;D、*pw.year=1980;標準答案:C知識點解析:本題主要考查的是結(jié)構(gòu)體變量的嵌套定義,也就是說一個結(jié)構(gòu)體變量也可以是一個結(jié)構(gòu)體。在本題中works這個結(jié)構(gòu)體中包含了結(jié)構(gòu)體s。所以對結(jié)構(gòu)體變量w中year成員的引用是w.s.year。2、有以下程序#includestrutcttt{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知識點解析:程序定義了結(jié)構(gòu)體類型tt,其成員包括一個整型數(shù)據(jù)x和指向其自身結(jié)構(gòu)的指針變量v。程序在定義結(jié)構(gòu)體數(shù)組a的同時對其進行了初始化。其元素a[0]的成員y被賦值為元素a[1]的地址,a[1].y被賦值為a[2]的地址,a[2].y被賦予a[3]的地址,a[3].y被賦予a[0]的地址。這就形成了一個單向的循環(huán)鏈表,每個元素的指針成員都指向下一個元素的地址。在主函數(shù)中,通過一個for循環(huán)語句,輸出該鏈表前2個節(jié)點數(shù)值成員的值,即a[0].x和a[1].x。3、有以下程序#include#include"string.h"typedefstruct{charname[9];charsex;floatscore[2];)STU;voidf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];}程序的運行結(jié)果是A、Qian,m,85,90B、Zhao,m,85,90C、Zhao,f,95,92D、Qian,f,95,92標準答案:B知識點解析:本題考查在結(jié)構(gòu)體中函數(shù)的實參和形參的傳遞,調(diào)用f(c)后,實參傳向形參,進行f()函數(shù)功能的實現(xiàn),但程序中沒有返回語句,故形參不能將值傳回實參,它們值的傳遞具有不可逆性,所與printf輸出的還是c中實參的值。4、設(shè)有定義:struct{charmark[12];intnum1;doublenum2;}t1,t2;若變量均已正確賦初值,則以下語句中錯誤的是A、t2.num1=t1.numl:B、t2.mark=t1.mark;C、t1=t2;D、t2.num2=t1.num2;標準答案:B知識點解析:這個題目主要涉及到結(jié)構(gòu)體的定義與賦值操作。根據(jù)題意結(jié)構(gòu)體變量t1,t2的成員變量mark是字符數(shù)組,對于字符數(shù)組之間的賦值操作應(yīng)該使用循環(huán)語句對每個字符進行賦值,而選項A)是用數(shù)組名實現(xiàn)字符數(shù)組之間的賦值操作,是錯誤的。5、有以下程序structA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n.",a.a(chǎn),a.b,a.c);}voidf(StELlctAt){t.a(chǎn)=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序運行后的輸出結(jié)果是A、1002,ChangRong,1202.0B、1001,ZhangDa,1098.0C、1001,ChangRong,1098.0D、1002,ZhangDa,1202.0標準答案:B知識點解析:在主函數(shù)中定義結(jié)構(gòu)體A的變量a,并對其賦初值,再調(diào)用函數(shù)f(a),形參t接收實參的數(shù)據(jù),在函數(shù)f(t)中對結(jié)構(gòu)體變量t的各個成員進行了賦值操作,需要注意的,形參和實參之間是數(shù)據(jù)傳遞,因此對形參的操作對實參不產(chǎn)生影響,因此在主函數(shù)輸出仍然輸出變量a的數(shù)據(jù)6、若有以下程序struerstu{char*name,qencter;intscore;};main(){structstua={NULL,’m’,290},b;a.name=(char*)malloc(10);strcpy(a.name,"Zhao");b=a;b.gender=’f’;b.score=350;strcpy(b.name,"Qian");printf("%s,%c,%d,",a.name,a.gender,a.score);printf("%s,%c,%d\n",b.name,b.gender,b.score);}則程序的輸出結(jié)果是A、Zhao,m,290,Qian,f,350B、Qian,f,350,Qian,f,350C、Zhao,m,290,Zhao,f,350D、Qian,m,290,Qian,f,350標準答案:D知識點解析:主函數(shù)中定義結(jié)構(gòu)體類型structstu,有三個成員,第一個成員為字符指針變量。主函數(shù)中為stu類型變量a賦值,首先為a.name成員分配存儲空間,存入數(shù)據(jù)。b=a;語句執(zhí)行完畢以后,a和b的各個成員值相同,需要注意的是b.name和a.name成員都
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年家具定制款式與功能協(xié)議
- 2025年家電定期檢修與保養(yǎng)合同
- 2025年分期付款裝飾材料購買協(xié)議
- 2025年親情傳承與撫養(yǎng)遺贈協(xié)議
- 2025年定值商標保護保險合同
- 二零二五版機床設(shè)備采購與生產(chǎn)自動化升級合同3篇
- 2025版小區(qū)房屋裝修節(jié)能環(huán)保技術(shù)實施合同2篇
- 2025年度紙箱包裝設(shè)計大賽贊助承包協(xié)議4篇
- 二手鋼結(jié)構(gòu)買賣協(xié)議(2024年版)3篇
- 2025版建設(shè)工程委托擔保合同范本3篇
- 2025年度杭州市固廢處理與資源化利用合同3篇
- 2024年安徽省公務(wù)員錄用考試《行測》真題及答案解析
- 部編版二年級下冊《道德與法治》教案及反思(更新)
- 充電樁項目運營方案
- 退休人員出國探親申請書
- 高中物理競賽真題分類匯編 4 光學(xué) (學(xué)生版+解析版50題)
- 西方經(jīng)濟學(xué)-高鴻業(yè)-筆記
- 幼兒園美術(shù)教育研究策略國內(nèi)外
- 2024屆河南省五市高三第一次聯(lián)考英語試題及答案
- 孕婦學(xué)校品管圈課件
- 《愿望的實現(xiàn)》交流ppt課件2
評論
0/150
提交評論