- 相關推薦
C語言筆試題目及答案
以下分享的C語言筆試題,是計算機專業求職者應聘時,經常會考的題目,中國人才網小編建議各位計算機專業的朋友認真了解下,以備以后的求職時應用。
一、選擇題((1)~(10)每小題2分,(11)~(50)每小題1分,共60分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應位置上,答在試卷上不得分。
(1)算法的空間復雜度是指________。
A)算法程序的長度 B)算法程序中的指令條數
C)算法程序所占的存儲空間 D)算法執行過程中所需要的存儲空間
答案:D
評析:一個算法的空間復雜度,一般是指執行這個算法所需的內存空間。
一個算法所占用的存儲空間包括算法程序所占的空間、輸入的初始數據所占的存儲空間以及算法執行過程中所需要的額外空間。
(2)下列關于棧的敘述中正確的是________。
A)在棧中只能插入數據 B)在棧中只能刪除數據
C)棧是先進先出的線性表 D)棧是先進后出的線性表
答案:D
評析:棧是限定在一端進行插入與刪除的線性表。
棧是按照“先進后出”的或“后進先出”的原則組織數據的,因此,棧也被稱為“先進后出”表或“后進先出”表。
(3)在深度為5的滿二叉樹中,葉子結點的個數為________。
A)32 B)31 C)16 D)15
答案:C
評析:所謂滿二叉樹是指除最后一層外,每層上的所有結點都有兩個子結點。也就是說,在滿二叉樹中,每一層上的結點數都達到最大值,即在滿二叉樹的第K層上有2K-1個結點,且深度為m的滿二叉樹有2m個結點。
在滿二叉樹中,最后一層的結點個數就是葉子結點的個數,本題中深度為5,故葉子結點數為25-1=24=16。
(4)對建立良好的程序設計風格,下面描述正確的是________。
A)程序應簡單、清晰、可讀性好 B)符號名的命名要符合語法
C)充分考慮程序的執行效率 D)程序的注釋可有可無
答案:A
評析:要形成良好的程序設計風格,主要應注重和考慮下述一些因素:符號名的命名應具有一定的實際含義,以便于對程序功能的理解;正確的注釋能夠幫助讀者理解程序;程序編寫應優先考慮清晰性,除非對效率有特殊要求,程序編寫要做到清晰第一,效率第二。
(5)下面對對象概念描述錯誤的是________。
A)任何對象都必須有繼承性 B)對象是屬性和方法的封裝體
C)對象間的通訊靠消息傳遞 D)操作是對象的動態性屬性
答案:A
評析:對象是由數據和容許的操作組成的封裝體,與客觀實體有直接的對應關系。對象之間通過傳遞消息互相聯系,以模擬現實世界中不同事物彼此之間的聯系。
(6)下面不屬于軟件工程的3個要素的是________。
A)512具 B)過程 C)方法 D)環境
答案:D
評析:軟件工程包括3個要素,即方法、工具和過程。
(7)程序流程圖(PFD)中的箭頭代表的是________。
A)數據流 B)控制流 C)調用關系 D)組成關系
答案:B
評析:程序流程圖(PFD)是一種傳統的、應用廣泛的軟件過程設計表示工具,通常也稱為程序框圖,其箭頭代表的是控制流。
(8)在數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階 段。其中數據獨立性最高的階段是________。
A)數據庫系統 B)文件系統 C)人工管理 D)數據項管理
答案:A
評析:在數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階段。其中數據獨立性最高的階段是數據庫系統。
(9)用樹形結構來表示實體之間聯系的模型稱為________。
A)關系模型 B)層次模型 C)網狀模型 D)數據模型
答案:B
評析:層次模型是最早發展出來的數據庫模型。它的基本結構是樹形結構,這種結構方式在現實世界中很普遍,如家族結構、行政組織機構,它們自頂向下、層次分明。
(10)關系數據庫管理系統能實現的專門關系運算包括________。
A)排序、索引、統計 B)選擇、投影、連接
C)關聯、更新、排序 D)顯示、打印、制表
答案:B
評析:關系數據庫管理系統能實現的專門關系運算,包括選擇運算、投影運算、連接運算。
(11)下列語句中符合C語言語法的賦值語句是________。
A)a–7+b+c–a+7 B)a=a+7
C)a=7+b,b++,a+7; D)a=7+b,c=a十7;
答案:D
評析:由于賦值語句是由賦值表達式加分號構成,所以選項A、B均不是合法的賦值語句;選項c中,存在兩種運算符:逗號運算符和賦值運算符,其中賦值運算符的優先級高,選項c也不是。
(12)下面程序
main()
{ int y=9;
for(;y>O;y–i){
if (y%3==O)
{ printf(“%d”,–y);
continuei
}
}
}
的輸出是________。
A)741 B)852 C)963 D)875421
答案:B
評析:“%”是求余運算符,所以if判斷語句中實際是指出只有當y可以被3整除時方可以繼續;–y是先進行y的自減運算,再使用y值。所以,最后的打印結果應當為“852”。
(13)下列四個敘述中,錯誤的是________。
A)C語言中的關鍵字必須小寫
B)c語言中的標識符必須全部由字母組成
C)c語言不提供輸入輸出語句
D)C語言中的注釋行可以出現在程序的任何位置
答案:B
評析:c語言規定標識符只能由字母、數字和下劃線3種字符組成,且第一個字符必須為字母或下劃線。
(14)下面程序
main()
{
int a=-l,b=4,k;
k=(a++<=0)&&(!(b一一<=O));
printf(“%d%d%d\n”,k,a,b);
}
的輸出是________。
A)0 0 3 B)0 12 C)1 0 3 D)1 1 2
答案:C
評析:a++是先使用a值再將a的值加1,b–是先使用b的值再將b的值減1,所以題中的邏輯運算表達式的值應當為真,即為1,而經過運算后,a和b的值已經分別變成0和3了。
(15)以下敘述中正確的是________。
A)預處理是指完成宏替換和文件包含中指定文件的調用
B)預處理也是C語句
C)C源程序中,凡是行首以掙標識的控制行都是預處理指令
D)預處理就是完成c編譯程序對c源程序的第一遍掃描,為編譯的詞法分析和語法分析作準備
答案:C
評析:預處理功能主要有以下三種:宏定義、文件包含和條件編譯,所以A不正確。預處理不是c語句,所以B不正確。預處理命令是由ANSI c統一規定的,編譯程序不能識別它們,D也不正確。
(16)下面的程序片段
y=-l;
If(x!=0)
If(x>0) y=1;else y=0;
所表示的數學函數關系是_________.
-1(x<O) l (x<O)
A)y= 0 (x=0) B)y= -1(x=0)
1 (x>0) 0 (x>0)
0 (x<0) -1 (x<0)
C)y= -1(x=O) D)y= l (x=O)
1 (x>O) 0 (x>O)
答案:C
評析:本題的考查點是根據程序寫出數學函數關系。
題中的兩個判斷語句實際上指出了y取值的條件,即是當x大于零時y取l;當x小于零時y取0;當x等于零時y值不變,為-1。
(17)下面的程序
main()
{ int x=3,y=O,z=O;
if(x=y+z)printf(“* * * *”);
else printf(”####”);
}
_________。
A)有語法錯誤不能通過編譯
B)輸出* * * *。
C)可以通過編譯,但是不能通過連接,因而不能運行
D)輸出####
答案:D
評析:本題的考查點是運算符在表達式中的處理原則。
本題中把y+z的值賦給x,由于y和z都等于0,所以x的值也為0,表達式值為false,輸出撐撐撐撐。if語句中if后面的表達式一般為邏輯或關系表達式,但也可以是任意的數值類型。
(18)在c語言中,合法的長整型常數是________。
A)OL B)4962710 C)04312765 D)0xa34b7fe
答案:A
評析:在一個整常量后面加一個字母l或L,則認為是long int型常量。
(19)下面函數
int funl(char*x)
{ char*y=x;
while(*y++);
return(y-x-1);
}
的功能是__________。
A)求字符串的長度 B)比較兩個字符串的大小
C)將字符串x復制到字符串y D)將字符串x連接到字符串y后面
答案:A
評折:本題的考查點是while()循環語句。
本題首先要注意的是對*y++的運算,由于++和*為同一優先級別,且結合方向為自右向左,因此它相當于*(y++)。由于++在y的右側,是“后加”,因此先對y的原值進行*運算,然后使y的值改變。
(20)設int i=2j=l,k=3,則表達式i&&(i+j)&k︱i+j的值是________。
A)O B)2 C)l D)3
答案:C
評析:本題表達式中優先級順序從高到低為括號、+、&、︱、&&。
(21)已知字母A的ASCII碼為十進制的65,下面程序
main()
{ char chl,ch2;
chl=’A’+’5’-’3’:
ch2=’A’+’6’-’3’:
printf(”%d,%Cn”,chl,ch2);
}
的輸出_________。
A)67,D B)B,C C)C,D D)不確定的值
答案:A
評析:由于字符“5”和“3”的ASCII碼相差為2,所以ch1過運算后的值應為65+2=67;同理,ch2經過運算后的值應為65+3=68,即是字符“D”。
(22)以下程序的輸出結果是________。
#include
main()
{
int a,b,d=24l:
a=d/l00%9;
b=(-1)&&(-1);
printf(”%d,%d\n”,a,b);
}
A)6,1 B)2,1 C)6,0 D)2,0
答案:B
評析:第一個表達式中,運算的方向是從左至右,所以a的值為2;第二個表達式中,等式右邊是一個邏輯表達式,由于結果為真,所以表達式的值為l,即b為1。
(23)下列選項中非法的表達式是________。
A)0<=x<100 B)I=j==0 C)(char)(65+3) D)x-t-l=x+l
答案:D
評析:值表達式的左側不能為常量或表達式,所以D是非法的表達式。
(24)以下程序的輸出結果是________。
#include
main()
{
print刖%~n”,NULL);
}
A)不確定的(因變量無定義) B)0
C)-l D)l
答案:B
評析:NULL在c編譯器中是一個值為0的常量,它的定義在頭文件“stdio.h”中,本題的程序在一開始就包含了這個頭文件’,所以,在打印的時候,將打印出0。
(25)在下面的語句中,賦值語句錯誤的是________。
A)a=(b=(c=2,d=3)); B)i++:
C)a–a/b=2; D)a=a<a+1:
答案:C
評析:c語言中的賦值號“=”是一個運算符;②賦值語句是由賦值表達式加上一個分號構成。賦值表達式的左側不能為常量或表達式。
(26)以下程序的輸出結果是________。
main()
{ int k=4,m=1,p;
p=func(k,m);printf(“%d,”,p);
p=func(k,m);printf(”%d\n”,p);
}
func(int a,int b)
{ static int m:O,i=2;
i+=m+l;m=i+a+b;
return(m);
}
A)8,17 B)8,16 C)8,20 D)8.8
答案:A
評析:k和m的值帶入函數func中,第一次調用完func()后,其中m和i的值要保留,并在第二次調用時使用,這是因為兩者都是局部靜態變量。所以最后的結果是8和17。
(27)以下程序調用findmax函數求數組中值最大的元素在數組中的下標,請選擇填空:
#include
findmax(int*s,int t,int*k)
{ int p;
for(p=0,*k=p;p<t;p++)
if(s[p]>s[*k])___________;
}
main()
{ int a[10],i,k;
for(i=0;i<10;i++)scanf(”%d”,&a[I]);
findmax(a,lO,&k);
printf(”%d,%d\n”,k,a[k]);
}
A)k=p B)*k=p-s C)k=p—s D)*k=p
答案:D
評析:k是一個指針,它的值是一個地址,要通過它為主函數的變量改變數據,必須使用*p,這樣就可以把一個下標數賦給p指針指向的那個內存單元,所以橫線處應填入*k=p。
(28)在執行以下程序時,為了使輸出結果為t=4,給a和b輸入的值應該滿足的條件是_________。
main()
{
int s,t,a,b;
scanf(”%d%d”,&a,&b);
s=l;t=I;
if(a>O)s=s+1;
if(a>b)t=s+t;
else if(a==b)t=5;
else t=20s:
printf(”t=%d\n”,t);
}
A)a>b B)aa>b
答案:C
評析:要使輸出結果為t=4,必須要執行else t=2*s;和if(a>b)t=s+t;語句。如果執行if(a>b)t=s+t;語句,則條件為a>b,要求s=3,在該語句前面的語句中沒有條件可以滿足s=3;如果執行else t=2*s;語句,則條件為aO)s=s+l;語句,所以應滿足條件0<a<b。
(29)以下函數調用語句中含有_________個實參。
func((expl,exp2),(exp3,exp4,exp5));
A)l B)2 C)4 D)5
答案:B
評析:實參可以是常量、變量或表達式,(expl,exp2)是逗號表達式,它的值是exp2的值;(exp3,exp4,exp5)是逗號表達式,它的值是exp5的值。所以該函數調用語句含有的實參個數是2,即:(expl,exp2)和(exp3,exp4,exp5)。
(30)執行以下程序后,輸出的結果是__________。
main()
{
int y=10;
do{y–;}while(–y);
printf(”%d\n”,y–);
}
A)一l B)l C)8 D)0
答案:D
評析:do-while語句的特點是先執行循環體,然后判斷循環條件是否成立,當循環條件的值為0時循環結束。當y=O時循環結束,printf(“%d\n”,y–);語句是先輸出y再自減,所以輸出結果為0。
(31)在C語言中,要求運算數必須是整型的運算符是__________。
A)% B)/ C)< D)!
答案:A
評析:題目的四個選項中,(B)(C)(D)都不要求運算數必須為整數,參與模運算(%)的運算數必須是整型數據。
(32)c語言提供的合法的數據類型關鍵字是__________。
A)DoubIe B)noat C)integer D)Char
答案:B
評析:選項A和D中第一個字母大寫,不正確;
選項c是PASCAL中的整型關鍵字,不是c語言中的關鍵字。
(33)設有以下定義:
int a[3][3]={1,2,3,4,5,6,7,8,9};
int(*ptr)[3]=a,*p=a[0];
則下列能夠正確表示數組元素a[1][2]的表達式是___________。
A)*((*ptr+1)[2]) B)*(*(p+5))
C)(*ptr+1)+2 D)*(*(a+1)+2)
答案:D
評析:+(p+5)所指向的數組元素是a[1][2],所以B不對;ptr所指向的是一個含有三個元素的一維數組,所以A和C是錯誤的。
(34)若有以下說明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則值為6的表達式是__________。
A)*p+6 B)*(p+6) C)*p+=5 D)p+5
答案:C
評析:選項A,*p+6,其值等于1+6=7;選項B,*(p+6),其值等于a[6]=7;選項c,*p+=5,其值等于*p=*p+5=l+5=6;選項D,p+5是個地址值。
(35)下列程序的輸出結果是__________。
fun()
{
static int x=5:
if(x++>5)printtf(”%dft,x);
else printf(”%d.’,)汁+);
}
mainO
{
fun();fun();
}
A)67 B)69 C)68 D)78
答案:C
評析:模塊的代碼開始運行后,使用static語句聲明的變量會一直保持其值,直至該模塊復位或重新啟動。在第1次調用fun函數時,x的初值為5,if語句的條件不成立,執行else printf(“%d”x++);語句,輸出6,執行后x的值變為7,由于x是靜態局部變量,在函數調用結束后,它并不釋放,仍保留x=7。在第2次調用fun函數時,if語句的條件成立,執行print掣%∽x);語句,輸出8。
(36)下面程序的輸出是__________。
main()
{
int m=Oxa,n=2;
m+=n:
printf(“”%x\n””,m);
}
A)C B)c C)99 D)2
答案:A
評析:格式控制符x表示數據按十六進制形式輸出(不輸出前導符0x)。本題在執行語句m十一n:后,m的值變為字母c,又因為在輸出a-f時,如果格式控制符用x,則以大寫字母輸出;如果用x,則以小寫字母輸出,故本題答案為A。
(37)以下程序的輸出結果是_________。
#include
main()
{char*a=”abcdefghi”;int k;
fun(a);puts(a);
}
fun(char *s)
{ intx,y;char c;
for(x=O,y=strlen(s)-l;x<y;x++,y–)
{ C=S[y];s[y]=s[x];s[x]=c;}
}
A)ihgfedcba B)abcde電hi C)abcdedcba D)ihgfefghi
答案:A
評析:觀察子函數fun()可知,它是實現一個數組首末元素位置互相依次交換。聯系主函數,可以看出,是對字符串中的元素依次進行首末位置的對調。
(38)設有如下函數定義,則輸出結果為_________。
Char*fun(char*str)
{
char*p=str;
while(*p)
{if(*p>’d’)continue;
p++;
}
return p;
}
main()
{
printF%s\n”,fun(”welcome!”));
}
A)welcome B)come! C)w D)程序進入死循環
答案:D
評析:continue語句的作用是用于結束本次循環,即跳過循環體中下面尚未執行的語句,接著進行下一次是否執行循環的判定。由于‘w’>‘d’執行continue語句,結束本次循環(即跳過p++;語句),還是繼續比較‘w’>‘d’,程序進入死循環。
(39)以下程序的輸出結果是_________。
main()
{ union{char i[2];
int k:
}r;
r.i[0]=2;r.i[1]=0;
printf(”%d\n”,r.k);
}
A)2 B)l C)0 D)不確定
答案:A
評析:根據共用體的定義可知:共用體r的成員k和成員i[2]是共用同一段內存空間,所以,當程序給r.i[0]賦值后,實際上,共用體成員k的值也確定了,為2。所以打印輸出的結果應當為2。
(40)設p1和p2是指向同一個int型一維數組的指針變量,k為int型變量,則下列不能正確執行的語句是_________。
A)l(=*pl+*p2; B)p2=k; C)pl=p2; D)k=*pl*(*p2);
答案:B
評析:指針變量中只存放地址(指針),不要將一個整型量(或任何其他非地址類型的數據)賦給一個指針變量,所以B是不正確的。
(41)以下程序的輸出結果是__________。
#define f(x) X*X
main()
{ int a=6,b=2,c;
c=f(a)/f(b);
printf(”%d\n”,C);
}
A)9 B)6 C)36 D)18
答案:C
評析:觀察程序段可知,對帶參數的宏的展開只是將語句中的宏名后面括號內的實參字符串代替#define命令行中的形參。本題中c=f(a)/f(b)用#define f(x)X*X代替得c=f(6)/f(2),即c=6*6/2*2,結果為36。
(42)若有以下定義:
char s[20]=”programming”,*ps=s;
則不能代表字符。的表達式是__________。
A)ps+2 B)s[2] C)ps[2] D)ps+=2,*ps
答案:A
評析:ps+2就是s[21的地址,即存放字符。的地址、所以A是錯誤的。
(43)以下程序的輸出結果是_________。
main()
{ int i;
for(i=1;i<6;i++)
{ if(i%2){printf(”∥);continue;}
printf(”引’);
}
printf(”\n”);
}
A)#*#*# B)##### C)***** D)*#*#*
答案:A
評析:i從1到5循環5次,i為1時,滿足條件,打印輸出“#”:i為2時,條件為假,打印輸出“*”。也就是說,當i為奇數時,條件為真,程序打印輸出“#”,否則,輸出“*”。
(44)有如下程序
main()
{
int n=9:
while(n>6)
{
n--;
printf(”%d|.,n);
}
}
該程序的輸出結果是__________。
A)987 B)876 C)8765 D)9876
答案:B
評析:符合n>6的n只有7,8,9;所以循環次數為3。選項c、D可以排除。又因n在輸出之前要執行n--,所以輸出結果只能是876。
(45)下列程序是將一個十進制正整數轉化為一個八進制數,在程序的空白處應填入的語句是__________。
#include
main()
{
int I=9,a,b[10]={0};
scanf(”%d”,&a);
sub(a,b);
for(;i>=O;i–)printf(”%d”,b[I]);
}
sub(int c,int d[])
{ int e,i=O;
while(c!=0)
{e=c%8;
d[i]=e;
__________;
i++:
}
return;
}
A)c=e/8 B)C=C%8 C)C=C/8 D)c=e%8
答案:C
評析:本題主要考查了進制轉換的除余取整法。本算法中,是先對數c除8取余作為轉換后的8進制數的第l位,然后對c整除以8的商作同樣的操作,直到商為0為止,因此本題應選c。
(46)執行下面的程序段
int x=35;
char z=’A’;
int B:
B=((x&15)&&(z<’a’));
后,B的值為____________。
A)0 B)1 C)2 D)3
答案:B
評析:從整個表達式來看是個邏輯表達式,而與運算符“&&”的右邊的子表達式中由于z的值為“A”,而A的ASCII碼的值小于a的ASCII碼值,所以這個子表達式的值為真,即l;在與運算符“&&”的左邊的子表達式是個基于位運算的子表達式,將<的值與15做位與運算,表達式值不為零,所以兩個子表達式的與值應當為1。
(47)要為讀/寫操作打開一個字符文件,其正確的打開方式為__________。
A)wr B)r+ C)rb+ D)rw
答案:B
評析:在c中可以通過fopen函數來打開一個文件,在該函數的第二個參數中指定其打開方式。要以讀寫方式打開文件可以用“r++”、“w+”、“a+”來表示,要打開二進制文件,可以在打開方式中加上字母b,對于字符文件不要加b。
(48)下列程序的輸出結果是_________。
#include
main()
{
union
{
int k:
chari[2];
}*s,a;
s=&a:
s->i[0]=Ox39;s->I[l]=0×38;
printf(”%x\n”,s->k);
}
A)3839 B)3938 C)380039 D)390038
答案:A
評析:在主函數定義了一個共用體變量a,及一個指向該變量的指針s。執行s->i[0]=0×39;s->i[1]=0×38;,將分別共用體的第一字節及第二字節存入十六進制數據0×39及0×38,由于在共用體中,變量共同占用存儲空間,在輸出s->k.時,實際上就是輸出開始寫入的數據,而對于PC機,在存放int型數據時,低位在前,高位在后,故本題輸出為3839。
(49)若有以下定義:int t[3][2];能正確表示t數組元素地址的表達式是_______。
A)&t[3][2] B)t[3] C)t[1] D)*t[2]
答案:C
評析:選項A和B兩個表達式都越界了;選項D中,*t[2]是目標變量,即一個整型值,而不是地址值。
(50)以下對結構體類型變量的定義中,不正確的是___________。
A)typedef struct aa
{
int n:
float m:
}aa;
aatdl;
B)#define aa struct aa
aa{
int n:
float m:
}tdl;
C)struct
{
int n:
float m:
}aa;
structaatdl;
D)struct
{
int n:
float m:
}tdl;
答案:C
評析:在題的考查點是結構體類型變量的定義。
在選項c中,aa是一個結構體變量,而不是結構體名,所以struct aatdl;是非法的。
二、填空題(每空2分,共40分)
請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得分。
(1)設一棵完全二叉樹共有500個結點,則在該二叉樹中有 【1】 個葉子結點。
答案:【l】250
評析:所謂完全二叉樹是指除最后一層外,每一層上的結點數均達到最大值;在最后一層上只缺少右邊的若干結點。
具有n個結點的完全二叉樹,其父結點數為int(n/2),而葉子結點數等于總結點數減去父結點數。本題n=500,故父結點數等于int(500/2)=250,葉子結點數等于500-250=250。
(2)在最壞情況下,冒泡排序的時間復雜度為 【2】 。
答案:【2】n(n-1)/2或O(n(n-1)/21
評析:冒泡排序法是一種最簡單的交換類排序方法,它是通過相鄰數據元素的交換逐步將線性表變成有序。
假設線性表的長度為n,則在最壞的情況下,冒泡排序需要經過n/2遍的從前往后的掃描和n/2遍的從后往前的掃描,需要的比較次數為n(n-1)/2。
(3)面向對象的程序設計方法中涉及的對象是系統中用來描述客觀事物的一個 【3】 。
答案:【3】實體
評析:面向對象的程序設計方法中涉及的對象是系統中用來描述客觀事物的一個實體,是構成系統的一個基本單位,它由一組表示其靜態特征的屬性和它可執行的一組操作組成。
(4)軟件的需隸分析階段的工作,可以概括為四個方面: 【4】 、需求分析、編寫需求規格說明書和需求評審。
答案:【4】需求獲取
評析:軟件的需求分析階段的工作,可以概括為四個方面:需求獲取、需求分析、編寫需求規格說明書和需求評審。需求獲取的目的是確定對目標系統的各方面需求。涉及到的主要任務是建立獲取用戶需求的方法框架,并支持和監控需求獲取的過程。
(5) 【5】 是數據庫應用的核心。
答案:【5】數據庫設計
評析:數據庫設計是數據庫應用的核心。在數據庫應用系統中的一個核心問題就是設計一個能滿足用戶要求,性能良好的數據庫,這就是數據庫設計。
(6)若由以下定義,則不移動指針p,且通過指針p引用值為98的數組元素的表達式是 【6】 。
int w[10]:{23,54,10,33,47,98,72,80,61},*p=w;
答案:【6】*(p+5)或p[5]
評析:本題的考查點是通過指針引用數組元素。
98是數組w的第5個元素(最開始的為第0個),而通過+p=w已經將p指向了數組w,要想不移動指針p而引用98,可以有以下兩種方法:p[5]、*(p+5)。
(7)以下程序的輸出結果是 【7】 。
#define MAX(x,y)(x)>(y)?(x):(y)
main()
{
int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*lO;
printf(”%d\n”,t);
}
答案:【7】7
評析:宏替換后,表達式t=MAX(a+b,c+d)*10即變為:t=(a+b)>(c+d)?(a+b):(c+d)*10;
由于(a+b)>(c+d)為真, 所以t=(a+b),即為7。
(8)以下程序的輸出結果是 【8】 。
main()
{
unsigned short a=65536;
int b:
primf(”%d\n”,b=a);
}
答案:【8】0
評析:對于一個unsigned short來說,它能取的最大值是65535。這里給a賦值.65536,已經超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實際為0。
(9)若已經定義im a=25,b:14,c=19;,以下三目運算符(?:)所構成的語句的執行結果是 【9】 。
a++<=2&&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);
答案:【9】a=26,b=14,c=19
評析:這種條件表達式的一般形式為:表達式17表達式2:表達式3,三目運算符的執行順序:先求解表達式1,若非0則求解表達式2,此時表達式2的值就作為整個表達式的值,若表達式1的值為0,則求解表達式3,此時表達式3的值就作為整個表達式的值。c語言在做一系列表達式相與時,從左到右分別計算各表達式的值,一旦遇到一個表達式為false,則剩余的表達式都不再進行運算。該題中,a++(=2的值為false,則b–<=2和c++就都不再運算。
(10)下面的if語句與y=(x>=10)?3*x-11:(x<1)?x:2‘x.1;的功能相同,請補充完整。
If( 【10】 )
if( 【11】 )y=2*x-1;
else y=x;
else y=3*x-11:
答案:【10】x<10
【11】x>=1
評析:條件表達式的一般形式為:表達式l?表達式2:表達式3
條件運算符的執行順序:先求解表達式1,若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值;若表達式1的值為O(假),則求解表達式3,表達式3的值就是整個條件表達式的值。y。(x>。10)?3。x-1 1:(x>=1)?x:2*x-1;的功能是先求(x>=1)?x:2*x-1:的值,所的的結果再與前面的語句構成條件表達式進行求值。所以【10】應該填x=1。
(11)以下程序中用戶由鍵盤輸入一個文件名,然后輸入一串字符(用拌結束輸入)存放到此
文件中,形成文本文件,并將字符的個數寫到文件的尾部。請填空。
#include
main()
{ FILE *fp;
char ch,fname[32];im count=0;
printf(”Input the filename:”);
scanf(”%s”,fname);
if((幣=fopen( 【12】 ,”w+”))==NULL)
{ print印Can’t open file:%s\n”,fname};exit(0);}
printf(”Enter data:in”);
while((ch=getchar())!_1≠)’)
{ fputc(ch,fp);count++;}
fprintf( 【13】 ,”\n%d\n”,count);
fclose(fp);
}
答案:【12】fname
【13】fp
評析:fopen()函數實現打開文件的功能,通常的調用方式為:FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一個橫線處要求填寫要打開文件的名字fname。fprintf()函數的一般調用方式為:fprintf (文件指針,格式字符串,輸出表列),所以第二個橫線處應填寫fb。
(12)函數void fun(noat*sn,int n)的功能是:根據以下公式計算s,計算結果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請補全程序。
S=I-1/3+1/5—1/7+...+1/(2n+1)
void fun(float*sn,int n)
{ float s=O.O,w,f=-1.0;
int i=0:
for(I=0;i<=n;i++)
{ f= 【14】 *f;
w=f/(2*i+1);
S+=W:
}
【15】 =s;
}
答案:【14】-1或-1.0
【15】*sn
評析:由于在對s求和時,相鄰兩項的符號剛好相反,而在函數fun中沒有對數據進行取反的操作,故第一空的目的是對數據進行取反,以保證序列中相鄰兩項的符號不同。故第一個應填-1或-1.0。在執行完循環體后,要將求和結果通過指針參數的形式傳遞給調用fun的函數,故第二空應填*sn。
(13)下面的函數strcat(strl,str2)實現將字符串str2拼接到字符串strl后面的功能。請填空使之完整。
Char*strcat(strl,str2)
char*strl.*str2;
{ char*t=strl;
while( 【16】 )strl++;
while( 【17】 );
return(t);}
答案:【16】*strl或*str1!=‘\0’或*str1!=0或*strl!=NULL
【17】*strl++=*str2++或*strl++=*str2,*str2++
評析:函數strcat(strl,str2)實現將字符串str2連接到字符串strl后面,所以首先要找到字符串strl的串尾,根據c語言的語法規定,一個串的串尾一定是一個隱含字符“\0”,而在程序中,對字符串中字符的訪問是通過兩/卜指針變量來完成的,因此要找到字符串strl的串尾,要判斷*strl是否為“\0”,要找到字符串str2的串尾,要判斷*str2是否為“\0”,程序中必須可以使字符串中字符逐一順序體現,所以在題中我們應填寫“*str1”和“*strl++=*str2++”。
(14)以下函數fun用于求兩個整數a和b的最大公約數。
fun(a’b)
int a’b;
{int I,J,m,n;
if(a>b)
{m=a;a=b; 【18】 ;}
i=a.j=b;
while((n= 【19】 )!=O)
{j=i;i= 【20】 ;}
retum(i);
}
答案:【18】b=m
【19】j%i
【20】n
評析:函數中的變量i和j分別存放兩個形參的最小數和最大數,在語句i=a和i=b執行之前,要將a和b分別變為最小數和最大數,當a>b時,程序使用中間變量將兩者交換,所以題中第一個空中應當填寫“b=m”;為求兩個整數的最大公約數,程序的where循環條件必須為j整除i成立,所以題_中第二個空中應當填寫“j%i”;程序要通過i的值返回最大公約數,因此在循環中要將每次整除的公約數賦給i,以保證最后返回的是兩個整數的最大公約數,所以第三個空中應當填寫“n”。
http://www.shddsc.com/【C語言筆試題目及答案】相關文章:
騰訊筆試題目及答案07-19
華為c語言筆試題07-17
有趣的C語言筆試題09-26
面試筆試題目及答案08-06
工廠筆試題目和答案07-16
工行筆試題目及答案07-28
絕對有用騰訊筆試題目及答案09-26
事業單位筆試題目及答案07-20
政治類工作的筆試題目及答案07-22