國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共290題)_第1頁
國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共290題)_第2頁
國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共290題)_第3頁
國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共290題)_第4頁
國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共290題)_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級C語言機試(C語言程序設(shè)計)模擬試卷1(共9套)(共290題)國家二級C語言機試(C語言程序設(shè)計)模擬試卷第1套一、選擇題(本題共35題,每題1.0分,共35分。)1、要求通過while循環(huán)不斷讀入字符,當讀入字母N時結(jié)束循環(huán)。若變量已正確定義,以下正確的程序段是A、while(ch=getchar()=’N’)printf("%c",ch);B、while(ch=getchar()=="N")printf("%c",ch);C、while((ch=getchar())!=’N’)printf("%c",ch);D、while((ch=getchar())==’N’)printf("%c",ch);標準答案:C知識點解析:while循環(huán)的執(zhí)行過程如下:①計算while后面圓括號中表達式的值,當值為非0時,執(zhí)步驟②;當值為0時,執(zhí)行步驟④:②執(zhí)行循環(huán)體一次:③轉(zhuǎn)去執(zhí)行步驟①;④退出循環(huán)。在選項C)中,表達式(ch=getchar())!=’N’表示輸入的字符不等于N,如果這個條件表達式成立,則執(zhí)行循環(huán)體,打印輸出輸入的字符。如果這個條件表達式不成立,即輸入的字符等于N,則退出循環(huán)。2、若有以下程序main(){inta=-2,b=0;while(a++)++b:printf("%d,%d\n",a,b);}則程序的輸出結(jié)果是A、0,2B、1,2C、1,3D、2,3標準答案:B知識點解析:循環(huán)體執(zhí)行兩次,第一次表達式a++值為-2,a的值為-1,執(zhí)行循環(huán)體++b,b值為1,第二次表達式a++值為-1,a的值等于0,執(zhí)行++b,b值為2,第三次判斷條件a++,表達式值為0,不執(zhí)行循環(huán)體,但是條件判斷以后,a的值為1。3、由以下while構(gòu)成的循環(huán),循環(huán)體執(zhí)行的次數(shù)是intk=0;while(k=1)k++;A、一次也不執(zhí)行B、執(zhí)行一次C、無限次D、有語法錯,不能執(zhí)行標準答案:C知識點解析:循環(huán)條件表達式為賦值表達式k=1,因此循環(huán)執(zhí)行無限次。4、有以下程序main(){inta=-2,b=0;while(a++&&++b);printf("%d,%d\n",a,b);}程序運行后輸出結(jié)果是A、0,3B、1,2C、1,3D、0,2標準答案:B知識點解析:循環(huán)體為空,共執(zhí)行2次。第一次變量a初值為-2,b初值為0,表達式a++&&++b值為1,同時a的值為-1,b的值為1,第二次循環(huán)條件判斷以后,a的值為0,b的值2,執(zhí)行循環(huán)體空,第三次判斷條件表達式值為0,不執(zhí)行循環(huán)體,而a的值為1,但是表達式a++的值為0,因此不計算表達式++b的值,b的值仍為2。5、關(guān)于do循環(huán)體while(條件表達式);以下敘述中正確的是A、循環(huán)體的執(zhí)行次數(shù)總是比條件表達式的執(zhí)行次數(shù)多一次B、條件表達式的執(zhí)行次數(shù)總是比循環(huán)體的執(zhí)行次數(shù)多一次C、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)無關(guān)D、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)一樣標準答案:D知識點解析:do…while語句先執(zhí)行語句,后判斷表達式的值。故do…Vwhile語句又稱“直到型”循環(huán)結(jié)構(gòu)。由于是先執(zhí)行后判斷,因此do…while語句的循環(huán)語句至少被執(zhí)一次,循環(huán)條件至少判斷一次。6、以下不構(gòu)成無限循環(huán)的語句或語句組是A、n=0;do{++n;}while(n<=0);B、n=0;while(1){n++;}C、n=10;while(n);{n--;}D、for(n=0,i=1;;i++)n+=i;標準答案:A知識點解析:選項B)中while(1)永遠為真所以進入死碥環(huán),選項C)中whiIe(n=10)同理,選項D)中for循環(huán)沒有循環(huán)限定條件也將進入無限循環(huán),只有選項A)中while(n<=0)循環(huán)判定成立,循環(huán)將不進入無限循環(huán)。7、有以下程序main(){inti=5;do{if(i%3=1)if(i%5==2){printf("*%d",i);break;}i++;}while(i!=0);printf("\n");}程序的運行結(jié)果是A、*3*5B、*5C、*7D、*2*6標準答案:C知識點解析:由于循環(huán)變量i的初值等于5,所以第一、二次進入do…while循環(huán)語句時,條件語句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;}不執(zhí)行,只執(zhí)行i++語句。當i=7時,滿足條件語句if(i%3==1),if(i%5==2){printf("*%d",i);break;},所以輸出*7,結(jié)束循環(huán)。8、若變量已正確定義,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其輸出結(jié)果是A、0,0B、1,1C、0,1D、程序進入無限循環(huán)標準答案:C知識點解析:do…while循環(huán)的執(zhí)行過程如下:①執(zhí)行do后面的循環(huán)體中的語句。②計算while后一對圓括號中表達式的值。當值為非0時,轉(zhuǎn)去執(zhí)行步驟①:當值為0時,執(zhí)仃步驟③。③退出do…whiIe循環(huán)。對于本題變量i的初始值等于“0”,接著執(zhí)行do后而的循環(huán)體中的語句,輸出變量i的值0。再判斷while后面括號中表達式i++的值,其值為0,所以循環(huán)結(jié)束。此時變量i的值經(jīng)過自加已經(jīng)變?yōu)?,所以再次輸出i值“1”。9、若有以下程序main(){inta=-2,b=0;do{++b;}while(a++);printf("%d,%d\n",a,b);}則程序的輸出結(jié)果是A、0,2B、1,2C、1,3D、2,3標準答案:C知識點解析:由于a的初始值等于-2,所以while循環(huán)語言執(zhí)行二次結(jié)束,第一次a=-2,b=1,然后判斷循環(huán)條件a++非零,執(zhí)行第二次循環(huán)體a=-1,b=2,判斷循環(huán)條件非零,執(zhí)行循環(huán)體a=0,b=3,判斷循環(huán)條件為0,此時變量a的值等于1。10、有以下程序main(){inta=3;do{printf("%d,",a-=2);}while(!(--a));printf("\n");}程序運行后的輸出結(jié)果是A、1,B、1,-2,C、3,0,D、1,0標準答案:B知識點解析:循環(huán)體執(zhí)行兩次。首先輸出a=1,然后判斷表達式!(--a),a為0,循環(huán)條件表達式值為1,執(zhí)行第二次循環(huán)體,輸出a=-2。判斷循環(huán)條件表達式值為0,循環(huán)退出。11、若i和k都是int類型變量,有以下for語句for(i=0,k=-1;k=1;k++)printf("*****\n");下面關(guān)于語句執(zhí)行情況的敘述中正確的是A、循環(huán)體執(zhí)行兩次B、循環(huán)體執(zhí)行一次C、循環(huán)體一次也不能執(zhí)行D、構(gòu)成無限循環(huán)標準答案:D知識點解析:本題考查for循環(huán)。本題的for循環(huán)初始條件為i=0,k=1:循環(huán)結(jié)束條件為k=1永遠為真(k不為0),因此循環(huán)不能結(jié)束。12、若k是int類型變量,且有以下for語句1for(k=-1;k<0;k++)printf("****\n");下面關(guān)于語句執(zhí)行情況的敘述中正確的是A、循環(huán)體執(zhí)行兩次B、循環(huán)體執(zhí)行一次C、循環(huán)體一次也不執(zhí)行D、構(gòu)成無限循環(huán)標準答案:B知識點解析:本題考查for循環(huán)的使用。在程序中,for循環(huán)的初始值k=-1,循環(huán)結(jié)束條件是k<0,每次循環(huán)k增加1,第一一次進入循環(huán)的時候k為-1,k小于0,執(zhí)行打印,然后k的值變成0,下次進入循環(huán)k不小于0,循環(huán)結(jié)束,因此循環(huán)只能執(zhí)行一次。13、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}以下關(guān)于程序段執(zhí)行情況的敘述,正確的是A、當產(chǎn)生的隨機數(shù)n為4時結(jié)束循環(huán)操作B、當產(chǎn)生的隨機數(shù)n為1和2時不做任何操作C、當產(chǎn)生的隨機數(shù)n為0時結(jié)束程序運行D、for循環(huán)語句固定執(zhí)行8次標準答案:C知識點解析:rand()函數(shù)功能為產(chǎn)生一個隨機數(shù),rand()%5,則產(chǎn)生0~4之間的任意隨機數(shù),當產(chǎn)生的隨機數(shù)n為0時,執(zhí)行“casc0:exit(0)”這條語句,結(jié)束程序的運行。14、有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的運行結(jié)果是A、963B、852C、741D、875421標準答案:B知識點解析:y的值的初值為9,所以在for循環(huán)中,當y的值為9、6或3時,if語句的條件成立,執(zhí)行輸出句,輸出表達式--y的值。因為自減符號在y的前面,所以首先y的自減1,然后再輸出y的值,故輸出結(jié)果為852。15、有以下程序#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf(“m=%d\n",m);}程序運行后的輸出結(jié)果是A、m=2B、m=4C、m=5D、m=6標準答案:D知識點解析:這道題考查了for循環(huán)的嵌套應(yīng)用。對于外層for循環(huán)來說,變量i從1增到2,循環(huán)執(zhí)行2次。當變量i的值等于1時,對于內(nèi)層for循環(huán)水說,變量i從3減到1,求得變量m的值等于6。當變量i的值等于2時,第一遍執(zhí)行內(nèi)層for循壞,變量i的值等于3,那么i*j的值等于6,其值大于3,這時執(zhí)行break語句,退出內(nèi)層for循環(huán)的執(zhí)行。所以程序輸出變量m的值為6。16、有以下程序#include<stdio.h>voidmain(){intc=0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}printf("%d\n",c);}A、9B、7C、5D、3標準答案:D知識點解析:在這段程序中,整型變量c的初始值賦為0,在第一次執(zhí)行for循環(huán)語句時,因為此時變量k的值等于1,所以在switch語句中首先執(zhí)行default語句,給變量c的值加1,因為在default語句后面沒有break語句,所以就會接著執(zhí)行case2這條語句,再給變量c的值加1,其值變?yōu)?,這時退出switch語句塊,進入第二次for循環(huán),此時k的值等于2,就會執(zhí)行switch語句塊中的case2這條語句,再給變量c的值加1,這時變量c的值就是3,此時退出switch語句塊,循環(huán)變量k的值加1,成為3,此時已不再滿足循環(huán)條件,執(zhí)行程序中的最后一條語句,把變量c的值再屏幕上輸出。17、有以下程序#include<stdio.h>main(){inti,j;for(i=3;i>=1;i--){for(j=1;j<=2;j++)printf("%d",i+j);printf("\n");}}程序的運行結(jié)果是A、432543B、233445C、453423D、233423標準答案:C知識點解析:本題中的外層行變量i從3逐次遞減到1,共輸出3行。內(nèi)層列變量i每次從1遞增到2,每行輸出2個數(shù)字。所以當i=3時,第一行輸出i+1=4i+2=5,即45;當i=2時,第一行輸出i+1=3和i+2=4,即34;當i=1時,第一行輸出i+1=2和i+2=3,即23。18、設(shè)變量己正確定義,則以下能正確計算f=n!的程序段是A、f=0;for(i=1;i<=n;i++)f*=i;B、f=1;for(i=1;i<n;i++)f*=i;C、f=1;for(i=n;i>1;i++)f*=i;D、f=1;for(i=n;i>=2;i--)f*=i;標準答案:D知識點解析:本題主要考查for循環(huán)的使用。題目要求計算階乘n!,通過for循環(huán)來實現(xiàn),循環(huán)變量i可以從1到n(包括n)或者從n到1,在循環(huán)體內(nèi)做累乘。選項A)中,累乘變量的初值為0,最終計算結(jié)果也為0;選項B)中循環(huán)次數(shù)為n-1次,累乘結(jié)果少乘了n;選項C)是死循環(huán);選項D)正確。19、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}執(zhí)行后的輸出結(jié)果是A、24B、5C、32D、40標準答案:C知識點解析:在for循環(huán)體中,先判斷自變量i能否被5整除,然后自加兩次,最后判斷i能否被8整除。當for循叫執(zhí)行到第30次時,i的值為30能被5整除,然后i經(jīng)過兩次自加1運算,值變?yōu)?2,能被8整除,放執(zhí)行“printf("%d"i):”語句,即輸出32。20、有以下程序#include<stdio.h>voidmain(){charb,c;inti;b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序運行后的輸出結(jié)果是A、ABCDEFB、aBcDeFC、abcdefD、AbCdEf標準答案:D知識點解析:循環(huán)變量i從0依玖遞增到5,依次輸出字母A,b,C,d,E,f。21、有以下程序main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序運行后的輸出結(jié)果是A、8,11B、10,14C、7,11D、9,18標準答案:B知識點解析:在這段程序中變量a的初值等于1,變量b的初值等于2。第1次執(zhí)行for循環(huán)語句后,變量a的值等于3,變量b的值等于3。第2次執(zhí)行for循環(huán)后,變量a等于6,變量b的值等于7。第3次執(zhí)行for循環(huán)后,變量a等于9,變量b的值等于14。第4次執(zhí)行for循環(huán)后,變量a等于10,這時退出for循環(huán),此時變量b的值等于14。因而程序輸出變量a,b的值分別為10,14。22、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}A、當產(chǎn)生的隨機數(shù)n為4時結(jié)束循環(huán)操作B、當產(chǎn)生的隨機數(shù)n為1和2時不做任何操作C、當產(chǎn)生的隨機數(shù)n為0時結(jié)束程序運行D、for循環(huán)語句固定執(zhí)行8次標準答案:C知識點解析:rand()函數(shù)功能為產(chǎn)生一個隨機數(shù),rand()%5,則產(chǎn)生0-4之間的任意隨機數(shù),當產(chǎn)生的隨機數(shù)n為0時,執(zhí)行case0:exit(0)這條語句,結(jié)束程序的運行。23、若有以下程序main(){inta=6,b=0,c=0;for(;a;){b+=a;a-=++c;}printf("%d,%d,%d\n",a,b,c);}則程序的輸出結(jié)果是A、1,14,3B、0,18,3C、0,14,3D、0,14,6標準答案:C知識點解析:循環(huán)體執(zhí)行三次,a初值6,第一次執(zhí)行循環(huán)體,b=6,a=5。繼續(xù)執(zhí)行循環(huán)體,b=11,a=3,第三次執(zhí)行循環(huán)體,b=14,a=0,循環(huán)退出。24、若有以下程序main(){inta=6,b=0,c=0;for(;a&&(b==0);){b+=a;a-=c++;}printf("%d,%d,%d\n",a,b,c);}則程序的輸出結(jié)果是A、6,0,0B、5,6,0C、6,6,1D、5,6,1標準答案:C知識點解析:循環(huán)條什a&&(b==0),a非零同時b==0則執(zhí)行循環(huán)體,否則退出。循環(huán)體執(zhí)行一次,此時b=6,a=6,c=1。25、以下敘述中正確的是A、對于“for(表達式1;表達式2;表達式3)循環(huán)體”首先要計算表達式2的值,以便決定是否開始循環(huán)B、對于“for(表達式1;表達式2;表達式3)循環(huán)體”,只在個別情況下才能轉(zhuǎn)換成while語句C、只要適當?shù)匦薷拇a,就可以將do-while與while相互轉(zhuǎn)換D、如果根據(jù)算法需要使用無限循環(huán)(即通常所稱的“死循環(huán)”),則只能使用while語句標準答案:C知識點解析:while和do…while語句和for語句很容易進行相互轉(zhuǎn)換。對于for循環(huán)的執(zhí)行過程如下:①計算表達式1。②計算表達式2。若其值為非0,轉(zhuǎn)步驟③;若其值為0,轉(zhuǎn)步驟⑤。③執(zhí)行一次for循環(huán)體。④計算表達式3,轉(zhuǎn)向步螺②。⑤結(jié)束循環(huán)。任何循環(huán)都有可能成為死循環(huán)。26、若有以下程序#includechar*a="you":charb[]="WelcomeyoutoChina!";main(){inti,j=0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a==b[i]){p=a;for(j=i;*p!=’\0’;j++){if(*p!=b[j])break;p++;}if(*p==’\0’)break;}}printf("%s",&b[i]);}則程序的輸出結(jié)果是A、youtoChina!B、toChina!C、meyoutoChina!D、China!標準答案:A知識點解析:程序中循環(huán)部分的主要功能是,在字符串b中尋找是否含有子串a(chǎn),如果含有則退出,此時i為子串a(chǎn)在字符串b中第一次出現(xiàn)的位置,因此最后的輸出函數(shù)則從第i個字符開始一直輸出到字符串的末尾。27、以下程序段中的變量已正確定義for(i=0;i<4:i++,i++)for(k=1;k<3;k++);printf("*");程序段的輸出結(jié)果是A、********B、****C、**D、*標準答案:D知識點解析:本題考查循環(huán)語句,題中第二個(內(nèi)層)for循環(huán)之后有一個分號,意思是每次循環(huán)種的操作為空,不執(zhí)行任何操作。冉循環(huán)結(jié)束后執(zhí)行printf語句,即只打出一個*。28、有以下程序main(){inti,j;for(i=1;i<4;i++){for(j=i;j<4;j++)printf(“%d*%d=%d”,i,j,i*j);printf("\n");}}A、1*1=11*2=21*3=32*1=22*2=43*1=3B、1*1=11*2=22*2=41*3=32*3=63*3=9C、1*1=11*2=21*3=32*2=42*3=63*3=9D、1*1=12*1=22*2=43*1=33*2=63*3=9標準答案:C知識點解析:外層for循環(huán)自變量i從1開始,每次循環(huán)后增1,直到i等于3結(jié)束。對于外層循環(huán)自變量i的每一個值,內(nèi)層循環(huán)的自變量i每次從i開始,每次循環(huán)后增1,直到j(luò)等于3結(jié)束。所以往每次外循環(huán)開始后,內(nèi)層循環(huán)在一行先打印i*j=兩個乘數(shù)的積,然后回車換行,下次循環(huán)從下一行開始打印輸出結(jié)果。29、有以下程序#include<stdio.h>main(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);}程序的運行結(jié)果是A、0B、1C、2D、3標準答案:B知識點解析:在程序中,內(nèi)層循環(huán)判斷條件為““j<=i”,而i的初值為3,故當外層循環(huán)變量i的值為1和2時,內(nèi)層循環(huán)體都不會被執(zhí)行。只有當i和j都等于3時循環(huán)才會執(zhí)行一次。因為m的值為55對3求余結(jié)果為1。30、以下敘述中正確的是A、循環(huán)發(fā)生嵌套時,最多只能兩層B、三種循環(huán)for,while,do-while可以互相嵌套C、循環(huán)嵌套時,如果不進行縮進形式書寫代碼,則會有編譯錯誤D、for語句的圓括號中的表達式不能都省略掉標準答案:B知識點解析:在一個循環(huán)體內(nèi)又完整包含了另一個循環(huán),稱為循環(huán)嵌套。循環(huán)的嵌套可以多層,但每一層循環(huán)在邏輯上必須是完整的。for循環(huán)、while循環(huán)、do-while循環(huán)可以互相嵌套,但每層循環(huán)在邏輯上必須完整。而在for語句中,for語句中的表達式可以部分或全部省略,但兩個“;”不可省略。31、有以下程序main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}程序執(zhí)行后的輸出結(jié)果是A、x=4B、x=6C、x=12D、x=8標準答案:D知識點解析:在第1次外層for循環(huán)中,首先x++得到x=1。進入到內(nèi)層for循環(huán),只有循環(huán)變量i的值為奇數(shù)時,變鞋x的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量x的值自加兩次,當退出內(nèi)層for循環(huán)時,x=3,然后執(zhí)行x++,得到x=4。在進入執(zhí)行第2次外層for循環(huán)中,首先x++得到x=5。進入到內(nèi)層fof循環(huán),只有循環(huán)變量j的值為奇數(shù)時,變量x的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量x的值自加1兩次,當退出內(nèi)層for循環(huán)時,x=7,然后執(zhí)行x++,得到x=8,所以打印輸出變量x的值為8。32、有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}prinff("%d,",--x);}}程序的運行結(jié)果是A、8,7,5,2,B、9,7,6,4,C、7,4,2,D、8,5,4,2,標準答案:D知識點解析:“x--”表示先執(zhí)行程序,再令x的值減1;而“--x”表示令x的值減1,再執(zhí)行程序。x=8時,x%3為非0值,執(zhí)行語句“{printf("%d,”,x--);continue;}”,輸出“8,”,此時經(jīng)過x--,x的值變?yōu)?,跳出此次循環(huán);執(zhí)行“x--,x=6,x%3=0”,后面語句不執(zhí)行,執(zhí)行語句“prjnt("%d,",--x);”,輸出“5,”;執(zhí)行for語句中的x--,得到x=4,判斷x%3,輸出“4,”,執(zhí)行兩次x--后,x=2,執(zhí)行“{printf("%d,",x--);continue;}”后,輸出“2,”;然后執(zhí)行兩次x--后,x=0,不符合“x>0”,循環(huán)全部結(jié)束。33、以下敘述中正確的是A、continue語句的作用是:使程序的執(zhí)行流程跳出包含它的所有循環(huán)B、break語句只能用在循環(huán)體內(nèi)和switch語句體內(nèi)C、在循環(huán)體內(nèi)使用break語句和continue語句的作用相同D、break語句只能用于switch語句體中標準答案:B知識點解析:只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句。continue語句的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)體中continue語句后面的語句,立刻進行下一次的循環(huán)條件判斷,可以理解為僅結(jié)束本次循環(huán)。而break語句可以使程序流程跳出switch語句體,也可用break語句在循環(huán)結(jié)構(gòu)中終止循環(huán)體。34、以下敘述中正確的是A、break語句不能用于提前結(jié)束for語句的本層循環(huán)B、continue語句使得整個循環(huán)終止C、使用break語句可以使流程跳出switch語句體D、在for語句中,continue與break的效果是一樣的,可以互換標準答案:C知識點解析:用break語句可以使程序流程跳出switch語句體,也可用break語句在循環(huán)結(jié)構(gòu)中終止循環(huán)體,從而提前結(jié)束循環(huán),而continue語句的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)體中continue語句后面的語句,立刻進行下一次的循環(huán)條件判斷,可以理解為僅結(jié)束本次循環(huán)。35、以下敘述中正確的是A、當break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時,其作用是跳出該switch語句體,并中止循環(huán)體的執(zhí)行B、只能在循環(huán)體內(nèi)和switch語句體內(nèi)使用break語句C、continue語句的作用是:在執(zhí)行完本次循環(huán)體中剩余語句后,中止循環(huán)D、在while語句和do-while語句中無法使用continue語句標準答案:B知識點解析:break語句可以使程序流程跳出switch語句體,也可用break語句在循環(huán)結(jié)構(gòu)中終止循環(huán)體,從而提前結(jié)束循環(huán),而當break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時,其作用只是跳蹦該switch語句體,并不能中止循環(huán)體的執(zhí)行。若想強行終l}=循環(huán)體的執(zhí)行,可以在循環(huán)體中,但并不在switch語句中設(shè)置break語句,滿足某種條件則跳出循環(huán)體。continue語句的作用是結(jié)束本次循環(huán),在while和do-while循環(huán)中,continue語句使得流程直接跳到循環(huán)控制條件的測試部分,然后決定循環(huán)是否繼續(xù)進行。國家二級C語言機試(C語言程序設(shè)計)模擬試卷第2套一、選擇題(本題共27題,每題1.0分,共27分。)1、若變量已正確定義,則以下語句的輸出結(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。2、若有以下程序main(){intc;c=10^5;printf("%d\n",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。3、若有以下程序main(){intc;c=13|5;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。4、有以下程序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.5、有以下程序main(){inti=1;i=i^i;printf("%d\n",i);}程序運行后的輸出結(jié)果是A、-1B、0C、1D、7標準答案:B知識點解析:按位異或(^)的運算規(guī)則是:參與運算的兩個運算數(shù)中相對應(yīng)的二進制位上,若數(shù)相同,則該位的結(jié)果為0;若數(shù)不同,該位的結(jié)果為1。本題中表達式i^i的值必為0,因為i的各個位置的二進制值相同。6、下面關(guān)于位運算符的敘述,正確的是A、#表示“按位異或”的運算B、‖表示“按位或”的運算C、~表示“按位異或”的運算D、&表示“按位與”的運算標準答案:D知識點解析:C語言提供了6種位運算符,各種位運算符的含義見下表:7、以下敘述中正確的是A、打開一個己存在的文件并進行了寫操作后,原有文件中的全部數(shù)據(jù)必定被覆蓋B、在一個程序中當對文件進行了寫操作后,必須先關(guān)閉該文件然后再打開,才能讀到第1個數(shù)據(jù)C、C語言中的文件是流式文件,因此只能順序存取數(shù)據(jù)D、當對文件的讀(寫)操作完成之后,必須將它關(guān)閉,否則可能導致數(shù)據(jù)丟失標準答案:D知識點解析:在C語言中,有兩種對文件的存取方式;順序存取和直接存??;如果以“a”的方式對一個已打開的文件進行寫操作后,則原有文件中內(nèi)容將保存,新的數(shù)據(jù)寫在原有內(nèi)容之后。如果以“a+”的方式為讀和寫而打開一個文件,則既可以對文件進行讀,也可以對文件進行寫,而且在讀和寫操作之間不必關(guān)閉文件,可以從頭開始讀。當對文件的讀(寫)操作完成之后,必須將它關(guān)閉。8、下列關(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ù)的存放形式分為文本文件和二進制文件。9、下面選項中關(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,可以用此類型名來定義文件指針?!靖袷健縁ILE*指針變量名【說明】FILE是一個存儲文件信息的結(jié)構(gòu)體類型的變量。注意不要和文件位置指針混淆,在文件內(nèi)部有一個位置指針,用以指示文件內(nèi)部的當前讀寫位置。使用fgete函數(shù),每讀寫一次,該指針均向后移動,它不需在程序中定義說明,而是由系統(tǒng)自動設(shè)置的。而文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。fscanf函數(shù)可以向文本文件和二進制文件輸入數(shù)據(jù)。10、設(shè)fp已定義,執(zhí)行語句fp=fopen(“file”,“w”);后,以下針對文本文件file操作敘述的選項中正確的是A、寫操作結(jié)束后可以從頭開始讀B、只能寫不能讀C、可以在原有內(nèi)容后追加寫D、可以隨意讀和寫標準答案:B知識點解析:本題考查文件操作。fopen的mode參數(shù)有多種類型:r以只讀方式打開文件、r+以可讀寫方式打開文件、rb+以讀寫方式打開一個二進制文件、w以只寫方式打開文件、w+以讀寫方式打開文件、wb+讀寫方式打開二進制文件。11、以下函數(shù)不能用于向文件中寫入數(shù)據(jù)的是A、fwriteB、fputcC、ftellD、fprintf標準答案:C知識點解析:本題考查文件操作。ftell函數(shù)返回文件指針的當前位置,其他的都寫文件函數(shù)。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、abcloB、abcC、helloabcD、abchello標準答案:B知識點解析:本題考查文件打開方式。格式:文件指針名=fopen(文件名,使用文件方式)需要注意的是:用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。14、有以下程序#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]);}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、執(zhí)行以下程序后,test.txt文件的內(nèi)容是(若文件能正常打開)#includemain(){FILE*fb;char*s1="Fortran",*s2="Basic";if((fb=fopen("test.txt","wb"))==NULL){printf("Can’topentest.txtfile\n");exit(1);}fwrite(s1,7,1,fb);/*把從地址s1開始的7個字符寫到fb所指文件中*/fseek(fb,OL,SEEK_SET);/*文件位置指針移到文件開頭*/fwrite(s2,5,1,fb));fclose(fb);}A、BasicanB、BasicFortranC、BasicD、FortranBasic標準答案:A知識點解析:本題主要考查文件的基本操作。在main函數(shù)中,首先打開text.txt文件,然后通過fwrite函數(shù)把s1字符串寫到文件中,接下來通過fseek函數(shù)把文件指針移動到文件開始,再調(diào)用fwrite函數(shù)把s2字符竄寫到文件中,s2的長度小于s1的長度,因此第二次寫的時候會覆蓋第一次寫的部分內(nèi)容,程序運行后test.text中內(nèi)容為Basican。16、讀取二進制文件的函數(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ù)塊的指針;對fread來說,它是內(nèi)存塊的首地址,輸入的數(shù)據(jù)存入此內(nèi)存塊中;17、有下列程序:#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=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)容進行操作。18、以下敘述中錯誤的是A、gets函數(shù)用于從終端讀入字符串B、getchar函數(shù)用于從磁盤文件讀入字符C、fputs函數(shù)用于把字符串輸出到文件D、fwrite函數(shù)用于以二進制形式輸出數(shù)據(jù)到文件標準答案:B知識點解析:本題考查的是輸入輸出函數(shù)的使用,gets和getchar函數(shù)用于從標準輸入設(shè)備終端讀入字符串和字符,并非從磁盤文件讀入,fputs用于把字符串輸出到文件,fwrite用于以二進制形式輸出數(shù)據(jù)到文件。19、有以下程序#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(char*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。20、有下列程序:#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、14B、123456C、1234D、12標準答案:B知識點解析:用文件函數(shù)fopen打開d2.dat文件并把數(shù)組a[6]中的元素分兩行寫入到d2.dat文件中,關(guān)閉文件。然后再次打開文件d2.dat,用fscanf()函數(shù)讀取文件d2.dat中的數(shù)據(jù),因為每行沒有分隔符,所以每一行會被認為是一個完整的數(shù),并存入到變量k和n中,輸出變量k和n的值為123456。21、有下列程序:#includemain(){FILE*fp;inta[10]={1,2,3,0,0},i;fp=fopen("d2.dat","wb");fwtite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);fclose(fp);fp=fopen("d2.dat","rb");fread(a,sizeof(int),10,fp);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,0,0,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)用兩次fwrite函數(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},最后的輸出結(jié)果為“1,2,3,0,0,1,2,3,0,0”。22、設(shè)fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數(shù)feof(fp)的返回值為A、’\0’B、0C、NULLD、非0值標準答案:D知識點解析:ANSIC提供的feof函數(shù)的功能是判斷fp所指的文件的位置是否已達到文件尾,如果達到文件尾,則feof函數(shù)的值為1,否則為0,表示文件尚未結(jié)束。23、有以下程序#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、abc28C、abcD、因類型不一致而出錯標準答案:B知識點解析:在程序中首先把字符串a(chǎn)bc寫入到文件myfile.dat中,然后再把整數(shù)28追加到字符串a(chǎn)bc的后面,最后把文件myfile.dat的內(nèi)容讀入到字符串str中,并把其內(nèi)容輸出。24、以下程序依次把從終端輸入的字符存放到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是待輸出的某個字符,它可以是一個字符常量,也可以是一個字符變量;fp是文件指針。fputc(ch,fp)的功能是將字符ch寫到文件指針fp所指的文件中。如果輸出成功,fputc函數(shù)返回所輸出的字符;如果輸出失敗,則返回一個EOF值。EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1。25、以下程序用來統(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)==NULLC、!feof(fp)D、feof(fp)==0標準答案:C知識點解析:feof函數(shù)用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fp))的值為1,否則為0。題目橫線用于判斷文件不結(jié)束,讀出字符。文件不結(jié)束feof值為0,若執(zhí)行循環(huán)則應(yīng)用表達式!feof(fp)。26、下面關(guān)于“EOF”的敘述,正確的是A、EOF的值等于0B、文本文件和二進制文件都可以用EOF作為文件結(jié)束標志C、EOF是在庫函數(shù)文件中定義的符號常量D、對于文本文件,fgetc函數(shù)讀入最后一個字符時,返回值是EOF標準答案:C知識點解析:EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1。EOF用作文件結(jié)束標志,在二進制或者文本文件內(nèi)部有一個位置指針,用以指示文件內(nèi)部的當前讀寫位置。使用fgetc函數(shù),每讀寫一次,該指針均向后移動,27、若fp已定義為指向某文件的指針,且沒有讀到該文件的末尾,則C語言函數(shù)feof(fp)的函數(shù)返回值是A、0B、非0C、-1D、EOF標準答案:A知識點解析:feof用來判斷文件是否結(jié)束。如果遇到文件結(jié)束,函數(shù)feof(fp)的值為1,否則為0。國家二級C語言機試(C語言程序設(shè)計)模擬試卷第3套一、選擇題(本題共26題,每題1.0分,共26分。)1、設(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ù)組之間的賦值操作,是錯誤的。2、有以下程序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(structAt){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ù)3、若有以下程序structstu{char*name,gender;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");primf("%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成員都保存了同一段內(nèi)存的地址,因此當為變量b賦值的時候,同樣更改了a的name成員,而其他成員由于有單獨的存儲空間而不會發(fā)生改變。4、若有以下程序typedefstructstu{char*name,gender;intscore;}STU;voidf(char*p){p=(char*)malloc(10);strcpy(p,"Qian");}main(){STUa={NULL,’m’,290},b;a.name=(char*)malloc(10);strcpy(a.name,"Zhao");b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",a.name,a.gendera.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、Qian,m,290,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:D知識點解析:函數(shù)f(char*p)的主要功能申請字符串的存儲空間,然后存入字符串"Qian",但當程序調(diào)用結(jié)束以后,形參指針變量p撤銷,存儲的字符串地址丟失,而不能更改實參指針的值。主函數(shù)中結(jié)構(gòu)體變量定義同時賦初值,初始情況其name指針成員存儲空,而后語句為其分配存儲空間,存入字符串"Zhao"。執(zhí)行b=a;語句后,b的數(shù)據(jù)和a的數(shù)據(jù)相同,調(diào)用函數(shù)f以后,b的name成員的值沒變。5、若有以下程序typedefstructstu{charname[10],gender;intscore;}STU;voidf(STUa,STUb){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.name,b.gender,score);}則程序的輸出結(jié)果是A、Zhao,m,290,Zhao,m,290B、Zhao,m,290,Qian,f,350C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:B知識點解析:函數(shù)f(STua,STUb)的主要功能是為把結(jié)構(gòu)體變量a的值存放到b中,然后輸出b中各個成員的值。土函數(shù)中調(diào)用函數(shù)f(a,b),輸出賦值以后b的數(shù)據(jù),實際為a{"Zhao",’m’,290}的數(shù)據(jù),函數(shù)調(diào)用結(jié)束,形參a和b撤銷,流程到主函數(shù)輸出b{"Qian",’f’,350}的數(shù)據(jù)。6、若有以下程序typedefstructstu{charname[10],gender;intscore;}STU;voidf(char*P){strcpy(P,"Qian");}main(){STUa={"Zhao",’m’,290},b;b=a;f(b.name);b.gender=’f’;b.score=350;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,Zhao,m,290B、Qian,f,350,Qian,f,350C、Zhao,m,290,Qian,f,350D、Zhao,m,290,Zhao,f,350標準答案:C知識點解析:主函數(shù)中結(jié)構(gòu)體變量定義同時賦初值。執(zhí)行b=a;語句后,b的數(shù)據(jù)和a的數(shù)據(jù)相同,調(diào)用函數(shù)f(b.name),形參指針p接收實參b.name的地址,此時p和b.name指向同一個存儲空間,流程轉(zhuǎn)到f執(zhí)行,p指向的存儲空間存放字符串"Qian",流程結(jié)束返回主函數(shù)。主函數(shù)中變量b的其他成員存放數(shù)據(jù)。因此a的數(shù)據(jù){"Zhao",’m’,290},b的數(shù)據(jù)為{"Qian",’f’,350}。注意本題結(jié)構(gòu)體STU類型變量a和b中的name成員為數(shù)組,不是指針,它具有自己的存儲空間。7、為了建立如圖所示的存儲結(jié)構(gòu)(即每個結(jié)點含兩個域,data是數(shù)據(jù)域,next是指向結(jié)點的指針域),則在處應(yīng)填入的選項是Structlink{chardata;}node;A、structlink*next;B、linknext;C、link*next;D、structlinknext;標準答案:A知識點解析:單鏈表為動態(tài)分配的存儲空間,在分配時,每個結(jié)點之間可以是不連續(xù)的(結(jié)點內(nèi)是連續(xù)的)。結(jié)點之間的聯(lián)系用指針實現(xiàn),即在結(jié)點結(jié)構(gòu)中定義一個成員項用來存放下一結(jié)點的首地址,這個用于存放地址的成員,常把它稱為指針域,該指針為了保持鏈表中結(jié)點的地址,因此其基類型和結(jié)點的類型相同,選項為A。8、若有以下程序段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知識點解析:選項A中表達式++(p->n)為前綴自加表達式,p->n和a[0].n等價,其值為5,前綴自加后值為6。選項B中表達式(*p).n和選項D的表達式p->n含義相同,表示取結(jié)構(gòu)指針p所指向的成員,因此值為5。選項C中表達式p->n++為后綴自加表達式,相當于(p->n)++,表達式值為5。9、以下敘述中正確的是A、結(jié)構(gòu)體類型中的成分只能是C語言中預(yù)先定義的基本數(shù)據(jù)類型B、在定義結(jié)構(gòu)體類型時,編譯程序就為它分配了內(nèi)存空間C、結(jié)構(gòu)體類型中各個成分的類型必須是一致的D、一個結(jié)構(gòu)體類型可以由多個稱為成員(或域)的成分組成標準答案:D知識點解析:結(jié)構(gòu)體類型,它是由若干“成員”組成,每一個成員可以是一個基本數(shù)據(jù)類型或者是一個構(gòu)造類型。在說明和使用之前必須先定義它,也就是構(gòu)造它。定義一個結(jié)構(gòu)的一般形式為:struct結(jié)構(gòu)名{成員列表);成員列表由若干個成員組成,對每個成員也必須作類型說明,其形式為:類型說明符成員名;可以說明類型不同的各個成員。10、以下敘述中正確的是A、結(jié)構(gòu)體類型中的各個成分均不能是數(shù)組或指針B、結(jié)構(gòu)體類型的變量,不能在聲明結(jié)構(gòu)體類型組成時一起定義C、使用typedef定義新類型名后,新類型名與原類型名實際上是等價的D、元素為結(jié)構(gòu)體類型的數(shù)組,只能在聲明過結(jié)構(gòu)體類型之后,單獨進行定義標準答案:C知識點解析:C語言允許用typedef說明一種新類型名,typedef語句的作用僅僅是用“標識符”來代表已存在的“類型名”,并未產(chǎn)生新的數(shù)據(jù)類型,原有類型名依然有效。結(jié)構(gòu)體變量定義有下面三種形式:(1)先定義結(jié)構(gòu),再說明結(jié)構(gòu)變量。(2)在定義結(jié)構(gòu)類型的同時說明結(jié)構(gòu)變量。(3)直接說明結(jié)構(gòu)變量。11、以下敘述中正確的是A、函數(shù)的返回值不能是結(jié)構(gòu)體類型B、函數(shù)的返回值不能是結(jié)構(gòu)體指針類型C、在調(diào)用函數(shù)時,可以將結(jié)構(gòu)體變量作為實參傳給函數(shù)D、結(jié)構(gòu)體數(shù)組不能作為參數(shù)傳給函數(shù)標準答案:C知識點解析:和普通變量相似,結(jié)構(gòu)體變量也可以作為函數(shù)實參或者形參,函數(shù)的返回值也可以是結(jié)構(gòu)體類型。12、以下敘述中正確的是A、結(jié)構(gòu)體變量的地址不能作為實參傳給函數(shù)B、結(jié)構(gòu)體數(shù)組名不能作為實參傳給函數(shù)C、即使是同類型的結(jié)構(gòu)體變量,也不能進行整體賦值D、結(jié)構(gòu)體中可以含有指向本結(jié)構(gòu)體的指針成員標準答案:D知識點解析:一個結(jié)構(gòu)體變量包含若干成員,這些成員可以是數(shù)值類型、字符類型、數(shù)組類型,也可以是指針類型,甚至可以是正在定義的結(jié)構(gòu)體類型指針。用結(jié)構(gòu)體變量作實參時,采取的是“值傳遞”的方式,將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部順序傳遞給形參。形參也必須是同類型的結(jié)構(gòu)體變量。結(jié)構(gòu)體數(shù)組作為參數(shù)時,采取了“地址傳遞”的方式,形參須為同類型的結(jié)構(gòu)指針或者形參結(jié)構(gòu)數(shù)組。13、設(shè)有如下的說明和定義struct{inta;char*s;)x,*p=&x;x.a(chǎn)=4;x.s=hello";則以下敘述中正確的是A、語句++p->a;的效果是使P增1B、(p++)->a與p++->a都是合語法的表達式,但二者不等價C、語句*p->s++;等價于(*p)->s++;D、語句++p->a;的效果是使成員a增1標準答案:D知識點解析:p->a得到D指向的結(jié)構(gòu)體變量中的成員a的值。p->a++得到p指向的結(jié)構(gòu)體變量中的成員a的值,用完該值后使p->a加1。++p->a得到p指向的結(jié)構(gòu)體變量中的成員a的值使之加1(先加)。由此可見指向運算符->優(yōu)先級高于++,因此*p->s++相當于*(p->s)++,結(jié)合性自右至左,因此p++->a和(p++)->a等價。14、有以下程序structS{inta;intb;};main(){structSa,*p=&a;a.a(chǎn)=99;printf("%d\n",_______);}程序要求輸出結(jié)構(gòu)體中成員a的數(shù)據(jù),以下不能填入橫線處的內(nèi)容是A、a.a(chǎn)B、*p.a(chǎn)C、p->aD、(*p).a(chǎn)標準答案:B知識點解析:如果p指向結(jié)構(gòu)體,那么下面三種形式都可以訪問結(jié)構(gòu)體的成員:結(jié)構(gòu)體變量.成員名、(*p).成員名、p->成員名。15、若已建立以下鏈表結(jié)構(gòu),指針P、S分別指向如圖所示結(jié)點則不能將S所指節(jié)點插入到鏈表末尾的語句組是A、S->next=’\0’;p=p->next;P->next=s;B、p=p->next;S->nex=p;p->next=s;C、p=p->next;S->next=p->next;p->next=s;D、p=(*p).next;(*S).next=(*p).next;(*p).next=s;標準答案:B知識點解析:選項A中首先p后移,s的后繼指針指向p,p的后繼指向s,在s和最后結(jié)點之間形成了圓圈,、無法完成題中的操作。16、有以下程序#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,Sun,m,98,99B、Zhao,m,85,90,Sun,m,98,99C、Qian,f,95,92,Zhao,m,85,90D、Zhao,m,85,90,Qian,f,95,92標準答案:C知識點解析:在主函數(shù)中,定義了結(jié)構(gòu)體STU數(shù)組c[2],并對其賦初始值。執(zhí)行f(c)時,在函數(shù)f()中,把結(jié)構(gòu)體變量b的值賦給了c[1]。17、以下敘述中錯誤的是A、函數(shù)的返回值類型不能是結(jié)構(gòu)體類型,只能是簡單類型B、只要類型相同,結(jié)構(gòu)體變量之間可以整體賦值C、可以通過指針變量來訪問結(jié)構(gòu)體變量的任何成員D、函數(shù)可以返回指向結(jié)構(gòu)體變量的指針標準答案:A知識點解析:函數(shù)的返回值類型可以是結(jié)構(gòu)體類型。結(jié)構(gòu)體變量之間可以相互復制。18、有以下程序main(){unsignedchara=8,c;C=a>>3;printf("%d\n",c);}程序運行后的輸出結(jié)果是A、16B、32C、1D、0標準答案:C知識點解析:在程序中對無符號字符變量a的值執(zhí)行右移3位運算后,相當于a/8,其值等于1,再賦給變量c。19、有以下程序main(){unsignedchara=2,b=4,c=5,d:d=a|b;d&=c;printf("%d\n",d);}程序運行后的輸出結(jié)果是A、3B、5C、4D、6標準答案:C知識點解析:本題考查位運算,|為按位或運算,&為按位與運算,按位與(&)運算符的作用是:把參加運算的兩個運算數(shù)按對應(yīng)的二進制位分別進行“與”運算,當兩個相應(yīng)的位都為1時,該位的結(jié)果為1;否則為0。按位或(1)的運算規(guī)則是:參加運算的兩個運算數(shù)中,只要兩個相應(yīng)的二進制位中一個為1,則該位的運算結(jié)果即為1;只有當兩個相應(yīng)位的數(shù)都為0時,該位的運算結(jié)果才為0。首先d=2|4值為6,d=6&5值為4。20、下面選項中關(guān)于位運算的敘述正確的是A、位運算符都需要兩個操作數(shù)B、左移運算的結(jié)果總是原操作數(shù)據(jù)2倍C、右移運算時,高位總是補0D、位運算的對象只能是整型或字符型數(shù)據(jù)標準答案:D知識點解析:位運算則是以位(bit)一級進行的運算,位運算符中除“~”以外,均為二元運算符,即要求兩側(cè)各有一個運算量,運算量只能是整型或字符型的數(shù)據(jù),不能為實型數(shù)據(jù)。其中右移時,右端(低位)移出的二進制數(shù)舍棄,左端(高位)移入的二進制數(shù)分兩種情況:對于無符號整數(shù)和正整數(shù),高位補0;對于負整數(shù),高位補1。而左移運算在沒有溢出的前提下每移動一位,相當于原數(shù)據(jù)的2倍。21、變量a中的數(shù)據(jù)用二進制表示的形式是01011101,變量b中的數(shù)據(jù)用二進制表示的形式是11110000.若要求將a的高4位取反,低4位不變,所要執(zhí)行的運算是A、a^bB、a|bC、a&bD、a<<4標準答案:A知識點解析:本題考查位運算功能。題目要求將a的高4位取反,低4位不變,即操作完成之后a的值應(yīng)為10101101。選項A使用異或運行,相同為0,相異為1,計算結(jié)果為10101101;選項B使用位或運算,計算結(jié)果為11111101;選項C使用位與運算,計算結(jié)果為01010000;選項D是把a左移4位,計算結(jié)果為11010000。22、若有以下程序段intr=8:printf("%d\n",r>>1);輸出結(jié)果是A、8B、4C、16D、2標準答案:B知識點解析:定義了整型變量r,其值等于8,在輸出語句中,把變量r的值向右移動一位,在C語言中把變量向右移動一位,相當于其值除以2,所以在題中把變量r的值8除2,得到其值等于4。23、有以下程序main(){inta=1,b=2,c=3,x;x=(a^b)&c;’printf("%d\n",x);}程序的運行結(jié)果是A、1B、2C、3D、0標準答案:C知識點解析:1、2、3的二進制形式分別為00000001、00000010、00000011。首先計算1與2的或運算,即1^2=(00000001)^(00000010)=00000011,再將其與3進行“與”運算,結(jié)果為(00000011)&(00000011)=00000011,即十進制數(shù)3。24、有以下程序#includemain(){inta=2,b;b=a<<2;printf("%d\n",b);}A、4B、6C、8D、2標準答案:C知識點解析:表達式a<<2,把a向左移動2位,相當于擴大4倍。25、有以下程序#includemain(){chara=4;printf("%d\n",a=a<<1);}A、8B、16C、40D、4標準答案:A知識點解析:本題主要考查按位右移運算。a=4的二進制為00000100,a<<1后為00001000,其值為十進制數(shù)值8。26、有以下程序#includemain(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}A、11B、6C、21D、1標準答案:C知識點解析:本題考查位操作運算符?!埃迹肌笔亲笠七\算符,左移一位相當于乘2,“|”是按位或運算符。5左移兩位相當于乘4,得到20,20的二進制數(shù)是00010100,和00000001進行按位或操作得到00010101,即十進制的21。國家二級C語言機試(C語言程序設(shè)計)模擬試卷第4套一、選擇題(本題共35題,每題1.0分,共35分。)1、若有以下程序voidf(intx){if(x>=10){printf("%d-",x%10);f(x/10);}elseprintf("%d",x);}main(){intz=123456;f(z);}則程序的輸出結(jié)果是A、6-5-4-3-2-1B、6-5-4-3-2-1-C、1-2-3-4-5-6D、1-2-3-4-5-6-標準答案:A知識點解析:函數(shù)f的主要功能為逆置輸出整數(shù)x的每一位數(shù)據(jù),如果z的值為123456,逆置輸出的結(jié)果為6-5-4-3-2-1。2、以下與函數(shù)fseek(fp,OL,SEEK_SET)有相同作用的是A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)標準答案:D知識點解析:本題主要考查文件系IO函數(shù)的使用,fscck函數(shù)用于設(shè)置文件指針的位置,feof函數(shù)用于判斷是否已經(jīng)到了文件結(jié)束,itell函數(shù)返回文件指針的當前位置,fgetc從文件讀取一個字符,rewind函數(shù)將文件指針重新指向文件開始。題目當中fseek(fp,OL,SEEK_SET)表示把文件指針移動到文件的開始位置0,和rewind函數(shù)功能一致。3、以下程序的功能是:給r輸入數(shù)據(jù)后計算半徑為r的圓面積s。程序在編譯時出錯main()/*Beginning*/{intr;floats;scanf("%d",r);

溫馨提示

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

評論

0/150

提交評論