版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
國家二級C語言(C語言程序設(shè)計)機試模擬試卷1(共9套)(共247題)國家二級C語言(C語言程序設(shè)計)機試模擬試卷第1套一、選擇題(本題共26題,每題1.0分,共26分。)1、fun函數(shù)的功能是:通過鍵盤輸入給x所指的整型數(shù)組所有元素賦值。在下劃線處應(yīng)填寫的是#include<stdio.h>#defineN5Voidfun(intx[N]){intm;for(m=N-l;m>=0;m--)scanf("%d",_______);}A、x+mB、x[m+1]C、x+(m++)D、x[++m]標準答案:A知識點解析:本題考查數(shù)組和scanf函數(shù)的使用。程序通過for循環(huán)來給數(shù)組元素斌值,賦值語句通過調(diào)用scanf函數(shù)來實現(xiàn)。scanf函數(shù)從鍵盤接收數(shù)據(jù),函數(shù)的第二個參數(shù)是數(shù)據(jù)保存的地址,因此選項B)和選項D)不是地址,錯誤。選項A)和選項C)是地址,但是選項C)的m值會++自增,然后for循環(huán)里面又m--自減,會導(dǎo)致死循環(huán),不滿足要求,選項A)正確。2、設(shè)有定義語句intx[61={2,4,6,8,5,7),*p=x,i;要求依次輸出x數(shù)組6個元素中的值不能完成此操作的語句是A、for(i=0;i<6;i++)printf("%2d",*(p++));B、for(i=0;i<6;i++)printf("%2d",*(p+i));C、for(i=0;i<6;i++)printf("%2d",*p++);D、for(i=0;i<6;i++)pfintf("%2d",(*p)++);標準答案:D知識點解析:指針p指向數(shù)組x,因此可以使用p來輸出數(shù)組x的值。選項A)中,*(p++)表示先取出p指向的元素的值,然后p++指向下一個元素,滿足要求;選項B)中*(p+i)每次i的值發(fā)生變化,(p+i)指向x數(shù)組的x[i]元素,因此*(p+i)是取出數(shù)組x的x[i]元素的值,滿足要求;選項C)和選項A)相比,少了括號,由于*運算符的優(yōu)先級比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一個元素,滿足要求;選項D)中(+p)++表示先取出p指向的元素的值,然后該值++,p沒有增加,每次循環(huán)都*p取出的x[0]的值,不滿足要求。3、程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);的輸出結(jié)果是A、123.141593B、123.141593C、12,3.141593D、123.1415930標準答案:A知識點解析:本題考查格式化輸出函數(shù)printf。在printf函數(shù)調(diào)用里面首先輸入整型變量x的值12,然后按照“%8.6f”格式輸出double類型變量y的值,“%8.6f”表示輸出8位,小數(shù)點后輸出6位。4、有以下程序main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();printf(”%c%c%c%cha”,a,b,c,d);}當(dāng)執(zhí)行程序時,按下列方式輸入數(shù)據(jù)(從第1列開始,代表回車,注意:回車也是一個字符)1234則輸出結(jié)果是A、12B、1234C、123D、1234標準答案:C知識點解析:scanf和gecchar函數(shù)分別從鍵盤上讀入一個字符,因此輸入12空格34,則變量a中存放的為1,b中存放2,c中存放空格,d中存放3。5、設(shè)有定義:inta;floatb;執(zhí)行scanf("%2d%f",&a,&b);語句時,若從鍵盤輸入876543.0則a和b的值分別是A、876和543.0B、87和6.0C、87和543.0D、76和543.0標準答案:B知識點解析:在輸入函數(shù)scanf的輸入格式符%2d%f中,2d表示輸入的數(shù)據(jù)的寬度為2,所以當(dāng)從鍵盤輸入876543.0<cR>時,這時把輸入數(shù)字串的前兩位87賦給變量a,然后將緊接著將6按照格式控制符%f的形式賦給變量b,所以b的值為6.000000。6、以下敘述中正確的是A、當(dāng)用scanf從鍵盤輸入數(shù)據(jù)時,每行數(shù)據(jù)在沒按下回車鍵(Enter鍵)前,可以任意修改B、花括號對{}只能用來表示函數(shù)的開頭和結(jié)尾,不能用于其他目的C、空語句就是指程序中的空行D、復(fù)合語句在語法上包含多條語句,其中不能定義局部變量標準答案:A知識點解析:當(dāng)使用scanf函數(shù)從鍵盤輸入數(shù)據(jù)時,每行數(shù)據(jù)在未按下回車鍵之前,可以任意修改。但按下回車鍵后,scanf函數(shù)即接受了這一行數(shù)據(jù),不能再修改。選項A)正確,對于選項B),{}還可以表明復(fù)合語句的開頭結(jié)尾,或者循環(huán)體的開頭結(jié)尾等,選項B)錯誤,而空語句為“:”,不是空行,選項C)錯誤,在復(fù)合語句中可以定義變量為局部變量,選項D)錯誤。7、有以下程序#include<stdio.h>main(){charc1,c2,c3,c4,c5,c6;scanf("%c%c%c%c",&c1,&c2,&c3,&c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf("%c%c\n",c5,c6);}程序運行后,若從鍵盤輸入(從第1列開始)12345678則輸出結(jié)果是A、1256B、1278C、1245D、1267標準答案:C知識點解析:當(dāng)用seanf函數(shù)從鍵盤輸入數(shù)據(jù)時,每行數(shù)據(jù)的未尾按下回車鍵(Enter鍵)之前,可以任意修改。但按下回車鍵putchar(c1)(Enter鍵)之后,scanf函數(shù)即接受了這一行數(shù)據(jù),不能再回去修改。所以本題中,當(dāng)輸入123<CR>時,變量c1、c2、c3的值分別為1、2、3,當(dāng)輸入45678<CR>時,變量c5、c6的值4和5。所以用輸出函數(shù)putehar(c1)輸出1.putchar(c2)輸出2,printf("%c%c\n",c5,c6)輸出45。8、有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);當(dāng)執(zhí)行上述程序段,從鍵盤上輸入555667777abc后,y的值為A、55566.0B、7777.0C、566.0D、566777.0標準答案:C知識點解析:因為在輸入格式控制符中指定變量j的輸入格式控制符為“%2d”,即變量j所占的寬度為2,所以變量i只接收輸入數(shù)據(jù)的前兩位,從第三位開始直到空格之間的輸入整數(shù)都會被保存到變量y中,因為y為浮點型數(shù)據(jù),所以輸出結(jié)果為選項C)。9、以下是if語句的基本形式:if(表達式)語句其中“表達式”A、必須是邏輯表達式B、必須是關(guān)系表達式C、必須是邏輯表達或關(guān)系表達D、可以是任意合法的表達式標準答案:D知識點解析:本題考查if語句,C語言中if語句中的表達式可以是任意合法的表達式。10、有以下程序段inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d\n",a,b,c);程序的輸出結(jié)果是A、a=10b=50c=30B、a=10b=30c=10C、a=10b=50c=10D、a=50b=30c=50標準答案:C知識點解析:本題的程序段首先定義三個整型變量a。b。c,并且其初始值分別等于10,50,30.然后判斷a>b是否成立,如果條件成立,則把b的值賦給a,把c的值賦給b。由a和b的初始值可知,此條件表達式不成立,所以a和b的值保持不變。再執(zhí)行下一條語句,把a的值賦給c,所以c的當(dāng)前值等于10。最后由輸出語句輸出變量a,b,c的當(dāng)前值,分別為10,50,10。11、有以下計算公式若程序前面已經(jīng)在命令行中包含math.h文件,不能夠正確計算上述公式的程序段是A、y=sqrt(x);if(x<0)y=sqrt(-x);B、if(x>=0)y=sqrt(x);elsey=sqrt(-x);C、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(-x);D、y=sqrt(x>=07x:-x);標準答案:A知識點解析:由題意可知計算公式的含義是:當(dāng)x大于等于0時,y值等于x的算*平方根;當(dāng)x小于0時,y值等于x的相反數(shù)的算*平方根。所以選項B)用一個完整的ifelse語句表達了計算公式的含義:選項C)用兩個if語句表達了計算公式的含義;選項D)在求平方根函數(shù)的后面用x≥0?x:-x條件表達式來表達了計算公式的含義。選項A)沒有用C語言語句正確的表達計算公式的含義。12、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4;if((a=2)||(b=1))c=2;if((c==3)&&(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}則程序的輸出結(jié)果是A、2,1,2,-1B、2,2,2,4C、5,1,2,-1D、1,2,3,4標準答案:B知識點解析:代碼中有兩條并列的if語句,第一條if語句執(zhí)行,(a=2)||(b=1)值為1,由于邏輯或表達式,根據(jù)其短路運算規(guī)則,a=2,b=2,即b值不變執(zhí)行if分支c=2。并列的if語句中表達式(c==3)&&(d=-1)為邏輯與表達式,c==3不成立,不考慮d=-1表達式,d為5.邏輯表達式值為0,不執(zhí)行相應(yīng)if分支。13、以下敘述中正確的是A、if語句只能嵌套一層B、不能在else子句中再嵌套if語句C、if子句和else子句中可以是任意的合法的C語句D、改變if-else語句的縮進格式,會改變程序的執(zhí)行流程標準答案:C知識點解析:含else子句的if語句的格式為ifr表達式)語句1else語句2其中if和else是C語言的關(guān)鍵字?!罢Z句1”稱為if子句,“語句2”稱為else子句,這些子句只允許為一條語句,若需要多條語句時,則應(yīng)該使用復(fù)合語句,對于if~fielse語句的嵌套原則是比較自由的。14、若有定義:floatx=1.5;inta=1,b=3,c=2;則正確的switch語句是A、switch(a+b){case1:printf("*\n");case2+1:printf("**\n");}B、switch((int)x);{case1:printf("*\n");case2:printf("**\n");}C、switch(x){case1.0:printf("*\n");case2.0:printf("**\n");}D、switch(a+b){case1:printf("*\n");casec:printf("**\n");}標準答案:A知識點解析:在C語言中,switch()后一對圓括號中的可以是整型表達式或字符表達式。case語句后面的常量表達式的類型必須與switch后圓括號中的表達式類型相同,各case語句標號的值應(yīng)該互不相同,選項B)中switch后括號表達式出錯,選項C)中case后面的常量類型不正確,選項D)中Case后面出現(xiàn)了變量表達式,所以D)不正確。15、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;)case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序運行后的輸出結(jié)果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2標準答案:C知識點解析:本題考查的是用switch語句實現(xiàn)多分支選擇結(jié)構(gòu),首先進入第一個switch(x)判斷,進入case1中進行嵌套判斷,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接著執(zhí)行case2,a自加為2,b自加為1,遇到break,結(jié)束循環(huán),此時a=2,b=1。16、關(guān)于“while(條件表達式)循環(huán)體”,以下敘述正確的是A、循環(huán)體的執(zhí)行次數(shù)總是比條件表達式的執(zhí)行次數(shù)多一次B、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)一樣C、條件表達式的執(zhí)行次數(shù)總是比循環(huán)體的執(zhí)行次數(shù)多一次D、條件表達式的執(zhí)行次數(shù)與循環(huán)體的執(zhí)行次數(shù)無關(guān)標準答案:C知識點解析:while語句中表達式是循環(huán)條件,語句為循環(huán)體。while語句中當(dāng)表達式計算的值為真(非0)時,執(zhí)行循環(huán)體語句。因此條件表達式執(zhí)行的次數(shù)總是比循環(huán)體多一次。17、有以下程序#include<stdio.h>voidmain(){ints;scanf("%d",&s);while(s>0){switch(s){case1:printf("%d",s+5);case2:printf("%d",s+4);break;case3:printf("%d",s+3);default:printf("%d"s+1);break;}scanf("%d",&s);}}運行時,若輸入123450,則輸出結(jié)果是A、66656B、6566456C、66666D、6666656標準答案:B知識點解析:這道試題主要考查了switch和break語句,當(dāng)變量s的值為1時,執(zhí)行case1、case2兩條語句,輸出65;當(dāng)變量s的值為2時,執(zhí)行case2語句,輸出6;變量s的值為3時,執(zhí)行case3、default兩條語句,輸出64;變量s的值為4時,執(zhí)行default語句,輸入5,變量s的值為5時,執(zhí)行default語句,輸出6;變量s的值為0時,程序運行結(jié)束。18、若有以下程序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。19、以下不構(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)中while(n=10)同理,選項D)中for循環(huán)沒有循環(huán)限定條件也將進入無限循環(huán),只有選項A)中while(n<=0)循環(huán)判定成立,循環(huán)將不進入無限循環(huán)。20、有以下程序main(){inta=3;do{printf("%d,",a-=2);}while(!(--a));printf("\n");}程序運行后的輸出結(jié)果是A、1,1B、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)退出。21、有以下程序#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)中,當(dāng)y的值為9、6或3時,if語句的條件成立,執(zhí)行輸出語句,輸出表達式-y的值,因為自減符號在y的前面,所以首先y的自減1,然后再輸出y的值,故輸出結(jié)果為852。22、設(shè)變量已正確定義,則以下能正確計算f=n!的程序段是A、f=0;for(i=;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++)if=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)正確。23、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%(1\n",n);continue;case0:exit(0);}printf("%d\n",n);}A、當(dāng)產(chǎn)生的隨機數(shù)n為4時結(jié)束循環(huán)操作B、當(dāng)產(chǎn)生的隨機數(shù)n為1和2時不做任何操作C、當(dāng)產(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ù),當(dāng)產(chǎn)生的隨機數(shù)n為0時。執(zhí)行case0:exit(0)這條語句,結(jié)束程序的運行。24、若有以下程序#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個字符開始一直輸出到字符串的末尾。25、以下敘述中正確的是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語句中的表達式可以部分或全部省略,但兩個“;”不可省略。26、以下敘述中正確的是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)。國家二級C語言(C語言程序設(shè)計)機試模擬試卷第2套一、選擇題(本題共26題,每題1.0分,共26分。)1、設(shè)有定義:intn1=0,n2,*p=n2,*q=n1;,以下賦值語句中與n2=n1;語句等價的是A、*p;*q;B、p=q;C、*p=n1;D、p=*q;標準答案:A知識點解析:本題考查指針的使甩。指針p和q分別指向變量n2和n1,n2=n1可以用指針來代替,即*p代替n2,*q代替n1。2、以下敘述中正確的是A、賦值語句是一種執(zhí)行語句,必須放在函數(shù)的可執(zhí)行部分B、scanf和printf是C語言提供的輸入和輸出語句C、由printf輸出的數(shù)據(jù)都隱含左對齊D、由printf輸出的數(shù)據(jù)的實際精度是由格式控制中的域?qū)捄托?shù)的域?qū)拋硗耆珱Q定的標準答案:A知識點解析:C語言本身沒有提供輸入輸出語句,但是可以通過調(diào)用標準庫函數(shù)中提供的輸入和輸出函數(shù)來實現(xiàn)輸入和輸出,選項B)錯誤:采用printf輸出數(shù)據(jù),輸出數(shù)據(jù)都默認為右對齊,若要左對齊,可以在格式控制中的“%”和寬度之間加一個“-”號來實現(xiàn),選項C)錯誤;printf的輸出精度由變量的類型決定,與域?qū)挓o關(guān),選項D)錯誤。3、執(zhí)行以下程序段后,w的值為intW=’A’,x=14,y=15;w=((x||y)&(w<’a’));A、-1B、NULLC、1D、0標準答案:C知識點解析:本題考查表達式和邏輯運算。x和y分別為14和15.因此(x||y)的值是真。w的值為’A’,其ASCII值為65,’a’的ASCII值為97,因此(w<’a’)的值為真。表達式w=((x||y)&(w<’a’))的前后兩個值均為真,整個表達式的值為真(1)。4、若有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4:printf("%d%d\n",a,b);}則程序的輸出結(jié)果是A、12B、-1-2C、-12D、1-2標準答案:C知識點解析:對于表達式a%=b%=4為復(fù)合的賦值運算,結(jié)合性自右至左,相當(dāng)于先計算b=b%4,a=a%b;結(jié)果的符號和第一個操作數(shù)的符號相同,因此b為2,a的結(jié)果為-1。5、若變量已正確定義為int型,要通過語句scanf("%d,%d,%d",&a,&b,&c);給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(注:□代表一個空格符)A、□□□1.2,3B、1,□□□2,□□□3C、1.2.3D、1□2□3標準答案:D知識點解析:本題主要考查scanf函數(shù)的輸入格式問題。scanf函數(shù)的一般形式為:scanf(格式控制字符串,地址1,地址2,…);格式控制字符串是由雙撇號括起來的字符串,它主要由兩種類型的字符組成:①格式說明符由“%”和格式字符組成,如‰c,%d,%s,%f等。其作用是將輸入的數(shù)據(jù)轉(zhuǎn)換為指定的格式,賦給scanf的二個參量(是地址1)所指定的內(nèi)存單元(可能一次使用多個)中。格式說明以“%”字符為標志;②普通字符,是需要用戶在輸入時原樣輸入的字符。在本題中格式控制字符串為“%d,%d,%d”,表示按十進制輸入三個數(shù)據(jù)。要求在輸入數(shù)據(jù)時,兩個數(shù)據(jù)間一定以一個逗號“,”作為問隔符。6、若有定義inta;floatb;doublec;程序運行時輸入:345能把值3輸入給變量a、4輸入給變量b、5輸入給變量c的語句是A、scanf("%d%1f%1f’,&a,&b,&c);B、scanf("%d%f%1f",&a,&b,&c);C、scanf("%d%f%f’,&a,&b,&c);D、scanf("%f%1f%1f",&a,&b,&c);標準答案:B知識點解析:scanf函數(shù)進行輸入的時候,默認的輸入間隔為空格、跳格和回車,變量a、b和c均為數(shù)值型數(shù)據(jù),輸入時問隔為空格,因此scanf。函數(shù)的第一個表示格式的參數(shù)之間不用加入分隔符,而要輸入double型數(shù)據(jù),格式控制必須用%1f(或%1e)。否則,數(shù)據(jù)不能正確輸入。7、以下敘述中正確的是A、在scanf函數(shù)的格式串中,必須有與輸入項一一對應(yīng)的格式轉(zhuǎn)換說明符B、只能在printf函數(shù)中指定輸入數(shù)據(jù)的寬度,而不能在scanf函數(shù)中指定輸入數(shù)據(jù)占的寬度C、scanf函數(shù)中的字符串,是提示程序員的,輸入數(shù)據(jù)時不必管它D、復(fù)合語句也被稱為語句塊,它至少要包含兩條語句標準答案:A知識點解析:輸入函數(shù)的調(diào)用格式:scanf(格式控制,輸入項1,輸入項2,…)格式控制的主要作用是指定輸入時的數(shù)據(jù)轉(zhuǎn)換格式,格式串中,必須含有與輸入項一一對應(yīng)的格式轉(zhuǎn)換說明符選項A)正確,在scanf。函數(shù)的格式字符前可以加入一個正整數(shù)指定輸入數(shù)據(jù)所占的寬度.但不可以用實數(shù)指定小數(shù)位的寬度,選項B)錯誤,scanf函數(shù)中的格式控制字符串是為了輸入數(shù)據(jù)用的,無論其中有什么字符,也不會輸出到屏幕上,因此若想在屏幕上輸出提示信息,應(yīng)該首先使用printf函數(shù)輸出,選項C)錯誤,復(fù)合語句還可以是空語句昵,并沒有規(guī)定語句條數(shù),選項D)錯誤。8、以下程序段完全正確的是A、intk,*p=&k;scanf("%d",p);B、int*p;scanf("%d",p);C、int*p;scanf("%d",&p);D、intk,*p;*p=&k;scanf("%d",p);標準答案:A知識點解析:選項B)沒有對指針進行初始化,無效指針。選項C)錯在沒有對指針進行初始化,無效指針。并且在scanf("%d",&p)中無需再進行取地址操作。選項D),語句“*p=&k”的左端*p是指針所指內(nèi)存空間的值,&k是地址,應(yīng)為“p=&k”。9、s1和s2已正確定義并分別指向兩個字符串。若要求:當(dāng)s1所指串大于s2所指串時,執(zhí)行語句S;則以下選項中正確的是A、if(s1>s2)S;B、if(strcmp(s1,s2))S;C、if(strcmp(s2,s1)>0)S;D、if(strcp(s1,s2)>0)S;標準答案:D知識點解析:字符串標記使用strcmp函數(shù),該函數(shù)有兩個參數(shù)分別是需要比較大小的兩個字符串s1和s2,如果s1大于s2則返回值大于0,如果s1小于s2則返回值小于0,否則s1和s2相同返回0。題目要求s1大于s2時執(zhí)行語句s,因此strcmp(s1,s2)的返回值大于0時執(zhí)行s。10、有以下程序main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序運行后的輸出結(jié)果是A、2B、0C、1D、3標準答案:B知識點解析:x=1,if和elseif的條件都不滿足,故y值不改變輸出。11、if語句的基本形式是:if(表達式)語句,以下關(guān)于“表達式”值的敘述中正確的是A、必須是整數(shù)值B、必須是正數(shù)C、可以是任意合法的數(shù)值D、必須是邏輯值標準答案:C知識點解析:在if語句中,表達式可以是在意合法的數(shù)值。當(dāng)其值為非零時,執(zhí)行jf語句,為0時執(zhí)行else語句。12、有以下程序main(){inta=1,b=2,c=3,d=0;if(a=1&&b++=2)if(b!=2||c--!=3)printf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序運行后的輸出結(jié)果是A、1,3,2B、1,2,3C、1,3,3D、3,2,1標準答案:C知識點解析:a,b,c,d初始值分別為1,2,3,0。嵌套的if語句中,第一個if中,表達式a==1&&b++==2值為1,執(zhí)行嵌套的if分支,此時“b=3,b!=2”成立,由于運算符是||,不管后面一個表達式的值是不是1,其整個表達式的值總是l,“c--!=3”表達式不執(zhí)行,最后打印出a,b,c的值是1,3,3。13、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4;if((a:2)&&(b=1))c=2;if((c==3)||(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}則程序的輸出結(jié)果是A、2,1,2,-1B、2,2,2,4C、1,2,3,4D、5,1,2,-1標準答案:D知識點解析:代碼中有兩條并列的if語句,第一條if語句,邏輯與表達式(a=2)&&(b=1)中,a=2,則執(zhí)行b=1,得到該邏輯與表達式值為1,執(zhí)行分支語句c=2:第二條if語句(c==3)||(d=-1),c==3不成立,執(zhí)行d=-1,而后得出整個邏輯與表達式值為1,執(zhí)行分支語句a=5。14、若以下選項中變量全部為整型變量,且已正確是義并賦值,則語法正確的switch語句是A、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}B、switch(a*a+b*b){default:break;case3:y=a+b:break;case2:y=a-b;break;}C、switch(a+9){casec1:y=a-b;casec2:y=a+b;}D、switcha*b{case10:x=a+b;default:y=a-b:}標準答案:B知識點解析:本題考查switch的使用。選項A)中的case0和case4沒有break語句;選項B)正確;選項C)中的case后面不是常量,錯誤;選項D)中switch后面沒有括號。15、有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5)}運行以后的輸出結(jié)果是A、0235B、235C、02356D、2356標準答案:B知識點解析:因為變量的初始值分別為k=5,n=0,所以程序第1次進入循環(huán)時,執(zhí)行default語句,“n=0,k=4”,沒有break語句,因此執(zhí)行case2分支語句,n為2,k為3,程序進行第2次循環(huán),執(zhí)行“case3:n=3,k=2”,輸出n值為3,程序進行第3次循環(huán),執(zhí)行case3這個分支,結(jié)果是“n=5,k=1”,打印出5;這時因為n=5不滿足n<5的循環(huán)條件,因此退出循環(huán),程序運行結(jié)束。16、在嵌套使用if語句時,C語言規(guī)定else總是A、和之前與其具有相同縮進位置的if配對B、和之前與其最近的if配對C、和之前與其最近的且不帶else的if配對D、和之前的第一個if配對標準答案:C知識點解析:本題考查if語句,在C語言中,else總是和之前與其最近的且不帶else的if配對。17、有以下程序main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}執(zhí)行后的輸出結(jié)果是A、2B、4C、1D、死循環(huán)標準答案:C知識點解析:在程序語句中,k的初始值為5,進行第1次while循環(huán)后-k自減l為4,菲0,執(zhí)行循環(huán)體里的printf語句,輸出1,此時k的值變?yōu)?。程序執(zhí)行第2次循環(huán)時,k自減1變?yōu)?,為假,退出while循環(huán)語句。所以程序的最后結(jié)果為1。18、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是A、(E>0||E<0)B、(!E==0)C、(E!=0)D、(E==0)標準答案:A知識點解析:在while(E)中,表達式E可以是C語言中任意合法的條件表達式,但不能為空,由它來控制循環(huán)體是否執(zhí)行。在選項A)中表達式E>0||E<0是一個邏輯表達式。19、有以下程序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初值為o,表達式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。20、若變量己正確定義,有以下程序段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后一對圓括號中表達式的值。當(dāng)值為非0時,轉(zhuǎn)去執(zhí)行步驟①:當(dāng)值為0時,執(zhí)行步驟③。③退出do…while循環(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”。21、若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í)行一次。22、有以下程序#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的值加l,這時變量c的值就是3,此時退出switch語句塊,循環(huán)變量k的值加1,成為3,此時已不再滿足循環(huán)條件,執(zhí)行程序中的最后一條語句,把變量c的值在屏幕上輸出。23、有以下程序#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。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、有以下程序main(){inti,j;for(i=1;i<4;i++){for(=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)的自變量j每次從i開始,每次循環(huán)后增1,直到j(luò)等于3結(jié)束。所以在每次外循環(huán)開始后,內(nèi)層循環(huán)在一行先打印i*j=兩個乘數(shù)的積,然后回車換行,下次循環(huán)從下一行開始打印輸出結(jié)果。26、有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%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í)行語句“{print("%d,",x--):contlnue;}”,輸出“8,”,此時經(jīng)過x--,x的值變?yōu)?,跳出此次循環(huán):執(zhí)行“x--,x=6,x%3=0”,后面語句不執(zhí)行,執(zhí)行語句“printf("%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é)束。國家二級C語言(C語言程序設(shè)計)機試模擬試卷第3套一、選擇題(本題共27題,每題1.0分,共27分。)1、以下能正確定義且賦初值的語句是A、intn1=n2=10:B、charc=32;C、floatf+1.1:D、doublex=12.3E2.5;標準答案:B知識點解析:本題主要考查變量的定義和賦值,C語言中變量的定義形式為:類型說明符變量名=初始值:選項A)中。n1和n2只能單獨賦初值;選項B)正確,定義了一個字符變量c,初值為32;選項C錯誤,初值設(shè)置自身不能參與運算;選項D)中字母E后面的指數(shù)必須是整數(shù)。2、以下選項中,合法的是A、charname[10];name="char";B、charstrl[5]=”pass”,str2[6];str2=str1;C、charstr3[]:{’d’,’e’,’b’,’u’,’g’,’\0’};D、charstr4;str4:"helloworld";標準答案:C知識點解析:本題考查字符數(shù)組。選項A)定義了一個字符數(shù)組name,接下來直接給name賦值字符串是錯誤的;選項B)定義了兩個字符串?dāng)?shù)組str1和str2.str1和str2表示兩個字符串的首地址,直接把str1賦值給str2錯誤;選項C)是正確的;選項D)定義了一個字符變量str4,給字符變量賦值字符串是錯誤的。3、有以下程序段intk=0,a=1,b=2,c=3;k:a<b?b:a;k=k>c?c:k;執(zhí)行程序段后,k的值是A、3B、2C、1D、0標準答案:B知識點解析:本題主要考查條件表達式。k=a<b?b:a中a<b為真,因此k的值為b,即k=2。k=k>c?c:k中k>c為假,k的值為2,4、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);其輸出結(jié)果是A、123.141593B、12,3.141593C、123.1415930D、123.141593標準答案:D知識點解析:本題考查printf語句。printf()函數(shù)是格式化輸出函數(shù),一股用于向標準輸出設(shè)備按規(guī)定格式輸出信息。在編寫程序時經(jīng)常會用到此函數(shù)。printf()函數(shù)的調(diào)用格式為:printf"<格式化字符串>",(參量表>)。其中,“格式化字符串”包括兩部分內(nèi)容:一部分是正常字符,這些字符將按原樣輸出:另一部分是格式化規(guī)定字符,以“%”開始,后跟一個或幾個規(guī)定字符,用來確定輸出內(nèi)容格式。格式化字符串的格式是:%[標志][輸出最小寬度][精度][長度]格式字符①標志:標志字符為-、+、空格等,其意義如下所示:-:結(jié)果左對齊,右邊填空格;+:輸出符號(正號或負號);空格:輸出值為正時冠以空格,為負時冠以負號。②輸出最小寬度:用十進制整數(shù)來表示輸出的最少位數(shù)(包括小數(shù)點在內(nèi)至少要輸出這么多位)。若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出;若實際位數(shù)少于定義的寬度,則右對齊,左邊留空;有負號,左對齊,右邊留空:表示寬度的數(shù)字以0開始,則右對齊,左邊留空。③精度:精度格式符以“.”開頭,后跟十進制整數(shù)。它的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù),若實際位數(shù)大于所定義的精度數(shù),則四舍五入,若不足則補0;如果輸出的是字符,則表示輸出字符的個數(shù),若實際位數(shù)大于所定義的精度數(shù),則截去超過的部分;④長度:長度格式符為h和1兩種。h表示按短整型量輸出,1表示按長整型量輸出。5、有以下程序段intn,t=1,s=0;scanf("%d",&n);do{s=s++;t=t-2;}while(t!=n);為使此程序段不陷入死循環(huán),從鍵盤輸入的數(shù)據(jù)應(yīng)該是A、任意正奇數(shù)B、任意負偶數(shù)C、任意正偶數(shù)D、任意負奇數(shù)標準答案:D知識點解析:本題考查基本輸入和循環(huán)。程序代碼的功能是通過scanf給變量n賦值,在do…while循環(huán)中,s變量自增,t變量每次減2,t的初值為1,循環(huán)執(zhí)行執(zhí)行一次后t的值變成-1,然后是-3、-5…,直到t的值和n的值相同循環(huán)結(jié)束。從t的值的變化可知,t是一個變化的負奇數(shù),因此輸入的n如果是負奇數(shù),則循環(huán)能退出,否則是死循環(huán)。6、若有定義:inta,b;通過語句scanf("%d;%d",&a,&b);能把整數(shù)3賦給變量a,5賦給變量b的輸入數(shù)據(jù)是A、3.5B、35C、3;5D、35標準答案:C知識點解析:在采用scant這個函數(shù)輸入數(shù)據(jù)時,要嚴格遵守其輸入的規(guī)則定義。本題此函數(shù)定義的規(guī)則是,在兩個整數(shù)之間加分號輸入。7、以F敘述中正確的是A、在scanf函數(shù)中的格式控制字符串是為了輸入數(shù)據(jù)用的,不會輸出到屏幕上B、在使用scanf函數(shù)輸入整數(shù)或?qū)崝?shù)時,輸入數(shù)據(jù)之間只能用空格來分隔C、在printf函數(shù)中,各個輸出項只能是變量D、使用printf函數(shù)無法輸出百分號%標準答案:A知識點解析:scanf函數(shù)中的格式控制字符串是為了輸入數(shù)據(jù)用的,無論其中有什么字符,也不會輸出到屏幕上,因此若想在屏幕上輸出提示信息,應(yīng)該首先使用printf函數(shù)輸出,選項A)正確;在使用scanf。函數(shù)輸入整數(shù)或?qū)崝?shù)時,輸入數(shù)據(jù)之問可以用空格、跳格、回車來分隔,選項B)錯誤;printf輸出項不但可以為變量,還可以表達式或者常量,選項C)錯誤:如果要輸出“%”,可以在格式控制中用“%%”表示。將輸出一個“%”,選項D)錯誤。8、若有定義語句:doublex,y,*px,*py;執(zhí)行px=&x;py=&y;正確的輸入語句是A、scanf("%f%f"&x,&y);B、scanf("%f%f",x,y);C、scanf("%1f%le",px,py);D、scanf("%1f%1f",x,y);標準答案:C知識點解析:本題考查scanf語句。scanf()函數(shù)的一般格式為:scanf("格式字符串",輸入項首地址表),對于。aouble類型數(shù)據(jù),輸入時候要加上1修飾,否則會產(chǎn)生錯誤的輸入信息,同時輸入項必須是地址,可以使保存變量地址的指針變量。9、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);當(dāng)執(zhí)行上述程序段,并從鍵盤輸入:name=Lilinum=1001后,name的值為A、name=LiliB、Lilinum=C、name=Lilinum=1001D、Lili標準答案:D知識點解析:在題目中以字符串的形式給字符數(shù)組賦值,所以字符數(shù)組name的值為Lili。10、有以下程序main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\11",a,b,c,d);}程序輸出A、0,0,0,3B、1,1,2,0C、編譯有錯D、0,1,2,0標準答案:C知識點解析:if語句的格式為:if(表達式)語句1else語句2if和else是C語言的關(guān)鍵字。“語句1”稱為if子句,“語句2”稱為else子句,這些子句只允許為一條語句.若需要多條語句時,則應(yīng)該使用復(fù)合語句。因此題目“if(a=1)b=1;c=2;elsed=3:”,if分支有兩條語句,沒構(gòu)成復(fù)合語句。11、設(shè)有定義:inta=1,b=2,c=3;以下語句中執(zhí)行效果與其它三個不同的是A、if(a>b)c=a;a=b;b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a,a=b,b:c;D、if(a>b){c=a;a=b;b=c;}標準答案:A知識點解析:在C語言中,用分號表示一條語句的結(jié)柬;用f}把幾條語句放在一塊表示一個語句塊,其整體表示一個功能。因而在題目給出的四個選項中,選項B)、C)、D)表示的功能相同,而選項A)表示的是一條if語句,兩條賦值語句。12、有以下程序#includemain(){intx;scanf("%d",&x);if(x<=3);elseif(x!=10)printf("%d\n",x);}程序運行時,輸入的值在哪個范圍才會有輸出結(jié)果A、不等于10的整數(shù)B、大于3或等于10的整數(shù)C、小于3的整數(shù)D、大于3且不等10的整數(shù)標準答案:D知識點解析:題目中,雖然else和第二個if不在同一行上,但等價于在同一行上,因此,程序的意思是當(dāng)x大于3且不等于10時打印出來。13、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;else;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}則程序的輸出結(jié)果是A、10B、6C、7D、3標準答案:C知識點解析:程序代碼中有四條并列的if語句,第一條if表達式a!=1不成立,執(zhí)行else分支,r=1;第二條if表達式b==2成立,執(zhí)行r+=2,r=3;第三條if語句c!=3不成立,執(zhí)行else分支,分支為空語句:第四條if分支d==4成立,執(zhí)行該if分支語句,r+=4,r=7。14、以下選項中與if(a==1)a=b;elsea++;語句功能不同的switch語句是A、switch(a){case1:a=b;break;default:a++:}B、switch(a==1){case0:a=b;break;case1:a++;}C、switch(a){default:a++;break;case1:a=b;}D、switch(a==1){case1:a=b;break;case0:a++;}標準答案:B知識點解析:本題主要考查if和switch結(jié)構(gòu)?!癷f(a==1)a=b;elsea++;”代碼段的功能是如果a等于則把b的值賦值給a,否則a++。選項A)使用switch對a進行判斷,如果是1則a=b,跳出switch,如果是其他值則a++;選項B)對a==1的結(jié)果進行switch判斷,如果為0表示a不等于1則a=b,和題目要求不符合;選項C)和選項A)一樣;選項D)和選項Case條件相反,滿足題目要求。15、下列敘述中正確的是A、在switch語句中必須使用defaultB、break語句必須與switch語句中的case配對使用C、在switch語句中,不一定使用break語句D、break語句只能用于switch語句標準答案:C知識點解析:break為C語言關(guān)鍵字,又稱間斷語句。break語句的功能是跳出正在執(zhí)行的條件語句或循環(huán)語句。它可以出現(xiàn)在switch語句中,也可以出現(xiàn)在循環(huán)語句中。defauh是關(guān)鍵字,起標號的作用,代表所有case標號之外的那些標號。default標號可以出現(xiàn)在語句體中任何標號位置上。在switch語句體中也可以沒有default標號。16、若以下選項中的變量a,b,y均己正確定義并賦值,則語法正確的switch語句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}B、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}C、switch(a+9){casea:y=a-b:caseb:y=a+b:}D、switcha*b{case10:y=a+b;default:y=a-b;}標準答案:A知識點解析:使用switch語句直接處理多個分支,其一般形式為:switch(表達式){case常量表達式1:語句1:break;case常量表達式n:語句n:break;defauh:語句n+1;break;}switch語句的執(zhí)行流程是:首先計算switch后面圓括號中表達式的值,然后用此值依次與各個case的常量表達式比較,若圓括號中表達式的值與某個case后面的常量表達式的值相等,就執(zhí)行此case后面的語句,執(zhí)行后遇break語句就退出switch語句;若圓括號中表達式的值與所有case后面的常量表達式都不等,則執(zhí)行default后面的語句n+1,然后退出switch語句。對于選項B),case語句和常量之問沒有空格,而選項C)中的case后面為變量.選項D)中switch后面沒給出圓括號。17、有以下程序#include<stdio.h>main(){inty=10;while(y--);printf("y=%d\n",y);}程序執(zhí)行后的輸出結(jié)果是A、y=0B、y=-1C、y=1D、while構(gòu)成無限循環(huán)標準答案:B知識點解析:在while循環(huán)中每次變量y的值減1,直到其值等于0時退出循環(huán),這時y的再減1變?yōu)?1。18、有以下程序#includemain(){inta=7;while(a--);printf("%d\n",a);}程序運行后的輸出結(jié)果是A、0B、1C、-1D、7標準答案:C知識點解析:在while語句中,先判斷while后面的表達式是否為0,如果為0,則退出循環(huán),否則執(zhí)行循環(huán)體。在本題中.當(dāng)變量a的值經(jīng)過幾次循環(huán)后,其值等于0時,退出while循環(huán)語句,變量a再執(zhí)行自減運算,所以其值等于-1。19、由以下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í)行無限次。20、有以下程序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++語句。當(dāng)i=7時,滿足條件語句if(i%3==1),if(i%5==2){printf("*%d,"i);break;},所以輸出*7,結(jié)束循環(huán)。21、若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é)束。22、有以下程序#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3j>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從l增到2,循環(huán)執(zhí)行2次。當(dāng)變量i的值等于1時,對于內(nèi)層for循環(huán)來說,變量j從3減到1,求得變量m的值等于6。當(dāng)變量i的值等于2時,第一遍執(zhí)行內(nèi)層for循環(huán),變量j的值等于3,那么i*j的值等于6,其值大于3.這時執(zhí)行break語句,退出內(nèi)層for循環(huán)的執(zhí)行。所以程序輸出變量m的值為6。23、有以下程序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整除。當(dāng)for循環(huán)執(zhí)行到第30次時,i的值為30能被5整除,然后i經(jīng)過兩次自加1運算,值變?yōu)?2,能被8整除,故執(zhí)行“printf("%d",i);”語句,即輸出32。24、若有以下程序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)退出。25、以下程序段中的變量已正確定義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語句,即只打出一個*。26、有以下程序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)變量j的值為奇數(shù)時,變量x的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量x的值自加兩次,當(dāng)退出內(nèi)層fof循環(huán)時,x=3,然后執(zhí)行x++,得到x=4。在進入執(zhí)行第2次外層fbr循環(huán)中,首先xH得到x=5。進入到內(nèi)層for循環(huán),只有循環(huán)變量j的值為奇數(shù)時,變量x的值才自加1,所以在內(nèi)層for循環(huán)執(zhí)行過程中,變量x的值自加1兩次,當(dāng)退出內(nèi)層for循環(huán)時,x=7,然后執(zhí)行x++,得到x=8,所以打印輸出變量x的值為8。27、以下敘述中正確的是A、當(dāng)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語句體,也可用brealk語句在循環(huán)結(jié)構(gòu)中終止循環(huán)體.從而提前結(jié)束循環(huán),而當(dāng)break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時,其作用只是跳出該switch語句體,并不能中止循環(huán)體的執(zhí)行,若想強行終止循環(huán)體的執(zhí)行,可以在循環(huán)體中,但并不在switch語句中設(shè)置break語句,滿足某種條件則跳出循環(huán)體。continue語句的作用是結(jié)束本次循環(huán),在while和do-while循環(huán)中,confinue語句使得流程直接跳到循環(huán)控制條件的測試部分,然后決定循環(huán)是否繼續(xù)進行。國家二級C語言(C語言程序設(shè)計)機試模擬試卷第4套一、選擇題(本題共29題,每題1.0分,共29分。)1、以下敘述中正確的是A、賦值語句是一種執(zhí)行語句,必須放在函數(shù)的可執(zhí)行部分B、scanf和printf是C語言提供的輸入和輸出語句C、由printf輸出的數(shù)據(jù)都隱含左對齊D、由printf輸出的數(shù)據(jù)的實際精度是由格式控制中的域?qū)捄托?shù)的域?qū)拋硗耆珱Q定的標準答案:A知識點解析:C語言本身沒有提供輸入輸出語句,但是可以通過調(diào)用標準庫函數(shù)中提供的輸入和輸出函數(shù)來實現(xiàn)輸入和輸出,選項B)錯誤;采用printf輸出數(shù)據(jù),輸出數(shù)據(jù)都默認為右對齊,若要左對齊,可以在格式控制中的“%”和寬度之間加一個“-”號來實現(xiàn),選項C)錯誤;printf的輸出精度由變量的類型決定,與域?qū)挓o關(guān),選項D)錯誤。2、有以下程序main(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的輸出結(jié)果是A、9B、3C、-12D、0標準答案:C知識點解析:對于表達式a+=a-=a*a相當(dāng)于a=a-(a*a),然后計算a=a+a,a的初值為3,則表達式的值為-12。3、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,Y);其輸出結(jié)果是A、123.141593B、12,3.141593C、123.1415930D、123.141593標準答案:D知識點解析:本題考查printf語句。printf()函數(shù)是格式化輸出函數(shù),一般用于向標準輸出設(shè)備按規(guī)定格式輸出信息。在編寫程序時經(jīng)常會用到此函數(shù)。printfi()函數(shù)的調(diào)用格式為:printf(“<格式化字符串>”,<參量表>)。其中,“格式化字符串”包括兩部分內(nèi)容:一部分是正常字符,這些字符將按原樣輸出;另一部分是格式化規(guī)定字符,以“%”開始,后跟一個或幾個規(guī)定字符,用來確定輸出內(nèi)容格式。格式化字符串的格式是:%[標志][輸出最小寬度][精度][長度]格式字符①標志:標志字符為-、+、空格等,其意義如下所示:.-:結(jié)果左對齊,右邊填空格;.+:輸出符號(正號或負號);.空格:輸出值為正時冠以空格,為負時冠以負號。②輸出最小寬度:用十進制整數(shù)來表示輸出的最少位數(shù)(包括小數(shù)點在內(nèi)至少要輸出這么多位)。.若實際位數(shù)多于定義的寬度,則按實際位數(shù)輸出;.若實際位數(shù)少于定義的寬度,則右對齊,左邊留空;.有負號,左對齊,右邊留空;.表示寬度的數(shù)字以0開始,則右對齊,左邊留空。③精度:精度格式符以“.”開頭,后跟十進制整數(shù)。它的意義是:如果輸出數(shù)字,則表示小數(shù)的位數(shù),若實際位數(shù)大于所定義的精度數(shù),則四舍五入,若不足則補0;如果輸出的是字符,則表示輸出字符的個數(shù),若實際位數(shù)大于所定義的精度數(shù),則截去超過的部分;④長度:長度格式符為h和l兩種,h表示按短整型量輸出,l表示按長整型量輸出。4、若有以下程序#includemain(){intb=10,a=-11;a%=b%=4;printf("%d%d\n",a,b);}則程序的輸出結(jié)果是A、12B、-1-2C、-12D、1-2標準答案:C知識點解析:對于表達式a%=b%=4為復(fù)合的賦值運算,結(jié)合性自右至左,相當(dāng)于先計算b=b%4,a=a%b;結(jié)果的符號和第一個操作數(shù)的符號相同,因此b為2,a的結(jié)果為-1.5、有以下程序main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);)程序的輸出結(jié)果是A、a=%2,b=%5B、a;%d,b=%dC、a=2,b=5D、a=%%d,b=%%d標準答案:B知識點解析:輸出“%”,可以在格式控制中用“%%”表示,將輸出一個“%”,而沒有%表示格式符的開始,%%d不能表示格式符,因此僅輸出:a=%d,b=%d。6、有以下程序main(){chara,b,c,d;Scanf("%C%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c\n",a,b,c,d);}當(dāng)執(zhí)行程序時,按下列方式輸入數(shù)據(jù)(從第1列開始,代表回車,注意:回車也是一個字符)1234則輸出結(jié)果是A、12B、1234C、123D、1234標準答案:C知識點解析:scanf和getchar函數(shù)分別從鍵盤上讀入一個字符,因此輸入12空格34,則變量a中存放的為1,b中存放2,c中存放空格,d中存放3。7、若變量已正確定義為int型,要通過語句scanf("%d,%d,%d",&a,&b,&c);給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(注:□代表一個空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3標準答案:D知識點解析:本題t要考查scanf函數(shù)的輸入格式問題。scanf函數(shù)的一般形式為:scanfi(格式控制字符串,地址1。地址2,…);格式控制字符串是由雙撇號括起來的字符串,它主要由兩種類型的字符組成:①格式說明符由“%”和格式字符組成,如%c,%d,%s,%f等。其作用是將輸入的數(shù)據(jù)轉(zhuǎn)換為指定的格式,賦給scanf的二個參量(是地址1)所指定的內(nèi)存單元(可能一次使用多個)中。格式說明以“%”字符為標志。②普通字符,是需要用戶在輸入時原樣輸入的字符。在本題中格式控制字符串為“%d,%d,%d”,表示按十進制輸入三個數(shù)據(jù)。要求在輸入數(shù)據(jù)時,兩個數(shù)據(jù)間一定以一個逗號“,”作為間隔符。8、設(shè)變量均已正確定義,若要通過scanf("%d%c%d%c",&a1,&c1,&a2,&c2);語句為變量a1和a2賦數(shù)值10和20,為變量c1和c2賦字符X和Y。以下所示的輸入形式中正確的是(注:□代表空格字符)A、10□X20□YB、10□X20□YC、10X20YD、10□X□20□Y標準答案:C知識點解析:在使用scanf函數(shù)進行輸入數(shù)據(jù)時,輸入的數(shù)據(jù)之間必須用空格、回車符、制表符(Tab鍵)等問隔符隔開,但是空格為合法的字符型數(shù)據(jù)的輸入。而按照格式符”%d%c%d%c”說明,數(shù)值型數(shù)據(jù)和字符數(shù)據(jù)輸入之間不要加入空格間隔,而字符型數(shù)據(jù)和數(shù)值型數(shù)據(jù)的輸入?yún)s可以加入任意的空格,回車和跳格。9、設(shè)有定義:inta;floatb;執(zhí)行scanf("%2d%f",&a,&b);語句時,若從鍵盤輸入876543.0則a和b的值分別是A、876和543.0B、87和6.0C、87和543.0D、76和543.0標準答案:B知識點解析:在輸入函數(shù)scanf的輸入格式符%2d%f中,2d表示輸入的數(shù)據(jù)的寬度為2,所以當(dāng)從鍵盤輸入876543.0時,這時把輸入數(shù)字串的前兩位87賦給變量a,然后將緊接著將6按照格式摔制符%f的形式賦給變量b,所以b的值為6.000000。10、若有定義:inta,b;通過語句scanf("%d;%d",&a,&b);能把整數(shù)3賦給變量a,5賦給變量b的輸入數(shù)據(jù)是A、3,5B、35C、3;5D、35標準答案:C知識點解析:在采用scanf這個函數(shù)輸入數(shù)據(jù)時,要嚴格遵守其輸入的規(guī)則定義。本題此函數(shù)定義的規(guī)則是,在兩個整數(shù)之間加分號輸入。11、若有定義inta;floatb;doublec;程序運行時輸入:345能把值3輸入給變量a、4輸入給變量b、5輸入給變量C的語句是A、scanf("%(1%lf%lf",&a,&b,&c);B、scanf("%d%f%lf",&a,&b,&c);C、scanf("%d%f%f",&a,&b,&c);D、scanf("%lf%lWolf",&a,&b,&c);標準答案:B知識點解析:scanf函數(shù)進行輸入的時候,默認的輸入間隔為空格、跳格和回車,變量a、b和c均為數(shù)值型數(shù)據(jù),輸入時間隔為空格,因此scanf函數(shù)的第一個表示格式的參數(shù)之間不用加入分隔符,而要輸入double型數(shù)據(jù),格式控制必須用%lf(或%le)。否則,數(shù)據(jù)不能正確輸入。12、設(shè)有定義:doublea,b,c;若要求通過輸入分別給a、b、C輸入1、2、3,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年稅務(wù)會計咨詢合同
- 銀行網(wǎng)點租賃合同模板
- 空氣凈化設(shè)備租賃協(xié)議樣本
- 排水管道管涵施工合同
- 超市收銀區(qū)地磚鋪裝項目協(xié)議
- 醫(yī)院防雷施工合同
- 商場衛(wèi)生清潔工招聘合同
- 未婚夫婚前房產(chǎn)協(xié)議
- 養(yǎng)老院租賃協(xié)議
- 通信工程商品混凝土施工協(xié)議
- 華北水利水電大學(xué)《自然語言處理課程設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 國家開放大學(xué)《宣傳工作實務(wù)》專題測驗1-12參考答案
- 2024年初級電焊工理論考試復(fù)習(xí)題庫(含答案)
- 2024年資助政策主題班會課件
- 2024年度人工智能AI技術(shù)服務(wù)合同3篇
- 江蘇省2025屆高三第一次模擬考試英語試卷含解析
- 教研組匯報課件
- 貴州省貴陽市2023-2024學(xué)年高一上學(xué)期語文期末考試試卷(含答案)
- 化學(xué)必修一人教版知識點總結(jié)(超全)
- 肺部感染性疾病支氣管肺泡灌洗病原體檢測中國專家共識(2017年)
- 2024年秋季新人教版道德與法治七年級上冊全冊教案
評論
0/150
提交評論