當前位置:首頁 » 編程語言 » 二級計算機c語言真題

二級計算機c語言真題

發布時間: 2023-06-07 21:34:28

A. 9月計算機二級《c語言》上機試題及答案

(1)一個棧的初始狀態為空。現將元素1、2、3、4、5、A、B、c、D、E依次入棧,然後再依次出棧,則元素出棱的順序是( )。

A.12345ABCDE

B.EDCBA54321

C.ABCDEl2345

D.54321EDCBA

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

A.循環隊列有隊頭和隊尾兩個指針,因此,循環隊列是非線性結構

B.在循環隊列中,只需要隊頭指針就能反映隊列中元素的動態變化情況

C.在循環隊列中,只需要隊尾指針就能反映隊列中元素的動態變化情況

D.循環隊列中元素的個數是由隊頭指針和隊尾指針共同決定的

(3)在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是( )。

A.0(n)

B.D(n2)

C.O(1092n)

D.0(nl092n)

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

A.順序存儲結構的存儲一定是連續的,鏈式存儲結構的存儲空間不一定是連續的

B.順序存儲結構只針對線性結構,鏈式存儲結構只針對非線性結構

C.順序存儲結構能存儲有序表,鏈式存儲結構不能存儲有序表

D.鏈式存儲結構比順序存儲結構節省存儲空間

(5)數據流圖中帶有箭頭的線段表示的是( )。

A.控制流

B.事件驅動

C.模塊調用

D.數據流

(6)在軟體開發中,需求分析階段可以使用的工具是( )。

A.N—s圖

B.DFD圖

C.PAD圖

D.程序流程圖

(7)在面向對象方法中,不屬於“對象”基本特點的是( )。

A.一致性

B.分類性

C.多態性

D.標識唯一性

(8)一間宿舍可住多個學生,則實體宿舍和學生之間的聯系是( )。

A.一對一

B.一對多

C.多對一

D.多對多

(9)在數據管理技術發展的三個階段中,數據共享最好的是( )。

A.人工管理階段

B.文件系統階段

C.資料庫系統階段

D.三個階段相同

(10)有三個關系R、S和T如下:

由關系R和S通過運算得到關系T,則所使用的運算為( )。

A.笛卡爾積

B.交

C.並

D.自然連接

(11)下列敘述中錯誤的是( )。

A.C程序可以由多個程序文件組成

B.一個c語言程序只能實現一種演算法

C.c程序可以由一個或多個函數組成,

D.一個C函數可以單獨作為一個C程序文件存在(12)以下選項中,能用作數據常量的是( )。

A.115L

B.0118

C.1.5el.5

D.0115

(13)按照c語言規定的用戶標識符命名規則,不能出現在標識符中的是( )。

A.大寫字母

B.下劃線

C.數字字元

D.連接符

(14)設變數已正確定義並賦值,以下正確的表達式是( )。

A.X=Y+z+5,++Y

B.int(15.8%5)

C.X=Y*5=X+Z

D.X=25%5.0

(15)設有定義:int X=2;,以下表達式中,值不為6的是( )。

A.2*x.x+=2

B.x++,2*x

C.x*=(1+x)

D.x*!x+1

(16)有以下程序:

程序運行後的輸出結果是( )。

A.2,3,3

B.2,3,2

C.2,3,1

D.2,2,1

(17)有以下程序:

已知字母A的ASCIl碼為65,程序運行後的輸出結果是( )。

A)E.68B.

B)D,69

C.E,D

D.輸出無定值

(18)若有定義int x,y;並已正確給變數賦值,則以下選項中與表達式(x—y)?(x++):(y++)中的條件表達式(x—Y)等價的是( )。

A.(x—Y<01Ix—Y>O)

B.(x—y<0)

C.(x—Y>0)

D.(x—Y==0)

(19)有以下程序:

程序運行後的輸出結果是( )。

A.3

B.2

C.1

D.0

(20)若有定義:float x=1.5;int a=1,b=3,c=2;則正確的switch語句是( )。

B. 計算機二級c語言題庫及答案

C. 四川省計算機二級C語言考試 真題

一、是非判斷題(每小題1分,共10分) 1.數據元素是數據的基本單位,數據項是數據的最小單位。 ( 1 ) 2.棧是特殊的線性表,須用一組地址連續的存儲單元來存儲其元素。 ( 2 ) 3.引入虛擬存儲技術後,邏輯內存總容量是由地址匯流排的位數確定的。 ( 3 ) 4.編譯程序是一種常用的應用軟體。 ( 4 ) 5.順序文件和鏈接文件的長度都可以動態變化。 ( 5 ) 6.在文件系統中彩目錄管理文件。 ( 6 ) 7.允許多用戶在其終端上同時交互地使用計算機的操作系統稱為實時系統。 ( 7 ) 8.程序、數據、和程序控制塊是構成一個進程的三要素。 ( 8 ) 9.黑盒測試時,既要考慮程序的內部邏輯結構又要考慮其外部特性。 ( 9 ) 10.軟體的總體設計和詳細設計都要用PAD圖形工具。 ( 10 )二、單項選擇題(每小題1分,共5分) 1.允許用戶把若干作業提交計算機系統集中處理的操作系統稱為( 11 )。11(A)分時操作系統 (B)實時操作系統 (C)網路操作系統 (D)批處理操作系統 2.分配到必要資源並獲得了處理機時的進程的狀態稱為( 12 )。12(A)就緒狀態 (B)執行狀態 (C)等待狀態 (D)阻塞狀態 3.利用通道技術可以在( 13 )之間直接交換數據。13(A)內存與CPU (B)CPU與外設 (C)內存與外設 (D)內存、CPU和外設三者 4.以下的准則中哪個不是軟體設計的准則( 14 )。14(A)編程語言選擇准則 (B)信息屏蔽准則 (C)結構化和模塊化准則 (D)抽象准則 5.有一數列:97 65 76 13 29 49 58 經過一趟排序後得到:65 97 13 76 29 49 58 請問使用的是何種排序方法( 15 )。15(A)簡單插入排序 (B)冒泡排序 (C)2路歸並排序 (D)快速排序 C與C++語言程序設(共85分)一、單項選擇題(每小題1分,共10分) 1.定義如下枚舉類型:enum Day{Monday,Tuesday,Wednesday,Thursday,Friday=2};則下列語句正確的是 ( 16 )。16 (A) 表達式Wednesday==Friday的值是true(B) enum Day day; day=3;(C) enum Day day; day=Tuesday-3;(D) enum Day day; day=Monday+10; 2.下列程序片段的輸出結果是( 17 )。int m=4;do { printf("%d,",m-=3); }while(!(--m));17(A)1 (B)1,-3, (C)3,0 (D)死循環 3.執行下列程序片段時的輸出結果是( 18 )。int x,y;x=3;y=5;printf("%d",x%=(y/=2) );18(A)3 (B)2 (C)1 (D)0 4.對於下述程序,判斷正確的是( 19 )。# include <stdio.h>void f(int *p){ *p=10; }int *p;void main(){ f(p); printf("%d",(*p)++ );}19 (A) 輸出的值是隨機值 (B) 運行時出錯 (C) 輸出值為10 (D) 輸出值為11 5.下列程序運行的結果是( 20 )。# define FU(y) 2.8+y# define PR(a) printf("%d",(int)(a))# define PRINT(a) PR(a);# include <stdio.h>void main(){ int x=2; PRINT( FU(5) * x );}20(A)12 (B)14 (C)13 (D)15 6.下列程序運行的結果是( 21 )。# include <stdio.h>void main(){ int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+4; printf("%d",*++p); printf("%d",++*p);}21 (A)4,3 (B)4,6 (C)5,5 (D)4,5 7.關於對類要領的描述中,錯誤的是( 22 )。22 (A) 類就是C語言中的結構類型(B) 類是創建對象的樣板 (C) 類是具有共同行為的若干對象的統一描述體(D) 類是抽象數據類型的實現 8.已知int a=9,b=4; 將a-b的值輸出顯示到屏幕上,下列各種實現方法中,正確的是( 23 )。23 (A) cout<<a<<'-'<<b<<endl (B) cout<<"a-b"<<endl (C) cout<<a-b<<endl (D) cout<<"%d\n",a-b 9.下列循環語句會進入死循環的是( 24 )。24 (A) i=0;do {i++; }while(i==100); (B) for(i=0;i<100;i+=3.14); (C) for(i=0;;i+=2); (D) k=1;do {k--; }while(k); 10.下面程序運行的結果是( 25 )。# include <stdio.h>int fun(char *str){ int n=0; while(*str>='0' && *str<='9') { n=n*10+*str-'1'; str++; } return n;}void main(){ printf("%d\n",fun("567.89")); }25 (A)89 (B)567.89 (C)567 (D)456 四川省計算機等級考試二級C語言筆試題(第二十次)二
2009-03-29 15:11:39 二、讀程序回答問題(每個選擇3分,共45分)。 1.有下列程序:# include <iostream.h>void main(){ int a,b,c,x; a=b=c=0; for(int i=0;i<10;i++) { cin>>x; switch(x%3) { case 0: a+=x; break; case 1: b+=x; break; case 2: c+=x; break; } } cout<<a<<','<<b<<','<<c<<endl;}程序運行時依次輸入x的值為:1 2 3 4 5 6 7 8 9 10①程序運行的結果是( 26 )。26 (A) 3,12,21 (B) 18,22,15 (C) 3,4,3 (D) 9,10,8②switch(x%3)與( 27 )相同。27 (A) switch(!(x%3)!=0) (B) switch(x%3==0) (C) switch(x%3!=0) (D) 他們都不相同 2.有下列程序:# include <stdio.h>void main(){

D. 計算機二級考試(江西考區)試題c語言及答案

2010年3月全國計算機等級考試二級C語言筆試真題及參考答案一、選擇題
(1)下列敘述中正確的是
A)對長度為n的有序鏈表進行查找,最壞清況下需要的比較次數為n
B)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(n/2)
C)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(log2n)
D)對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(nlog2n)(2)演算法的時間復雜度是指
A)演算法的執行時間
B)演算法所處理的數據量
C)演算法程序中的語句或指令條數
D)演算法在執行過程中所需要的基本運算次數(3)軟體按功能可以分為:應用軟體、系統軟體和支撐軟體(或工具軟體)。下面屬於系統軟體的是
A)編輯軟體
B)操作系統
C)教務管理系統
D)瀏覽器(4)軟體(程序)調試的任務是
A)診斷和改正程序中的錯誤
B)盡可能多地發現程序中的錯誤
C)發現並改正程序中的所有錯誤
D)確定程序中錯誤的性質(5)數據流程圖(DFD圖)是
A)軟體概要設計的工具
B)軟體詳細設計的工具
C)結構化方法的需求分析工具
D)面向對象方法的需求分析工具(6)軟體生命周期可分為定義階段,開發階段和維護階段。詳細設計屬於
A)定義階段
B)開發階段
C)維護階段
D)上述三個階段(7)資料庫管理系統中負責數據模式定義的語言是
A)數據定義語言
B)數據管理語言
C)數據操縱語言
D)數據控制語言(8)在學生管理的關系資料庫中,存取一個學生信息的數據單位是
A)文件
B)資料庫
C)欄位
D)記錄(9)資料庫設計中,用E-R圖來描述信息結構但不涉及信息在計算機中的表示,它屬於資料庫設計的
A)需求分析階段
B)邏輯設計階段
C)概念設計階段
D)物理設計階段(10)有兩個關系R和T如下:
則由關系K得到關系T的操作是
A)選擇
B)投影
C)交
D)並(11)以下敘述正確的是
A)C語言程序是由過程和函數組成的
B)C語言函數可以嵌套調用,例如:fun(fun(x))
C)C語言函數不可以單獨編譯
D)C語言中除了main函數,其他函數不可作為單獨文件形式存在(12)以下關於C語言的敘述中正確的是
A)C語言中的注釋不可以夾在變數名或關鍵字的中間
B)C語言中的變數可以在使用之前的任何位置進行定義
C)在C語言算術表達式的書寫中,運算符兩側的運算數類型必須一致
D)C語言的數值常量中夾帶空格不影響常量值的正確表示(13)以下C語言用戶標識符中,不合法的是
A)_1
B)AaBc
C)a_b
D)a-b(14)若有定義:double a=22;int i=0,k=18;,則不符合C語言規定的賦值語句是
A)a=a++,i++;
B)i=(a+k)<=(i+k);
C)i=a%11;
D)i=!a;(15)有以下程序
#include<stdio.h>
main()
{ char a,b,c,d;
scanf(「%c%c」,&a,&b);
c=getchar(); d=getchar();
printf(「%c%c%c%c\n」,a,b,c,d);
}
當執行程序時,按下列方式輸入數據(從第1列開始,<CR>代表回車,注意:回車也是一個字元)
12<CR>
34<CR>
則輸出結果是
A)1234
B)12
C)12
3
D)12
34(16)以i關於C語言數據類型使用的敘述中錯誤的是
A)若要准確無誤差的表示自然數,應使用整數類型
B)若要保存帶有多位小數的數據,應使用雙精度類型
C)若要處理如「人員信息」等含有不同類型的相關數據,應自定義結構體類型
D)若只處理「真」和「假」兩種邏輯值,應使用邏輯類型(17)若a是數值類型,則邏輯表達式(a==1)||(a!=1)的值是
A)1
B)0
C)2
D)不知道a的值,不能確定(18)以下選項中與if(a==1)a=b; else a++;語句功能不同的switch語句是
A)switch(a)
{case:a=b;break;<br>default:a++;<br>}<br>B)switch(a==1)<br>{case 0:a=b;break;<br>case 1:a++;<br>}
C)switch(a)
{default:a++;break;<br>case 1:a=b;<br>}
D)switch(a==1)
{case 1:a=b;break;<br>case 0:a++;<br>}(19)有如下嵌套的if語句
if (a<b)
if(a<c)k=a;
else k=c;
else
if(b<c) k=b;
else k=c;
以下選項中與上述if語句等價的語句是
A)k=(a<b)?a:b;k=(b<c)?b:c;
B)k=(a<b)?((b<c)?a:b):((b>c)?b:c);
C)k=(a<b)?((a<c)?a:):((b<c)?b:c);
D)k=(a<b)?a:b;k=(a<c)?a:c;(20)有以下程序
#include<s七dio.h>
main()
{in i,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>O;j--)
{if(i*j)>3)break;<br>m=i*j;<br>}
}
printf("m=%d\n",m);

程序運行後的輸出結果是
A)m=6
B)m=2
C)m=4
D)m=5(21)有以下程序
#include(stdio.h>
main()
{int a=l;b=2;
for(;a<8;a++) {b+=a;a+=2;}
printf("%d,%d\n",a,b);
}
程序運行後的輸出結果是
A)9,18
B)8,11
C)7,11
D)10,14(22)有以下程序,其中k的初值為八進制數
#include <stdio.h>
main()
{int k=011;
printf("%d\n",k++);

程序運行後的輸出結果是
A)12
B)11
C)10
D)9(23)下列語句組中,正確的是
A)char *s;s="Olympic";
B)char s[7];s="Olympic";
C)char *s;s={"Olympic"};
D)char s[7];s={"Olympic"};(24)以下關於return語句的敘述中正確的是
A)一個自定義函數中必須有一條return語句
B)一個自定義函數中可以根據不同情況設置多條return語句
C)定義成void類型的函數中可以有帶返回值的return語句
D)沒有return語句的自定義函數在執行結束時不能返回到調用處(25)下列選項中,能正確定義數組的語句是
A)int num[0..2008];
B)int num[];
C)int N=2008;
int num[N];
D)#define N 2008
int num[N];(26)有以下程序
#include <stdio.h>
void fun(char *c,int d)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
main()
{char b='a',a='A';
fun(&b,a);printf("%e,%e\n",b,a);

程序運行後的輸出結果是
A)b,B,b,A
B)b,B,B,A
C)a,B,B,a
D)a,B,a,B(27)若有定義int(*Pt)[3];,則下列說法正確的是
A)定義了基類型為int的三個指針變數
B)定義了基類型為int的具有三個元素的指針數組pt
C)定義了一個名為*pt、具有三個元素的整型數組
D)定義了一個名為pt的指針變數,它可以指向每行有三個整數元素的二維數組(28)設有定義double a[10],*s=a;,以下能夠代表數組元素a[3]的是
A)(*s)[3]
B)*(s+3)
C)*s[3]
D)*s+3(29)有以下程序
#include(stdio.h)
main()
{int a[5]={1,2,3,4,5},b[5]={O,2,1,3,0},i,s=0;
for(i=0;i<5;i++) s=s+a[b[i]]);
printf("%d\n", s);
}
程序運行後的輸出結果是
A)6
B)10
C)11
D)15(30)有以下程序
#include <stdio.h>
main()
{int b [3][3]={O,1,2,0,1,2,O,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=ij<=1;j++) t+=b[i][b[j][i]];
printf("%d\n",t);

程序運行後的輸出結果是
A)1
B)3
C)4
D)9(31)若有以下定義和語句.......這是全國2010全國c語言考試的部分題目,樓主需要的話可以自己去下載轉自:酷8學習網 www.k8xx.com

E. 計算機二級C語言選擇題及答案(2)

}

printf("%d ",num);

}

程序執行後的輸m結果是()。

A.35

B.37

C.39

D.3975

32.以下程序的'輸出結果是()。

main()

{char st[20]="hello \";

printf("%d%d ",strlen(st).sizeof(st));

}

A.9 9

B.5 20

C.13 20

D.20 20

33.若有以下的定義:‘int t[3][2];”,能正確表示t數組元素地址的表達式是()。

A.&t[3][2]

B.t[3]

C.t[l]

D.t[2][2]

34.函數fseek(pf,OL,SEEK END)中的SEEK ENE 代表的起始點是()。

A.文件開始

B.文件末尾

C.文件當前位置

D.以上都不對

35.下述程序的輸出結果是()。

#include

main()

{ int i;

for(i=l;i<=10;i++)

{if(i*i>=20)&&(i*i<=100))

break;

}

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

}

A.49

B.36

C.25

D.64

36.若有定義“int b[8],*p=b;”,則p+6表示()。

A.數組元素b[6]的值

B.數組元素b[6]的地址

C.數組元素b[7]的地址

D.數組元素b[o]的值加上6

37.設變數已正確定義,則以下能正確計算f=n!的程序是()。

A.f=0:

for(i=1;i<=n;i++)f*=i:

B.F=1:

for(i=l;i<2n;i++)f*=i:

C.f=l:

for(i=n;i>1;i++)f*=i:

D.f=1;

for(i=n;i>=2;i--)f*=i:

38.下述程序執行的輸出結果是()。

#include

main()

{ char a[2][4];

strcpy(a,"are");strcpy(a[1],"you");

a[0][3]=’&’;

printf("%s ",a):

}

A.are&you

B.you

C.are

D.&

39.設x=011050,則x=x&01252的值是()。

A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

40.在“文件包含”預處理語句的使用形式中,當#include後面的文件名用(雙引號)括起時,尋找被包含文件的方式是()。

A.直接按系統設定的標准方式搜索目錄

B.先在源程序所在的目錄搜索,如沒找到,再按系統設定的標准方式搜索

C.僅僅搜索源程序所在目錄

D.僅僅搜索當前目錄

【答案與解析】

1.D。【解析】演算法的空間復雜度,是指執行這個演算法所需的存儲空間。演算法所佔用的存儲空間包括演算法程序所佔用的空間、輸入的初始數據所佔用的存儲空間、演算法執行過程中所需要的額外空間。

2.D。【解析】數據的存儲結構是指數據的邏輯結構在計算機存儲空間中的存放形式,一種數據結構可以根據需要採用不同的存儲結構,用的存儲結構有順序和鏈式結構。用不同的存儲結構,其處理的效率是不同的。

3.D。【解析】所謂的交換排序方法是指藉助數據元素之間的互相交換進行排序的一種方法,包括冒泡排序和快速排序,冒泡排序通過相鄰元素的交換,逐步將線性表變成有序是一種最簡單的交換排序方法。

4.C。【解析】結構化程序設計的原則和方法之一是限制使用GOT0語句,但不是絕對不允許使用GOT0語句。其他三項為結構化程序設計的原則。

5.D。【解析】文件系統所管理的數據文件基本上是分散、相互獨立的。相對於資料庫系統,以此為基礎的數據處理存在3個缺點:數據冗餘大、數據的不一致性、程序與數據的依賴性強。

6.C。【解析】面對象的設計方法的基本原理是:使用現實世界的概念抽象地思考問題從而自然地解決問題。它雖強調模擬現實世界中的概念而不強調演算法,但是它鼓勵開發者在軟體開發的過程中從應用領域的概念角度去思考。

7.D。【解析】所謂的後序遍歷是指,首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,並且在遍歷左、右樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後訪問根點。因此,後序遍歷二叉樹的過程也是一個遞歸過程。

8.B。【解析】軟體的過程設計是指系統結構部件轉換成軟體的過程描述。

9.A。【解析】①對軟,牛開發的進度和費用估計不準確:②用戶對已完成的軟體系統不滿意的現象時常發生;③軟體產品的質量往往靠不住;④軟體常常是不可維護的;⑤軟體通常沒有適當的文檔;⑥軟體成本在計算機系統總成本中所佔的比例逐年上升;⑦軟體開發生產率提高的速度遠遠跟不上計算機應用迅速普能及深入的趨勢。

10.C。【解析】對象的封裝性是指從外面看只能看到對象的外部特性,而對象的內部,其處理能力的實行和內部狀態對外是不可見的,是隱蔽的。

11.C。【解析】資料庫系統由如下5個部分組成:資料庫(DB)、資料庫管理系統fDBMS)、資料庫管理員(人員)、系統平台之一——硬體平台(硬體)、系統平台之二——軟體平台(軟體)。其中 DB(DataBase)即資料庫,是統一管理的相關數據的集合;DBMS即資料庫管理系統,是位於用戶與操作系統之間的一層數據管理軟體,為用戶或應用完程序提供訪問DB的方法。由以上可知,選C為正確答案。

12.A。【解析】標識符是由字母、數字或下劃線組成,並且它的第一個字元必須是字母或者下劃線。B選項int不是表達變數類型的標識符,它不能再用做變數名和函數名。C 選項do是C語言的一個關鍵字。D選項標識符只能以字母或下劃線開始。

13.D。【解析】本題考查邏輯運算符的使用。當“&&”的兩個運算對象都是邏輯1時,表達式返回值才是1;“||” 的兩個運算對象至少有一個是邏輯1時,表達式返回值也是1,x14.C。【解析】第1個printf函數,格式說明的個數是2,而輸出項的個數是3,所以對於多餘的輸出項k不予輸出;第2個printf函數,有兩個%說明,第1個%後面的字元要原樣輸出。本題考查printf函數的格式。①“%x”和“%0”分別表示以十六進制和八進制無符合型輸出整型數據(不帶前導ox或0);②printf函數中格式說明符之前插入的任何字元都原樣輸出;③格式說明與輸出項的個數,也要相等,如果格式說明的個數少於輸出項的個數,則對於多餘的輸出項不予輸出。

15.C。【解析】函數fun(int x,int y)的功能是返回x+y的值。在主函數中,變數a,b,c的初始值分別為1,2,3。因此,逗號表達式“a++,b++,aq b”的值等於5,表達式c++的值為3,調用於函數的表達式為“fun(5,3);”,其返回值等於8。

16.D。【解析】在x=2,y=x+3/2中,3/2=1。2+1= 3,因此表達式的值為3,因為x,y為double型變數,故選擇D選項。

17.A。【解析】當x為1時,執行case 1,a自加等於1,因為case 1後沒有break,接著執行case 2,此時a的值為2,b自加為1,故選擇A選項。

18.D。【解析】本題考夢自增運算符“++”、邏輯與運算符“&&”和邏輯或運算符“||”。自增運算符“++”出現在變數之前,表示先使用變數的值加l,再使用變數的值進行運算;出現在變數之後,表示先使用變數的值進行運算,再使用變數的值加l。當邏輯與運算符“&&’’兩邊的運算對象都為真時,邏輯表達式的值才為真;當邏輯或運算符“||”只要一個值為1,值就為1。根據運算符的優先順序,題中應先計算內層括弧中的值。++j是先自加後運算,因此運算時j的值等於3,所以表達式++j=3成立,即表達式的值為1;1與任何數都為進行或(||)運算,結果都為1,因此k=3的表達式i++是先運算後自加,因此運算時i為1,所以i++=1成立,自加1後i=2。if語句的條件為真即“1”,所以輸出i、j、k的值分別是2,3,3。

19.A。【解析】本題考查switch語句。當i一1時,執行case 1,因為沒有遇到break語句,所以依次往下運行,“a=a+ 2=2,a=a+3=5”;當i=2時,執行case 2,因為沒有遇到break語句,所以依次往下執行,“a=a+2=7,a=a+3= 10”;當i=3時,執行case 3,a=a+1=11,因為沒有遇到break語句,所以依次往下運行,a—a+2—13,a—a+3一l6:當i=4時,執行default,a=a+3=19,結束循環。

20.C。【解析】只有當3個if條件同時成立,即能夠同時被2、3、7整除時,才輸出i的值,而從0到50能夠同時被2、3、7整除的數只有42,故選擇C選項。

21.A。【解析】循環的作用是求行下標從1到2列下標從0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][0]+a [2][1]+a[2][2]=3+4+5+6+0=18。

22.A。【解析】在程序語句中,k的初始值為5,進行第l次while循環後,k自減1為4,非0,執行循環體里的printf語句,輸出k,此時k的值變為1。程序執行第2次循環時,k 自減1變為0,為假,退出while循環語句。所以程序的最後結果為1。

23.A。【解析】通過地址來引用數組元素的方法有下列5種:

(1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+i);(4)* (a[i][j]);(5)(&aE0][0]q-3*i+j)。故A正確。

24.C。【解析】選項A、B的空間不夠;字元串存儲要有結束符’’,且要佔用一個空間,printf用來輸出字元,不能輸入字元串。

25.D。【解析】由題目ee線性鏈表的定義可知,要將q 和r所指的結點交換前後位置,只要使q指向r的後一個結點,p指向r結點,r指向q結點即可。而在選項D由,r-> next=q,這時r指向的節點為q;p->next r,這時p指向的節點為r;q->next=r->next,因為r節點已經指向q,所以執行這個語句後q又指向q,所以選項D不正確。

26.B。【解析】在第1次外層for循環中,首先x++得到x=1。進入到內層for循環,只有循環j的值為奇數時,變數x的值才自加1,所以在內層for循環執行過程中,變數x的值自加兩次,當退出內層for循環時,x=3,然後執行x++,得到x=4。在進入執行第2次外層for循環中,首先x++得到x=5。進入到內層for循環,只有循環變數j的值為奇數時,變數x的值才自加1,所以在內層for循環執行過程中,變數X的值自加1兩次,當退出內層for循環時,x=7,然後執行x++,得到x=8,所以列印輸出變數x的值為8。

27.C。【解析】子函數fun1(double a)的功能是返回a的平方值的整數部分。子函數fun2(double x,double y)的功能是返回X的平方值的整數部分與Y的平方值的整數部分的和。又因為題中變數w的定義為double型,函數fun(2) 的定義為int型,按照各類數值型數據間的混合運算,整型數據被轉換為實型數據。所以雙精度型變數w的值為5.O。

28.C。【解析】在for循環語句中自變數i從0開始,每次自加2,執行s+=*(t+i)語句,因為C語言規定數組名做表達式相當於數組的首地址,也就是第一個元素的地址。因此,*(t+i)代表數組的第i+1個元素。所以程序運行的結果是1+3+5+7+9=25,即變數S的值等於25。

29.A。【解析】本題在函數int fun(int n)的定義中又出現了對函數fun的調用,所以函數fun是遞歸函數。因而在主函數中調用x=fun(x)時,當輸入10賦給變數x時,遞歸調用的過程為

fun(10)=10…fun(9)=104-94-fun(8)=104-9+84- fun(7)

=10+9++8++7++fun(6)=10+9++8+7+6+fun (6)

=10+9++8+7+6+5+fun(4)

=10+9++8+7+6+5+4+fun(3)

=10+9++8+7+6+5+4+3+fun(2)

=10+9++8+7+6+5+4+3+2+fun(1)

=10+9++8+7+6+5+4+3+2=55

F. 下半年計算機二級c語言基礎試題

下半年計算機二級c語言基礎試題

任何設計活動都是在各種約束條件和相互矛盾的需求之間尋求一種平衡,程序設計也不例外。下面是我收集的關於計算機二級c語言基礎試題,希望大家認真閱讀!

下半年計算機二級c語言基礎試題1

一、選擇:

1.給出以下定義:

char acX[ ]= "abcdefg";

char acY[ ]= {'a','b','c','d','e','f','g'};

則正確的敘述為( )

A) 數組acX和數組acY等價 B) 數組acX和數組acY的長度相同

C) 數組acX的長度大於數組acY的長度 D) 數組acX的長度小於數組acY的長度

答案:C

2.

void example(char acHello[])

{

printf("%d", sizeof(acHello));

return;

}

void main()

{

char acHello[] = "hello";

example(acHello);//數組名稱作參數,傳的是地址,一個地址佔四個位元組

return;

}

的輸出是

A 4 B 5 C 6 D不確定

答案:A

3. 有以下程序段

char acArr[]= "ABCDE";

char *pcPtr;

for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++)

{

printf("%s/n", pcPtr);

}

return;

輸出結果是( )

A) ABCD B) A C) E D) ABCDE

B D BCDE

C C CDE

D B DE

E A E

答案:D

4.在中斷中,不能同步獲取信號量,但是可以釋放信號量。

A.正確 B.錯誤

答案:A

5.以下敘述中不正確的是( )

A) 在不同的函數中可以使用相同名字的變數

B) 函數中的形式參數是局部變數

C) 在一個函數內定義的變數只在本函數范圍內有效

D) 在一個函數內的復合語句中定義的變數在本函數范圍內有效(復合語句指函數中的成對括弧構成的代碼)

答案:D

6.設有如下定義:

unsigned long pulArray[] = {6, 7, 8, 9, 10};

unsigned long *pulPtr;

則下列程序段的輸出結果為( )

pulPtr = pulArray;

*(pulPtr + 2) += 2;

printf ("%d,%d/n", *pulPtr, *(pulPtr + 2));

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

答案:D

7. 定義結構體時有下面幾種說法,請指出正確的(多選):______

A、結構體中的每個部分,最好進行四位元組對齊;

B、結構體的總長度最好是四位元組對齊;

C、結構中成員的存放不用考慮位元組對齊情況;

答案:A、B

8.void example()

{

int i;

char acNew[20];

for(i = 0; i < 10; i++)

{

acNew[i] = '0';

}

printf("%d/n", strlen(acNew));

return;

}

的輸出為( )

A 0 B 10 C 11 D不確定

答案:D

9.switch(c)中的c的數據類型可以是char、long、float、unsigned、bool. ( )

A. 正確 B. 錯誤

答案:B

10. 網路上傳輸的位元組序默認是大位元組的,如果主機是小位元組序,在網路通信時則須進行位元組序轉換;如果主機是

大位元組序,為了程序的一致性及可移植性,最好也在程序中加上位元組序轉換的操作(空操作)。

A. 正確 B.錯誤

答案:A

二、 填空題

1、 C語言函數返回類型的默認定義類型是

2、 函數的實參傳遞到形參有兩種方式: 和

3、在一個函數內部調用另一個函數的調用方式稱為 。在一個函數內部直接或間接調用該函數成為函數 的調用方式

4、C語言變數按其作用域分為 和

5、凡在函數中未指定存儲類別的局部變數,其默認的存儲類別為

三、 看程序寫結果

1、#include

Int abc(int u,int v);

Void main()

{int a=24,b=16,c;

c=abc(a,b);

printf(「value=%d」,c);

}

Int abc(int u, int v)

{int w;

While(v)

{w=u%v;

u=v;

v=w;

}

Return u;

}

2、#include

int x1=30,x2=40;

main()

{int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1);

printf(「%d,%d,%d,%d 」,x3,x4,x1,x2);

}

sub(int x,int y)

{x1=x;x=y;y=x1;}

3、#include

Main()

{int i=5;

Printf(「%d 」,sub(i));

}

sub(int n)

{int a;

If(n==1) return 1;

a=n+sub(n-1);

return (a);

}

4、#include

Void fun()

{static int m;

m+=2;

printf(「%d 」,m);

}

Main()

{int a;

For(a=1;a<=4;a++) fun();

Printf(「 」);

}

四、 編程題

1、 編寫一個函數,判斷任一整數是否為素數,用main()函數調用並測試之。

2、 用遞歸方法求n!

3、 有一個一維數組,內放10個學生成績,寫一個函數,求出平均分,最高分和最低分

下半年計算機二級c語言基礎試題2

1.下列敘述中正確的是( )。

A. 所有數據結構必須有根結點

B. 所有數據結構必須有終端結點(即葉子結點)

C. 只有一個根結點,且只有一個葉子結點的數據結構一定是線性結構

D. 沒有根結點或沒有葉子結點的數據結構一定是非線性結構

【答案】D

【解析】D項正確,線性結構的特點是:

①集合中必存在「第一個元素"且惟一;

②集合中必存在「最後一個元素」且惟一;

③除最後一個元素外,其他數據元素均有惟一的「後繼;

④除第一個元素外,其他數據元素均有惟一的「前驅」。所以沒有根結點或沒有葉子結點的數據結構一定是非線性結構。AB兩項錯誤,不是所有數據結構都必須有根結點和葉子結點;C項錯誤,數據結構中若有中間結點不滿足只有一個前件或者後件的條件,就不是線性結構。答案選擇D選項。

2. 以下敘述中錯誤的是( )。

A. C語言中的每條可執行語句和非執行語句最終都將被轉換成二進制的機器指令

B. C程序經過編譯、鏈接步驟之後才能形成一個真正可執行的二進制機器指令文件

C. 用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中

D. C語言源程序經編譯後生成後綴為.obj的目標程序

【答案】A

【解析】A項錯誤,注釋語句不會被翻譯成二進制的'機器指令。C源程序經過C編譯程序編譯之後生成後綴為.obj的二進制文件(稱為目標文件),然後由「鏈接程序」(Link)的軟體把.obj文件與各種庫函數連接起來生成一個後綴為.exe的可執行文件。答案選擇A選項。

3. C語言主要是藉助以下( )功能來實現程序模塊化的。

A. 定義函數

B. 定義常量和外部變數

C. 三種基本結構語句

D. 豐富的數據類型

【答案】A

【解析】C程序的模塊化主要通過函數來實現。C語言允許對函數單獨進行編譯,從而可以實現模塊化。答案選擇A選項。

4. 有以下程序段:

char ch;

int k;

ch='a';

k=12;

print("%c,%d,",h,ch,k);

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

已知字元a的ASCII碼十進制值為97,則執行上述程序段後輸出的結果是( )。

A. 因變數類型與格式描述符的類型不匹配輸出無定值

B. 輸出項與格式描述符個數不符,輸出為零值或不定值

C.a,97,12k=12

D. a,97,k=12

【答案】D

【解析】字元變數的值是該字元的ASCII碼值,可以參與整型變數所允許的任何運算。"ch='a",%c表示以字元格式輸出ch的值,所以輸出為a;%d表示以十進制代碼的形式輸出ch的值,為97;k沒有對應的輸出格式,不輸出。在第二個語句中,首先輸出"k=",然後以十進制代碼輸出k的值,為12。答案選擇D選項。

5. 下列敘述中正確的是( )。

A. 棧是「先進先出」的線性表

B. 隊列是「先進後出"的線性表

C. 循環隊列是非線性結構

D. 有序線性表既可以採用順序存儲結構,也可以採用鏈式存儲結構

【答案】D

【解析】有序的線性表既可採用順序存儲結構,也可以採用鏈式存儲結構。A項錯誤,棧是「先進後出"的線性表B項錯誤,隊列是「先進先出"的線性表;C項錯誤,循環隊列是線性結構的,有序的線性表既可採用順序存儲結構,也可採用鏈式存儲結構。

答案選擇D選項。

6. 某二叉樹的中序序列為DCBAEFG,後序序列為DCBGFEA,則該二叉樹的深度(根結點在第1層)為( )。

A. 5

B. 40

C.3

D. 2

【答案】B

【解析】二叉樹的後序序列為DCBGFEA,則A為根結點。中序序列為DCBAEFG,則DCB為左子樹結點,EFG為右子樹結點。同理B為C父結點,C為D父結點。根據分析,可畫出左子樹,同理E為F父結點,F為G父結點。根據分析,可畫出右子樹,故二叉樹深度為4層。答案選擇B選項。

7. 設有定義:struct{intn;floatx;}s[2],m[2]={{10,2.8},{0,0.0}};,則以下賦值語句中正確的是( )。

A. s[0]=m[1];

B. s=m;

C.s.n=m.n;

D. s[2].x=m[2].x;

【答案】A

【解析】定義了結構體類型數組s,長度為2,結構體類型數組m,長度為2,並對數組m進行了初始化。同類型的結構體可以直接用變數名實現賦值,A項正確;數組名為數組首地址,地址常量之間不可以相互賦值,B項錯誤;數組名為地址常量不是結構體變數,不能引用成員,C項錯誤;s[2]與m[2]數組越界,D項錯誤。答案選擇A選項。

8. 關於C語言標識符,以下敘述錯誤的是( )。

A. 標識符可全部由數字組成

B. 標識符可全部由下劃線組成

C. 標識符可全部由小寫字母組成

D. 標識符可全部由大寫字母組成

【答案】A

【解析】C語言標識符只能由字母、數字、下劃線構成,且只能以字母、下劃線開頭,故答案選擇A選項。

9. 以下程序段中的變數已定義為int類型,則

sum=pAd=5;

pAd=sum++,++pAd,pAd++;

printf("%d ",pAd);

程序段的輸出結果是( )。

A. 6

B. 4

C. 5

D. 7

【答案】D

【解析】自增和自減運算符的兩種用法:前置運算,運算符放在變數之前,規則是先使變數的值增(或減)1,然後以變化後表達式的值參與其他運算;後置運算,運算符放在變數之後,規則是變數先參與其他運算,然後再使變數的值增(或減)1。執行pAd=sum++,sum++是後置自增,執行完後,pAd=5,sum=6。++pAd和pAd++語句中沒有其他運算,即效果相同,pAd分別加1,兩句執行完後,pAd7。答案選擇D選項。

;

G. 計算機二級考試C語言選擇題(2)

{ char x=0xFFFF;printf("%d\n",x--);}

A.-32767

B.FFFE

C.1

D.32768

22.下面的函數調用語句中func函數的實參個數是( )。

func((f2v1,v2),(v3,v4,v5),(v6,max(v7,v8)))

A.3

B.4

C.5

D.8

23.語句“printf("akbre"\’hi\’y\\\bou\n")”;的輸出結果是( )。

A.akbre\’hi\’y ’\\\bou

B.a\bre\’hi\\y\bou

C.re ’hi’you

D.abre’hi’y\bou

24.下面程序輸出的是( )。

main()

{ int t=l;fun(fun(t));}

fun(int h)

{ static int a[3]={1.2.3};

int k;

for(k=0;k<3;k++)a[k]+=a[k]-h;

for(k=0;k<3;k++)printf("%d",a[k]);

printf("\n");

return(a[h]);}

A.1,2,3,

1,5,9,

B.1,3,5,

1,3,j,

C.1,3,5,

0,4,8,

D.1,3。5,

-1,3,7,

25.以下敘述中正確的是( )。

A.預處理命令行必須位於C源程序的起始位置

B.在C語言中,預處理命令行都以“#”開頭

c.每個C程序必須在開頭包含預處理命令行:#include

D.C語言的預處理不能實現宏定義和條件編譯的功能

26.為了避免在嵌套的條件語句if else中產生二義性,C語言規定,else子句總是與( )配對。

A.縮排位置相同if

B.其前面最近的if

C.其後面最近的if

D.同一行上的if

27.設有下列程序段:

char str[]="HelloWorld":

char* plr;

ptr=str:

執行上面的程序段後,*(ptr+10)的'值為( )。

A.’\0 ’

B.’0’

C.不確定的值

D.’0’的地址

28.有以下程序:

void swap(char*x,char*y)

{ char t;

t=*x;*x=*y;*y=t;

}

main()

{ char*s1="abe",*s2="123":

swap(s1,s2);

printf("%s,%s\n",s1,s2);

}

程序執行後的輸出結果是( )。

A.123,abe

B.abc.123

C.1bc,a23

D.321,cba

29.下列程序的運行結果是( )。

#include

main()

{ static char a[]="Languagef",b[]="programe":

char*p1,*p2;int k;

p1=a;p2=b;

for(k=0;k<=8;k++)

if(*(p1+k)==*(p2+k))

printf("%c",*(p1+k)):

}

A.gae

B.ang

C.program

D.有語法錯

30.下列程序的運行結果為( )。

#define MAX(x,y)(x)>(y)?(x):(y)

main()

{ int a=2,b=3,C=1,d=3,t:

printf("%d\n",(MAX(a+h,c+d))*100):

}

A.500

B.5

C.4

D.400

31.設int x=7,則~x的值是()。

A.-8

B.7

C.-1

D.1

32.有以下程序:

void fun(char*a,char*b)

{a=b; (*a)++; }

main()

{char c1=’A ’,c2=’a’,*p1,*p2;

p1=&c1;p2=*c2;fun(p1,p2);

printf("%C%c\n",c1,c2);

}

程序運行後的輸出結果是()。

A.Ab

B.aa

C.Aa

D.Bb

33.有以下程序:

int fun(int n)

{if(n==l)return l;

else return(n+fun(n一1)):

}

main()

{int x;

scanf("%d",&x);x=fun(x);printf("%d\n",

x):

}

執行程序時,給變數X輸入10,程序的輸出結果是()。

A.55

B.54

C.65

D.45

34.有以下程序:

void f(int x,int y)

{int t;

if(x}

main()

{int a=4,b=3,c=5;

f(a,b);f(a,c);f(b,c);

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

}

執行後輸出結果是()。

A.3,4,5

B.5,3,4

C.5,4,3

D.4,3,5

35.以下程序的輸出結果是()。

main()

{char*s="12134211";

int v[4]=(0,0,0,0),k,i;

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

{switch(s[k])

{case’1’:i=0;

case’2’:i=1;

case’3’:i=2;

H. 國家計算機二級C語言考試題

一 、選擇題
(1)下列數據結構中,按先進後出原則組織數據的是
A)線性鏈表
B)棧
C)循環鏈表
D)順序表
正確答案: B

(2)具有3個結點的二叉樹有
A)2種形態
B)4種形態
C)7種形態
D)5種形態
正確答案: D

(3)設有下列二叉樹:
對此二叉樹前序遍歷的結果為
A)ZBTYCPXA
B)ATBZXCYP
C)ZBTACYXP
D)ATBZXCPY
正確答案: B

(4)結構化程序設計主要強調的是
A)程序的規模
B)程序的效率
C)程序設計語言的先進性
D)程序易讀性
正確答案: D

(5)程序的3種基本控制結構是
A)過程、子過程和分程序
B)順序、選擇和重復
C)遞歸、堆棧和隊列
D)調用、返回和轉移
正確答案: B

(6)下列敘述中,不屬於測試的特徵的是
A)測試的挑剔性
B)完全測試的不可能性
C)測試的可靠性
D)測試的經濟性
正確答案: C

(7)需求分析中開發人員要從用戶那裡了解
A)軟體做什麼
B)用戶使用界面
C)輸入的信息
D)軟體的規模
正確答案: A

(8)下列關系模型中,能使經運算後得到的新關系中屬性個數多於原來關系中屬性個數的是
A)選擇
B)連接
C)投影
D)並
正確答案: B

(9)下列敘述中,正確的是
A)用E-R圖能夠表示實體集間一對一的聯系、一對多的聯系和多對多的聯系
B)用E-R圖只能表示實體集之間一對一的聯系
C)用E-R圖只能表示實體集之間一對多的聯系
D)用E-R圖表示的概念數據模型只能轉換為關系數據模型
正確答案: C

(10)"年齡在18~25之間"這種約束是屬於資料庫當中的
A)原子性措施
B)一致性措施
C)完整性措施
D)安全性措施
正確答案: C
11)以下說法錯誤的是
A)高級語言都是用接近人們習慣的自然語言和數學語言作為語言的表達形式
B)計算機只能處理由0和1的代碼構成的二進制指令或數據
C)C語言源程序經過C語言編譯程序編譯之後生成一個後綴為.EXE的二進制文件
D)每一種高級語言都有它對應的編譯程序
正確答案: C

(12)演算法是指為解決某個特定問題而採取的確定且有限的步驟,下面不屬於演算法的五個特性的是
A)有零個輸入或多個輸入
B)高效性
C)有窮性
D)確定性
正確答案: B

(13)已知int a=6; 則執行a+=a-=a*a;語句後,a的值為
A)36
B)0
C)-24
D)-60
正確答案: D

(14)下面各選項中,均是C語言標識符的選項組是
A)forchinato
B)long_123short56_do
C)voinion_342
D)text.txt _023_3ew
正確答案: B

(15)下列表達式中,結果為5的是
A)6*5%6
B)5*-2+15
C)5+75%10
D)6+-2/3
正確答案: B

(16)下列常量中,為不合法的實型常量表示的是
A).0032
B)0.0
C)0.3242E8
D).E3
正確答案: D

(17)關於C語言的主函數描述正確的是
A)C程序可以有多個main函數
B)C程序必有一個而且只能有一個main函數
C)C程序可以沒有main函數
D)C程序的執行不一定在main函數開始執行
正確答案: B

(18)已知int a=1,b=-1;則語句printf("%d\n",(a--,++b));的輸出結果是
A)-1
B)0
C)1
D)語句錯誤
正確答案: B

(19)已知int a,b;double c;則以下語句中錯誤的函數調用是
A)scanf("%d,%x,%lf",&a,&b,&c);
B)scanf("%d,%d,%le",&a,&b,&c);
C)scanf("%o,%x,%o",&a,&b);
D)scanf("%d,%o,%e",&a,&b,&c);
正確答案: D

(20)已知x,y,z均為整型變數,且值均為1,則執行語句++x||++y&&++z;後,表達式x+y的值為
A)1
B)2
C)3
D)4
正確答案: C

I. 全國計算機等級考試二級C語言歷年試題及答案

2010年9月全國計算機等級考試二級C語言筆試試題及答案
一、選擇題((1)-(10)每題2分,(11)-(50)每題1分.共60分))
(1)下列選項中不屬於軟體生命周期開發階段任務的是
A)詳細設計 B)概要設計 C)軟體維護 D)軟體測試
(2)樹是結點的集合,它的根結點數目是
A)有且只有1 B)1或多於1 C)0或1 D)至少2
(3)在面向對象方法中,實現信息隱蔽是依靠
A)對象的繼承 B)對象的多態 C)對象的封裝 D)對象的分類
(4)程序設計語言的基本成分是數據成分、運算成分、控製成分和
A)語句成分 B)變數成分 C)對象成分 D)傳輸成分
(5)冒泡排序在最壞情況下的比較次數是
A)n/2 B)nlog2n C)n(n-1)/2 D)n(n+1)/2
(6)下列敘述中,不屬於軟體需求規格說明書的作用的是
A)作為確認測試和驗收的依據
B)反映出用戶問題的結構,可以作為軟體開發工作的基礎和依據
C)便於用戶、開發人員進行理解和交流
D)便於開發人員進行需求分析
(7)下列敘述中錯誤的是
A)一個C語言程序只能實現一種演算法 B)C程序可以由多個程序文件組成
C)C程序可以由一個或多個函數組成 D)一個函數可單獨作為一個C程序文件存在
(8)下列不屬於軟體工程的3個要素的是
A)方法 B)過程 C)工具 D)環境
(9)下列敘述中正確的是
A)資料庫系統是一個獨立的系統,不需要操作系統的支持
B)資料庫技術的根本目標是要解決數據的共享問題
C)資料庫管理系統就是資料庫系統
D)以上三種說法都不對
(10)下列敘述中正確的是
A)每個C程序文件中都必須有一個main()函數
B)在C程序的函數中不能定義另一個函數
C)C程序可以由一個或多個函數組成
D)在C程序中main()函數的位置是固定的
(11)將E-R圖轉換到關系模式時,實體與聯系都可以表示成
A)屬性 B)關系 C)鍵 D)域
(12)下列定義變數的語句中錯誤的是
A)double int_; B)int _int; C)char For D)float USS
(13)下列敘述中正確的是
A)C語言編譯時不檢查語法 B)C語言的子程序有過程和函數兩種
C)C語言的函數可以嵌套定義 D)C語言的函數可以嵌套調用
(14)以下選項中,合法的一組C語言數值常量是
A) 0x8A B)12 C).177 D) 028
(15)以下敘述中正確的是
A)構成C程序的基本單位是函數
B)可以在一個函數中定義另一個函數
C)main()函數必須放在其他函數之前
D)所有被調用的函數一定要在調用之前進行定義
(16)若在定義語句:int a,b,c,*p=&c;之後,接著執行以下選項中的語句,則能正確執行的語句是
A)scanf("%d",&p); B)scanf("%d%d%d",a,b,c);
C)scanf("%d",p); D) scanf("%d",a,b,c);
(17) 有以下程序
main()
{int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
程序運行後的輸出結果是
A)2,2,3 B)2,2,2 C)2,3,1 D)2,1,1
(18) 若已定義:int a=25,b=14,c=19;以下三目運算符(?:)所構成語句的執行後a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序輸出的結果是
A)***a=25,b=13,c=19 B)***a=26,b=14,c=19
C)### a=25,b=13,c=19 D)### a=26,b=14,c=19
(19)下列程序段的輸出結果是
int a=1234;
float b=123.456;
double c=12345.54321;
printf("-,%2.1f,%2.1f",a,b,c);
A)無輸出 B)12,123.5,12345.5 C)1234,123.5,12345.5 D)1234,123.4,1234.5
(20)有以下程序
main()
{int a=0,b=0;
a=10; /*給a賦值
b=20; 給b賦值 */
printf("a+b=%d\n",a+b); /* 輸出計算結果 */
}
程序運行後輸出結果是
A)30 B)a+b=30 C)a+b=0 D)出錯
(21)若運行以下程序時,從鍵盤輸入 ADescriptor(表示回車),則下面程序的運行結果是
#include
main()
{ char c;
int v0=1,v1=0,v2=0;
do{ switch(c=getchar())
{ case ′a′:case ′A′:
case ′e′:case ′E′:
case ′i′:case ′I′:
case ′o′:case ′O′:
case ′u′:case ′U′:v1+=1;
default:v0+=1;v2+=1;
}
} while(c!=′\n′);
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
}
A)v0=11,v1=4,v2=11 B)v0=8,v1=4,v2=8
C)v0=7,v1=4,v2=7 D)v0=13,v1=4,v2=12
(22) 有以下程序
#include
main()
{int y=9;
for( y>0;y--)
if(y%3= =0) printf("%d",--y);
}
程序的運行結果是
A)732 B)433 C)852 D)874
(23) 設有以下程序段
int x=0,s=0;
while(!x!=0)s+=++x;
printf("%d",s);

A)運行程序段後輸出0 B)運行程序段後輸出1
C)程序段中的控製表達式是非法的 D)程序段執行無限次
(24)有以下程序
fun(int x,int y){return(x+y);}
main()
{int a=1,b=2,c=3,sum;
sum=fun((a++,b++b,a+b),c++);
printf("%d\n",sum);
}
執行後的輸出結果是
A)5 B)7 C)8 D)3
(25)執行下面的程序段後,變數k中的值為
int k=3, s[2];
s[0]=k; k=s[1]*10;
A)不定值 B)35 C)31 D)20
(26)以下敘述中錯誤的是
A)改變函數形參的值,不會改變對應實參的值
B)函數可以返回地址值
C)可以給指針變數賦一個整數作為地址值
D)當在程序的開頭包含文件stdio.h時,可以給指針變數賦NULL
(27)以下程序段的描述,正確的是
x=-1;
do
{x=x*x;} while(!x);
A)是死循環 B)循環執行兩次 C)循環執行一次 D)有語法錯誤
(28)有以下程序
fun(int x,int y)
{static int m=0,i=2;
i+=m+1;m=i+x+y; return m;
}
main()
{int j=1,m=I,k;
k=fun(j,m); printf("%d",k);
k=fun(j,m); printf("%d\n",k)
}
執行後的輸出結果是
A)5,5 B)5,11 C)11,11 D)11,5

(29)有以下程序
fun(int x)
{int p;
if(x==0║x= =1) return(3);
p=x-fun(x=2);
retum p;
}main()
{ prinf("%d\n",fun(7));}
執行後的輸出結果是
A)7 B)3 C)3 D)0

(30)在16位編譯系統上,右有定義int a[ ]={10,20,30},*p=&a;,當執行p++;後,下列說法錯誤的是
A)p向高地址移了一個位元組 B)p抽高地址移了一個存儲單元
C)p向高地址移了兩個位元組 D)p與a+1等價

(31)有以下程序
main()
{int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d\n",c);
}
執行後的輸出結果是
A)1 B)2 C)3 D)4
(32)下列程序執行後的輸出結果是
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3){i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");}
A)hello B)hel C)hlo D)hlm
(33)在下述程序中,判斷i>j共執行的次數是
main()
{ int i=0, j=10, k=2, s=0;
for (;;)
{ i+=k;
if(i>j)
{ printf("%d",s);
break;
} s+=i;
}
}
A)4 B)7 C)5 D)6
(34)以下函數返回a所指數組中最大值所在的下標值
fun(int *a,int n)
{ int i,j=0,p;
p=j;
for(i=j;iif(a[i]>a[p]);
return(p);
}
在下劃線處應填入的內容是
A)i=p B)a[p]=a[i] C)p=j D)p=i
(35)下列程序執行後的輸出結果是
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=1; i<9; i++)p[i]=i+1;
printf("%d\n",a[1][2]);
}
A)3 B)6 C)9 D)隨機數
(36) 有以下程序
#include
void fun(int *a,int n)/*fun函數的功能是將a所指數組元素從大到小排序*/
{int t,i,j;
for(i=0;ifor(j=i+1;jif (a}
main()
{int c[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for (i=0;i<10;i++) printf("%d,",c);
printf("\n");
}
程序運行的結果是
A)1,2,3,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4,
C) 0,9,8,7,6,5,4,3,2,1, D)1,2,3,4,9,8,7,6,5,0,

(37)以下程序的輸出結果是#include
void prt (int *x, int*y, int*z)
{ printf("%d,%d,%d\n",++*x,++*y,*(z++));}
main()
{ int a=10,b=40,c=20;
prt (&a,&b,&c);
prt (&a,&b,&c);
}
A)11,42, 31
12,22,41
B)11,41,20
12,42,20
C)11,21,40
11,21,21
D)11,41,21
12,42,22
(38) 有以下程序:
#include
void fun(char *t,char *s)
{
while(*t!=0)t++;
while((*t++=*s++)!=0);
}
main()
{
char ss[10]=」acc」,aa[10]=」bbxxyy」;
fun(ss,aa);
printf(「%s,%s\n」,ss,aa);
}
程序運行結果是
A) accxyy , bbxxyy B) acc, bbxxyy
C) accxxyy,bbxxyy D) accbbxxyy,bbxxyy

(39) 有以下程序
#include
main()
{ FILE *fp; int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);
fclose(fp);
}
程序運行後的輸出結果是
A)20 30 B)20 50 C)30 50 D)30 20
(40) 有以下程序
main()
{int x[3][2]={0},I;
for(I=0;I<3;I++) scanf("%d",x[i]);
printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);
}
若運行時輸入:246,則輸出結果為
A)2 0 0 B)2 0 4 C)2 4 0 D)2 4 6
(41)有以下程序
int add(int a,int b){return+b};}
main()
{int k,(*f)(),a=5,b=10;
f=add;

}

則以下函數調用語句錯誤的是
A)k=(*f)(a,b); B)k=add(a,b); C)k=*f(a,b); D)k=f(a,b);

(41)有以下程序
#include
main(int argc,char *argv[])
{int i=1,n=0;
while(i<arge){n=n+strlen(argv[i]);i++;}
printf(「%d\n」,n);
}
該程序生成的可執行文件名為:proc.exe。若運行時輸入命令行:
proc 123 45 67
則程序的輸出結果是
A)3 B)5 C)7 D)11
(42)有以下程序
void fun2(char a, char b){printi(「%b%c」,a,b);}
char a= 『A』,b= 『B』;
void fun1( ){ a= 『C』l b= 『D』; }
main( )
{ fun1( )
printf( 「%c%c」,a,b);
fun2(『E』, 『F』);
}
程序的運行結果是
A)CDEF B)ABEF C)ABCD D)CDAB
(43)有以下程序
#include
#define N 5
#define M N+1
#define f(x) (x*M)
main()
{int i1,i2;
i1=f(2);
i2=f(1+1);
printf(「%d %d\n」,i1,i2);
}
程序的運行結果是
A)12 12 B)11 7 C)11 11 D)12 7
(44)設有以下語句
typedef struct TT
{char c; int a[4];}CIN;
則下面敘述中正確的是
A)可以用TT定義結構體變數 B)TT是struct類型的變數
C)可以用CIN定義結構體變數 D)CIN是struct TT類型的變數
(45)有以下結構體說明、變數定義和賦值語句
struct STD
{char name[10];
int age;
char sex;
}s[5],*ps;
ps=&s[0];
則以下scanf函數調用語句中錯誤引用結構體變數成員的是
A)scanf(「%s」,s[0].name); B)scanf(「%d」,&s[0].age);
C)scanf(「%c」,&(ps>sex)); D)scanf(「%d」,ps>age);
(46)若有以下定義和語句
union data
{ int i; char c; float f;}x;
int y;
則以下語句正確的是
A)x=10.5; B)x.c=101; C)y=x; D)printf(「%d\n」,x);
(47)若變數已正確定義,則以下語句的輸出結果是
s=32; s^=32;printf(「%d」,s);
A)-1 B)0 C)1 D)32
(48) 若程序中有宏定義行:#define N 100 則以下敘述中正確的是
A)宏定義行中定義了標識符N的值為整數100
B)在編譯程序對C源程序進行預處理時用100替換標識符N
C) 對C源程序進行編譯時用100替換標識符N
D)在運行時用100替換標識符N
(49)以下敘述中正確的是
A)C語言中的文件是流式文件,因此只能順序存取數據
B)打開一個已存在的文件並進行了寫操作後,原有文件中的全部數據必定被覆蓋
C)在一個程序中當對文件進行了寫操作後,必須先關閉該文件然後再打開,才能讀到第1個數據
D)當對文件的讀(寫)操作完成之後,必須將它關閉,否則可能導致數據丟失
(50)有以下程序
#include
main()
{FILE *fp; int i;
char ch[]=」abcd」,t;
fp=fopen(「abc.dat」,」wb+」);
for(i=0;i<4;i++)fwriter&ch[],1,1fp;
fseek(fp,-2L,SEEK_END);
fread(&t,1,1,fp);
fclose(fp);
printf(「%c\n」,t);
}
程序執行後的輸出結果是
A)d B)c C)b D)a
二、填空題(每空2分,共40分)
(1)在面向對象方法中,類之間共享屬性和操作的機制稱為 【1】 。
(2)一個關系表的行稱為 【2】 。
(3)耦合和內聚是評價模塊獨立性的兩個主要標准,其中 【3】 反映了模塊內各成分之間的聯系。
(4)線性表的存儲結構主要分為順序存儲結構和鏈式存儲結構.隊列是一種特殊的線性表,循環隊列是隊列的【4】存儲結構.
(5) 【5】 的任務是診斷和改正程序中的錯誤。
(6) 以下程序的輸出結果是【6】.
#include
main()
{ int n=12345,d;
while(n!=0){ d=n%10; printf("%d",d); n/=10;}
}
(7)以下程序運行後的輸出結果是 【7】 。
main()
{
int m=011,n=11;
printf("%d %d\n",++m,n++);
}
(8)有以下程序,若運行時從鍵盤輸入:18,11,則程序輸出結果是 【8】 。
main()
{ int a,b;
printf("Enter a,b:");scanf("%d,%d",&a,&b);
while(a!=b)
{ while(a>b) a-=b;
while(b>a) b-=a;
}
printf("%3d%3d\n",a,b);
}
(9) 有以下程序段,且變數已正確定義和賦值
for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
請填空,使下面程序段的功能為完全相同
s=1.0;k=1;
while(_【9】_______){ s=s+1.0/(k*(k+1)); _【10】_______;}
printf("s=%f\n\n",s);
(10)執行以下程序的輸出結果是【11】______.
#include
main()
{ int i,n[4]={1};
for(i=1;i<=3;i++)
{ n=n[i-1]*2+1; printf("%d",n); }
}
(11)以下程序中函數f的功能是在數組x的n個數(假定n個數互不相同)中找出最大最小數,將其中最小的數與第一個數對換,把最大的數與最後一個數對換.請填空.
#include
viod f(int x[],int n)
{ int p0,p1,i,j,t,m;
i=j=x[0]; p0=p1=0;
for(m=0;m{ if(x[m]>i) {i=x[m]; p0=m;}
else if(x[m]}
t=x[p0]; x[p0]=x[n-1]; x[n-1]=t;
t=x[p1];x[p1]= _【12】_______; 【13】______=t;
}
main()
{ int a[10],u;
for(u=0;u<10;u++) scanf("%d",&a);
f(a,10);
for(u=0;u<10;u++) printf("%d",a);
printf("\n");
}
(12)下列程序中的函數strcpy2()實現字元串兩次復制,即將t所指字元串復制兩次到s所指內存空間中,合並形成一個新的字元串。例如,若t所指字元串為efgh,調用strcpy2後,s所指字元串為efghefgh。請填空。
#include
#include
void strcpy2(char *s,char *t)
{ char *p=t;
while(*s++=*t++);
s= 【14】 ;
while( 【15】 =*p++);
}
main()
{ char str1[100]="abcd",str2[]="efgh";
strcpy2(str1 ,str2); printf("%s\n",str1);
}
(13)以下程序統計從終端輸入的字元中大寫字母的個數,num[0]中統計字母A的個數,num[1]中統計字母B的個數,其它依次類推.用#號結束輸入,請填空.
#include
#include
main()
{ int num[26]={0},i; char c;
while((_【16】_______)!='#')
if(isupper(c)) num[c-『A』]+= 【17】_______;
for(i=0;i<26;i++)
Printf("%c:%d\n",i+'A',num);
}
(14)以下程序中,函數fun的功能是計算x2-2x+6,主函數中將調用fun函數計算:
y1=(x+8)2-2(x+8)+6
y2=sin2(x)-2sin(x)+6
請填空。
#include "math.h"
double fun(double x) { return(x*x-2*x+6); }
main()
{
double x,y1,y2;
printf("Enter x:"); scanf("%lf",&x);
y1=fun( 【18】 );
y2=fun( 【19】 );
printf("y1=%lf,y2=%lf\n",y1,y2);
}
(15) 以下程序的輸出結果是_【20】______.
#include
#define M 5
#define N M+M
main()
{ int k;
k=N*N*5; printf("%d\n",k);
}

一、選擇題答案:
1-10:CACDC DADBA 11-20:BDDBA CCCCB 21-30:DCBCA CCBCA
31-40:CCDAB DCDAB 41-50:CABCD BBBDB
二、填空題答案:
1.繼承 2. 元組 3.內聚 4.順序 5. 程序調試
6. 54321 7.10 11 8. 1 9.k<=n k++
10. 3 7 5 11.x[0] x[0] 12.s--,*s++ 13.c=getchar() 14. (x+8),sin(x) 15.55
希望對你有所幫助

J. 計算機二級C語言測試題及答案解析

2017年計算機二級C語言測試題及答案解析

全國計算機等級考試(National Computer Rank Examination,以下簡稱 NCRE),是經原國家教育委員會(現教育部)批准,由教育部考試中心主辦,面向社會,用於考查非計算機專業應試人員計算機應用知識與技能的全國性計算機水平考試體系。下面是2017年計算機二級C語言測試題及答案解析。歡迎閱讀。

2017年計算機二級C語言測試題及答案解析

1.(A )是構成C語言程序的基本單位。

A、函數

B、過程

C、子程序

D、子常式

2.C語言程序從 C 開始執行。

A、 程序中第一條可執行語句

B、 程序中第一個函數

C、 程序中的main函數

D、包含文件中的第一個函數

3、以下說法中正確的是( C )。

A、C語言程序總是從第一個定義的函數開始執行

B、在C語言程序中,要調用的函數必須在main( )函數中定義

C、C語言程序總是從main( )函數開始執行

D、C語言程序中的main( )函數必須放在程序的開始部分

4.下列關於C語言的說法錯誤的是( B ) 。

A、 C程序的工作過程是編輯、編譯、連接、運行

B、 C語言不區分大小寫。

C、 C程序的三種基本結構是順序、選擇、循環

D、C程序從main函數開始執行

5.下列正確的標識符是(C)。

A、-a1

B、a[i]

C、a2_i

D、int t

5~8題為相同類型題

考點:標識符的命名規則

只能由字母、數字、下劃線構成

數字不能作為標識符的開頭

關鍵字不能作為標識符

選項A中的“-” ,選項B中“[”與“]”不滿足(1);選項D中的int為關鍵字,不滿足(3)

6.下列C語言用戶標識符中合法的是(B )。

A、3ax

B、x

C、case

D、-e2 E)union

選項A中的標識符以數字開頭不滿足(2);選項C,E均為為關鍵字,不滿足(3);選項D中的“-”不滿足(1);

7.下列四組選項中,正確的C語言標識符是( C )。

A、 %x

B、a+b

C、a123

D、123

選項A中的“%” ,選項B中“+”不滿足(1);選項D中的標識符以數字開頭不滿足(2)

8、下列四組字元串中都可以用作C語言程序中的標識符的是( A)。

A、print _3d db8 aBc

B、Iam one_half start$it 3pai

C、str_1 Cpp pow while

D、Pxq My->book line# His.age

選項B中的“”,”$” ,選項D中“>”,”#”,”.”,”-”不滿足(1);選項C中的while為關鍵字,不滿足(3)

9.C語言中的簡單數據類型包括(D )。

A、整型、實型、邏輯型

B、整型、實型、邏輯型、字元型

C、整型、字元型、邏輯型

D、整型、實型、字元型

10.在C語言程序中,表達式5%2的結果是 C 。

A、2.5

B、2

C、1

D、3

%為求余運算符,該運算符只能對整型數據進行運算。且符號與被模數相同。5%2=1; 5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;

/為求商運算符,該運算符能夠對整型、字元、浮點等類型的數據進行運算,5/2=2

11.如果int a=3,b=4;則條件表達式"aA、 3

B、 4

C、 0

D、1

詳見教材P97.

表達式1?表達式2:表達式3

先計算表達式1,

若表達式1成立, 則選擇計算表達式2,並表達式2的值作為整個大表達式的值;

若表達式1不成立,則選擇計算表達式3,並將表達式3的值作為整個大表達式的值

此題中的aa為3,b為4。a12.若int x=2,y=3,z=4 則表達式x

A、4

B、3

C、2

D、0

E)1

13.C語言中,關系表達式和邏輯表達式的值是( B ) 。

A、0

B、 0或1

C、 1

D、‘T’或’F’

14. 下面( D )表達式的值為4.

A、 11/3

B、 11.0/3

C、 (float)11/3

D、 (int)(11.0/3+0.5)

14~16題為同一類型

詳見教材P54~56.

(1)相同數據類型的元素進行數學運算(+、-、*、/)得到結果還保持原數據類型。

(2)不同數據類型的元素進行數學運算,先要統一數據類型,統一的標準是低精度類型轉換為高精度的數據類型。

選項A,11與3為兩個整數,11/3結果的數據類型也應為整數,因此將3.666666的小數部分全部舍掉,僅保留整數,因此11/3=3.

選項B,11.0為實數,3為整數,因此首先要統一數據類型,將整型數據3轉換為3.0,轉換後數據類型統一為實型數據,選項B變為11.0/3.0,結果的數據類型也應為實型數據,因此選項B 11.0/3=3.666666

選項C,先將整數11強制類型轉換,轉換為實型11.0,因此選項C變為11.0/3,其後計算過程、結果與選項B同

選項D,首先計算11.0/3,其計算過程、結果與選項B同,得到3.666666;再計算3.666666+0.5=4.166666,最後將4.166666強制類型轉換為整型,即將其小數部分全部舍掉,結果為4

15.設整型變數 a=2,則執行下列語句後,浮點型變數b的值不為0.5的是( B)

A、b=1.0/a

B、b=(float)(1/A、

C、b=1/(float)a

D、b=1/(a*1.0)

16. 若“int n; float f=13.8;”,則執行“n=(int)f%3”後,n的值是(A)

A、1

B、4

C、4.333333

D、4.6

“(int)f“表示將f中的值強制類型轉換為整型,即將13.8的小數部分舍掉,轉換為13;然後計算13%3,結果為1,再將結果賦給變數n,因此n的值為1

17. 以下對一維數組a的正確說明是: D

A、char a(10);

B、 int a[];

C、int k=5,a[k];

D、char a[3]={‘a’,’b’,’c’};

詳見教材P143~144,一維數組的定義、初始化

類型符 數組名 [常量表達式]

類型符是指數組中數組元素的類型;數組名要符合標識符命名規則;常量表達式是指數組的長度(數組中包含元素的個數),其值只能是整數,不可以是變數,而且從1開始計數。

選項A,常量表達式只能放在中括弧 [ ]中

選項B,只有在對數組初始化(即賦值)的時候才可以省略數組的長度,B中並未對a進行初始化。

選項C,常量表達式不能為變數。

18.以下能對一維數組a進行初始化的.語句是:( C )

A、int a[5]=(0,1,2,3,4,)

B、 inta(5)={}

C、 int a[3]={0,1,2}

D、 int a{5}={10*1}

詳見教材P145,一維數組的定義、初始化

選項B,D,常量表達式只能放在中括弧 [ ]中

選項A,數組可以看做是若干個相同數據類型元素的有序集合,因此以集合的形式對其初始化,使用{ }對其初始化,選項A用了().

19.在C語言中對一維整型數組的正確定義為 D 。

A、int a(10);

B、int n=10,a[n];

C、int n;a[n];

D、#define N 10

int a[N];

20、已知:int a[10]; 則對a數組元素的正確引用是( D )。

A、a[10]

B、a[3.5]

C、a(5)

D、a[0]

詳見教材P144,數組元素的引用

數組名[下標]

引用數組元素時,[ ]中的下標為邏輯地址下標,只能為整數,可以為變數,且從0開始計數

int a[10]表示定義了一個包含10個整型數據的數組a,數組元素的邏輯地址下標范圍為0~9,即a[0] 表示組中第1個元素; a[1] 表示組中第2個元素; a[2] 表示組中第3個元素; ......;a[9] 表示組中第10個元素.

選項A,超過了數組a的邏輯地址下標范圍;

選項B,邏輯地址下標只能為整數

選項C,邏輯地址下標只能放在[ ]中

21.若有以下數組說明,則i=10;a[a[i]]元素數值是(C)。

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

A、10

B、9

C、6

D、5

先算a[a[i]]內層的a[i],由於i=10,因此a[i]即a[10].

a[10]對應下面數組中的元素為9. 因此a[a[i]]即為a[9]

a[9]對應下面數組中的元素為6. 因此a[9]即為6

22.若有說明:int a[][3]={{1,2,3},{4,5},{6,7}}; 則數組a的第一維的大小為: ( B )

A、2

B、3

C、4

D、無確定值

5 7

D、3 6 9

二維數組的一維大小,即指二維數組的行數,在本題中,按行對二維數組賦值,因此內層有幾個大括弧,數組就有幾行

23.對二維數組的正確定義是(C)

詳見教材P149~152,二維數組的定義、初始化

類型符 數組名 [常量表達式][常量表達式]

二維數組可以看做是矩陣

類型符是指數組中數組元素的類型;數組名要符合標識符命名規則;第一個常量表達式是指數組的行數;第二個常量表達式是指數組的列數;常量表達式的值只能是整數,不可以是變數,而且從1開始計數。

一維數組初始化時可以省略數組長度

二維數組初始化時可以省略行數,但不能省略列數

選項A,B,都省略了列數

選項D,不符合二維數組定義的一般形式,行、列常量表達式應該放在不同的[]中

A、int a[ ][ ]={1,2,3,4,5,6};

B、int a[2] []={1,2,3,4,5,6};

C、int a[ ] [3]={1,2,3,4,5,6};

D、int a[2,3]={1,2,3,4,5,6};

24.已知int a[3][4];則對數組元素引用正確的是__C___

A、a[2][4]

B、a[1,3]

C、a[2][0]

D、a(2)(1)

詳見教材P150,數組元素的引用

數組名[下標] [下標]

引用數組元素時,[ ]中的下標為邏輯地址下標,只能為整數,可以為變數,且從0開始計數

第一個[下標]表示行邏輯地址下標,第二個[下標]表示列邏輯地址下標。

本題圖示詳見P149圖6.7

因此a的行邏輯地址范圍0~2;a的列邏輯地址范圍0~3;

選項A,列邏輯地址下標超過范圍

選項B,D,的引用形式不正確。

25.C語言中函數返回值的類型是由 A 決定的.

A、函數定義時指定的類型

B、 return語句中的表達式類型

C、 調用該函數時的實參的數據類型

D、形參的數據類型

26. 在C語言中,函數的數據類型是指(A )

A、 函數返回值的數據類型

B、 函數形參的數據類型

C、 調用該函數時的實參的數據類型

D、任意指定的數據類型

27.在函數調用時,以下說法正確的是( B)

A、函數調用後必須帶回返回值

B、實際參數和形式參數可以同名

C、函數間的數據傳遞不可以使用全局變數

D、主調函數和被調函數總是在同一個文件里

28. 在C語言中,表示靜態存儲類別的關鍵字是: ( C )

A、 auto

B、 register

C、static

D、extern

29.未指定存儲類別的變數,其隱含的存儲類別為(A )。

A、auto

B、static

C、extern

D、register

30. 若有以下說明語句:

struct student

{ int num;

char name[ ];

float score;

}stu;

則下面的敘述不正確的是: (D )

A、 struct是結構體類型的關鍵字

B、 struct student 是用戶定義的結構體類型

C、 num, score都是結構體成員名

D、 stu是用戶定義的結構體類型名

31.若有以下說明語句:

struct date

{ int year;

int month;

int day;

}brithday;

則下面的敘述不正確的是__C___.

A、 struct是聲明結構體類型時用的關鍵字

B、 struct date 是用戶定義的結構體類型名

C、 brithday是用戶定義的結構體類型名

D、year,day 都是結構體成員名

32. 以下對結構變數stul中成員age的非法引用是 B

struct student

{ int age;

int num;

}stu1,*p;

p=&stu1;

A、 stu1.age

B、 student.age

C、 p->age

D、(*p).age

33.設有如下定義:

struck sk

{ int a;

float b;

}data;

int *p;

若要使P指向data中的a域,正確的賦值語句是 C

A、 p=&a;

B、 p=datA、a;

C、p=&datA、a;

D、*p=datA、a;

34.設有以下說明語句:

typedef struct stu

{ int a;

float b;

} stutype;

則下面敘述中錯誤的是( D )。

A、struct是結構類型的關鍵字

B、struct stu是用戶定義的結構類型

C、a和b都是結構成員名

D、stutype是用戶定義的結構體變數名

35.語句int *p;說明了 C 。

A、p是指向一維數組的指針

B、p是指向函數的指針,該函數返回一int型數據

C、p是指向int型數據的指針 // 指針的定義教材P223

D、p是函數名,該函數返回一指向int型數據的指針

36.下列不正確的定義是(A )。

A、int *p=&i,i;

B、int *p,i;

C.int i,*p=&i;

D、int i,*p;

選項A先定義一個整型指針變數p,然後將變數i的地址賦給p。然而此時還未定義變數i因此編譯器無法獲得變數i的地址。(A與C對比,選項C先定義變數i,則在內存中為i分配空間,因此i在內存空間的地址就可以確定了;然後再定義p,此時可以為p賦i的地址,C正確)

37. 若有說明:int n=2,*p=&n,*q=p,則以下非法的賦值語句是: (D )

A、p=q

B、*p=*q

C、n=*q

D、p=n

p,q同為整型指針變數,二者裡面僅能存放整型變數的地址。

選項A,q中為地址,因此可將此地址賦給p

選項B,*p表示p所指向對象n的內容,即一個整數;*q表示q所指向對象的內容,由於在定義q時為其初始化,將p中n的地址給q,因此p中存放n的地址,*q表示q所指向對象n的內容.因此*p=*q 相當於 n=n;

選項C,n=*q 等價於n=n;

選項D,p中只能存放地址,不能將n中的整數值賦給p

38.有語句:int a[10],;則 B 是對指針變數p的正確定義和初始化。

A、int p=*a;

B、int *p=a;

C、int p=&a;

D、int *p=&a;

選項A,a是數組名,不是指針變數名,因此不可用*標注數組名a

選項C,a是數組名,數組名就是地址,無需再用地址符號。而且在定義指針變數p時,應在變數名前加*,標明p是指針變數

選項D,a是數組名,數組名就是地址,無需再用地址符號。

39.若有說明語句“int a[5],*p=a;”,則對數組元素的正確引用是( C )。

A、a[p]

B、p[a]

C、*(p+2)

D、p+2

首先定義一個整型數組a,a的長度為5,然後定義一個指針變數p,並同時對p進行初始化,將數組a的地址賦給p。因此此時p中存放的數組a的首地址,即數組中第一個元素a[0]的地址。

對於數組元素下標的引用(詳見p144), 一般形式 數組名[下標] 其中下標為邏輯地址下標,從0開始計數,方括弧中的下標可以是變數,可以是表達式,但結果一定要是整數。

選項A,p中存放的是地址,不是整數,不能做數組元素的下標

選項B,a是數組名,數組名就是地址,不是整數,不能做數組元素的下標

選項C,(重點!!!詳見p231~234) p+2表示指向同一數組中的下兩個元素的地址,當前p指向a[0],則p+2表示a[2]的地址,因此*(p+2)表示a[2]的內容

40. 有如下程序

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

則數值為9的表達式是 B

A、 *P+9

B、 *(P+8)

C、 *P+=9

D、P+8

(重點!!!詳見p231~234)

首先定義一個整型數組a,a的長度為5,然後定義一個指針變數P,並同時對P進行初始化,將數組a的地址賦給P。因此此時P中存放的數組a的首地址,即數組中第一個元素a[0]的地址。

數組中9對應的是a[8], 選項B,P+8表示數組中後8個元素的地址,即a[8]的地址。*(P+8)則表示該地址內所存放的內容,即a[8]的值。

選項A,*P表示P所指向對象的內容,此時P指向a[0], *P即a[0]的值1. *P+9=1+9=10

選項C,*P表示P所指向對象的內容,此時P指向a[0], *P即a[0]的值。因此*P+=9 即*P =*P+9, 等價於a[0]=a[0]+9.

選項D,P+8表示數組中後8個元素的地址,即a[8]的地址,而非a[8]中的值。

41. 在C語言中,以 D 作為字元串結束標志

A、’ ’

B、’ ’

C、 ’0’

D、’’

42.下列數據中屬於“字元串常量”的是(A )。

A、“a”

B、{ABC}

C、‘abc’

D、‘a’

若干個字元構成字元串

在C語言中,用單引號標識字元;用雙引號標識字元串

選項B,C,分別用{}和’’標識字元串

選項D,標識字元。

43.已知char x[]="hello", y[]={'h','e','a','b','e'};, 則關於兩個數組長度的正確描述是 B .

A、相同

B、x大於y

C、x小於y

D、以上答案都不對

C語言中,字元串後面需要一個結束標志位'',通常系統會自動添加。

對一維數組初始化時可採用字元串的形式(例如本題數組x),也可採用字元集合的形式(例如本題數組y)。在以字元串形式初始化時,數組x不盡要存儲字元串中的字元,還要存儲字元串後的結束標志位,因此數組x的長度為6;在以字元集合形式初始化時,數組y,僅存儲集合中的元素,因此數組y長度為5

;
熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:521
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:868
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91