版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
國家二級(C語言)機試模擬試卷3(共9套)(共303題)國家二級(C語言)機試模擬試卷第1套一、選擇題(本題共39題,每題1.0分,共39分。)1、在結構化方法中,用數(shù)據(jù)流程圖(DFD)作為描述工具的軟件開發(fā)階段是()。A、邏輯設計B、需求分析C、詳細設計D、物理設計標準答案:B知識點解析:軟件開發(fā)階段包括需求分析、總體設計、詳細設計、編碼和測試五個階段。其中,需求分析階段常用的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典。2、對序線性表(23,29,34,55,60,70,78)用二分法查找值為60的元素時,需要比較次數(shù)為()。A、1B、2C、3D、4標準答案:C知識點解析:根據(jù)二分法查找法需要兩次:①首先將60與表中間的元素55進行比較,由于60大于55,所以在線性表的后半部分查找。②第二次比較的元素是后半部分的中間元素,將60與表中間的元素70進行比較,由于60小于70,所以在線性表的前半部分查找。③第三次比較的元素是前半部分的中間元素,即60,這時兩者相等,即查找成功。3、下列描述中,正確的是()。A、線性鏈表是線性表的鏈式存儲結構B、棧與隊列是非線性結構C、雙向鏈表是非線性結構D、只有根結點的二叉樹是線性結構標準答案:A知識點解析:根據(jù)數(shù)據(jù)結構中各數(shù)據(jù)元素之間前后關系的復雜程度,一般將數(shù)據(jù)結構分為兩大類型:線性結構與非線性結構。如果一個非空的數(shù)據(jù)結構滿足下列兩個條件:①有且只有一個根結點;②每個結點最多有一個前件,也最多有一個后件。則稱該數(shù)據(jù)結構為線性結構,又稱線性表。所以線性表、棧與隊列、線性鏈表都是線性結構,而二叉樹是非線性結構。4、開發(fā)大型軟件時,產(chǎn)生困難的根本原因是()。A、大型系統(tǒng)的復雜性B、人員知識不足C、客觀世界干變?nèi)f化D、時間緊、任務重標準答案:A知識點解析:隨著計算機軟件規(guī)模的擴大,軟件本身的復雜性不斷增加,研制周期顯著變長,正確性難以保證,軟件開發(fā)費用上漲,生產(chǎn)效率急劇下降,從而出現(xiàn)了人們難以控制軟件發(fā)展的局面,即所謂的“軟件危機”。5、兩個或兩個以上的模塊之間關聯(lián)的緊密程度稱為()。A、耦合度B、內(nèi)聚度C、復雜度D、連接度標準答案:A知識點解析:耦合度是模塊間互相連接的緊密程度的度量;內(nèi)聚度是一個模塊內(nèi)部各個元素間彼此結合的緊密程度的度量。6、下列關于線性表的敘述中,不正確的是()。A、線性表可以是空表B、線性表是一種線性結構C、線性表的所有結點有且僅有一個前件和后件D、線性表是由n個元素組成的一個有限序列標準答案:C知識點解析:線性表是一種線性結構,由n(ni>0)個元素組成,所以線性表可以是空表。但是在線性表中,第一個結點沒有前件,最后一個結點沒有后件,其他結點有且只有一個前件和后件,所以選項C)是錯誤的。7、設有如下關系表:則下列操作正確的是()。A、T=I∪SB、T=R×SC、T=R∩SD、T=R∪S標準答案:C知識點解析:T就是關系R中有的,同時S中也有的有序組(4、5、6),即交運算(∩)。8、以下描述中,不是線性表順序存儲結構特征的是()。A、可隨機訪問B、需要連續(xù)的存儲空間C、不便于插入和刪除D、邏輯相鄰的數(shù)據(jù)物理位置上不相鄰標準答案:D知識點解析:線性表的順序存儲是用一片連續(xù)的空間來存放數(shù)據(jù)元素,其特點是邏輯上相鄰的元素在物理位置上也相鄰。數(shù)據(jù)元素之間邏輯上的先后關系自動隱含在物理位置的相鄰元素之中,因此不需要另外開辟空間來保存元素之間的關系。9、在三級模式之間引入兩層映像,其主要功能之一是()。A、使數(shù)據(jù)與程序具有較高的獨立性B、使系統(tǒng)具有較高的通道能力C、保持數(shù)據(jù)與程序的一致性D、提高存儲空間的利用率標準答案:A知識點解析:數(shù)據(jù)庫管理系統(tǒng)在數(shù)據(jù)庫的三級模式之間提供了兩層映像,保證了數(shù)據(jù)庫中數(shù)據(jù)的較高的邏輯獨立性和物理獨立性。10、下列方法中,屬于白盒法設計測試用例的方法的是()。A、錯誤推測B、因果圖C、基本路徑測試D、邊界值分析標準答案:C知識點解析:白盒測試方法也稱為結構測試或邏輯測試,主要方法有邏輯覆蓋測試、基本路徑測試等。11、在C語言中,以下說法不正確的是()。A、在C程序中,整數(shù)和實數(shù)都能被準確無誤地表示出來B、在C程序中,任何一個變量名都代表存儲器中的一個位置C、靜態(tài)變量的生存期與整個程序的運行期相同D、C語言中,任何變量都必須先聲明才能進行引用標準答案:A知識點解析:此題考查C語言的基本概念。變量的實質(zhì)就是在內(nèi)存中占據(jù)一定的存儲單元,存儲單元里存放的是該變量的值,變量的值可以根據(jù)需要進行修改;整數(shù)在允許的范圍內(nèi)可以準確的表示出來,但不可能表示無限度的實數(shù)。12、以下關于C語言數(shù)據(jù)類型的敘述中正確的是()。A、C基本數(shù)據(jù)類型包括:分為整型、實型、浮點型、字符型四種B、實型常量的表達方式包括十進制形式、十六進制形式、二進制形式、八進制形式、指數(shù)形式C、若要處理如“人員信息”等含有不同類型的相關數(shù)據(jù),應自定義結構體類型D、若只處理“真”和“假”兩種邏輯值,應使用邏輯類型標準答案:C知識點解析:C基本數(shù)據(jù)類型包括:分為整型、實型、枚舉型、字符型四種,實型就是浮點型,實型數(shù)據(jù)只有十進制,沒有2、8、16進制表達,在C語言中沒有定義邏輯類型,而是一般用0代表假,用非零代表真。13、以下標識符不是關鍵字的是()。A、breakB、char。C、SwitchD、return標準答案:C知識點解析:此題考查標識符和關鍵字的概念。需要注意的是C語言是區(qū)分大小寫的,“switch”是關鍵字,但“Switch”不是關鍵字。14、下列選項中,不能作為合法常量的是()。A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0標準答案:B知識點解析:用指數(shù)形式表示的實型常量需注意兩點:①e或E后面的指數(shù)必須是整數(shù);②指數(shù)必須是不超過數(shù)據(jù)表示范圍的正負整數(shù),并且在e或E前必須有數(shù)字。15、有以下程序:#include<stdio.h>main(){┋while(getchar()!=’\n’);┋}以下敘述中正確的是()。A、此while語句將無限循環(huán)B、getchar()不可以出現(xiàn)在while語句的條件表達式中C、當執(zhí)行此while語句時,只有按回車鍵程序才能繼續(xù)執(zhí)行D、當執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行標準答案:C知識點解析:根據(jù)程序順序執(zhí)行的次序,當程序執(zhí)行到while這條語句,根據(jù)while語句中的結束循環(huán)的條件是“輸入回車鍵時,結束循環(huán)”,所以當按回車鍵后,程序才執(zhí)行while語句的下一條語句。16、下列敘述中正確的是()。A、調(diào)用printf()函數(shù)時,必須要有輸出項B、使用putchar()函數(shù)時,必須在之前包含頭文件stdio.hC、在C語言中,整數(shù)可以以二進制、八進制或十六進制的形式輸出D、調(diào)用getchar()函數(shù)讀入字符時,可以從鍵盤上輸入字符所對應的ASCII碼標準答案:B知識點解析:選項A),若printf函數(shù)沒有輸出項,且格式字符串中不含格式信息,則輸出的是格式字符串本身,若格式字符串含有格式信息,運行時則出現(xiàn)錯誤提示;選項C),在C語言中,整數(shù)可以以十進制、八進制或十六進制的形式輸出;選項D),getchar函數(shù)是從標準輸入設備讀取一個字符。17、執(zhí)行以下程序段后,w的值為()。intw=’A’,x=14,y=15;w=((x‖y)&&(w<’a’));A、-1B、NULLC、1D、0標準答案:C知識點解析:字符變量w的初值為字符“’A’”,其ASCII碼值為65,字符“’A’”的ASCII碼值為97,所以關系表達式“W<’a’”的值為1;變量x=14,變量y=15,“x‖y”為或,x、y均為真,所以x‖y的結果1。因而邏輯表達式“(x‖y)&&(w<’a’)”的值為1。18、設有定義:“l(fā)ongx=123450L;”,則以下能夠正確輸出變量x的是()。A、printf("x=%d\n",x);B、printf("x=%id\n",x);C、printf("x=%d\n",x);D、printf("x=%ld\n",x);標準答案:D知識點解析:C語言規(guī)定,輸出long型數(shù)值的格式符為%ld。19、已有定義“inta=3:”和輸出語句“printf("%8x".a(chǎn));”,a);”以下正確的敘述是()。A、整型變量的輸出格式符只有%d一種B、%x是格式符的一種,它可以適用于任何一種類型的數(shù)據(jù)C、%x是格式符的一種,其變量的值按十六進制數(shù)輸出,但%8x是錯誤的D、%8x是正確的格式符,其中數(shù)字8規(guī)定了輸出字段的寬度標準答案:D知識點解析:本題考查printf函數(shù)的格式?!埃?x”表示以十六進制無符號形式輸出整型數(shù)據(jù)?!?”表示指定輸出數(shù)據(jù)的寬度為8位。20、若有定義“intx,y;”并已正確給變量賦值,則下列選項中與表達式“(x-y)?(x++):(y++)”中的條件表達式“(x-y)”等價的是()。A、(x-y>0)B、(x-y<0)C、(x=y<0‖x-y>0)D、(x-y==0)標準答案:C知識點解析:條件表達式的形式如下:“表達式1?表達式2:表達式3”。其含義為當“表達式1”的值為非零時,求出“表達式2”的值,此時“表達式2”的值就是整個條件表達式的值;當“表達式1”的值為零時,則求“表達式3”的值,這時“表達式3”的值就是整個表達式的值。本題條件表達式的執(zhí)行順序是先求解表達式“x-y”的值,若其值為非0(可以是正數(shù),也可以是負數(shù)),則再求表達式“x++”的值,其值就是條件表達式的值;若表達式“x-y”的值為0,則再求表達式“y++”的值,其值就是條件表達式的值。因此,本題的答案為選項C)。21、若a、b、c、d都是int型變量且都已經(jīng)正確賦初值,則以下不正確的賦值語句是()。A、a+d:B、a++;C、a=b=c=d=100;D、a=(b=3)+(d=5);標準答案:A知識點解析:C語言規(guī)定,賦值號的右邊可以是一個賦值表達式,因此選項C)、選項D)正確;在選項B)中,a++是一個自加1的表達式,a被重新賦值,因此它是一個合法的賦值表達式;選項A)中,a+d是一個算術表達式,雖然最后有一個分號,但這個表達式中沒有賦值操作,因此它不是一條賦值語句。22、有以下程序#defineF(X,Y)(X)*(Y)main(){inta=3,b=4;printf("%d\n",F(xiàn)(a++,b++));}程序運行后的輸出結果是()。A、12B、15C、16D、20標準答案:A知識點解析:此題考查的是編譯預處理命令以及自加運算符?!癋(a++,b++)”先取a和b的值,參加運算,再把a和b的值分別加1,所以“F(a++,b++)-F(3,4)=3*4=12”。23、以下是while語句的基本形式:while(表達式){語句;>其中“表達式”()。A、必須是邏輯表達式B、必須是關系表達式C、必須是邏輯表達式或關系表達式D、可以是任意合法的表達式標準答案:D知識點解析:本題考查while表達式。while(表達式)中的表達式可以為任何合法的表達式,一般情況下為邏輯、條件表達式,需要注意的是,當?shù)忍?==)誤寫為賦值號(=)時不會報錯的,但是其值恒為1。24、有以下程序:#include<stdio.h>main(){inta=6,b=7,m=1;switch(a%2){case0:m++;break;case1:m++;switch(b%2){defaut:m++;case0:m++;break;}}pfintf("%d\n",m);}程序運行后的輸出結果是()。A、1B、2C、3D、4標準答案:B知識點解析:本題考查switch語句。因為“a=6”,所以“a%2=0”,因此第一個switch語句,執(zhí)行“case0”,將m加1,遇到break語句跳出switch語句,輸出m值為2。25、有以下程序#include<stdio.h>intfun(inta,intb){if(b=0)returna;elsereturn(fun(--a,--b));}main(){printf("%d\n",fun(4,2));}程序的運行結果是()。A、1B、2C、3D、4標準答案:B知識點解析:由程序可知,函數(shù)fun(inta,intb)是一個遞歸函數(shù)。所以當主函數(shù)中調(diào)用“fun(4,2)”時,其執(zhí)行過程如下“fun(4,2)->fun(3,1)->fun(2,0)”,其返回值為2。所以正確答案為選項B)。26、關于字符常量,以下敘述正確的是()。A、空格不是一個字符常量B、字符常量能包含大于一個的字符C、單引號中的大寫字母和小寫字母代表的是相同的字符常量D、所有的字符常量都可以作為整型量來處理標準答案:D知識點解析:本題考查字符常量的4個知識點:①空格是一個字符常量,而且單引號中的空格不可以省略:②字符常量只能包含一個字符;③單引號中的大寫字母和小寫字母代表的是不相同的字符常量;④所有的字符常量都作為整型量來處理,在計算機內(nèi)部,其對應的整數(shù)值就是ASCH碼值。27、下面函數(shù)調(diào)用語句含有實參的個數(shù)為()。func((exp1,exp2),(exp3,exp4,exp5));A、1B、2C、3D、5標準答案:B知識點解析:本題考查函數(shù)調(diào)用時的實參形式。這里有一個逗號運算的考查,(a,b)的運算結果為b,因而只有一個值,結合func的調(diào)用形式,可以知道實參的個數(shù)只有2個。28、有以下程序#include<stdio.h>voidmain(){intn=2,k=1;while(!(k>0‖n++));printf("%d%d\n",k,n);}程序運行后的輸出結果是()。A、02B、13C、57D、12標準答案:D知識點解析:在程序中整型變量n的初始值等于2,整型變量k的初始值等于1,在執(zhí)行while語句時,由于表達式k的值大于0為真,所以不再需要判斷“n++”是否為真,“(k>0‖n++)”表達式的值為真。“!(k>0‖n++)”表達式的值為假,所以while語句中的條件不滿足,循環(huán)語句不會執(zhí)行,變量n的值也不會加1,所在輸出變量k和n的值是1和2。29、以下不正確的定義語句是()。A、doublex[5]={1.0,2.0,3.0,4.0,5.0};B、inty[5]={0,1,2,3,4,5};C、charc1[]={’1’,’2’,’3’,’4’,’5’};D、charc2[]={’a’,’b’,’c’};標準答案:B知識點解析:本題考查對一維數(shù)組的賦值。選項B)中,y[5]說明數(shù)組中有5個元素,但卻給它賦了6個值,數(shù)組溢出所以是錯誤的。30、若有以下定義,則對數(shù)組元素的正確引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)標準答案:D知識點解析:本題考查通過指針引用數(shù)組元素。選項A)、C)沒有這種引用形式:選項B),(*a)+2與*a+2相同,表示第一個元素的值加2;選項D),*(a+2)引用數(shù)組的第3個元素。31、下列字符數(shù)組初始化語句中,不正確的是()。A、charc[]=’goodmoming’;B、charc[20]="goodmorning";C、charc[]={’a’,’b’,’c’,’d’};D、charc[]={"tgoodmoming"};標準答案:A知識點解析:本題考查兩個概念。①用單引號括起來的一個字符常量只能存放一個字符:②C語言中沒有字符串變量,只能用字符數(shù)組來存儲字符串。選項A)中一個單引號內(nèi)存放了若干個字符,是錯誤的;選項B)和選項D)中將一個字符串賦值給一個字符數(shù)組是允許的。32、下列程序的運行結果為()。#include<stdio.h>voidabe(char*str){inta,b,j;for(i=j=0;str[i]l=’\0’;i++)if(str[i]!=’a’)str[j++]=str[i];str[j]=’\0’;}voidmain(){charstr[]="abcdef";abc(str);printf(“str[]=%s",str);}A、str[]=bcdefB、str[]=abcdefC、str[]=aD、str[]=ab標準答案:A知識點解析:本題考查函數(shù)調(diào)用的參數(shù)傳遞。通過函數(shù)abc的執(zhí)行,將字符串中的字母a去掉,保留剩下的,由于是通過指針調(diào)用,所以改變了字符串的結果。33、閱讀下面程序,程序執(zhí)行后的結果為()。#include"stdio.h"main(){char*str="abcdefghijklmnopq";while(*str++!=’e’);printf("%c\n".*str);}A、fB、aC、eD、q標準答案:A知識點解析:本題考查的是取內(nèi)容運算符“*”和自加運算符“++”的優(yōu)先級問題。由于“++”的優(yōu)先級高于“*”,所以題干中“*str++!=’e’”,即“*(str++)!=’e’”,當str指向字符“’e’”時,while循環(huán)的條件不成立,但“str”已經(jīng)進行了自加指向了字符“’f’”,所以“*str”輸出字符“’f’”。34、設有如下的程序段:charstr[]="HelloWorld";char*ptr;ptr=str;執(zhí)行上面的程序段后,“*(ptr+10)”的值為()。A、’\0’B、’0’C、不確定的值D、’0’的地址標準答案:A知識點解析:本題涉及字符數(shù)組和指針兩個知識點:①在C語言中,字符數(shù)組在存放字符串時會自動在末尾加上“’\0’”,所以題中數(shù)組str有11個元素:②ptr指向數(shù)組str的首地址,“ptr+10”是指向“str[10]”,“*(ptr+10)”是引用str[10]的值(即結束符“’\0’”)。35、下述語句中,在字符串s1和s2相等時顯示“theyareEqual”的是()。A、if(*s1==*s2)puts("theyareEqual");B、if(!strcmp(s1,s2))puts("theyareEqual");C、if(s1==s2)Puts("theyareEqual");D、if(strcmp(s1,s2))puts("theyareEqual");標準答案:B知識點解析:字符串比較不能用兩個等號(==)來進行比較,應使用“strcmp(s1,s2)”函數(shù)來比較。“strcmp(s1,s2)”函數(shù)的功能是:當字符串s1和s2相等時,返回值為0,因此,當表達式“!strcmp(s1,s2)==1”時,條件成立,執(zhí)行后面的語句,輸出“theyareEqual”。36、設有定義:structcomplex{intreal,unreal;}data1={1,8},data2;則以下賦值語句中錯誤的是()。A、data2={data1.real,data1.unreal};B、data2=(2,6);C、data2.real=data1.real;D、data2->real=data1.unreal;標準答案:B知識點解析:本題主要考查結構體變量的定義與初始化。題目中定義了complex類型的結構體變量data1和data2,并對datal進行了初始化??梢杂靡粋€結構體變量的成員對另一個結構體變量的成員賦值。37、以下程序的輸出結果是()。#include<stdio.h>voidprt(int*x,int*y,int*z){printf("%d,%d,%d\n",++*x,++*y,*(z++));}main(){inta=10,b=40,c=20;prt(&a,&b,&c);prt(&a,&b,&c);}A、11,42,3112,22,41B、11,41,2012,42,20C、11,21,4011,21,21D、11,41,2112,42,22標準答案:B知識點解析:本題考查的是函數(shù)參數(shù)的傳遞及自加運算符。主函數(shù)中第一次調(diào)用函數(shù)“prt(&a,&b,&c);”,此函數(shù)中的輸出語句“printf("%d,%d,%d\n”,++*x,++*y,*(z++));”使得a和b的值均加1,而“*(z++)”由于先執(zhí)行“z++”,所以c的值不變;第二次調(diào)用函數(shù)“ptr(&a,&b,&c);”使得a和b在上一次的基礎上再各自加1(因為形參和實參進行的是地址傳遞),而c的值仍不變。38、設有以下說明,則不正確的敘述是()。unionun{inta;charb:floatc;}arr;A、arr所占的內(nèi)存長度等于成員c的長度B、arr的地址和它的各成員的地址都是同一地址C、arr可以作為函數(shù)參數(shù)D、不能在定義air時對它初始化標準答案:C知識點解析:本題主要考查聯(lián)合體的內(nèi)存使用:聯(lián)合體所占用的內(nèi)存空間為最長的成員所占用的空間,int占2個字節(jié),char占1個字節(jié),float占4個字節(jié),所以arr所占的內(nèi)存長度等于成員c的長度;arr的地址和它的各成員的地址都是同一地址;不能直接對arr賦值,即不能在定義arr時對它初始化:art也不可以作為函數(shù)參數(shù)。39、若x=4,y=5,則x&y的結果是()。A、0B、4C、3D、5標準答案:B知識點解析:本題主要考查按位與運算的知識點。按位與是對兩個運算量相應的位進行邏輯與,“&”的規(guī)則和邏輯與“&&”相同。x=4的二進制為00000100,y=5的二進制為00000101,x&y=00000100,轉化為十進制即為4。二、程序填空題(本題共1題,每題1.0分,共1分。)40、給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中,刪除所有串長超過k的字符串,函數(shù)返回所剩字符串的個數(shù)。ss所指字符串數(shù)組中共有N個字符串,且串長小于M。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk)(inti,j=0,len;/**********found**********/for(i=0;i<___1___;i++){len=strlen(ss[i]);/**********found**********/if(len<=___2___)/**********found**********/strcpy(ss[j++],___3___);}returnj;}main(){charx[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}標準答案:(1)N(2)k(3)ss[i]知識點解析:本題中函數(shù)fun的功能是在形參ss所指字符串數(shù)組中,刪除所有串長超過k的字符串,然后函數(shù)返回所剩字符串的個數(shù)。根據(jù)題意,在fun函數(shù)中,利用for循環(huán)比較字符串長度是否小于k,然后利用sWcpy函數(shù)組成新的可用字符串數(shù)組,將可用的字符串數(shù)組的長度值進行返回,即為字符串的個數(shù)。第一空:“for(i=0;i<___1___;i++)”,這一空部分出現(xiàn)在fun函數(shù)中的for循環(huán)條件中,在定義了i之后i的條件。根據(jù)for后面的語句我們可以看出,這里是要進行比較,比較對象是ss所指字符串數(shù)組的所有字符串,所以這里循環(huán)要進行整改字符串數(shù)組的長度,相應的,這里for循環(huán)的循環(huán)條件就要是i小于字符串長度,而字符串長度開始就有定義,為N,所以這里應該是i<N,這一空應該填N。第二空:“if(len<=___2___)”,這一空部分出現(xiàn)在fun函數(shù)中,是for循環(huán)中if條件語句的條件,這根據(jù)if條件語句后面的語句我們可以知道,這里的條件語句是后面strcpy的執(zhí)行條件,而strcpy要執(zhí)行,根據(jù)題目給出的條件我們可以知道是要字符串長度小于等于k才能保留,所以這里的if條件語句中的條件應該是字符串長度小于k,所以這一空應該填k。第三空:“strcpy(ss[j++]___3___);”這一空部分出現(xiàn)在strcpy函數(shù)中,此函數(shù)為字符串復制函數(shù),是將后面的一個字符串復制到前面一個字符數(shù)組中去,根據(jù)題意和前面的條件語句,這一行語句是要將符合條件的字符串重新組成一個新的字符串數(shù)組,然后返回新數(shù)組的長度,這樣的話就能知道ss啪為新字符串數(shù)組,而這里要復制的就是原字符串數(shù)組中符合條件的字符串,所以這里要填就是前面符合條件的i所對應的字符串,所以這一空應該填ss[i]。三、程序修改題(本題共1題,每題1.0分,共1分。)41、給定程序MODI1.C中函數(shù)fun的功能是:統(tǒng)計字符串中各元音字母(即:A、E、I、O、U)的個數(shù)。注意:字母不分大、小寫。例如:若輸入:THIsisaboot,則輸出應該是:1、0、2、2、0。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!#include<stdio.h>voidfun(char*s,intnum[5]){intk,i=5;for(k=0;k<i;k++)/**********found**********/num[i]=0;for(;*s;s++){i=-1;/**********found**********/switch(s)(case’a’:case’A’:{i=0;break;}case’e’:case’E’:{i=1;break;}case’i’:case’I’:{i=2;break;}case’o’:case’O’:{i=3;break;}case’u’:case’U’:{i=4;break;}}if(i>=0)num[i]++;}}main(){chars1[81];intnum1[5],i;printf("\nPleaseenterastring:");gets(s1);fun(s1,num1);for(i=0;i<5;i++)printf("%d",num1[i]);printf("\n");}標準答案:(1)num[k]=0;(2)switch(*s)知識點解析:本題中函數(shù)的功能是統(tǒng)計字符串中各元音字母(即A、E、I、O、U)的個數(shù)。其中,本題在while循環(huán)中采用switch-case條件判斷字符串中的每一個字符并進行統(tǒng)計。(1)第一個標識下的for循環(huán)過程是將num數(shù)組中的變量初始值設置為0,用來統(tǒng)計每一個元音字母出現(xiàn)的個數(shù),for循環(huán)中的循環(huán)條件表達式中的變量是k,所以第二個標識下“aura[i]=0;”改為“num[k]=0;”。(2)第二個標識下的switch-case條件選擇的功能應該是對s指針指向的字符串中的每一個字符進行判斷,不應該是s的數(shù)組名,所以第三個標識下“switch(s)”改為“switch(*s)”。四、程序設計題(本題共1題,每題1.0分,共1分。)42、請編寫函數(shù)fun,其功能是分別統(tǒng)計形參t所指二維數(shù)組中字母A和C的個數(shù)。注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。#inlclude<stdio.h>#include<stdlib.h>#defineM14voidNONO();voidfun(char(*t)[M],int*a,int*c){}voidget(char(*s)[M]){inti,j;for(i:0;i<M;i++){for(j=0;j<M;j++){s[i][j]=65+rand()%12;printf("%c",s[i][j]);}printf("\n");}}main(){chara[M][M];intx,y;get(a);fun(a,&x,&y);printf("A=%dc=%d\n",x,y);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關閉文件。*/FILE*fp,*wf;inti,j,x,y;chara[M][M];fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<M;i++){for(j=0;j<M;j++){fscanf(fp,%c",&a[i][j]);)}Fun(a,&x,&y);fprintf(wf,"A=%d\n",x);fprintf(wf,"c=%d\n",y);fclose(fp);fclose(wf);}標準答案:voidfun(char(*t)[M],int*a,int*c){inti,j;*a=0;*c=0;for(i=0;i<M;i++)for(j=0;j<M;j++)if(t[i][j]==’A’)*a=*a+1;elseif(t[i][j]==’C’)*c=*c+1;}知識點解析:本題中fun函數(shù)實現(xiàn)的功能的主要功能是找出二維數(shù)組中A和C的個數(shù),最先就能想到用條件語句進行判斷和統(tǒng)計。解題步驟主要為:第一步,要得到所需要的二維數(shù)組,第二步,二維數(shù)組進入fun函數(shù)中進行數(shù)據(jù)處理,fun函數(shù)中需要if條件語句來進行判斷,判斷數(shù)組中的字母是否為A或者C,數(shù)組中的每個數(shù)據(jù)都需要進行判斷,要注意A和C是分開統(tǒng)計的,所以這里需要同時統(tǒng)計A和C,然后分別得到結果;第三步,輸出得到的結果:字母A和字母C的個數(shù)。國家二級(C語言)機試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、數(shù)據(jù)結構主要研究的是數(shù)據(jù)的邏輯結構、數(shù)據(jù)的運算和()。A、數(shù)據(jù)的方法B、數(shù)據(jù)的存儲結構C、數(shù)據(jù)的對象D、數(shù)據(jù)的邏輯存儲標準答案:B知識點解析:數(shù)據(jù)結構是研究數(shù)據(jù)元素及其之間的相互關系和數(shù)據(jù)運算的一門學科,它包含3個方面的內(nèi)容,即數(shù)據(jù)的邏輯結構、存儲結構和數(shù)據(jù)的運算。2、一棵二叉樹的前序遍歷結果是ABCEDF,中序遍歷結果是CBAEDF,則其后序遍歷的結果是()。A、DBACEFB、CBEFDAC、FDAEBCD、DFABEC標準答案:B知識點解析:由于該二叉樹的前序遍歷結果是ABCEDF,顯然A結點為根結點,所以后序遍歷時A結點是最后遍歷的,其后序遍歷的結果為CBEFDA。3、在數(shù)據(jù)處理中,其處理的最小單位是()。A、數(shù)據(jù)B、數(shù)據(jù)項C、數(shù)據(jù)結構D、數(shù)據(jù)元素標準答案:B知識點解析:數(shù)據(jù)元素是由多個數(shù)據(jù)項組成,數(shù)據(jù)是能夠被計算機識別、存儲和加工處理的信息載體,數(shù)據(jù)處理的最小單位是數(shù)據(jù)項。4、在數(shù)據(jù)庫系統(tǒng)的內(nèi)都結構體系中,索引屬于()。A、模式B、內(nèi)模式C、外模式D、概念模式標準答案:B知識點解析:內(nèi)模式又稱物理模式,它給出了數(shù)據(jù)庫物理存儲結構與物理存取方法,如數(shù)據(jù)存儲的文件結構、索引、集簇及hash等存取方式與存取路徑,內(nèi)模式的物理性主要體現(xiàn)在操作系統(tǒng)及文件級上,它還未深入到設備級上(如磁盤及磁盤操作)。5、以下()不屬于對象的基本特征。A、繼承性B、封裝性C、分類性D、多態(tài)性標準答案:A知識點解析:對象具有特征:標識惟一性,指對象是可區(qū)分的;分類性,指可以將具有相同屬性和操作的對象抽象成類;多態(tài)性,指同一個操作可以是不同對象的行為;封裝性,從外面看只能看到對象的外部特征,而不知道也無需知道數(shù)據(jù)的具體結構以及實現(xiàn)操作的算法;模塊獨立性好,對象是面向?qū)ο蟮能浖幕灸K,對象內(nèi)部各種元素彼此結合得很緊密,內(nèi)聚性強。6、數(shù)據(jù)庫系統(tǒng)的核心是()。A、數(shù)據(jù)模型B、軟件開發(fā)C、數(shù)據(jù)庫設計D、數(shù)據(jù)庫管理系統(tǒng)標準答案:D知識點解析:數(shù)據(jù)庫管理系統(tǒng)DBMS是數(shù)據(jù)庫系統(tǒng)的核心。DBMS是負責數(shù)據(jù)庫的建立、使用和維護的軟件。DBMS建立在操作系統(tǒng)之上,實施對數(shù)據(jù)庫的統(tǒng)一管理和控制。用戶使用的各種數(shù)據(jù)庫命令以及應用程序的執(zhí)行,最終都必須通過DBMS。另外,DBMS還承擔著數(shù)據(jù)庫的安全保護工作,按照DBA所規(guī)定的要求,保證數(shù)據(jù)庫的完整性和安全性。7、開發(fā)軟件所需高成本和產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這種現(xiàn)象稱作()。A、軟件矛盾B、軟件危機C、軟件耦合D、軟件產(chǎn)生標準答案:B知識點解析:隨著計算機軟件規(guī)模的擴大,軟件本身的復雜性不斷增加,研制周期顯著變長,正確性難以保證,‘軟件開發(fā)費用上漲,生產(chǎn)效率急劇下降,從而出現(xiàn)了入門難以控制軟件發(fā)展的局面,即所謂的“軟件危機”。8、關系模型允許定義3類數(shù)據(jù)約束,下列不屬于數(shù)據(jù)約束的是()。A、實體完整性約束B、參照完整性約束C、屬性完整性約束D、用戶自定義的完整性約束標準答案:C知識點解析:關系模型允許3類數(shù)據(jù)約束,它們是:實體完整性約束該約束要求關系的主鍵中屬性值不能為空值,這是數(shù)據(jù)庫完整性的最基本要求。參照完整性約束:該約束是關系之間相關聯(lián)的基本約束,它不允許關系引用不存在的元組:即在關系中的外鍵要么是所關聯(lián)關系中實際存在的元組,要么就為空值。用戶定義的完整性約束:用戶定義的完整性就是針對某一具體關系數(shù)據(jù)庫的約束條件,它反映某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。9、關系表中的每一行記錄稱為一個()。A、字段B、元組C、屬性D、關鍵碼標準答案:B知識點解析:在關系表中,每一列稱為一個屬性,對應表中的一個字段;每一行稱為一個元組,對應表中的一條記錄。10、在數(shù)據(jù)庫管理技術的發(fā)展中,數(shù)據(jù)獨立性最高的是()。A、人工管理B、文件系統(tǒng)C、數(shù)據(jù)庫系統(tǒng)D、數(shù)據(jù)模型標準答案:C知識點解析:在人工管理階段,數(shù)據(jù)無法共享,冗余度大,不獨立,完全依賴程序;在文件系統(tǒng)階段,數(shù)據(jù)共享性差;在數(shù)據(jù)庫系統(tǒng)階段,共享性好,獨立性高。11、以下敘述錯誤的是()。A、C語言區(qū)分大小寫B(tài)、C程序中的一個變量,代表內(nèi)存中一個相應的存儲單元,變量的值可以根據(jù)需要隨時修改C、整數(shù)和實數(shù)都能用C語言準確無誤地表示出來D、在C程序中,正整數(shù)可以用十進制、八進制和十六進制的形式來表示標準答案:C知識點解析:本題涉及C語言最基本的3個概念:①C語言是區(qū)分大小寫的,q和Q是兩個不同的變量;②變量的實質(zhì)就是在內(nèi)存中占據(jù)一定的存儲單元,存儲單元里存放的是該變量的值,變量的值可以根據(jù)需要進行修改:③整數(shù)在允許的范圍內(nèi)可以準確的表示出來,但不可能表示無限度的實數(shù)。正整數(shù)可用二進制、十越制、八進制和十六進制表示。12、有以下程序段: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");continue;case0:exit(0);}printf("%d\n",n);}以下關于程序段執(zhí)行情況的敘述,正確的是()A、for循環(huán)語句固定執(zhí)行8次B、當產(chǎn)生的隨機數(shù)n為4時結束循環(huán)操作C、當產(chǎn)生的隨機數(shù)n為1和2時不做任何操作D、當產(chǎn)生的隨機數(shù)n為0時結束程序運行標準答案:D知識點解析:當產(chǎn)生的隨機數(shù)n為0時,執(zhí)行“case0:exit(0)”這條語句,結束程序的運行。13、可在C程序中用作用戶標識符的一組標識符是()。A、voiddefineWORDB、as_b3_123IfC、For--abccaseD、2cDOSIG標準答案:B知識點解析:C語言規(guī)定,標識符是由字母、數(shù)字或下劃線組成,并且它的第一個字符必須是字母或下劃線,關鍵字不能用作用戶標識符。14、若變量己正確定義并賦值,則以下符合C語言語法的表達式是()。A、a=a+7;B、a=7+b+c,a++C、int(12.3%4)D、a=a+7=c+b標準答案:B知識點解析:選項A)是一個C語句,不是表達式;選項B)是利用一個逗號表達式給a賦值;選項C)中的“%”求余運算符,要求兩個運算對象都必須是整型;選項D)中,不能用表達式給表達式賦值,但是變量可以給自身賦值,例如:a=a-H。15、有以下程序段charch;intk;ch=’a’;k=12;printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCII十進制代碼為97,則執(zhí)行上述程序段后輸出結果是()。A、因變量類型與格式描述符的類型不匹配輸出無定值B、輸出項與格式描述符個數(shù)不符,輸出為零值或不定值C、a,97,12k=12D、a,97,k=12標準答案:D知識點解析:在用基本輸出函數(shù)printf時,格式說明與輸出項的個數(shù)應該相同。如果格式說明的個數(shù)少于輸出項的個數(shù),多余的輸出項不予輸出;如果格式說明個數(shù)多于輸出項個數(shù),則對于多余的格式項輸出不定值或0。16、下列敘述中錯誤的是()。A、計算機不能直接執(zhí)行用C語言編寫的源程序B、C程序經(jīng)C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件C、后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個二進制文件D、后綴為.obf和.exe的二進制文件都可以直接運行標準答案:D知識點解析:C源程序經(jīng)過程序編譯之后生成一個后綴為“.obj”的二進制文件(稱為目標文件),然后由稱為“連接程序”的軟件包文件與C語言提供的各種庫函數(shù)連接起來生成一個后綴為“.exe”的可運行文件。17、有以下程序#include<stdio.h>voidmain(){inta=1,b:=0;printf("%d,",b=(a++)+(a++));printf("%d>n",a+b);}程序運行后的輸出結果是()。A、4,6B、2,5C、3.5D、2,6標準答案:B知識點解析:在主函數(shù)中定義了兩個整型變量a和b,并把它們的初值分別設置為1和0;在第二條語句中,首先計算b=a+a,然后a自增兩次,因此第二句結束時,b=2,a=3,然后第三句,a+b=5。18、若有代數(shù)式,(其中e僅代表自然對數(shù)的底數(shù),1不是變量),則下列能夠正確表示該代數(shù)式的C語言表達式是()。A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(x)))標準答案:C知識點解析:n和e的x冪次方,要分別調(diào)用C語言的數(shù)學庫函數(shù)“doublepow(n,x)”和“doubleexp(x)”,因為這兩個函數(shù)的返回值都為double型,對兩者的和計算絕對值,調(diào)用庫函數(shù)“doublefabs(pow(n,x)+exp(x))”,求出和的絕對值,再調(diào)用開平方函數(shù)“doublesqrc(fabs(pow(n,x)+exp(x)))”,這樣計算出的結果就是題干中表達式的值。19、設有定義:intk=0;,下列選項的4個表達式中與其他3個表達式的值不相同的是()。A、k++B、k+=1C、++kD、k+1標準答案:A知識點解析:因為題中有語句“intk=0;”,所以選項B)、C)、D)都是對k的值加1,選項A)的語句k++表示先利用k的值后進行運算,然后k的值才加1。20、有下列程序,其中‰表示按無符號整數(shù)輸出。main(){unsignedintx=0xFFFF;/*x的初值為十六進制數(shù)*/printf("%u\n",x);}程序運行后的輸出結果是()。A、-1B、65535C、32767D、0xFFFF標準答案:B知識點解析:“%u”格式符表示以十進制形式輸出無符號整形變量。本題中無符號整形變量x=0xFFFF表示的是十六進制無符號整型變量的最大值65535,所以最后輸出的結果為65535。21、下面程序的運行結果是()。for(i=3;i<7;i++)printf((i%2)?("**%d\n"):("##%d\n"),i);A、**3##4**5**6B、##3**4##5**6C、##3**4##5##6D、**3##4**5##6標準答案:D知識點解析:本題考查printf函數(shù)的輸出格式和條件表達式“?:”的使用。①printf函數(shù)輸出時“**%d\n”和“##%d\n”中的“##”和“**”都是直接輸出。②條件表達式的基本格式為:“a?b:c”。它的運算規(guī)則為:當a為非0時,整個表達式的值取b的值,當a為0時,整個表達式取c的值。22、設有語句:if(a==1)b=2;c=3;,以下語句中與之等價的是()。A、if(a==1){b=2;c=3;}B、if(a!=1){;}else{b=2;c=3;}C、if(a==1)c=3;b=2;D、(a==1)?b=2:a=a;c=3;標準答案:D知識點解析:在C語言中,用分號表示一條語句的結束,用{}把幾條語句放在一塊表示一個語句塊,其整體表示一個功能。因而在題目給出的四個選項中,選項A)、B)、C)均與題中所給不同,而選項D)相同。23、運行下列程序時,若輸入數(shù)據(jù)為“321”,則輸出結果是()。main(){intnum,i,j,k,s;scanf("%d",&num);if(num>99)s=3;elseif(num>9)s=2:elses=1;i=num/100;j=(num-i*100)/10;k=(num-i*100-j*10);switch(s){case3:printf("%d%d%d\n",k,i);break;case2:printf("%d%d\n",k,j);case1:printf("%d\n",k);}}A、123B、1,2,3C、321D、3,2,1標準答案:A知識點解析:本題考查if…else語句和switch語句。scanf函數(shù)通過鍵盤讀入。num的值。因為“num=321>99”,所以“s=3,i=3,i=2,k=1”。因為s=3,所以執(zhí)行case3,輸出k,j,i的值,然后通過break結束程序。24、有以下程序#include<stdio.h>#include<string.h>structA{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,"WangPeng");t.c=1220.0;returnt;}程序運行后的輸出結果是()。A、1001,ZhangDa,1098.0B、1002,ZhangDa,1220.0C、1001,WangPeng,1098.0D、1002,WangPeng,1220.0標準答案:D知識點解析:在主函數(shù)中定義結構體A的變量a,并對其賦初值,再調(diào)用函數(shù)f(a),在函數(shù)f(a)中對結構體變量a的各個成員重新進行了賦值操作,并把其值返回在屏幕上輸出。25、判斷char型變量c1是否為小寫字母的正確表達式為()。A、’a’<=c1<=’z’,B、(c1>=a)&&(c1<=z)C、(’a’>=c1‖(’z’<=c1)D、(c1>=’a’)&&(c1<=’z’)標準答案:D知識點解析:C語言規(guī)定,字符常量在程序中要用單引號括起來。首先判斷c1是否為小寫字母的主要條件“c1>=’a’”和“c1<=’z’”是邏輯與關系,其次選項A)的這種形式C語言中沒有,所以選項D)正確。26、設有定義:chars[10];inti=0;,以下不能將一行(不超過100個字符)帶有空格的字符串正確讀入的語句或語句組是()。A、gets(s);B、scanf("%s",s);C、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;標準答案:B知識點解析:本題考查標準輸入輸出函數(shù)和循環(huán)語句。gets(s)函數(shù)的作用是將輸入的字符讀入字符串s,直到遇到回車。而scand()函數(shù)接收字符串時的結束標志為回車或者空格。因此選項B)不能,選項C)和選項D)中按字符逐個讀入字符串s中,直到讀入的字符是換行符為止,因此正確。27、下面4個關于C語言的結論中錯誤的是()。A、可以用do…while語句實現(xiàn)的循環(huán)一定可以用while語句實現(xiàn)B、可以用for語句實現(xiàn)的循環(huán)一定可以用while語句實現(xiàn)C、可以用while語句實現(xiàn)的循環(huán)一定可以用for語句實現(xiàn)D、do…while語句與while語句的區(qū)別僅是關鍵字“while”出現(xiàn)的位置不同標準答案:D知識點解析:本題考查幾個循環(huán)語句的關系。①do…while語句、while語句、for語句所實現(xiàn)的循環(huán)可以相互替代:②do…while語句和while語句的區(qū)別是do…while語句至少執(zhí)行一次,再判斷循環(huán)條件,while語句是先判斷條件再執(zhí)行。28、若有以下程序段:structst{intn;int*m;};inta=2,b=3,c=5;structsts[3]=({101,&a},{102,&c},{103,&b}};main(){structst*p;p=s;…}則以下表達式中值為5的是()。A、(p++)->mB、*(p++)->mC、(*p).mD、*(++p)->m標準答案:D知識點解析:本題考查如何通過指針引用數(shù)組元素。首先定義了一個結構體,然后定義了一個結構體變量s[3],并賦了初值。在主程序中,定義了一個指向結構體變量s的指針p,要使表達式的值為5,就應該引用s[1].m的值,使指針p指向s[1],++p可以實現(xiàn)將p指針加1,指向s[1]。29、下列程序的運行結果是()。#include<stdio.h>voidsub(int*s,int*y){staticintm=4;*y=s[0];m++;}voidmain(){inta[]={1,2,3,4,5},k;intx;printf("\n");for(k=0;k<=4;k++){sub(a,&x);printf("%d,",X);}}A、1,1,1,1,1,B、1,2,3,4,5,C、0,0,0,0,0,D、4,4,4,4,4,標準答案:A知識點解析:本題中sub(int*s,int*y)函數(shù)的參數(shù)是兩個指針型變量,在函數(shù)體內(nèi)將數(shù)組s的第一個元素賦給y。主程序內(nèi),首先定義了一維數(shù)組并賦初值,然后通過for循環(huán),5次調(diào)用sub(a,&x)函數(shù),每一次調(diào)用都是將數(shù)組a的第一個元素1賦給x,并輸出。30、有以下程序:#include<stdio.h>intfun(intx,inty){if(x!=y)return(y);elseretum((x+y)/2);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序運行后的輸出結果是()。A、3B、6C、8D、12標準答案:B知識點解析:fun(b,c)即fun(5,6),5!=6,所以返回6;fun(2*a,6)即fun(8,6),8!=6,所以返回6。31、C語言中規(guī)定,程序中各函數(shù)之間()。A、既允許直接遞歸調(diào)用也允許間接遞歸調(diào)用B、不允許直接遞歸調(diào)用也不允許間接遞歸調(diào)用C、允許直接遞歸調(diào)用不允許間接遞歸調(diào)用D、不允許直接遞歸調(diào)用允許間接遞歸調(diào)用標準答案:A知識點解析:本題考查函數(shù)調(diào)用的基本概念。在函數(shù)調(diào)用時,只要符合函數(shù)的使用,程序中的各個函數(shù)間既可以直接調(diào)用其他函數(shù),也可以遞歸調(diào)用其自身。32、以下程序的輸出結果是()。#include<stdio.h>main(){inta[3][3]={0,1,2,0,1,2,0,1,2},i,j,s=1;for(i=0;i<3.i++)for(j=i,j<=i0++)s+=a[i][a[j][j];printf("%d\n",s);}A、3B、4C、1D、9標準答案:B知識點解析:當外層循環(huán)為i時,內(nèi)層循環(huán)j只能取j=i,所以s+=a[i][a[j][j]],其實就是s+=a[i][a[i][i]],當i=0時,s=s+a[0][a[0][0]]=s+a[0][0]=1,當i=1時S=S+a[1][a[1][1]]=s+a[1][1]=1+1=2,當i=2時,s=s+a[2][a[2][2]]=s+a[2][2]=2+2=4。33、有以下程序:#include<stdio.h>#define5+6main(){inta=2,c;C=x*2:printf("%d",c);}程序運行后的輸出結果是()。A、17B、22C、16D、11標準答案:A知識點解析:define語句僅進行簡單替換,因此c=5+6*2=17。34、當用“#defineF37.5f”定義后,下列敘述正確的是()。A、F是float型數(shù)B、F是char型數(shù)C、F無類型D、F是字符串標準答案:D知識點解析:字符替換定義格式為:#deflne標識符(形參表)形參表達式。題中F是代表形參表達式的標識符(字符串)。35、若有定義語句:inta=3,b=2,c=1;,以下選項中錯誤的賦值表達式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);標準答案:A知識點解析:這道題目主要考察賦值表達式,對于賦值表達式來說,賦值號“=”的左邊一定為變量名,右邊為一個C語言合法的表達式。36、以下說法正確的是()。A、宏定義是C語句,要在行末加分號B、可以使用≠≠undefine提前結束宏名的使用C、在進行宏定義時,宏定義不能嵌套D、雙引號中出現(xiàn)的宏名也要進行替換標準答案:B知識點解析:本題考查宏的使用規(guī)則:①字符替換格式:#define標識符字符串,行末不加分號;②雙引號中出現(xiàn)的宏名不替換;③如果提前結束宏名的使用,程序中可以使用#undefine;④在進行宏定義時,宏定義能層層置換,能夠嵌套。37、下面程序的輸出結果是()。typedefunion{longx[1];inty[4];charz[10];}M;Mt;main(){printf("%d\n",sizeof(t));}A、32B、16C、10D、4標準答案:C知識點解析:“聯(lián)合體”所占用的內(nèi)存空間為最長的成員所占用的空間。題中聯(lián)合體的z[10]成員是聯(lián)合體中占空間最長的成員。38、以下程序中函數(shù)sort的功能是對a數(shù)組中的數(shù)據(jù)進行由大到小的排序voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for{j=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(&aa,[3],5);for(i=0;i<10;i++)printf("%d,",aa[i]);printf("\n");}程序運行后的輸出結果是()。A、1,2,3,4,5,6,7,8,9,10,B、10,9,8,7,6,5,4,3,2,1,C、1,2,3,8,7,6,5,4,9,10,D、1,2,10,9,8,7,6,5,4,3,標準答案:C知識點解析:程序中sort函數(shù)的功能是對數(shù)組中的數(shù)據(jù)進行從大到小的排序。主函數(shù)main中調(diào)用函數(shù)“sort(&aa[3],5);”,使得數(shù)組aa中從第4個元素開始的5個元素進行從大到小的排序,數(shù)組aa中的元素變?yōu)椋?,2,3,8,7,6,5,4,9,10。并輸出這些元素。39、設x=061,y=016,則z=x|y的值是()。A、00001111B、11111111C、00111111D、11000000標準答案:C知識點解析:本題主要考查按位或運算,x=061(二進制為00110001),y=016(二進制為00001110),進行或運算后結果為00111111。40、函數(shù)rewind(fp)的作用是()。A、使fp指定的文件的位置指針重新定位到文件的開始位置B、將fp指定的文件的位置指針指向文件中所要求的特定位置C、使fp指定的文件的位置指針向文件的末尾D、使fp指定的文件的位置指針自動移至下一個字符位置標準答案:A知識點解析:位置指針重返文件頭函數(shù)rewindq()的調(diào)用形式為:rewind(fp)。其中,“fp”是指向文件的文件型指針。rewind(fp)的功能是:使fp指定的文件的位置指針重新定位到文件的開始位置。二、程序填空題(本題共1題,每題1.0分,共1分。)41、給定程序中已建立一個帶有頭結點的單向鏈表,在main函數(shù)中將多次調(diào)用fun函數(shù),每調(diào)用一次fun函數(shù),輸出鏈表尾部結點中的數(shù)據(jù),并釋放該結點,使鏈表縮短。請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。注意:源程序存放在考生文件夾下的BLANK1.C中。不得增行或刪行,也不得更改程序的結構!#include<stdio.h>#iniclude<stdlib.h>#defineN8typedefStruct1ist{intdata;structlist;*next;}SLIST;voidfun(SLIST*p)(SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL){s=t;/**********found**********/t=t->___1___;}/**********found**********/printf("%d",___2___);s->rlext=NULL;/**********found**********/free(___3___);}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;i<N;i++){q=(SLIST*)malloc(sizeof(SLIST));q->data=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){SLIST*head;inta[N]={11,12,15,18,19,22,25,29};head=crearliSt(a);printf("\nOutputfromhead:\n");outlist(head);printf("\nOutputfromtail:\n");while(head->next!=NULL){fun(head);printf("\n\n");printf("\nOutputfromheadagain:\n");outlist;(head);}}標準答案:(1)next(2)t->data(3)t知識點解析:fun函數(shù)的功能是輸出鏈表尾部結點中的數(shù)據(jù),并釋放該結點,使鏈表縮短。由于鏈表是單向的,找到鏈表尾部結點需要利用循環(huán)從頭結點開始查找,直至找到最后一個,找到之后輸出尾部結點的數(shù)據(jù),然后刪除尾結點。第一空:fun函數(shù)中的循環(huán)目的是找到尾結點“while(t->next!=NULL)”,利用結點變量s和t,s指向當前節(jié)點,t不斷指向下一個結點,因此,第一空處應該是“t=t->next;”。第二空:這里是輸出尾結點中的數(shù)據(jù),已經(jīng)利用循環(huán)找到了尾結點t,t的數(shù)據(jù)是t->data,因此,第二空處應該為“printf”("%d",t->data);”。第三空:輸出尾結點數(shù)據(jù)之后刪除尾結點,使用free,又因為尾結點是t,因此,第三空處應該為“free(t);”。三、程序修改題(本題共1題,每題1.0分,共1分。)42、給定程序MODI1.C中,函數(shù)fun的功能是判斷整數(shù)n是否是“完數(shù)”。當一個數(shù)的因子之和恰好等于這個數(shù)本身時,就稱這個數(shù)為“完數(shù)”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完數(shù)。如果是完數(shù),函數(shù)返回值為1,否則函數(shù)返回值為0。數(shù)組a中存放的是找到的因子,變量k中存放的是因子的個數(shù)。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。#include<stdio.h>intfun(intn,inta[],int*k){intm=0,i,t;t=n;/**********found**********/for(i=0;i<n;i++)if(n%i==0){a[m]=i;m++;t=t-i;}/**********found**********/k=m;/**********found**********/if(t=0)return1;elsereturn0;}main(){intn,a[10],flag,i,k;printf("請輸入一個整數(shù):");scanf("%d",&n);flag=fun(n,a,&k),if(flag){printf("%d是完數(shù),其因子是:",n);for(i=0,i<k,i++)printf("%d",a[i]);printf("\n");}elseprintf("%d不是完數(shù).\n",n);}標準答案:(1)for(i=0;i<n;i++)改為for(i=1;i<n;i++)(2)k=m;改為*k=m;(3)if(t=0)改為if(t==0)知識點解析:本題的fun函數(shù)主要功能是:是判斷整數(shù)n是否是“完數(shù)”。當一個數(shù)的因子之和恰好等于這個數(shù)本身時,就稱這個數(shù)為“完數(shù)”。(例如:6的因子包括1、2、3,而6=1+2+3,所以6是完數(shù))如果是完數(shù),函數(shù)返回值為1,否則函數(shù)返回值為0。數(shù)組a中存放的是找到的因子,變量k中存放的是因子的個數(shù)。這里是一個條件判斷問題,原理上利用條件if條件語句和for循環(huán)得到結果,結果則是用數(shù)組輸出完數(shù)的因子,用k變量輸出因子的個數(shù)。這里fun()函數(shù)為了判定這個數(shù)字是否為完數(shù),一定要使用正確的循環(huán),這個判斷條件還是需要一定的步驟的。最重要的就是注意細節(jié)(1)第一個錯誤在fun()函數(shù)的for循環(huán)中,這里的循環(huán)的就是輸入數(shù)字n的因式,很明顯的一個問題就是循環(huán)的起始值有問題,這從i=0開始就違反了最基本的四則運算,0不可能是其他整數(shù)的因式,也沒有意義。所以這里應該將“i=0”改為“i=1”。(2)第二個錯誤在fun()函數(shù)中數(shù)字經(jīng)過for循環(huán)過后,這里“k=m”,是為了得到“k”的值,也就是因子的個數(shù)。但是要注意的細節(jié)是在fun()函數(shù)中的參數(shù)是“*k”,也就是說k只是一個指針變量,而不是我們所需要的因子個數(shù)的變量,所以這里我們應該使用的是“*k”,即將“k=m”改為“*k=m”。(3)第三個錯誤在fun函數(shù)第二個if條件語句中,這里“f(t=0)return1;”的t是數(shù)字減掉因子和的值,也就是說只要是t等于0就代表輸入的數(shù)字是一個完數(shù),這里原本的意圖就是在得到因子的和之后判斷數(shù)字是否為完數(shù)。但是又有一個細節(jié)沒有注意到的就是在if條件語句中,等于號應該是“==”,而不是普通的“=”,所以這里應該將“if(t=0)”改為“if(t==0”。)四、程序設計題(本題共1題,每題1.0分,共1分。)43、請編寫函數(shù)fun,功能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)據(jù)的位數(shù)不超過4位),并將結果通過函數(shù)值返回。例如:若輸入的數(shù)據(jù)為123,則輸出結果為:輸入的數(shù)字是3位。注意:部分源程序存在PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。#include<stdio.h>voidNONO();intfun(intn){}main(){intn,place;do{printf("請輸入一個4位以內(nèi)的正整數(shù):");scarlf("%d”,&n);}while(n<0||n>9999);place=fun(n);printf("輸入的數(shù)字是%d位\n",place);NONO();}voidNONO(){/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關閉文件。*/FILE*fp,*wf;inti,n,place;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);place=fun(n);fprintf(wf,"%d\n",place);}fclose(fp);fclose(wf);}標準答案:intfun(intn){intk=0;if(n>999)k=4;elseif(n>99)k=3;。elseif(n>9)k=2;elsek=1;returnk;}知識點解析:本題fun函數(shù)的主要功能是判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)據(jù)的位數(shù)不超過4位),并將結果通過函數(shù)值返回。首先我們能想到這一題主要在于判斷,因為題目已經(jīng)限制了條件,就是數(shù)字的大小要不超過四位數(shù)的數(shù)字,而且要求只要輸出這個數(shù)字的位數(shù),這樣我們就能想到,只要判斷這個數(shù)字的大小就能知道位數(shù)了,小于10位1位,大于等于10小于100為2位,大于等于100小于1000位3位,大于等于1000小于等于9999為4位。所以只需要很簡單的幾個判斷語句就能實現(xiàn)函數(shù)的功能,然后輸出結果。主函數(shù)中首先要定義數(shù)據(jù),然后需要手動輸入一個用來進行判斷的數(shù)字,注意數(shù)字要不超過4位,見程序代碼第14~16行,而且這里為了防止輸入時不小心的錯誤或者是有人故意錯誤輸入而引發(fā)的不好的后果,在數(shù)據(jù)進入fun函數(shù)處理之前還要一個while函數(shù)來進行判斷數(shù)據(jù)是否合理在進行處理,見程序代碼第17行。然后數(shù)字進入fun函數(shù),這里很明顯會出現(xiàn)四種情況,數(shù)字的位數(shù)為1位,2位,3位或4位,所以我們用if…elseif來區(qū)別這四種情況見程序第6~9行,在判斷完之后我們就可以返回數(shù)字位數(shù)k的值然后再到主函數(shù)main函數(shù)中進行輸出處理。國家二級(C語言)機試模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、下面程序的運行結果是()。#includemain(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elseprintf("#");}}A、*#*#*B、#*#*#*C、*#*#D、#*#*標準答案:A知識點解析:分析程序可知,程序循環(huán)5次,然后利用if語句決定每次循環(huán)時輸出的字符。當i為奇數(shù)時,i%2=1,if(i%2)為真,輸出“*”:當i為偶數(shù)時,i%2=0,if(i%2)為假,執(zhí)行else語句,輸出“#”,所以當i取1、3、5值時輸出“*”,當i取2、4值時輸出“#”。2、下列敘述中正確的是()。A、在棧中,棧中元素隨棧底指針與棧頂指針的變化而變化B、在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而變化C、在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而變化D、以上說法均不對標準答
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)企業(yè)寫字樓中介協(xié)議
- 劇院建設渣土運輸協(xié)議模板
- 化工原料運輸合作協(xié)議
- 數(shù)據(jù)中心廠房裝修合同
- 印刷廠裝修合同簡易模板
- 家電賣場翻新工程協(xié)議
- 保險業(yè)股權融資居間合同
- 孵化器裝修項目協(xié)議
- 咖啡廳基礎裝修合同樣本
- 家具配送安裝合同范本
- 2024年高考語文復習:古詩文閱讀強化練習題匯編(含答案解析)
- 不良反應事件及嚴重不良事件處理的標準操作規(guī)程藥物臨床試驗機構GCP SOP
- 義務教育數(shù)學課程標準(2022年版)重點
- 2021上海春考作文題解析及范文(怎樣做與成為什么樣人)
- 醫(yī)療器械采購投標方案(技術方案)
- 2024-2030年全球及中國水楊酸行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 體育館改造裝修工程施工組織設計
- 137案例黑色三分鐘生死一瞬間事故案例文字版
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 2024-2030年中國潤滑油行業(yè)發(fā)展趨勢與投資戰(zhàn)略研究報告
- 《洗煤廠工藝》課件
評論
0/150
提交評論