計(jì)算機(jī)等級二級C語言模擬試題1(八)

字號:

一、選擇題(1)~(10)每小題2分,(11)-(50)每小題1分,共60分)
     下列各題A)、B)、C)、D)四個選項(xiàng)中,只有一個選項(xiàng)是正確的,請將正確選項(xiàng)涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
     (1)數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無關(guān)的是數(shù)據(jù)的________。
     A)存儲結(jié)構(gòu)   B)物理結(jié)構(gòu)      C)邏輯結(jié)構(gòu)     D)物理和存儲結(jié)構(gòu)
     答案:C
     評析:數(shù)據(jù)結(jié)構(gòu)概念一般包括3個方面的內(nèi)容,數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及數(shù)據(jù)上的運(yùn)算集合。數(shù)據(jù)的邏輯結(jié)構(gòu)只抽象的反映數(shù)據(jù)元素之間的邏輯關(guān)系,而不管它在計(jì)算機(jī)中的存儲表示形式。
     (2)棧底至棧頂依次存放元素A、B、C、D,在第五個元素E入棧前,棧中元素可以出棧,
     則出棧序列可能是________。
     A)ABCED     B)DBCEA       C)CDABE       D)DCBEA
     答案:D
     評析:棧操作原則上"后進(jìn)先出",棧底至棧頂依次存放元素A、B、c、D,則表明這4個元素中D是最后進(jìn)棧,B、c處于中間,A最早進(jìn)棧。所以出棧時一定是先出D,再出c,最后出A。
     (3)線性表的順序存儲結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)分別是________。
     A)順序存取的存儲結(jié)構(gòu)、隨機(jī)存取的存儲結(jié)構(gòu)
     B)隨機(jī)存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)
     C)隨機(jī)存取的存儲結(jié)構(gòu)、隨機(jī)存取的存儲結(jié)構(gòu)
     D)任意存取的存儲結(jié)構(gòu)、任意存取的存儲結(jié)構(gòu)
     答案:B
     評析:順序存儲結(jié)構(gòu)中,數(shù)據(jù)元素存放在一組地址連續(xù)的存儲單元中,每個數(shù)據(jù)元素地址可通過公式LOC(ai)。LOC(a1)+(i-1)L計(jì)算得到,從而實(shí)現(xiàn)了隨機(jī)存取。對于鏈?zhǔn)酱鎯Y(jié)構(gòu),要對某結(jié)點(diǎn)進(jìn)行存取,都得從鏈的頭指針指向的結(jié)點(diǎn)開始,這是一種順序存取的存儲結(jié)構(gòu)。
     (4)在單鏈表中,增加頭結(jié)點(diǎn)的目的是________。
     A)方便運(yùn)算的實(shí)現(xiàn)          B)使單鏈表至少有一個結(jié)點(diǎn)
     C)標(biāo)識表結(jié)點(diǎn)中首結(jié)點(diǎn)的位置     D)說明單鏈表是線性表的鏈?zhǔn)酱鎯?shí)現(xiàn)
     答案:A
     評析:頭結(jié)點(diǎn)不僅標(biāo)識了表中首結(jié)點(diǎn)的位置,而且根據(jù)單鏈表(包含頭結(jié)點(diǎn))的結(jié)構(gòu),只要掌握了表頭,就能夠訪問整個鏈表,因此增加頭結(jié)點(diǎn)目的是為了便于運(yùn)算的實(shí)現(xiàn)。
     (5)軟件 設(shè)計(jì) 包括軟件的結(jié)構(gòu)、數(shù)據(jù)接口和過程設(shè)計(jì),其中軟件的過程設(shè)計(jì)是指________。
     A)模塊間的關(guān)系            B)系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程描述
     C)軟件層次結(jié)構(gòu)            D)軟件開發(fā)過程
     答案:B
     評析:軟件設(shè)計(jì)包括軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過程設(shè)計(jì)。其中結(jié)構(gòu)設(shè)計(jì)是定義軟件系統(tǒng)各主要部件之間的關(guān)系;數(shù)據(jù)設(shè)計(jì)是將分析時創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義;接口設(shè)計(jì)是描述軟件內(nèi)部、軟件和 操作系統(tǒng) 之間及軟件與人之間如何 通信 ;過程設(shè)計(jì)則是把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程性描述。
     (6)為了避免流程圖在描述程序邏輯時的靈活性,提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程  圖,通常也把這種圖稱為________。
     A)PAD圖    B)N-S圖       C)結(jié)構(gòu)圖       D)數(shù)據(jù)流圖
     答案:B
     評析:常見的過程設(shè)計(jì)工具有:程序流程圖、N-S圖、PAD圖和HIPO圖。其中,為了避免流程圖在描述程序邏輯時的靈活性,提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,通常也把這種圖稱為N-S圖。
     (7)數(shù)據(jù)處理的最小單位是________。
     A)數(shù)據(jù)     B)數(shù)據(jù)元素      C)數(shù)據(jù)項(xiàng)      D)數(shù)據(jù)結(jié)構(gòu)
     答案:C
     評析:數(shù)據(jù)處理的最小單位是數(shù)據(jù)項(xiàng);由若干數(shù)據(jù)項(xiàng)組成數(shù)據(jù)元素;而數(shù)據(jù)是指能夠被計(jì)算機(jī)識別、存儲和加工處理的信息載體;數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)之間的相互關(guān)系和數(shù)據(jù)運(yùn)算。
     (8)下列有關(guān)數(shù)據(jù)庫的描述,正確的是________。
     A)數(shù)據(jù)庫是一個DBF文件       B)數(shù)據(jù)庫是一個關(guān)系
     C)數(shù)據(jù)庫是一個結(jié)構(gòu)化的數(shù)據(jù)集合   D)數(shù)據(jù)庫是一組文件
     答案:C
     評析:數(shù)據(jù)庫(Database,簡稱DB)是數(shù)據(jù)的集合,它具有統(tǒng)一的結(jié)構(gòu)形式并存放于統(tǒng)一的存儲介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各個應(yīng)用程序所共享。數(shù)據(jù)庫中的數(shù)據(jù)具有"集成"、"共享"之特點(diǎn)。
     (9)單個用戶使用的數(shù)據(jù)視圖的描述稱為 ______ 。
     A)外模式    B)概念模式     C)內(nèi)模式      D)邏輯模式
     答案:A
     評析:外模式是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式;全局?jǐn)?shù)據(jù)視圖的描述稱為概念模式,即數(shù)據(jù)庫中全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述;物理存儲數(shù)據(jù)視圖的描述稱為內(nèi)模式,即數(shù)據(jù)庫在物理存儲方面的描述;存儲模式即為內(nèi)模式。
     (10)需求分析階段的任務(wù)是確定______。
     A)軟件開發(fā)方法  B)軟件開發(fā)工具  C)軟件開發(fā)費(fèi)用    D)軟件系統(tǒng)功能
     答案:D
     評析:需求分析是軟件定義時期的最后一個階段,它的基本任務(wù)就是詳細(xì)調(diào)查現(xiàn)實(shí)世界要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)的工作概況,明確用戶的各種需求,然后在此基礎(chǔ)上確定新系統(tǒng)的功能。
     (11)若變量a是int類型,并執(zhí)行了語句:a='A'+1.6;,則正確敘述是______。
     A)a的值是字符C           B)a的值是浮點(diǎn)型
     C)不允許字符型和浮點(diǎn)型相加     D)a的值是字符'A'的ASCII值加上l
     答案:D
     評析:在賦值表達(dá)式中,賦值符右邊的值的類型會自動轉(zhuǎn)換成賦值符左邊的變量的類型。在本題中,先用"A"的ASCII碼值加上1.46得到66.46,然后將它強(qiáng)制轉(zhuǎn)換成int型,轉(zhuǎn)換后,實(shí)數(shù)的小數(shù)部分全部
     (12)若以下選項(xiàng)中變量已正確定義,則正確的賦值語句是______。
     A)x1=26.8%3;  B)1+2=x2;   C)x3=0x12;     D)x4=1+2=3;
     答案:C
     評析:賦值符號"="就是賦值運(yùn)算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換,所以選項(xiàng)A錯誤。在賦值表達(dá)式中,賦值運(yùn)算符的左側(cè)必須是一個變量,所以選項(xiàng)B、D錯誤。選項(xiàng)C是將一個十六進(jìn)制數(shù)賦值給變量x3。
     (13)以下程序段的輸出結(jié)果是______。
     int a=1234;
     printf("%2d\n",a);
     A)12       B)34        C)1234       D)提示出錯、無結(jié)果
     答案:C
     評析:本題主要考查對primf函數(shù)域?qū)捗枋龇睦斫?,在這里我們要特別注意:輸出數(shù)據(jù)的實(shí)際精度并不主要決定于格式項(xiàng)中的域?qū)捙c精度,也不決定于輸入的數(shù)據(jù)精度,而主要決定于數(shù)據(jù)在機(jī)器內(nèi)的存儲精度。
     (14)以下選項(xiàng)中不屬于C語言的類型的是______。
     A)signed short int         B)unsigned char
     C)signed long            D)long short
     答案:D
     評析:c語言中歸納起來,基本類型數(shù)據(jù)有以下幾種:
     [signed]char;unsigned char;[signed]short[int];unsigned short[int];[signed]long[int];unsigned long[int];float;double.
     (15)設(shè)有定義:int a,*pa=&a;以下scanf語句能正確為變量a讀入數(shù)據(jù)的是______。
     A)scanf("%d",B);         B)scanf("%d",a);
     C)scanf("%d",&pa);        D)scanf("%d",*pa);
     答案:C
     評析:scanf函數(shù)要求其中的輸入項(xiàng)必須是地址形式,比如:普通變量的地址、數(shù)組名、指針變量等。對于普通變量,地址形式為:&變量名;當(dāng)一個普通變量的地址賦予了一個指針變量名,scanf函數(shù)的輸入項(xiàng)處就可以直接寫這個指針變量名。
     (16)以下程序的輸出結(jié)果是______。
     main()
     {int a=5,b=4,c=6,d;
     printf("%d\n",d=a>c?(a>c?a:C):(b));
     }
     A)5       B)4         C)6        D)不確定
     答案:B
     評析:本題最重要的分析d=a>c?(a>c?a:C):(b)),首先運(yùn)算括號內(nèi)的式子a>c?a:c,它的值是c的值6,即式子化成d=a>c?6:4。顯然a=c,所以將4賦給d。
     (17)以下程序中,while循環(huán)的循環(huán)次數(shù)是______ 。
     main()
     { int i=0:
     while(i<10)
     {if(i<1)continue;
     if(i==5)break;
     i++:
     }
     ……
     }
     A)1       B)10        C)6        D)死循環(huán),不能確定次數(shù)
     答案:D
     評析:進(jìn)入循環(huán)后,先執(zhí)行一個條件語句,如果i的值小于l,那么直接進(jìn)入下一輪循環(huán),因?yàn)閕的初始值是0,小于l,故直接進(jìn)入下一輪循環(huán),又因?yàn)閕的值始終沒有改變,所以這個循環(huán)成了死循環(huán)。
     (18)有以下程序:
     main()
     {
     char k;int i;
     for(i=1;i<3;i++)
     {
     scanf("%c",&k);
     switch(k)
     {
     case'0':printf["another\n"];
     case'1':printf["number\n");
     }
     }
     }
     程序運(yùn)行時,從鍵盤輸入:0l<回車>,程序執(zhí)行后輸出結(jié)果是______。
     A)another   B)another      C)another      D)number
     number      number        number       number
     another       number
     答案:C
     評析:switch語句是多分支選擇語句,執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行。"case常量表達(dá)式"只是起語句標(biāo)號作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語句時,根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號,就從此標(biāo)號開始執(zhí)行下去,不再進(jìn)行判斷
     (19)以下程序的輸出結(jié)果是______。
     main()
     {Int a=O,i;
     for(i=1;i<5;i++)
     {switch(i)
     { case 0:
     case 3:a+=2:
     case l:
     case 2:a+=3:
     default:a+=5;
     }
     }
     printf("%d\n",a)
     }
     A)3l       B)13        C)10         D)20
     答案:A
     評析:switch結(jié)構(gòu)的執(zhí)行過程同上題。
     (20)己定義c為字符型常量,則下列語句中正確的是______。
     A)C='97'    B)c="97"     C)c=97        D)c="a"
     答案:C
     評析:字符變量占內(nèi)存一個字節(jié),只能放一個字符;字符常量為單引號括起的單個字符;字符串常量為雙引號括起的一串字符(可以0個字符,即"",稱為空串)。選項(xiàng)c為字符ASCII碼的整數(shù)形式。
     (21)以下程序的輸出結(jié)果是_________。
     main()
     f int a=4,b=5,c=0,d;
     d=!a&&!b||!c;
     printf("%d\n",d);
     }
     A)l       B)0         C)非0的數(shù)     D)-1
     答案:A
     評析:!a值為0,故!a&&!b的值為0,!c的值為l,而0IIl的值應(yīng)該是l。所以答案是A。
     (22)以下程序的輸出結(jié)果是_________。
     #include
     main()
     {int i=0,a=0;
     while(i<20)
     {for(;;)
     {if((i%10)==0)break;
     else  I--:
     }
     i+=ll;a+=i;
     }
     printf("%d\n",a);
     }
     A)21      B)32        C)33        D)11
     答案:B
     評析:本題中,有兩個循環(huán)語句。首先,i=0,進(jìn)入while循環(huán),for語句中對循環(huán)沒有任何條件,故直接進(jìn)入for循環(huán),因?yàn)?%10結(jié)果還是O,所以跳出for循環(huán),執(zhí)行i+:11,i的值變?yōu)?1,執(zhí)行a+=i,a的值變?yōu)?1:接著進(jìn)入下一輪while循環(huán),在for循環(huán)中,因?yàn)閕的值是11,對10取余結(jié)果為l,所以執(zhí)行i自減,i的值變成10,進(jìn)入又一輪for循環(huán),因?yàn)?0%10==0,所以跳出for循環(huán),執(zhí)行i+=1l,i的值變成21,執(zhí)行a+=i,也就是將21+1 1的和賦給a,a=32,因?yàn)榇藭ri的值不再小于20,所以結(jié)束循環(huán),
     故輸出結(jié)果是32。
     (23)有以下程序:
     int n(int x,int y)
     {retum x>y?x:y;}
     Int f2(int x,int y)
     {return x>y?y:x;)
     main()
     { int a=4,b=3,c=5,d,e,f;
     d=f1(a,b);d=fl(d,C);
     e=f2(a,b);e=f2(e,C);
     f=a+b+C-d-e;
     printf("%d,%d,%d\n",d,e,f);
     }
     程序運(yùn)行后的輸出結(jié)果是_________ 。
     A)3,4,5    B)5,3,4      C)5,4,3       D)3,5,4
     答案:B
     評析:函數(shù)n是一個求兩個整數(shù)中值的函數(shù),函數(shù)f2是一個求兩個整數(shù)中最小值的函數(shù)。在main函數(shù)中兩次調(diào)用函數(shù)n,求得變量a、b、、c中的值賦值給d;兩次調(diào)用函數(shù)f2,求得變量a、b、c中的最小值賦值給e;表達(dá)式a+b+c-d-e得到中間值,輸出5,3,4。
     (24)以下程序的輸出結(jié)果是_________。
     int f()
     {static int i=0;
     int s=1:
     s+=i;i++;
     return s;
     }
     main()
     {inti,a=0;
     for(i=0;i<5;j++)a+=f();
     printf("%d\n",a);
     }
     A)20      B)24        C)25         D)15
     答案:D
     評析:靜態(tài)變量,在編譯時就為其分配了存儲空間,程序一開始執(zhí)行便被建立,直到該程序執(zhí)行結(jié)束都存在,而不像動態(tài)變量只存在于函數(shù)或分程序被調(diào)用期間。在函數(shù)多次被調(diào)用的過程中靜態(tài)局部變量的值具有可繼承性。
     (25)已定義以下函數(shù):
     fun(int *p)
     {retum *p;}
     該函數(shù)的返回值是______ 。
     A)不確定的值 B)形參p中存放的值 C)形參p所指存儲單元中的值 D)形參p的地址值
     答案:C.
     評析:函數(shù)首部fun(int*p)中+p表示這是一個指針變量,指向整型數(shù)據(jù),用來從主調(diào)函數(shù)接收地址;而語句return *p;中的*p代表p所指向存儲單元中的值。
     (26)若有以下程序
     #include
     Void f(int n);
     main()
     {void f(int n);
     f(5);
     }
     Void f(int n)
     {print("%d\n",n);}
     則以下敘述中不正確的是______ 。
     A)若只在主函數(shù)中對函數(shù)f進(jìn)行說明,則只能在主函數(shù)中正確調(diào)用函數(shù)f
     B)若在主函數(shù)前對函數(shù)f進(jìn)行說明,則在主函數(shù)和其后的其它函數(shù)中都可以正確調(diào)用函數(shù)f
     C)對于以上函數(shù)程序,編譯時系統(tǒng)會提示出錯信息;提示對f函數(shù)重復(fù)說明
     D)函數(shù)f無返回值,所以可用void將其類型定義為無值型
     答案:C
     評析:一個函數(shù)在一個文件中的定義只能有一次,但對它的聲明卻可以有很多個。一個函數(shù)可以正確調(diào)用在當(dāng)前函數(shù)之前聲明的函數(shù)。