c語言筆試題及答案
1. 計算機二級c語言筆試題和面試題答案目
如下這份計算機二級C語言筆試題目對於要考基計算機二級證書的朋友來說,應該會很有幫助,需要的朋友趕緊收藏吧!
一、選擇題((1)-(10),(21)-(40)每題2分,(11)-(20)每題1分,共70分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的。請將正確選項填塗在答題卡相應位置上,答在試卷上不得分。
1. 下列敘述中正確的是
A 線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的
B 線性表的鏈式存儲結構所需要的存儲空間一般要多於順序存儲結構
C 線性表的鏈式存儲結構所需要的存儲空間一般要少於順序存儲結構
D 上述三種說法都不對 答案:B
2. 下列敘述中正確的是
A 在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化
B 在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化
C 在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化
D 上述三種說法都不對 答案:C
3. 軟體測試的目的是
A 評估軟體可靠性 B 發現並改正程序中的錯誤 C 改正程序中的錯誤
D 發現程序中的錯誤 答案:B
4. 下面描述中,不屬於軟體危機表現的是
A 軟體過程不規范 B 軟體開發生產率低 C 軟體質量難以控制
D 軟體成本不斷提高 答案:A
5. 軟體生命周期是指
A 軟體產品從提出、實現、使用維護到停止使用退役的過程
B 軟體從需求分析、設計、實現到測試完成的過程 C 軟體的開發過程
D 軟體的運行維護過程 答案:A
6. 面向對象方法中,繼承是指
A 一組對象所具有的相似性質 B 一個對象具有另一個對象的性質 C 各對象之間的共同性質 D 類之間共享屬性和操作的機制 答案:D
7. 層次型、網狀型和關系型資料庫劃分原則是
A 記錄長度 B 文件的大小 C 聯系的復雜程度
D 數據之間的聯系方式 答案:D
8. 一個工作人員可以使用多台計算機,而一台計算機可被多個人使用,則實體工作人員、與實體計算機之間的聯系是
A 一對一B 一對多C 多對多D 多對一 答案:C
9. 資料庫設計中反映用戶對數據要求的模式是
A 內模式B 概念模式C 外模式D 設計模式 答案:C
10. 有三個關系R、S和T如下:則由關系R和S得到關系T的操作是
A 自然連接B 交C 投影D 並 答案:A
11. 以下關於結構化程序設計的敘述中正確的是
A 一個結構化程序必須同時由順序、分支、循環三種結構組成
B 結構化程序使用goto語句會很便捷 C 在C語言中,程序的模塊化是利用函數實現的
D 由三種基本結構構成的程序本文由論文聯盟http://www.LWLm.coM收集整理只能解決小規模的問題 答案:C
12. 以下關於簡單程序設計的步驟和順序的說法中正確的是
A 確定演算法後,整理並寫出文檔,最後進行編碼和上機調試
B 首先確定數據結構,然後確定演算法,再編碼,並上機調試,最後整理文檔
C 先編碼和上機調試,在編碼過程中確定演算法和數據結構,最後整理文檔
D 先寫好文檔,再根據文檔進行編碼和上機調試,最後確定演算法和數據結構 答案:D
13. 以下敘述中錯誤的是
A C程序在運行過程中所有計算都以二進制方式進行 B C程序在運行過程中所有計算都以十進制方式進行 C 所有C程序都需要編譯鏈接無誤後才能運行
D C程序中整型變數只能存放整數,實型變數只能存放浮點數 答案:B
14. 有以下定義:inta; longb; doublex,y;則以下選項中正確的表達式是
A a%(int)(x-y) B a=x!=y; C (a*y)%b D y=x+y=x 答案:C
15. 以下選項中能表示合法常量的是
A 整數:1,200 B 實數:1.5E2.0 C 字元斜杠:‘\’ D 字元串:"\007" 答案:C
16. 表達式a+=a-=a=9的值是
A 9 B _9 C 18 D 0 答案:D
17. 若變數已正確定義,在if (W)printf(“%d\n,k”);中,以下不可替代W的是
A a<>b+c B ch=getchar() C a==b+c D a++ 答案:A
18. 有以下程序
#include
main()
{inta=1,b=0;
if(!a) b++;
elsEif(a==0)if(a)b+=2;
elseb+=3;
printf(”%d\n”,b);
}
程序運行後的輸出結果是
A 0 B 1 C 2 D 3 答案:C
20. 有以下程序
#include
main()
{int a=1,b=2;
while(a<6){b+=a;a+=2;b%二10;}
printf(”%d,%d\n”,a,b);
}
程序運行後的輸出結果是
A 5,11 B 7,1 C 7,11 D 6,1 答案:D
21. 有以下程序
#include
main()
{int y=10;
while(y--);
printf(”Y=%d\n”,Y);
}
程序執行後的輸出結果是
A y=0 B y= -1 C y=1 D while構成無限循環 答案:B
22. 有以下程序
#include
main()
{char s[」=”rstuv";
printf(”%c\n”,*s+2);
}
程序運行後的輸出結果是
A tuv B 字元t的ASCII碼值 C t D 出錯 答案:D
23. 有以下程序
#include
#include
main()
{char x[]=”STRING”;
x[0」=0;x=’\0’;x[2」=’0’;
printf(”%d%d\n”,sizeof(x),strlen(x));
}
程序運行後的輸出結果是
A 61 B 70 C 63 D 71 答案:B
24. 有以下程序
#include
Int f(intx);
main()
{intn=1,m;
m=f(f(f(n)));printf(”%d\n”,m);
}
intf(intx)
{returnx*2;}
程序運行後的輸出結果是
A 1 B 2 C 4 D 8 答案:D
25. 以下程序段完全正確的是
A int *p;scanf("%d",&p); B int *p;scanf(“%d”,p);
C int k, *p=&k;scanf("%d",p); D int k, *p:;*p= &k; scanf(“%d”,p); 答案:D
26. 有定義語句:int *p[4];以下選項中與此語句等價的是
A intp[4]; B int**p; C int*(p「4」); D int (*p)「4」; 答案:D
27. 下列定義數組的語句中,正確的是
A B C intx[0..10]; D int x[]; 答案:B
28. 若要定義一個具有5個元素的整型數組,以下錯誤的定義語句是
A inta[5]=﹛0﹜; B intb[]={0,0,0,0,0}; C intc[2+3]; D inti=5,d[i]; 答案:A
29. 有以下程序
#include
voidf(int *p);
main()
{inta[5]={1,2,3,4,5},*r=a;
f(r);printf(”%d\n”;*r);
}
void f(int *p)
{p=p+3;printf(”%d,”,*p);}
程序運行後的輸出結果是
A 1,4 B 4,4 C 3,1 D 4,1 答案:D
30. 有以下程序(函數fun只對下標為偶數的元素進行操作)
# include
void fun(int*a;int n)
{int i、j、k、t;
for (i=0;i
2. 一些C語言求職筆試題2
19、一個隊列入列順序是1,2,3,4,則輸出順序是
a、4321b、1234c、1432d、3241
隊列是先進先出的,所以答案是B、1234
20、若進棧順序為1,2,3,4,假定進棧和出棧可以穿插進行,
則可能的出棧順序為:
a、2413b、3142c、3412d、1234
答案是:D。分析過程如下:
A,第一個為2第二個為4,可以確定棧中是3,1所以應該是2431
B,第一個為3,則棧中2,1。第二個可能是24,但肯定不是1
C,第一個為3,第二個為4,則棧中是2,1,所以應該是3421
D,由於進棧和出棧可以穿插進行,所以1進,1出,2進,2出,3進,3出,4進,4出。
21、演算法的空間復雜度指
a、演算法程序的長度
b、演算法程序的指令條數
c、演算法程序占的存儲空間
d、演算法執行過程中所需的存儲空間
答案是D,因為,空間復雜度指的就是:程序執行過程中由於需要,所申請的內存空間。
22、某數列有1000個各不相同的單元,有低到高排列,要對該數進行二分法檢索
,最壞的情況下,需要檢查多少個單元
a、1000b、10c、100d、500
答案是B,
因為,因為2^9=512,不夠檢索完1000個,
那麼:2^10=1024,就夠檢索完1000個了。
二分查找次數以2為基數,2的10次方為1024,
完全可以查找到,所以最多隻需要10次即可。
23、已知數組A中,每個元素A[I][J]在存儲時要佔3個位元組,設I從0變到4,
J從0到9,分配內存從地址SA開始連續按行存儲分配的。問:A[4][7]的起始地址為:
a、SA+84b、SA+99c、SA+120d、SA+141
答案是D,
因為,數組的首個元素也就是數組的首地址是A[0][0],
那麼A[4][7]就是第5行的第8列,一個元素3個位元組,
那麼一行(J最大為9,就是10列)10*3=30個位元組,
前4行4*30=120,再加上7個7*3,
結果就是:4*10*3+7*3=141。24、使用雙向鏈表存放數據的優點是
a、提高檢索速度b、方便的插入和刪除數據
c、節約存儲空間d、很快回收存儲空間
答案是B,因為,
鏈表優點:
1)插入和刪除元素不需要移動其餘元素,效率高;
2)不要求連續空間,空間利用效率高
鏈表缺點:
1)不提高隨機訪問元素的機制
2)查找元素和搜索元素的效率低
25、若某鏈表最常用的操作是在最後一個結點之後插入一個結點並刪除最後一個
結點,則採用____存儲方式最省時間
a、單鏈表
b、雙鏈表
c、帶頭節點的雙循環鏈表
d、單循環鏈表
答案是C,因為,
雙循環鏈表能夠通過頭結點的前驅就是尾結點,能夠迅速找到尾結點,然後進行插入和刪除操作
26、在理想情況下,散列表中查找元素所需比較次數為:
a、nb、0c、n/2d、1
答案是D,因為,
散列方法不同於順序查找、二分查找、二叉排序樹及B-樹上的查找。
它不以關鍵字的比較為基本操作,採用直接定址技術。
在理想情況下,無須任何比較就可以找到待查關鍵字,查找的期望時間為O(1)。
27、Ethernet屬於數據鏈路層協議
答案是正確的。因為:
數據鏈路層的主要協議有:
(1)Point-to-PointProtocal;PPP點到點
(2)Ethernet;乙太網
(3)High-LevelDataLinkControlProtocal;HDLC高級鏈路控制協議
(4)FrameRelay;幀中繼
(5)AsynchronousTransferMode;ATM
28、普通交換機和路由器工作在
a、數據鏈路層和傳輸層
b、鏈路層和網路層
c、都是網路層
d、網路層和傳輸層
答案是B,因為,
交換機主要工作在數據鏈路層(第二層)
路由器工作在網路層(第三層)。29、乙太網的MTU值為
a、500b、1492c、1500d、1982
答案是C,因為
最大傳輸單元MTU=1500是國際規定的默認值,
是一個經過實驗得到的可以最大效率傳輸數據的值。
倘若大於1500,數據傳輸速度就會變慢;
若小於1500,鏈路又得不到充分利用,減小了效率。
30、在一個WindowsSDK的基本應用程序框架中,有如下消息循環:
while(GetMessage(&Msg,NULL,0,0){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
下面哪個消息使得該消息循環退出運行,從而終止整個應用程序的運行
a、WM_DESTROY b、WM_QUITc、WM_CLOSR d、WM_CREATE
答案是B,因為
WM_CLOSE:關閉應用程序窗口
WM_DESTROY:關閉應用程序
WM_QUIT:關閉消息循環
只有關閉了消息循環,應用程序的進程才真正退出(在任務管理器里消失)。
31、進程和線程最主要的區別:
a、CPU調度方式不同b、優先順序不同
c、程序入口不同d、進程有獨立的地址空間,線程共享地址空間
答案是D,
進程和線程的主要差別在於它們是不同的操作系統資源管理方式。
進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,
而線程只是一個進程中的不同執行路徑。
線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,
一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,
但在進程切換時,耗費資源較大,效率要差一些。
32、以下哪項不適合用於進程間通訊
a、socketb、Pipec、共享內存d、全局變數
答案是D,
Windows中進程間通信方式有:
File,管道(Pipe),命名管道(namedpipe),信號(Signal),消息隊列(Messagequeue),
共享內存(sharedmemory),內存映射(memory–mappedfile),信號量(semaphore),
套介面(Socket),命名事件。臨界區事實上應該算是由信號量來保證的。
全局變數不能用於進程間通訊。
3. 急!!歷年國家計算機二級c語言筆試真題答案。
2010年9月全國計算機二級C語言筆試試題:文字版
一、選擇題(每小題2分,共70分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的。請將正確選項填塗在答題卡相應位置上,答在試卷上不得分。
(1)下列敘述中正確的是
A)線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的
B)線性表的鏈式存儲結構所需要的存儲空間一般要多於順序存儲結構
C)線性表的鏈式存儲結構所需要的存儲空間一般要少於順序存儲結構
D)上述三種說法都不對
(2)下列敘述中正確的是
A)在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化
B)在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化
C)在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化
D)上述三種說法都不對
(3)軟體測試的目的是
A)評估軟體可靠性
B)發現並改正程序中的錯誤
C)改正程序中的錯誤
D)發現程序中的錯誤
(4)下面描述中,不屬於軟體危機表現的是
A)軟體過程不規范
B)軟體開發生產率低
C)軟體質量難以控制
D)軟體成本不斷提高
(5)軟體生命周期是指
A)軟體產品從提出、實現、使用維護到停止使用退役的過程
B)軟體從需求分析、設計、實現到測試完成的過程
C)軟體的開發過程
D)軟體的運行維護過程
(6)面向對象方法中,繼承是指
A)一組對象所具有的相似性質
B)一個對象具有另一個對象的性質
C)各對象之間的共同性質
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)一個結構化程序必須同時由順序、分支、循環三種結構組成
B)結構化程序使用goto語句會很便捷
C)在C語言中,程序的模塊化是利用函數實現的
D)由三種基本結構構成的程序只能解決小規模的問題
(12)以下關於簡單程序設計的步驟和順序的說法中正確的是
A)確定演算法後,整理並寫出文檔,最後進行編碼和上機調試
B)首先確定數據結構,然後確定演算法,再編碼,並上機調試,最後整理文檔
C)先編碼和上機調試,在編碼過程中確定演算法和數據結構,最後整理文檔
D)先寫好文檔,再根據文檔進行編碼和上機調試,最後確定演算法和數據結構
(13)以下敘述中錯誤的是
A) C程序在運行過程中所有計算都以二進制方式進行
B)C程序在運行過程中所有計算都以十進制方式進行
C)所有C程序都需要編譯鏈接無誤後才能運行
D)C程序中整型變數只能存放整數,實型變數只能存放浮點數
(14)有以下定義:int a; long b; double x,y;則以下選項中正確的表達式是
A)a%(int)(x-y)
B)a=x!=y;
C)(a*y)%b
D)y=x+y=x
(15)以下選項中能表示合法常量的是
A)整數:1,200
B)實數:1.5E2.0
C )字元斜杠:『\』
D)字元串:"\007"
(16)表達式a+=a-=a=9的值是
A)9
B)_9
C)18
D)0
(17)若變數已正確定義,在if (W)printf(「%d\n,k」);中,以下不可替代W的是
A)a<>b+c
B)ch=getchar()
C)a==b+c
D)a++
(18)有以下程序
#include<stdio.h>
main()
{int a=1,b=0;
if(!a) b++;
else if(a==0)if(a)b+=2;
else b+=3;
printf(」%d\n」,b);
}
程序運行後的輸出結果是
A)0
B)1
C)2
D)3
(19)若有定義語句int a, b;double x;則下列選項中沒有錯誤的是
A)switch(x%2) B)switch((int)x/2.0
{case 0: a++; break; {case 0: a++; break;
case 1: b++; break; case 1: b++; break;
default : a++; b++; default : a++; b++;
} }
C)switch((int)x%2) D)switch((int)(x)%2)
{case 0: a++; break; {case 0.0: a++; break;
case 1: b++; break; case 1.0: b++; break;
default : a++; b++; default : a++; b++;
} }
(20)有以下程序
#include <stdio.h>
main()
{int a=1,b=2;
while(a<6){b+=a;a+=2;b%二10;}
printf(」%d,%d\n」,a,b);
}
程序運行後的輸出結果是
A)5,11
B)7,1
C)7,11
D)6,1
(21)有以下程序
#include<stdio.h>
main()
{int y=10;
while(y--);
printf(」Y=%d\n」,Y);
}
程序執行後的輸出結果是
A)y=0
B)y= -1
C)y=1
D)while構成無限循環
(22)有以下程序
#include<stdio .h>
main()
{char s〔」=」rstuv";
printf(」%c\n」,*s+2);
}
程序運行後的輸出結果是
A)tuv
B)字元t的ASCII碼值
C)t
D)出錯
(23)有以下程序
#include<stdio.h>
#include<string.h>
main()
{char x〔〕=」STRING」;
x〔0」=0;x〔1〕=』\0』;x〔2」=』0』;
printf(」%d %d\n」,sizeof(x),strlen(x));
}
程序運行後的輸出結果是
A)6 1
B)7 0
C)6 3
D)7 1
(24)有以下程序
#include<stdio.h>
Int f(int x);
main()
{int n=1,m;
m=f(f(f(n)));printf(」%d\n」,m);
}
int f(int x)
{return x*2;}
程序運行後的輸出結果是
A)1
B)2
C)4
D)8
(25)以下程序段完全正確的是
A)int *p; scanf("%d",&p);
B)int *p; scanf(「%d」,p);
C)int k, *p=&k; scanf("%d",p);
D)int k, *p:; *p= &k; scanf(「%d」,p);
(26)有定義語句:int *p[4];以下選項中與此語句等價的是
A)int p[4];
B)int **p;
C)int *(p「4」);
D)int (*p)「4」;
(27)下列定義數組的語句中,正確的是
A)int N=10; B)#define N 10
int x[N]; int x[N];
C)int x[0..10〕; D)int x〔〕;
(28)若要定義一個具有5個元素的整型數組,以下錯誤的定義語句是
A)int a[5]={0};
B)int b[]={0,0,0,0,0};
C)int c[2+3];
D)int i=5,d[i];
(29)有以下程序
#include<stdio.h>
void f(int *p);
main()
{int a〔5〕={1,2,3,4,5},*r=a;
f(r);printf(」%d\n」;*r);
}
void f(int *p)
{p=p+3;printf(」%d,」,*p);}
程序運行後的輸出結果是
A)1,4
B)4,4
C)3,1
D)4,1
(30)有以下程序(函數fun只對下標為偶數的元素進行操作)
# include<stdio.h>
void fun(int*a;int n)
{int i、j、k、t;
for (i=0;i<n一1;1+=2)
{k=i;『
for(j=i;j<n;j+=2)if(a〔j〕>a〔k])k=j;
t=a〔i];a〔i]=a〔k];a〔k]=t;
}
}
main()
{int aa「10」={1、2、3、4、5、6、7},i;
fun(aa、7);
for(i=0,i<7; i++)printf(」%d,」,aa〔i〕));
printf(」\n」);
}
程序運行後的輸出結果是
A)7,2,5,4,3,6,1
B)1,6,3,4,5,2,7
C)7,6,5,4,3,2,1
D)1,7,3,5,6;2,1
(31)下列選項中,能夠滿足「若字元串s1等於字元串s2,則執行ST"要求的是
A)if(strcmp(s2,s1)==0)ST;
B)if(sl==s2)ST;
C)if(strcpy(s l ,s2)==1)ST;
D)if(sl-s2==0)ST;
(32)以下不能將s所指字元串正確復制到t所指存儲空間的是
A)while(*t=*s){t++;s++;}
B)for(i=0;t[i]=s[i〕;i++);
C)do{*t++=*s++;}while(*s);
D)for(i=0,j=0;t[i++]=s[j++];);
(33)有以下程序( strcat函數用以連接兩個字元串)
#include<stdio.h>
#include<string .h>
main()
{char a〔20〕=」ABCD\OEFG\0」,b〔〕=」IJK」;
strcat(a,b);printf(」%s\n」,a);
}
程序運行後的輸出結果是
A)ABCDE\OFG\OIJK
B)ABCDIJK
C)IJK
D)EFGIJK
(34)有以下程序,程序中庫函數islower (ch)用以判斷ch中的字母是否為小寫字母
#include<stdio.h>
#include<ctype.h>
void fun(char*p)
{int i=0;
while (p[i〕)
{if(p[i]==』 』&& islower(p「i-1」))p[i-1]=p[i-1]-『a』+『A』;
i++;
}
}
main()
{char s1〔100〕=」ab cd EFG!」;
fun(s1); printf(」%s\n」,s1);
}
程序運行後的輸出結果是
A)ab cd EFG!
B)Ab Cd EFg!
C)aB cD EFG!
D)ab cd EFg!
(35)有以下程序
#include<stdio.h>
void fun(int x)
{if(x/2>1)fun(x/2);
printf(」%d」,x);
}
main()
{fun(7);printf(」\n」);}
程序運行後的輸出結果是
A)1 3 7
B)7 3 1
C)7 3
D)3 7
(36)有以下程序
#include<stdio.h>
int fun()
{static int x=1;
x+=1;return x;
}
main()
{int i;s=1;
for(i=1;i<=5;i++)s+=fun();
printf(」%d\n」,s);
}
程序運行後的輸出結果是
A)11
B)21
C)6
D)120
(37)有以下程序
#inctude<stdio.h>
#include<stdlib.h>
Main()
{int *a,*b,*c;
a=b=c=(int*)malloc(sizeof(int));
*a=1;*b=2,*c=3;
a=b;
printf(「%d,%d,%d\n」,*a,*b,*c);
}
程序運行後的輸出結果是
A)3,3,3 B)2,2,3 C)1,2,3 D)1,1,3
(38)有以下程序
#include<stdio.h>
main()
{int s,t,A=10;double B=6;
s=sizeof(A);t=sizeof(B);
printf(「%d,%d\n」,s,t);
}
在VC6平台上編譯運行,程序運行後的輸出結果是
A)2,4 B)4,4 C)4,8 D)10,6
(39)若有以下語句
Typedef struct S
{int g; char h;}T;
以下敘述中正確的是
A)可用S定義結構體變數
B)可用T定義結構體變數
C)S是struct類型的變數
D)T是struct S類型的變數
(40)有以下程序
#include<stdio.h>
main()
{short c=124;
c=c_______;
printf(「%d\n」、C);
}
若要使程序的運行結果為248,應在下劃線處填入的是
A)>>2 B)|248 C)&0248 D)<<I
二、填空題(每空2分,共30分)
請將每空的正確答案寫在答題卡【1】至【15】序號的橫線上,答在試卷上不得分。
(1)一個棧的初始狀態為空。首先將元素5,4,3,2,1依次入棧,然後退棧一次,再將元素 A,B,C,D依次入棧,之後將所有元素全部退棧,則所有元素退棧(包括中間退棧的元素)的順序為【1】
(2)在長度為n的線性表中,尋找最大項至少需要比較【2】次。
(3)一棵二叉樹有10個度為1的結點,7個度為2的結點,則該二叉樹共有【3】個結點。
(4)僅由順序、選擇(分支)和重復(循環)結構構成的程序是【4】程序。
(5)資料庫設計的四個階段是:需求分析,概念設計,邏輯設計【5】。
(6)以下程序運行後的輸出結果是【6】。
#include<stdio.h>
main()
{int a=200,b=010;
printf(」%d%d\n」,a,b);
}
(7)有以下程序
#include<stdio.h>
main()
{int x,Y;
scanf(」%2d%ld」,&x,&y);printf(」%d\n」,x+y);
}
程序運行時輸入:1234567程序的運行結果是【7】。
(8)在C語言中,當表達式值為0時表示邏輯值「假」,當表達式值為【8】時表示邏輯值「真」。
(9)有以下程序
#include<stdio.h>
main()
{int i,n[]={0,0,0,0,0};
for (i=1;i<=4;i++)
{n[i]=n[i-1]*3+1; printf(」%d ",n[i]);}
}
程序運行後的輸出結果是【9】。
(10)以下fun函數的功能是:找出具有N個元素的一維數組中的最小值,並作為函數值返回。請填空。(設N已定義)
int fun(int x〔N〕)
{int i,k=0;
for(i=0;i<N;I++)
if(x〔i〕
return x〔k〕;
}
(11)有以下程序
#include<stdio.h>
int*f(int *p,int*q);
main()
{int m=1,n=2,*r=&m;
r=f(r,&n);printf(」%d\n」,*r);
}
int*f(int *p,int*q)
{return(*p>*q)?p:q;}
程序運行後的輸出結果是【11】
(12)以下fun函數的功能是在N行M列的整形二維數組中,選出一個最大值作為函數值返回,請填空。(設M,. N已定義)
int fun(int a〔N〕[M))
{int i,j,row=0,col=0;
for(i=0;i<N;I++)
for(j=0;j
if(a〔i〕〔j〕>a〔row〕〔col〕){row=i;col=j;}
return(【12】):
}
(13)有以下程序
#include<stdio.h>
main()
{int n[2],i,j;
for(i=0;i<2;i++)n[i]=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)n〔j〕=n「i」+1;
printf(」%d\n」,n[1]);
}
程序運行後的輸出結果是【13】
(14)以下程序的功能是:藉助指針變數找出數組元素中最大值所在的位置並輸出該最大值。請在輸出語句中填寫代表最大值的輸出項。
#include<stdio.h>
main()
{int a〔10〕,*p,*s;
for(p=a;p-a<10;p++)scanf(」%d」,p);
for(p=a,s=a;p-a<10;p++)if(*p>*s)S=P;
printf("max=%d\n」,【14】);
}
(15)以下程序打開新文件f.txt,並調用字元輸出函數將a數組中的字元寫入其中,請填空。
#include<stdio.h>
main()
{【15】*fp;
char a〔5〕={』1』,』2』,』3』,』4』,』5』},i;
fp=fopen(」f .txt」,」w」);
for(i=0;i<5;i++)fputc(a[i],fp);
fclose(fp);
4. c語言筆試題來幾份
留郵箱我給你發試卷和答案
一. 單項選擇題
1) C語言中最基本的非空數據類型包括
A.整型、浮點型、無值型 B.整型、字元型、無值型
C. 整型、浮點型、字元型 D. 整型、浮點型、雙精度型、字元型
2) C語言中運算對象必須是整型的運算符是
A.% B./ C.= D.<=
3) 若已定義x和y為int類型,則執行了語句x=1;y=x+3/2;後y的值是
A.1 B.2 C.2.0 D.2.5
4) 若有以下程序 段,int a=1,b=2,c=1.0/b*a;則執行後,c中的值是
A.0 B.0.5 C.1 D.2
5) 能正確表示邏輯關系:「a≥10或a≤0」的C語言表達式是
A.a>=10ora<=0 B.a>=0|a<=10
C.a>=10&&a<=0 D.a>=10||a<=0
6) 下列字元序列中, 不可用作C語言標識符的是
A.xyd233 B.No.1 C._sd D.xyz
7) 在printf()函數中,反斜杠字元『\』表示為
A.\』 B.\0 C.\n D.\\
8) 設先有定義:int a=10;則表達示a+=a*=a的值為
A.10 B.100 C.1000 D.200
9) 設先有定義:int y=3,x=2,z=1;則語句:
printf(「%d %d\n」,(++x,y++),z+2);的輸出結果為
A.3 4 B.4 2 C.4 3 D.3 3
10) 假定x、y、z、m均為int 型變數,有如下程序段
x=2;y=3;z=1;
m=(y<x)?y:x;
m=(z<y)?m:y;
則該程序運行後,m的值是
A.4 B.3 C2 D.1
11) 以下選項中合法的字元常量是
A. 「B」 B.』\010』 C.68 D.D
12) 設x=3,y=4,z=5,則表達式((x+y)>z)&&(y==z)&&x||y+z&&y+z的值為
A.0 B.1 C.2 D.3
13) 結構化程序模塊不具有的特徵是
A.只有一個入口和一個出口
B.要盡量多使用goto語句
C.一般有順序、選擇和循環三種基本結構
D.程序中不能有死循環
14) C語言中,邏輯「真」等價於
A.整數1 B. 整數0 C.非0數 D.TRUE
15) 以下4條語句中,有語法錯誤的是
A.if(a>b) m=n; B.if(a<b) m=b;
C.if((a=b)>=0) m=a; D.if((a=b;)>=0) m=a;
16) 若i,j均為整型變數,則以下循環
for(i=0,j=2;j=1;i++,j--)
printf(「%5d,%d\n」,I,j);
A.循環體只執行一次 B.循環體執行二次
C.是無限循環 D.循環條件不合法
17) 以下程序段,執行結果為
a=1;
do
{
a=a*a;
}while(!a);
A.循環體只執行一次 B.循環體執行二次
C.是無限循環 D.循環條件不合法
18) C語言中while與do-while語句的主要區別是
A.do-while循環體至少無條件執行一次 B.do-while允許從外部跳到循環體內
B.while的循環體至少無條件執行一次 D.while的循環控制條件比do-while的嚴格
19) 語句while(!a);中條件等價於
A.a!=0 B.~a C.a==1 D.a==0
20) 以下程序的運行結果為
#include<stdio.h>
main()
{
int i=1,sum=0;
while(i<=100)
sum+=i;
printf(「1+2+3+…+99+100=%d」,sum);
}
A.5050 B.1 C.0 D.程序陷入死循環
21) 以下程序運行結果為
#include<stdio.h>
main()
{
int sum,pad;
sum=pad=5;
pad=sum++;
pad++;
++pad;
printf(「%d\n」,pad);
}
A.7 B.6 C.5 D.4
22) 以下程序的運行結果為
#include<stdio.h>
main()
{
int a=2,b=10;
printf(「a=%%d,b=%%d\n」,a,b);
}
A.a=%2,b=%10 B.a=2,b=10
C. a=%%d,b=%%d D. a=%d,b=%d
23) 為了避免嵌套的if-else語句的二義性,C語言規定else總是
A.與縮排位置相同的if組成配對關系
B.與在其之前未配對的if組成配對關系
C. 與在其之前未配對的最近的if組成配對關系
D.與同一行上的if組成配對關系
24) 對於for(表達式1;;表達式3)可理解為
A.for(表達式1;表達式3) B. for(表達式1;1;表達式3)
C. for(表達式1;0;表達式3) D. for(表達式1;表達式3;表達式3)
25) 在下列數組定義、初始化或賦值語句中,正確的是
A.int a[8]=100; B.int s[5]={1,2,3,4,5,6};
C.int x[]={1,2,3,4,5,6}; D.int n=8;int score[n];
26) 若已有定義:int i,a[100];則下列語句中,不正確的是
A.for(i=0;i<100;i++) a[i]=i; B. for(i=0;i<100;i++) scanf(「%d」,&a[i]);
C.scanf(「%d」,&a); D.for(i=0;i<100;i++) scanf(「%d」,a+i);
27) 與定義char c[]={「GOOD」};不等價的是
A.char c[]={『G』,』O』,』O』,』D』,』\0』}; B. char c[]=「GOOD」;
C. char c[4]={「GOOD」}; D. char c[5]={『G』,』O』,』O』,』D』,』\0』};
28) 若已有定義char c[]={「GOOD」};則下列語句 中,不正確的是
A.puts(c); B.for(i=0;c[i]!=』\0』;i++) printf(「%c」,c[i]);
C.printf(「%s」,c); D.for(i=0; c[i]!=』\0』;i++) putchar(c);
29) 若定義a[][3]={0,1,2,3,4,5,6,7};則a數組中行的大小是
A.2 B.3 C.4 D.不確定值
30) 以下程序的運行結果是
#include<stdio.h>
void f(int b[])
{
int i=0;
while(b[i]<=10)
{
b[i]+=2;
i++;
}
}
main()
{
int i,a[6]={-1,5,10,9,13,7};
f(a);
for(i=0;i<6;i++)
{
printf(「%2d」,a[i]);
}
}
A.2 7 12 11 13 9 B.1 7 12 11 13 7
C.1 7 12 11 13 9 D.1 7 12 9 13 7
31) 若執行以下程序段,其運行結果是
char c[]={『a』,』b』,』\0』,』c』,』\0』};
printf(「%s\n」,c);
A.ab c B.』a』』b』 C.abc D.ab
32) 數組名作為參數傳遞給函數,作為實際參數的數組名被處理為
A.該數組長度 B.該數組元素個數
C.該函數中各元素的值 D.該數組的首地址
33) 當接受用戶輸入 的含空格的字元串時,應使用函數
A.scanf() B.gets() C.getchar() D.getc()
34) 一個完整的可運行的C源程序中
A.可以有一個或多個主函數
B.必須有且僅有一個主函數
C.可以沒有主函數
D.必須不主函數和其他函數
35) 構成C語言源程序的基本單位是
A.子程序 B.過程 C.文本 D. 函數
36) 某C程序由一個主函數和一個自定義函數組成,則該程序
A.總是從max()函數開始執行
B.寫在前面的函數先開始執行
C.寫在後面的函數先開始執行
D. 總是從main()函數開始執行
37) C語言規定,一個C源程序的主函數名必須為
A.program B.include C.main D.function
38) 下列說法正確的是
A. 在書寫C語言源程序是,每個語句以逗號結束
B. 注釋時,』/』和』*』號間可以有空格
C. 無論注釋內容的多少,在對程序編譯時都被忽略
D. C程序每行只能寫一個語句
39) C語言中函數形參的預設存儲類型是
A.靜態 B.自動 C.寄存器 D.外部
40) 函數調用語句function((exp1,exp2),18)中含有的實參個數為
A.0 B.1 C.2 D.3
二. 填空題
1. 表達式10/3的結果是 ;10%3的結果是
2. 執行語句:int a=12;a+=a-=a*a;後的值是
3. 以下語句的輸出結果是
Short b=65535; printf(「%d」,b);
4. 以下程序的執行結果是
#include<stdio.h>
main()
{
int a,b,x;
x=(a=3,b=a--);
printf(「x=%d,a=%d,b=%d\n」,x,a,b);
}
5. 以下程序的執行結果是
#include<stdio.h>
main()
{
float f1,f2,f3,f4;
int m1,m2;
f1=f2=f3=f4=2;
m1=m2=1;
printf(「%d\n」,(m1=f1>=f2)&&(m2=f3<f4));
}
6. 以下程序的執行結果是
#include<stdio.h>
main()
{
float f=13.8;
int n;
n=(int)f%3;
printf(「n=%d\n」,n);
}
7. 若定義union ex{int i;float f;char a[10]}x;則sizeof(x)的值是
8. 設有int i=-1,如果在printf函數中用%u格式輸出i,則輸出結果是
9. 數組在內存中的首地址由 表示。
10. 「*」稱為 運算符。
三. 閱讀理解題
1. 下面程序的運行結果是
#include<stdio.h>
main()
{
static int a[4][5]={{1,2,3,4,0},{2,2,0,0,0},{3,4,5,0,0},{6,0,0,0,0}};
int j,k;
for(j=0;j<4;j++)
{
for(k=0;k<5;k++)
{
if(a[j][k]==0) break;
printf(「%d」,a[j][k]);
}
}
printf(「\n」);
}
2. 下面程序的運行結果是
#include<stdio.h>
main()
{
int a[]={1,2,3,4},i,j,s=0;
j=1;
for(i=3;i<=0;i--)
{
s=s+a[]*j;
j=j*10;
}
printf(「s=%d\n」,s)
}
3. 下面程序的運行結果是
#include<stdio.h>
int fun(int x)
{
int s;
if(x==0||x==1)
return 3;
s=x-fun(x-3);
return s;
}
main()
{
printf(「%d\n」,fun(3));
}
4. 下面程序的運行結果是
#include<stdio.h>
unsigned int fun(unsigned num)
{
unsigned int k=1;
do
{
k=k*num%10;
num=num/10;
}while(num);
return k;
}
5. 下面程序的運行結果是
#include<stdio.h>
int fun(int x,int y)
{
static int m=0,n=2;
n+=m+1;
m=n+x+y;
return m;
}
四. 編程題
1. 輸入四個整數,要求將它們按由小到大的順序輸出。
2. 編程求s=1-1/2+1/3-1/4+…-1/100。
3. 如果一個數等於其所有真因子(不包括其本身)之和,則該數為完數,例如6的因子有1、2、3,且6=1+2+3,故和為完數,求2~1000中的完數。(選做)