c語言上機考試題及答案
㈠ 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語句是( )。
㈡ 2018年計算機二級考試C語言試題及答案(2)
2018年計算機二級考試C語言試題及答案(2)
選擇題(每小題1分,共40分)
1[單選題] 若有定義語句:double a,* P=&a;以下敘述中錯誤的是()。
A.定義語句中的*號是一個間址運算符
B.定義語句中的*號是一個說明符
C.定義語句中的P只能存放double類型變數的地址
D.定義語句中,*P=&a把變數a的地址作為初值賦給指針變數P
參考答案:A
參考解析:在變數定義double a,* P=&a;中,*號是一個指針運算符,而非間址運算符,所以A錯誤。
6[單選題] 若有定義語句:int x=10;,則表達式x-=x+x的值為()。
A.0
B.-20
C.-10
D.10
參考答案:C
參考解析:算術運算符+的優先順序高於-=,且-=的結合方向為自右向左,所以表達式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,選擇C。
2[單選題] 若有定義語句:double x,y,*px,*py;執行了px=&x;py=&y;之後,正確的輸入語句是()。
A.scanf(」%If%le」,px,py);
B.scanf(」%f%f」&x,&y);
C.sceanf(」%f%f」,x.y);
D.scanf(」%If%If'』,x,y);
參考答案:A
帶段參考解析:因為x,y都是double型數據,所以輸入時的格式字元應為%lf,所以B與C錯誤。D選項中scanf("%lf%If",x,y);應為scanf(「%If%If"」,&x,&y);。
3[單選題] 下列數據結構中,屬於非線性結構的是()。
A.循環隊列
B.帶鏈隊列
C.二叉樹
D.帶鏈棧
參考答案:C
參考解析:樹是簡單的非線性結構,所以二叉樹作為蠢亂譽樹的一種也是一種非線性結構。
4[單選題] 對於循環隊列,下列敘述中正確的是()。
A.隊頭指針是固定不變的
B.隊頭指針一定大於隊尾指針
陪陵C.隊頭指針一定小於隊尾指針
D.隊頭指針可以大於隊尾指針,也可以小於隊尾指針
參考答案:D
參考解析:循環隊列的隊頭指針與隊尾指針都不是固定的,隨著入隊與出隊操作要進行變化。因為是循環利用的隊列結構,所以隊頭指針有時可能大於隊尾指針,有時也可能小於隊尾指針。
5[單選題] 若變數已正確定義,在if(W)printf(」%d 」,k);中,以下不可替代w的是()。
A.a<>b+c
B.ch=getchar()
C.a==b+c
D.a++
參考答案:A
參考解析:選項A是非法的表達式,C語言中沒有<>運算符。
6[單選題] 下列排序方法中,最壞情況下比較次數最少的是()。
A.冒泡排序
B.簡單選擇排序
C.直接插入排序
D.堆排序
參考答案:D
參考解析:冒泡排序與筒單插入排序與簡單選擇排序法在最壞情況下均需要比較n(n-1)/2次,而堆排序在最壞情況下需要比較的次數是nlog2n。
7[單選題] 資料庫管理系統是()。
A.操作系統的一部分
B.在操作系統支持下的系統軟體
C.一種編譯系統
D.一種操作系統
參考答案:B
參考解析:資料庫管理系統是資料庫的機構,它是一種系統軟體,負責資料庫中數據組織、數據操縱、數據維護、控制及保護和數據服務等。是一種在操作系統之上的系統軟體。
8[單選題] 以下選項中,能用作用戶標識符的是()。
A._0_
B.8_8
C.void
D.unsigned
參考答案:A
參考解析:C語言中標識符由字母、下劃線、數字組成,且開頭必須是字母或下劃線。另外,關鍵字不能作為標識符。B中以數字8開頭,所以錯誤。C與D中用的是關鍵字void與unsigned,所以錯誤。
9[單選題] 以下敘述中錯誤的是()。
A.使用三種基本結構構成的程序只能解決簡單問題
B.結構化程序由順序、分支、循環三種基本結構組成
C.C語言是一種結構化程序設計語言
D.結構化程序設計提倡模塊化的設計方法
參考答案:A
參考解析:使用順序,選擇(分支),循環三種基本結構構成的程序可以解決所有問題,而不只是解決簡單問題,所以A錯誤。
10[單選題] 下列敘述中正確的是()。
A.棧是「先進先出」的線性表
B.隊列是「先進後出」的線性表
C.循環隊列是非線性結構
D.有序線性表既可以採用順序存儲結構,也可以採用鏈式存儲結構
參考答案:D
參考解析:棧是先進後出的線性表,所以A錯誤;隊列是先進先出的線性表,所以B錯誤;循環隊列是線性結構的線性表,所以C錯誤。
11[單選題] 以下不構成無限循環的語句或語句組是()。
A.n=0:
do{++n;}while(n<=0);
B.n=0;
while(1){n++;}
C.n=10;
while(n);{n--;}
D.for(n=0,i=1;;i++)n+=i;
參考答案:A
參考解析:選項A中do後面的語句只執行了一次便結束了循環;B選項中條件while(1)永遠成立,所以是死循環;C選項中n的值為10,而循環體為空語句,所以wilile(n)永遠為真,進入死循環;D選項中for語句第二個表達式為空,所以沒有判別條件,進入死循環。
12[單選題] 若a是數值類型,則邏輯表達式(a==1)||(a!=1)的值是()。
A.1
B.0
C.2
D.不知道a的值,不能確定
參考答案:A
參考解析:邏輯或」||」要求只要兩邊的運算對象有一個非零,結果就為真。雖然不知道a的值,但是若a為l,則左邊運算對象為1;若a的值不是1,則右邊運算對象的值為1,所以總能保證一邊非零,所以結果為真,即1。
13[單選題] 下列選項中不屬於結構化程序設計原則的是()。
A.可封裝
B.自頂向下
C.模塊化
D.逐步求精
參考答案:A
參考解析:結構化程序設計的思想包括:自頂向下、逐步求精、模塊化、限制使用goto語句,所以選擇A。
14[單選題] 某二叉樹有5個度為2的結點,則該二叉樹中的葉子結點數是()。
A.10
B.8
C.6
D.4
參考答案:C
參考解析:根據二叉樹的基本性質3:在任意一棵二叉樹中,度為0的葉子結點總是比度為2的結點多一個,所以本題中是5+1=6個。
15[單選題] 支持子程序調用的數據結構是()。
A.棧
B.樹
C.隊列
D.二叉樹
參考答案:A
參考解析:棧支持子程序調用。棧是一種只能在一端進行插入或刪除的線性表,在主程序調用子函數時要首先保存主程序當前的狀態,然後轉去執行子程序,最終把子程序的執行結果返回到主程序中調用子程序的位置,繼續向下執行,這種調用符合棧的特點,因此本題的答案為A。
㈢ C語言試題及答案(2)
main()
{ int k, a[10]={1,2,3,4,5};
for(k=1; k<3; k++) fun(a);
for(k=0; k<5; k++) printf("%d", a[k]);
}
上面程序的輸出結果是
A.34756
B.23445
C.35743
D.12345
(40) 請讀程序:
#include
#define SUB(X,Y) (X)*Y
main()
{ int a=3, b=4;
printf("%d", SUB(a++, b++));
}
上面程序的輸出結果是
A.12
B.15
C.16
D.20(41) 請讀程序:
#include
main()
{ int mun=0;
while(num<=2)
{ num++; printf("%d ",num);}
}
上面程序的輸出結果是
A.1
B.1
C.1
D.1
2 2 2
3 3
4
(42) 請讀程序:
#include
main()
{ float x,y;
scan("%f",&x);
if(x<0.0) y=0.0
else if((x<5.0)&&(x!=2.0))
y=1.0/(x+2.0);
else if (x<10.0) y=1.0/x;
else y=10.0;
printf("%f ",y);
}
若運行時從鍵盤上輸入2.0(表示回車),則上面程序的輸出結果是
A.0.000000
B.0.250000
C.0.500000
D.1.000000
(43) 請讀程序:
#include
main()
{ int x=1, y=0, a=0, b=0;
switch(x)
{ case 1:
switch(y)
{ case 0: a++;break;
case 1: b++;break;
}
case 2:
a++; b++; break;
}
printf("a=%d, b=%d ",a,
B.;
}
上面程序的輸出結果是
A.a=2, b=1
B.a=1, b=1
C.a=1, b=0
D.a=2, b=2
(44) 若有下面的程序片段:
int a[12]={0}, *p[3], **pp, i;
for(i=0; i<3; i++)
p[i]=&a[i*4];
pp=p;
則對數組元素的錯誤引用是
A.pp[0][1]
B.a[10]
C.p[3][1]
D.*(*(p+2)+2)
(45) 請讀程序:
#include
#include
main()
{ float x,y,z;
scan("%f%f",&x,&y);
z=x/y;
while(1)
{ if(fabs(z)>1.0)
{ x=y; y=z; z=x/y;
}
else break
}
printf("%f ",y);
}
若運行時從鍵盤上輸入3.6 2.4(表示回車),則輸出的結果是
A.1.500000
B.1.600000
C.2.000000
D.2.400000
(46) 請讀程序:
#include
f(in b[], int n)
{ int i, r;
r=1;
for(i=0; i<=n; i++) r=r*b[i];
return r;
}
main()
{ int x, a[]={ 2,3,4,5,6,7,8,9};
x=f(a, 3);
printf("%d ",x);
}
上面程序的輸出結果是
A.720
B.120
C.24
D.6
(47) 請讀程序:
#include
#include
void fun( char *s)
{ char a[10];
strcpy( a, "STRING");
s=a;
}
main()
{ char *p;
fun(p);
x=f(a, 3);
printf("%s ",p);
}
上面程序的輸出結果是(└┘表示空格)
A.STRING└┘└┘└┘└┘
B.STRING
C.STRING└┘└┘└┘
D.不確定的值
(48) 若已建立下面的鏈表結構,指針p、s分別指向圖中所示的結點,則不能將s所指的結點插入到鏈表末尾的語句組是
A.s->next=NULL; p=p->next; p->next=s;
B.p=p->next; s->next=p->next; p->next=s;
C.p=p->next; s->next=p; p->next=s;
D.p=(*p).next; (*s).next=(*p).next; (*p).next=s;
(49) 請讀程序:
#include
void fun(float *pl, float *p2, float *s)
{ s=( float * )calloc( 1, sizeof(float));
*s=*p1+ *(p2++);
}
main()
{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
fun(a, b, s)
printf("%f ",*s);
}
上面程序的輸出結果是
A.11.100000
B.12.100000
C.21.100000
D.1.100000
(50) 請讀程序:
#include
#include
void fun( char *w, int m)
{ char s, *p1, *p2;
p1=w; p2=w+m-1;
while (p1{ s=*p1++; *p1=*p2--; *p2=s;}
}
main()
{ char a[]="ABCDEFG";
fun( a, strlen(a));
puts(a);
}
上面程序的輸出結果是
A.GFEDCBA
B.AGADAGA
C.AGAAGAG
D.GAGGAGA
二、填空題(每空2分,共40分)
請將每空的正確答案寫在答題卡上【1】-【20】序號後的橫線上,答在試卷上不得分。
(1) DOS命令分為內部命令與外部命令,XCOPY命令是 【1】 命令
(2) 為了列出當前盤當前目錄中所有第三個字元為C的文件名的有關信息,應該用命令 【2】 。
(3) 設當前盤為A盤,當前目錄為XY,A盤上的一個文件QR.C在當前目錄下的子目錄W中。現已將A盤的當前目錄改為DXY,當前盤改為C盤,如需指定A盤上該文件應寫成 【3】 。
(4) 用十六進制給存儲器中的位元組地址進行編號,其地址編號是從0000到FFFF,則該存儲器的容量是【4】KB。
(5) 設有兩個八位二進制數00010101與01000111相加,其結果的十進製表示為 【5】 。
(6) 數學式子 寫成C語言表達式是 【6】 。
(7) 下面程序的輸出結果是 【7】 。
#include
main()
{ static char b[]="Goodbye";
char *chp=&b[7];
while( --chp >=&b[0]) putchar( *chp);
putchar(’ ’);
}
(8) 下面程序的輸出結果是 【8】 。
#include
void as( int x, int y, int *cp, int *dp)
{ *cp=x+y;
*dp=x-y;
}
main()
{ int a=4, b=3, c, d;
as( a, b, &c, &d);
printf( ’%d %d ", c, d);
}
(9) 請讀程序:
#include
main( int argc, char *argv[])
{ int i;
printf( ’%d ", argc);
for( i=0; i<=argc+1; i++) printf( "%s ", argv[i]);
printf(" ");
}
若上面的程序編譯、連接後生成可執行文件ABC.EXE,則輸入以下命令行
abc file1 file2(表示回車)
程序執行後的輸出結果是 【9】 。
(10) 條件“20(11) 設二進制數a是00101101,若想通過異或運算a^b使a的高4位取反,低4位不變,則二進制數b應是 【11】 。
(12) 若有以下說明和定義語句,則變數w在內存中所佔的位元組數是 【12】 。
union aa
{ float x, y;
char c[6];
};
struct st { union aa v; float w[5]; double ave; } w;
(13) 下面程序的輸出結果是 【13】 。
#include
#define N 5
fun( char *s, char a, int n)
{ int j;
*s=a; j=n;
while( ereturn j;
}
main()
{ char s[N+1];
int k, p;
for( k=1; k<=N; k++)
s[k]=’A’+k+1;
printf( "%d ", fun(s, ’E’, N));
}(14) 下面程序的輸出結果是 【14】 。
#include
void fun( char *a1, char *a2, int n)
{ int k;
for( k=0; ka2[k]=( a1[k]-’A’-3+26)&+’A’;
a2[n]=’