計算機等級

當前位置 /首頁/IT認證/計算機等級/列表

2017年計算機二級c語言試題及答案

(1)以下資料結構屬於非線性資料結構的是________。

2017年計算機二級c語言試題及答案

A)佇列 B)線性表 C)二元樹 D)棧

(1)C

知識點:棧和佇列的定義;棧和佇列的順序儲存結構及其基本運算

評 析:線性表、棧和佇列等資料結構所表達和處理的資料以線性結構為組織形式。棧是一種特殊的線性表,這種線性表只能在固定的一端進行插入和刪除操作,允許插入和刪除的一端稱為棧頂,另一端稱為棧底。一個新元素只能從棧頂一端進入,刪除時,只能刪除棧頂的元素,即剛剛給插入的元素。所以棧又稱後進先出表(Last In First Out)。佇列可看作是插入在一端進行,刪除在另一端進行的線性表,允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。在佇列中,只能刪除隊頭元素,佇列的最後一個元素一定是最新入隊的元素。因此佇列又稱先進先出表(First In First Out)。二元樹的資料結構是樹型結構,結構中資料元素之間存在著一對多的關係,因此它是一種非線性資料結構。

2)下面敘述正確的是________。

A)演算法的執行效率與資料的儲存結構無關

B)演算法的空間複雜度是指演算法程式中指令(或語句)的條數

C)演算法的有窮性是指演算法必須能在執行有限個步驟之後終止

D)演算法的時間複雜度是指執行演算法程式所需要的時間

(2)C

知識點:演算法的基本概念;演算法複雜度的概念和意義(時間複雜度與空間複雜度)

評 析:演算法的設計可以避開具體的計算機程式設計語言,但演算法的實現必須藉助程式設計語言中提供的資料型別及其演算法。資料結構和演算法是電腦科學的兩個重要支柱。它們是一個不可分割的整體。演算法在執行過程中需輔助儲存空間的大小稱為演算法的空間複雜度。演算法的有窮性是指一個演算法必須在執行有限的步驟以後結束。演算法的時間複雜度是指執行演算法所需要的計算工作量,即演算法執行過程中所需要的基本運算次數。

(3)在一棵二元樹上第8層的結點數最多是________。

A)8 B)16 C)128 D)256

(3)C

知識點:二元樹的定義及其儲存結構

評 析:根據二元樹的性質:二元樹第i(I>1)層上至多有2i-1個結點。得到第8層的結點數最多是128。

(4)下面描述中,不符合結構化程式設計風格的是________。

A)使用順序、選擇和重複(迴圈)三種基本控制結構表示程式的控制邏輯

B)自頂向下

C)注重提高程式的執行效率

D)限制使用goto語句

(4)C

知識點:結構化程式設計

評 析:結構化程式設計方法的四條原則是:1.自頂向下:2.逐步求精;3.模組化;4.限制使用goto語句。“自頂向下”是說,程式設計時,應先考慮總體,後考慮細節,先考慮全域性目標,後考慮區域性目標;“逐步求精’’是說,對複雜問題,應設計一些子目標作過渡,逐步細節化;“模組化”是說,一個複雜問題肯定是由若干稍簡單的問題構成,解決這個複雜問題的程式,也應對應若干稍簡單的問題,分解成若干稍小的部分。

(5)下面概念中,不屬於物件導向方法的是________。

A)物件、訊息 B)繼承、多型 C)類、封裝 D)過程呼叫

(5)D

知識點:物件導向的程式設計方法、物件、方法、屬性及繼承與多型性

評 析:物件導向方法是一種運用物件、類、封裝、繼承、多型和訊息等概念來構造、測試、重構軟體的方法。物件導向方法從物件出發,發展出物件、類、訊息、繼承等概念。

(6)在結構化方法中,用資料流程圖(DFD)作為描述工具的軟體開發階段是________。

A)可行性分析 B)需求分析 C)詳細設計 D)程式編碼

(6)B

知識點:結構化設計方法

評 析:軟體開發階段包括需求分析、總體設計、詳細設計、編碼和測試五個階段。其中需求分析階段常用的工具是資料流程圖和資料字典。

(7)軟體生命週期中所花費用最多的階段是________。

A)詳細設計 B)軟體編碼 C)軟體測試 D)軟體維護

(7)D

知識點:軟體工程基本概念,軟體生命週期概念,軟體工具與軟體開發環境

評 析:軟體生命週期分為軟體定義、軟體開發及軟體執行維護3個階段。本題中詳細設計、軟體編碼和軟體測試都屬於軟體開發階段;維護是軟體生命週期的最後一個階段,也是持續時間最長,花費代價最大的一個階段,軟體工程學的一個目的就是提高軟體的可維護性,降低維護的代價。

(8)資料庫系統的核心是________。

A)資料模型 B)DBMS C)軟體工具 D)資料庫

(8)B

知識點:資料庫的基本概念:資料庫,資料庫管理系統,資料庫系統

評 析:資料庫管理系統DBMS是資料庫系統的核心。DBMS是負責資料庫的建立、使用和維護的軟體。DBMS建立在作業系統之上,實施對資料庫的統一管理和控制。使用者使用的各種資料庫命令以及應用程式的執行,最終都必須通過DBMS。另外,DBMS還承擔著資料庫的安全保護工作,按照DBA所規定的要求,保證資料庫的完整性和安全性。

(9)下列敘述中正確的是________。

A)資料處理是將資訊轉化為資料的過程

B)資料庫設計是指設計資料庫管理系統

C)如果一個關係中的屬性或屬性組並非該關係的關鍵字,但它是另一個關係的關鍵

字,則稱其為本關係的外關鍵字

D)關係中的每列稱為元組,一個元組就是一個欄位

(9)C

知識點:資料模型,實體聯絡模型及E-R圖,從E-R圖匯出關係資料模型

評 析:資料處理是指將資料轉換成資訊的過程,故選項A敘述錯誤;設計資料庫的目的實質上是設計出滿足實際應用需求的實際關係模型,故選項B敘述錯誤;關係中的行稱為元組,對應儲存檔案中的記錄,關係中的列稱為屬性。對應儲存檔案中的欄位,故D選項敘述錯誤。

(10)下列模式中,_______是使用者模式。

A)內模式 B)外模式 C)概念模式 D)邏輯模式

(10)B

知識點:資料庫的基本概念:資料庫,資料庫管理系統,資料庫系統

評 析:資料庫管理系統的三級模式結構由外模式、模式和內模式組成。外模式,或稱子模式,或稱使用者模式,是指資料庫使用者所看到的資料結構,是使用者看到的資料檢視。模式,或稱邏輯模式,是資料庫中對全體資料的邏輯結構和特性的描述,是所有使用者所見到的資料檢視的總和。外模式是模式的一部分。內模式,或稱儲存模式,或稱物理模式,是指資料在資料庫系統內的儲存介質上的表示。即對資料的物理結構和存取方式的描述。

(11)C語言規定,程式中各函式之間_______。

A)既允許直接遞迴呼叫也允許間接遞迴呼叫

B)不允許直接遞迴呼叫也不允許間接遞迴呼叫

C)允許直接遞迴呼叫不允許間接遞迴呼叫

D)不允許直接遞迴呼叫允許間接遞迴呼叫

(11)A

知識點:函式的遞迴呼叫

評 析:c語言規定,程式中各函式之間既允許直接遞迴呼叫也允許間接遞迴呼叫。

(12)C語言中下列敘述正確的是_______。

A)不能使用do-while語句構成的迴圈

B)do-while語句構成的迴圈,必須用break語句才能退出

C)do-while語句構成的迴圈,當while語句中的表示式值為非零時結束迴圈

D)do-while語句構成的迴圈,當while語句中的表示式值為零時結束迴圈

(12)D

知識點:do-while語句

評 析:選項A是錯誤的,c語言支援do-while語句;選項B是錯誤的,do-while構成的迴圈,當while語句中的表示式值為零時結束迴圈,而不是非零;選項C也是錯誤的。

(13)以下選項中屬於C語言的資料型別是_______。

A)複數型 B)邏輯型 C)雙精度型 D)集合型

(13)C

知識點:c語言的資料型別

評 析:c語言的資料型別分為基本型別、構造型別、指標型別、空型別四大類。其中,基本型別分為整型、字元型、實型三類。實型又稱浮點型,包括單精度型和雙精度型兩種型別。

(14)在C語言中,不正確的int型別的常數是_______。

A)32768 B)0 C)037 D)0xAF

(14)A

知識點:int型別的範圍

評 析: c語言中int型別的常數的範圍是:-32768~32767。c整常數可用三種形式表示:十進位制整數,八進位制整數,十六進位制整數。選項A超出範圍,不正確。

(15)下列描述中不正確的是_______。

A)字元型陣列中可以存放字串

B)可以對字元型陣列進行整體輸入、輸出

C)可以對整型陣列進行整體輸入、輸出

D)不能在賦值語句中通過賦值運算子“=”對字元型陣列進行整體賦值

(15)C

知識點:對陣列的理解

評 析: c語言規定只能逐個引用陣列元素而不能一次引用整個陣列。字元陣列的輸入、輸出可以將整個字串一次輸入或輸出。所以,選項C的說法是不正確的。

(16)以下程式的輸出結果是_______。

main()

{ int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p。&x[1][1];

for(i=0;i<4;i+=2)printf("%d",p[i]];

}

A)5 2 B)5 1 C)5 3 D)9 7

(16)C

知識點:通過指標引用陣列元素

評 析:題中*p=&x[1][1];是指將陣列x的陣列元素x[1][1]的地址賦值給指標變數p,使p指向x[l][l]這個陣列元素,那麼p[0]即為指標變數p當前所指向的陣列元素x[l][1]的值。具體執行時如下所示:

i=0時,輸出p[0],也就是x[1][1],輸出是5:

i=2時,輸出p[2],即p[2+0],也就是x[2][0],輸出是3。

(17)以下程式的執行結果是_______。

#include "stdio.h"

main()

{

int a[]={1,2,3,4,5,6,7,8,9,10,11,12};

int*p=a十5,*q=NULL;

*q=*(p+5);

printf("%d %d ",*p,*q);

}

A)執行後報錯 B)6 6

C)6 12 D)5 5

(17)A

知識點:通過指標引用陣列

評 析:題目中沒有給q分配儲存單元,只是簡單地給它賦了一個值,所以程式的執行結果是6 ll NULL pointer assignment,也就是執行後報錯。

(18)以下說法中正確的是________。

A)c語言程式總是從第一個函式開始執行

B)在C語言程式中,要呼叫函式必須在main()函式中定義

C)C語言程式總是從main()函式開始執行

D)c語言程式中的main()函式必須放在程式的開始部分

(18)C

知識點: C程式的執行順序

評 析:c語言的程式是由主函式main()開始執行,由主函式來呼叫其他函式,所以選項A錯誤;c語言中定義的函式必須是並列的,不能在一個函式中定義其他函式,選項B錯誤;函式必須先定義後使用,在呼叫函式之前要定義函式,而mmn()函式不一定要放在程式的開始部分,故選項D錯誤。

(19)能正確表示a和b同時為正或同時為負的邏輯表示式是________。

A)(a>=0l lb>=0)&&(a<0I lb<0) a="">=0&&b>--0)&&(a<0&&b

C)(a+b>0) &&(a+b<=0) b="">0

(19)D

知識點:對邏輯表示式的判斷

評 析:邏輯表示式是指用邏輯運算子將關係表示式或邏輯量連線起來。

選項A中,表示式表示的是a,b為異號;

選項B中,表示式表示的是0,因為沒有滿足條件的值;

選項C中,表示式表示的是0,因為沒有滿足條件的值;

選項D表示的是a和b為同號。

(20)若己定義:int a[9],*p=a;並在以後的語句中未改變p的值,不能表示a[l]地址的表示式是________。

A)p+l B)a+l C)a++ D)++p

(20)C

知識點:陣列地址的表示

評 析:陣列名是指標常量,是個固定的指標,不能對陣列名賦予一個新的地址值,也不能使這個指標常量“移動”,指向陣列的其他元素。

(21)以下程式的輸出結果是________。

main()

{ int a=-l,b=l,k;

if((++a<0)&&!(b--<=0))

printf("%d %d ",a,b);

else

printf("%d %d ”,b,a);

}

A)-l l B)0 1

C)1 0 D)0 0

(21)C

知識點:if條件的判斷

評析:邏輯運算子的優先次序如下:!(非)→&&(與)→||(或),但本題需特別注意的是短路的概念:對於&&運算子,其兩邊表示式的值只要有一邊為假,則整個與運算表示式的值即為假,系統在執行時,先運算&&左邊的表示式,若為假,則系統不會再判斷&&運算子右邊的表示式了,直接運用短路原理得整個與運算表示式的值為0。由於++a是先運算後使用,b--是先使用後運算。所以本題在執行++a後,a值為0,不滿足條件,所以a為l,根據短路原理,b仍為0,接下去執行else語句,輸出l 0。

(22)以下選項中,能定義s為合法的結構體變數的是________。

A) typedef struct abc

{ double a;

char b[10];

}s;

B ) struct

{ double a;

char b[10];

}s;

C) struct ABC

{ double a;

char b[10];

}

ABC s;

D ) typedef ABC

{ double a;

char b[10];

}

ABC s:

(22)B

知識點:結構體變數的定義

評析:定義一個結構體型別的變數,可採用三種方法:

①先定義結構體型別,再定義變數名;

②在定義型別的同時定義變數;

③直接定義結構型別變數,即不出現結構體名。

選項B符合第三種定義方法。

(23)請讀程式:

#include

#include

main()

{

char*sl="AbCdEf",*s2="aB";

s1++;s2++;

printf("%d ",strcmp(s1,s2));

}

上面程式的輸出結果是_______。

A)正數 B)負數 C)零 D)不確定的值

(23)A

知識點:字串比較函式strcmp()的應用

評析:strcmp(X1,X2)是串比較函式,當X1>X2時返回值為正數,當X1

本題中“sl”、“s2”分別表示這兩個串中第一個字元的地址,s1++和s2++是將指標指向串的第二個字元,則*sl為“bCdEf',,*s2為“B”。而在字串比較中。大小的確定是由各個字串相應位置字元的ASCII碼值的大小決定的。“B”的ASCII碼值為66,”b”的ASCII碼值為98,所以sl>s2,返回值為正數。

(24)請讀程式:

#include

func(int a,int b){

int c:

c=a+b:

return C:

}

main(){

int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--);

printf("%d ",r);

}

上面程式的輸出結果是________。

A)11 B)20 C)2l D)31

(24)C

知識點:自增、自減運算

評析:函式func()的作用是返回兩個形參的和,第一個形參是x、y分別自減和自增後的和,其中(x--,y++,x+y)是一個逗號表示式,它的值應該等於x+y,所以整個表示式(x--,y++,x+y)的值為13,而第二個形參的值為8(根據語法規則,應當先使用,後自增),所以fune()的返回值為13+8=21。

(25)請讀程式:

#include

main()

{

int a,b;

for(a=1,b=l;a<=100;a++){

if(b>=20)break;

if(b%3==1){b+=3;continue;}

b_=5:

}

printf("%d ",a);

}

上面程式的輸出結果是________。

A)7 B)8 C)9 D)10

(25)B

知識點:break語句和continue語句

評析:break語句的作用是用於跳出迴圈體,繼續執行迴圈體下面的語句;而continue語句的作用是用於跳出本次迴圈,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。“%”是求餘運算子,執行第一次迴圈時,條件(b%3==1)為真,b=4,繼續下一次迴圈,如此反覆,當b=22時,條件(b>=20)為假,跳出迴圈,此時共迴圈8次,即a=8。

(26)請讀程式片段(字串內沒有空格字元):

printf("%d ",strlen("ATS 0l2l"));

上面程式片段的輸出結果是_______。

A)l1 B)10 C)9 D)8

(26)C

知識點:字串的長度

評析:這個語句的目的是輸出“ATS 0121”這個串的長度,在串中“”代表一個“”,為了和printf()函式中的轉義字元區分開來,在語法上使用了兩個反斜槓代替了一個反斜槓,所以它僅僅為一個字元,而”l”代表數字l,也佔一個字元,“ ”是回車換行符,也佔一個字元,加上A、T、s、0、1、2,一共是9個字元。

(27)請選出可用作C語言使用者識別符號的一組識別符號_______。

A)Void B)a3_b3 C)For D)2a

define _123 _abc DO

WORD IF case sizeof

(27)B

知識點:C語言的識別符號

評析:c語言規定識別符號只能由字母、數字和下劃線三種符號組成,而且第一個字元必須是字母或下劃線。

選項A中的void和define都和c語言的關鍵字重名,不合法;

選項C中的case和c語言的關鍵字重名,不合法;

選項D中的2a是數字打頭而且sizeof和c語言的關鍵字重名,不合法。

(28)請選出以下程式的輸出結果_______。

#include

sub(int*s,int y)

{ static int t=3;

y=s[t];t--;

}

main()

{ int a[]={1,2,3,4},i,x=0;

for(i=0;i<4;i++){

sub(a,x);printf("%d",x);}

printf(" ");

}

A)1234 B)432l C)0000 D)4444

(28)C

知識點:函式的形參和實參的關係

評析:x作為函式sub()的實參時,函式對x值的改變沒有返回主函式,並不能使得x的值變化,所以在列印時,x的值是始終不變的,即為O。

(29)若有以下說明和語句,請選出哪個是對c陣列元素的正確引用_______。

int c[4][5],(*cp)[5];

cp=c;

A)cp+l B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2)

(29)D

知識點:陣列元素的引用

評析:cp=c這個語句是將陣列第0行的地址賦給了cp。cp+l使指標指向二維陣列c的第一行;*(cp+3)是陣列c的第三行的第0列的地址值;+(cp+1)+3是陣列c的第一行第三列的地址值。

(30)設有以下語句

char a=3,b=6,c;

c=a^b<<2:

則c的二進位制值是_______。

A)00011011 B)00010100 C)000ll 100 D)00011000

(30)A

知識點:位運算

評析:“<<”是c語言中規定的左移運算子,例如,a=a<<2,這個語句即是將a的二進位制數左移兩位,左移一位相當於該數乘以2,左移兩位相當於該數乘以2的2次方;,^是異或運算子,所以,c的二進位制值應為0001101l。

(31)設有

static char str[]="Beijing";

則執行

printf("%d ",strlen(strcpy(str, "China")));

後的輸出結果為_______。

A)5 B)7 C)12 D)14

(31)A

知識點:字串的長度

評析:在執行printf()函式前,陣列str的長度是7,但是當使用strcpy()函式將新的值賦給str後,strlen()函式返回的應當是現在的str字串的字元個數,即是5。

(32)以下程式的輸出結果是_______。

#include

main()

{ int i;

for(i=1;i<5;i++){

if(i%2)printf("*");

else continue;

printf("#");

}

print"$ ");

}

A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$

(32)C

知識點:if語句的判斷

評析:當i不可以整除2時列印”*”,然後列印“#”,不能整除2則執行continue,跳過printf(“#”);語句,結束本次迴圈,返回到迴圈的起始點。當迴圈結束後,列印“$”。

(33)有以下程式

#include

main()

{ int c;

while((c=get))!=‘ ’){

switch(C-‘2’){

case O:case 1:putc+4);

case 2:putc+4);break;

case 3:putc+3);

default:putc十2);break;}

}

}

從第一列開始輸入以下資料,↙代表一個回車符。

2473↙

程式的輸出結果是_______。

A)668977 B)668966 C)66778777 D)6688766

(33)A

知識點:switch()語句

評析:get)函式是從鍵盤接受一個字元輸入;當用戶鍵入的字元不是回車符時,會進入一個多分支選擇語句,根據表示式c-‘2’的值進行分支選擇:put)是在螢幕上列印一個字元,最後的結果應當為668977。

(34)以下程式的輸出結果是________。

main()

{ int w=5;fun(w);printf(" ");}

fun(int k)

{ if(k>O) fun(k_1);

printf("%d",k);

}

A)5 4 3 2 l B)0 1 2 3 4 5

C)1 2 3 4 5 D)5 4 3 2 1 0

(34)B

知識點:函式的遞迴呼叫

評析:函式的遞迴呼叫就是在呼叫一個函式的過程中又出現直接或間接地呼叫該函式本身。fun函式共被呼叫6次,即fun(5)、fun(4)、fun(3)、fun(2)、fun(1)、fun(O)。其中fun(5)是main函式呼叫的,其餘是在fun函式中呼叫的。

(35)若fp是指向某檔案的指標,且已讀到此檔案的末尾,則函式feof(f1))的返回值是_________ 。

A)EOF B)0 C)非零值 D)NULL

(35)C

知識點:檔案結束符的返回值

評析:函式feof是用來判斷檔案是否已讀到末尾,如果己讀到末尾則返回非零值,否則返回O。

(36)演算法的時間複雜度是指_______。

A)執行演算法程式所需要的時間

B)演算法程式的長度

C)演算法執行過程中所需要的基本運算次數

D)演算法程式中的指令條數

(36)C

知識點:演算法複雜度的概念和意義(時問複雜度與空間複雜度)

評析:所謂演算法的時間複雜度,是指執行演算法所需要的計算工作量。為了能夠比較客觀地反映出一個演算法的效率,在度量一個演算法的工作量時,不僅應該與所使用的計算機、程式設計語言以及程式編制者無關,而且還應該與演算法實現過程中的許多細節無關。為此,可以用演算法在執行過程中所需基本運算的執行次數來度量演算法的工作量。

(37)下列敘述中正確的是_______。

A)線性表是線性結構 B)棧與佇列是非線性結構

C)線性連結串列是非線性結構 D)二元樹是線性結構

(37)A

知識點:線性結構與非線性結構的概念

評析:根據資料結構中各資料元素之間相關聯關係的複雜程度,一般將資料結構分為兩大型別:線性結構與非線性結構。如果一個非空的資料結構滿足下列兩個條件: (1)有且只有一個根結點; (2)每一個結點最多有一個前件,也最多有一個後件。則稱該資料結構為線性結構,又稱線性表。所以線性表、棧與佇列、線性連結串列都是線性結構,而二元樹是非線性結構。

(38)下面關於完全二元樹的敘述中,錯誤的是_______。

A)除了最後一層外,每一層上的結點數均達到最大值

B)可能缺少若干個左右葉子結點

C)完全二元樹一般不是滿二元樹

D)具有結點的完全二元樹的深度為[log2n]+l

(38)B

知識點:二元樹的定義及其儲存結構

評析:這裡考察完全二又樹與滿二元樹的定義及二元樹的性質。滿二元樹指除最後一層外每一層上所有結點都有兩個子結點的二元樹。完全二元樹指除最後一層外,每一層上的結點數均達到最大值,在最後一層上只缺少右邊的若干子結點(葉子結點)的二元樹。因此選項A是正確的,而選項B是錯誤的。由定義可知,滿二元樹肯定是完全二又樹,而完全二又樹一般不是滿二元樹,因此選項c是正確的敘述。選項D即二又樹性質(5),也是正確的。

(39)結構化程式設計主要強調的是_______。

A)程式的規模 B)程式的易讀性

C)程式的執行效率 D)程式的可移植性

(39)B

知識點:結構化程式設計

評析:結構化程式設計主要強調的足結構化程式清晰易讀,可理解性好,程式設計師能夠進行逐步求精、程式證明和測試.以保證程式的正確性。

(40)在軟體生命週期中,能準確地確定軟體系統必須做什麼和必須具備哪些功能的階段是_______。

A)概要設計 B)詳細設計 C)可行性分析 D)需求分析

(40)D

知識點:軟體工程基本概念,軟體生命週期概念,軟體工具與軟體開發環境

評析:通常,將軟體產品從提出、實現、使用維護到停止使用退役的過程稱為軟體生命週期。也就是說,軟體產品從考慮其概念開始,到該軟體產品不能使用為止的整個時期都屬於軟體生命週期。軟體生命週期的主要活動階段為:

① 可行性研究和計劃制定。確定待開發軟體系統的開發目標和總的要求,給出它的功能、效能、可靠性以及介面等方面的可行方案,制定完成開發任務的實施計劃。

②需求分析。對待開發軟體提出的需求進行分析並給出詳細定義,即準確地確定軟體系統的功能。編寫軟體規格說明書及初步的使用者手冊,提交評審。

③軟體設計。系統設計人員和程式設計人員應該在反覆理解軟體需求的基礎上,給出軟體的結構、模組的'劃分、功能的分配以及處理流程。

④軟體實現。把軟體設計轉換成計算機可以接受的程式程式碼。即完成源程式的編碼,編寫使用者手冊、操作手冊等面向使用者的文件,編寫單元測試計劃。

⑤軟體測試。在設計測試用例的基礎上,檢驗軟體的各個組成部分。編寫測試分析報告。

⑥執行和維護。將已交付的軟體投入執行,並存執行使用中不斷地維護,根據新提出的需求進行必要而且可能的擴充和刪改。

(41)資料流圖用於抽象描述一個軟體的邏輯模型,資料流圖由一些特定的圖符構成。下列圖符名標識的圖符不屬於資料流圖合法圖符的是_______。

A)控制流 B)加工 C)資料儲存 D)源和潭

(41)A

知識點:結構化分析方法,資料流圖,資料字典,軟體需求規格說明書

評析:資料流圖從資料傳遞和加工的角度,來刻畫資料流從輸入到輸出的移動變換過程。資料流圖中的主要圖形元素有:加工(轉換)、資料流、儲存檔案(資料來源)、源和潭。

(42)軟體需求分析一般應確定的是使用者對軟體的_______。

A)功能需求 B)非功能需求 C)效能需求 D)功能需求和非功能需求

(42)D

知識點:結構化設計方法

評析:軟體需求分析中需要構造一個完全的系統邏輯模型,理解使用者提出的每一功能與效能要求,是使用者明確自己的任務。因此,需求分析應確定使用者對軟體的功能需求和非功能需求。

(43)下述關於資料庫系統的敘述中正確的是_______。

A)資料庫系統減少了資料冗餘

B)資料庫系統避免了一切冗餘

C)資料庫系統中資料的一致性是指資料型別的一致

D)資料庫系統比檔案系統能管理更多的資料

(43)A

知識點:資料庫的基本概念:資料庫,資料庫管理系統,資料庫系統

評析:由於資料的整合性使得資料可為多個應JH=j所共享,特別是在網路發達的今天,資料庫與網路的結合擴大了資料關係的應用範圍。資料的共享自身義可極大地減少資料冗餘性,不僅減少了不必要的儲存空間,更為重要的是可以避免資料的不一致性。所謂資料的一致性是指在系統中同一資料的不同出現應保持相同的值,而資料的不一致性指的是同一個資料在系統的不同拷貝處有不同的值。

(44)關係表中的每一橫行稱為一個_______。

A)元組 B)欄位 C)屬性 D)碼

(44)A

知識點:資料庫的基本概念:資料庫.資料庫管理系統,資料庫系統

評析:在關係資料庫中,關係模型採用二維表來表示,簡稱“表”。二維表是由表框架及表元組組成。在表框架中,按行可以存放資料,每行資料稱為元組。

(45)資料庫設計包括兩個方面的設計內容,它們是_______。

A)概念設計和邏輯設計 B)模式設計和內模式設計

C)內模式設計和物理設計 D)結構特性設計和行為特性設計

(45)A

知識點:資料庫設計方法和步驟:需求分析、概念設計、邏輯設計和物理設計的相關策略

評析:資料庫設計可分為概念設計與邏輯設計。資料庫概念設計的目的是分析資料問記憶體語義關聯,在此基礎上建立一個數據的抽象模型。資料庫邏輯設計的主要工作是將E-R圖轉換為指定的RDBMS中的關係模型。

(46)請讀程式:

#include

main()

{

int a;float b,c;

scanf("%2d%3f%4f",&a,&b,&c);

printf(" a=%d,b=%Cc=%f ",a,b,c);

}

若執行時從鍵盤上輸入9876543210↙,則上面程式的輸出結果是_______。

A)a=98,b=765,c=4321

B)a=10,b=432,c=8765

C)a=98,b=765.000000,c=432 1.000000

D)a=98,b=765.0,c=4321.0

(46)C

知識點:格式輸入、輸出函式

評析:scanf()把剛戶從鍵盤錄入的數字的第1、2位存入整型變數a;把第3、4、5位存入單精度實型變數b,由於“f”是以小數形式輸出單、雙精度數。隱含輸出6位小數,所以b=4321.000000;把第6、7、8、9位存入單精度實型變數c,使用者錄入的第10位被scanf()遺棄。這時變數fd、b、c的值分別為:98、765.000000、432 1.000000。

(47)請選出以下程式的輸出結果_______。

#include

sub(x,y,z)

int x,y,*z:

{*z=y-x;}

main(){

int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);

printf("%d,%d,%d ",a,b,c);

}

A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7

(47)B

知識點:函式的呼叫

評析:sub()函式的作脂是將形參y和x的差賦給了z指向的那個記憶體地址,所以在sub(10,5,&a)中,10和5膈於值傳遞,直接將數值j0和5分別傳遞給了變數x和y,而對於a是屬於地址傳遞,也就是a與z指向了蚓一個儲存單元,在執行函式後,a的值隨*z變化,但b,c值並不改變,所以此次函式被呼叫後,a的值為y-x=-5,同理可知,在sub(7,a,&b)後,b的值發生變化,其值為-5-7=-12,住sub(a,b,&c)後,c的值發生變化,其值為-12-(-5)=-7。

(48)若x是整型變數,pb是基型別為整型的指標變數,則正確的賦值表示式是_______。

A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=*x

(48)A

知識點:賦值表示式

評析:選項A是將變數x的地址賦給指鉗‘變數pb,使pb指向x,故為正確的賦值表示式。

選項B是將x的值當作地址賦給指標pb,pb指¨一個地址等於x值的記憶體單元。

選項C足將x的地址賦給指標pb指向的那個地址等於x值的記憶體單元。

選項D是不正確的語句。

(49)若要用下面的程式片段使指標變數p指向一個儲存整型變數的動態儲存單元

int *p;

p=_______malloc(sizeof(int));

則應填入_______。

A)int B)ira* C)(*int) D)(int*)

(49)D

知識點:強制型別轉換

評析:不論p是指向什麼型別的指標變數,都可以通過強制型別轉換的方法使之型別一致,強制型別轉換的格式為(資料型別*)。

(50)若執行下面程式時從鍵盤上輸入5,

main()

{

int x;

scanf("%d",&x);

if(x++>5)printf("%d ",x);

else printf("%d ",x--);

}

則輸出是_______。

A)7 B)6 C)5 D)4

(50)B

知識點:if條件的判斷

評析:根據c語言的語法,x+十是在使用x之後,再將x的值加1,在if語句中,x的值為5,條件不成立,執行else後面的語句,因為x的值已經加1,為6,所以列印結果為6。

(51)設a、b和c都是int型變數,且a=3、b=4、c=5,則下面的表示式中,值為0的表示式是_______。

A)‘a’&&‘b’ B)a<=b C)a||+c&&b-c D)!((a

(51)D

知識點:幾種運算子的使用

評析:選項A:‘a’&&‘b’是字元a與b的相與,故不為0。

選項B:a<=b,由題中變數賦值可知,結果為l。

選項c:a||+c&&b-c,此表示式先做算術運算b-c,結果為一1.而+c屬於單目運算子,由於c初值為5,經過單目運算子運算後,還是5,下面再進行邏輯與的運算,即5&&-1結果為1(因為c語言中除O代表假外,其他任一個數都代表真),最後a||l,結果為1。

選項D:!((a

(52)設有如下程式

#include

main()

{

int **k,*j,i=100;

j=&i; k=&j;

printf("%d ",**k);

}

上述程式的輸出結果是_______。

A)執行錯誤 B)100 c)i的地址 D)j的地址

(52)B

知識點:指標變數的引用

評析:j=&i,j的值就是i的地蚍,*j=100,將j的地址賦給k,這時*k=j,那麼,**k=*j,而*j=100,所以**k=100,最後的列印結果應當為100。

(53)設有以下語句,其中不是對a陣列元素的正確引用的是:_______(其中0≤i

int a[10]={0,l,2,3,4,5,6,7,8,9,},*p=a;

A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))

(53)D

知識點:通過指標引用陣列元素

評析:觀察程式可知.a實際上就是陣列a的首地址,所以“*(a+i)”表示的就是陣列a中的第i個元素的值,進而,我們可以知道*(*(a+i))必然不是對a陣列元素的正確引用。

(54)有以下程式:

#include

main(){

char c[6];

int i=0:

for(;i<6;c[i]=get),i++);

for(i=0;i<6;i++)putc[i]);

printf(" ");

}

如果從鍵盤上輸入:

ab<回車>

c<回車>

def<回車>

則輸出結果為________。

A)a B)a C)ab D)abcdef

b b c

c c d

d d

e

f

(54)C

知識點:字元資料的輸入、輸出

評析:)

此函式的作用是從終端(或系統隱含指定的輸入裝置)輸入一個字元。請注意:get)只能接受一個字元(回車符也算是一個字元)。getchar函式得到的字元可以賦給一個字元變數或整型變數,也可不賦給任何變數,作為表示式的一部分。

)

此函式的作用是向終端輸出一個字元,也可以輸出控制字元,如回車符使輸出的當前位置移到下一行的開頭。

本題在輸入字元時,ab和c後面的回車符分別賦給了c[2]和c[4],所以,正確答案為C。

(55)下面程式

#include

#include

main()

{ char*p1:"abc",*p2="ABC",str[50]= "xyz";

strcpy(str+2,strcat(p1,p2));

printf("%s ",str);

}

的輸出是_______。

A)xyzabcABC B)zabcABC

C)yzabcABC D)xyabcABC

(55)D

知識點:字串的連線和拷貝

評析:strcat(字元陣列l,字元陣列2)的作用是連線兩個字元陣列中的字串,把字串2接到字串l的後面,結果放在字元陣列l中,本題中strcat(p1,p2)函式將*pl和*p2指向的兩個串連線了起來,將字串abcABC放到了*pl所指向的儲存單元中:而strcpy(字元陣列1,字串2)函式將字串2複製到字元陣列1中去,本題將字串abcABC複製到了str+2所指向的儲存單元中,即將原str陣列中的字元z及z向後的所有字元覆蓋,所以在列印輸出時,str的值已經等於“xyabcABC”。

(56)下面程式

int aa[3][3]={{2},{4},{6}};

main()

{ int i,*p=&aa[0][0];

for(i=0;i<2;i++){

if(i==0)aa[i][i+1]=*p+l;

else ++p;

printf("%d",*p);

}

}

的輸出是_______。

A)23 B)26 C)33 D)36

(56)A

知識點:for迴圈語句

評析:觀察題目,可以發現,*p=&aa[0][O]語句實際是將陣列aa的首地址賦給了指標變數p,將i的值帶入for迴圈中,i=0時,aa[0][1]=3,*p=2;*p輸出的是指標所指向的陣列值,此時p所指向的是aa[0][0],輸出2,而i=l時執行了++p操作,使指標向後移動指向了aa[0][l],所以在輸出*p時應為3。

(57)下面程式

main()

{ int x=100,a=10,b=20,okl=5,ok2=0;

if(a

if(b!=15)

if(!okl)x=1;

else if(ok2)x=10;

X=-1;

Ptintf("%d ",x);

}

的輸出是_______。

A)-1 B)0 C)1 D)不確定的值

(57)A

知識點:判斷語句的迴圈巢狀

評析:第一個判斷值為真,過渡到下一個判斷,第二個判斷為真,過渡到第三個判斷……如此迴圈,在列印輸出語句的前一行,程式給變數x賦了值,為一l,所以,無論前期如何變化,最後的x值依然為一l。

(58)下面程式

main()

{

int x=32:

printf("%d ",x=x<<1);

}

的輸出是_______。

A)100 B)160 C)120 D)64

(58)D

知識點:位運算

評析:<<是c語言中規定的左移運算子,例如,a=a<<2,這個語句即是將a的二進位制數左移兩位,左移一位相當於該數乘以2,左移兩位相當於該數乘以2的2次方。所以,x<<1=32*2-64。

(59)以下程式的輸出結果是________。

#include

#define FUDGE(y) 2.84+y

#define PR(a) printf("%d",(int))(a))

#define PRINT l(a) PR(a);put‘ ’)

main()

{ int x=2;

PRINT l(FUDGE(5)*X);

}

A)1l B)12 C)13 D)15

(59)B

知識點:帶引數的巨集定義

評析:在程式中如果有帶實參的巨集,則按#define命令列中指定的字串從左到右進行置換,如果串中包含巨集中的形參,則將程式語句中相應的實參代替形參,如果巨集定義中的字串中的字元不是引數字元,則保留,這樣就形成了置換的字串。

根據以上原則,我們將實參帶入已經定義的巨集中,可以得出答案,最後打印出來的是“12”。

(60)以下程式段給陣列所有的元素輸入資料,請選擇正確答案填入:

#include

main()

{

int a[10],i=0;

while(i

:

:

}

A)a+(i++) B)&a[i+l] C]a+i D]&a[++i]

(60)A

知識點:格式輸入函式scanf()

評析:因為a實際上就是陣列a的首地址,而a+x則是陣列中第x個元素的地址,所以在四個選項中,選項B和C只能輸入一個數據,選項D不能給a[0]輸入資料,只有選項A可以完成給陣列所有的元素輸入資料的任務。

(61)字元(char)型資料在微機記憶體中的儲存形式是________。

A)反碼 B)補碼

C)EBCDIC碼 D)ASCII碼

(61)D

知識點:字元資料在記憶體中的儲存形式

評析:將一個字元常量放到一個字元變數中,實際上並不是把該字元本身放到記憶體單元中去,而是將該字元的ASCII碼值放到儲存單元中。

(62)下面程式的輸出是________。

typedef union

{ long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE them;

main()

{ printf("%d ",sizeof(them));}

A)32 B)16 C)8 D)24

(62)C

知識點:共用體的長度

評析:sizeof(x)是一個標準c函式,它的返回值是x型的資料結構佔用的記憶體位元組數。題目中定義了一個共用體,共用體變數在記憶體中所佔的長度等於最長的成員的長度,所以共用體MYTYPE需要8個位元組的儲存空間,由它定義的變數的長度當然也是8。

(63)不能把字串:“Hello!”賦給陣列b的語句是________。

A)char b[10]={‘H’,‘e’,‘l’,‘l’,‘0’,‘!’};

B)char b[10]={‘h’,‘e’,‘l’,‘l’,‘0’,‘!’};

C)char b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

(63)B

知識點:給陣列賦值

評析:在c語言中,大寫字母和小寫字母被認為是兩個不同的字元,因此,“hello!”和“Hello!”是兩個不同的字串。

(64)下面程式的輸出是________。

main()

{ int x=3,y=6,a=0;

while(x++!=(y—=1))

{ a+=1;

if(y

}

printf("x:%d,y:%d,a=%d ",x,y,a);

}

A)x=4.v=4,a=1 B)x=5,y=5,a=1

C)x=5,y=4,a=3 D)x=5,y=4,a=l

(64)D

知識點:運算子

評析:注意在x++中x值的引用時,這裡應當是先引用,後自加,具體執行過程如下:

第一次while迴圈:x=3與y=5比較,條件為真,執行a=a+1=1;此時,x的值己為4,判斷y

第二次while迴圈:x=4與y=4比較,條件為假,此時x的值已為5,退出while迴圈,執行printf。

(65)下面程式的輸出是_______。

main()

{char*s:"12134211";

int vl=0,v2=0,V3=0,v4=0,k;

for(k=0;s[k];k++)

switch(s[k])

{ default:V4++;

case‘1’:vl++:

case‘3’:v3++:

case‘2’:v2++:

}

printf("vl=%d,v2=%d,v3=%d,v4=%d ",vl,v2,v3,V4);

}

A)vl=4,v2=2,v3=l,v4=1 B)vl=4,V2=9,V3=3,V4=l

C)vl=5,v2=8,v3=6,v4=1 D)vl=8,V2=8,V3=8,v4=8

(65)C

知識點:switch()語句

評析:當switch後面括弧內的表示式的值與某一個case後面的常量的表示式的值相等時,就執行此case後面的語句,若所有的case中的常量表達式的值都沒有與表示式的值匹配的,就執行default後面的語句。本題中,for迴圈的條件是s陣列的陣列元素值,只要將陣列的值一一代入程式逐步求解即可。

(66)下面程式的輸出是_______。

main()

{int k=ll;

printf("k=%d,k=%o,k=%x ",k,k,k);

}

A)k=11.k=12,k=ll B)k=ll,k=13,k=13

C)k=ll,k=013,k=0xb D)k=ll,k=13,k=B

(66)D

知識點:格式字元

評析:在c語言格式字元的輸出中,“%d”是以帶符號的十進位制形式輸出整數,即k=ll:“%o”是以8進位制無符號形式輸出整數(不輸出前導符0),即k=13:“%x”是以16進位制無符號形式輸出整數(不輸出前導符0x),即k=B。

(67)以下敘述中正確的是_______。

A)c語言比其他語言高階

B)C語言可以不用編譯就能被計算機識別執行

c)c語言以接近英語國家的自然語言和數學語言作為語言的表達形式

D)C語言出現的最晚,具有其他語言的一切優點

(67)C

知識點:c語言風格

評析:計算機語言分為低階語言、組合語言和高階語言,c語言屬於高階語言,但並不是說c語言比其他語言高階,所以選項A錯誤;除了低階語言外,其他各種語言都必須編譯成能被計算機識別的二進位制數才能執行,選項B錯誤;c語言出現於1972年到1973年問,並不是出現最晚的語言,所以選項D也是錯誤的。

(68)下列可用於c語言使用者識別符號的一組是_______。

A)void define WORD B)a3_b3 _123 Car

C)For -abc IFCase D)2a D0 sizeof

(68)B

知識點:c語言的識別符號

評析:c語言規定識別符號只能由字母、數字和下劃線3種字元組成,且第一個字元必須為字母或下劃線,所以排除c和D。c語言還規定識別符號不能為c語言的關鍵字,從而選項A是錯誤的,因為void為關鍵字。

(69)請選出正確的程式段________。

A)int*p B)int*s,k;

Scanf("%d",p); *s=100;

……

C)int*s,k: D)int*s,k;

Char*p,c; char*p,e;

s=&k; s=&k;

p=&c; p=&c;

*p=‘a’; s=p;

…… *s=l;

……

(69)C

知識點:指標變數

評析:本題的A和B犯了一個同樣的錯誤,即指標變數p定義後並沒有指向具體的變數。也就是說,p中沒有確定的地址值,它的值是不可預見的,所指向的單元也是不可預見的,因此不能進行賦值操作。另外,在選項D中,s是int指標變數,p是char型指標變數,所指向的記憶體單元所佔用的位元組數是不同的,因而不能將字元指標變數p的值賦給整型指標變最s。

更多計算機二級c語言相關文章:

1.2016年計算機二級C語言試題帶答案

2.2016年9月計算機二級C語言試題題庫

3.計算機二級C語言新增無紙化真題試卷

4.計算機二級C語言模擬試題及答案

5.計算機二級c語言題庫2016

6.9月計算機二級c語言試題及答案

7.2016年9月計算機二級c語言試題(帶答案)

8.2016年計算機二級c語言題庫及答案

9.2016年計算機二級C語言練習題及答案

10.2016年9月計算機二級c語言題庫及答案

TAG標籤:試題 語言 二級 計算機 #