C語言的簡潔性與其豐富的運算子相結合,使其可能會編寫出極難理解的程式碼。下面就由本站小編為大家介紹一下C筆試題及答案的文章,歡迎閱讀。
C筆試題及答案篇1
(1)演算法的時間複雜度是指_______。
A)執行演算法程式所需要的時間
B)演算法程式的長度
C)演算法執行過程中所需要的基本運算次數
D)演算法程式中的指令條數
答案:C
評析:所謂演算法的時間複雜度,是指執行演算法所需要的計算工作量。
(2)下列敘述中正確的是________。
A)線性表是線性結構 B)棧與佇列是非線性結構
C)線性連結串列是非線性結構 D)二叉樹是線性結構
答案:A
評析:一般將資料結構分為兩大型別:線性結構與非線性結構。線性表、棧與佇列、線性連結串列都是線性結構,而二叉樹是非線性結構。
(3)下面關於完全二叉樹的敘述中,錯誤的是_________。
A)除了最後一層外,每一層上的結點數均達到最大值
B)可能缺少若干個左右葉子結點
C)完全二叉樹一般不是滿二叉樹
D)具有結點的完全二叉樹的深度為[log2n]+1
答案:B
評析:滿二叉樹指除最後一層外每一層上所有結點都有兩個子結點的二叉樹。完全二叉樹指除最後一層外,每一層上的結點數均達到最大值,在最後一層上只缺少右邊的若干子結點(葉子結點)的二叉樹。
(4)結構化程式設計主要強調的是_________。
A)程式的規模 B)程式的易讀性
C)程式的執行效率 D)程式的可移植性
答案:B
評析:結構化程式設計主要強調的是結構化程式清晰易讀,可理解性好,程式設計師能夠進行逐步求精、程式證明和測試,以保證程式的正確性。
(5)在軟體生命週期中,能準確地確定軟體系統必須做什麼和必須具備哪些功能的階段是________。
A)概要設計 B)詳細設計 C)可行性分析 D)需求分析
答案:D
評析:需求分析是對待開發軟體提出的需求進行分析並給出詳細定義,即準確地確定軟體系統的功能。編寫軟體規格說明書及初步的使用者手冊,提交評審。
(6)資料流圖用於抽象描述一個軟體的邏輯模型,資料流圖由一些特定的圖符構成。下列 圖符名標識的圖符不屬於資料流圖合法圖符的是_________。
A)控制流 B)加工 C)資料儲存 D)源和潭
答案:A
評析:資料流圖從資料傳遞和加工的角度,來刻畫資料流從輸入到輸出的移動變換過程。資料流圖中的主要圖形元素有:加工(轉換)、資料流、儲存檔案(資料來源)、源和潭。
(7)軟體需求分析一般應確定的是使用者對軟體的__________。
A)功能需求 B)非功能需求 C)效能需求 D)功能需求和非功能需求
答案:D
評析:軟體需求分析中需要構造一個完全的系統邏輯模型,理解使用者提出的每一功能與效能要求,是使用者明確自己的任務。因此,需求分析應確定使用者對軟體的功能需求和非功能需求。
(8)下述關於資料庫系統的敘述中正確的是________。
A)資料庫系統減少了資料冗餘
B)資料庫系統避免了一切冗餘
C)資料庫系統中資料的一致性是指資料型別的一致
D)資料庫系統比檔案系統能管理更多的資料
答案:A
評析:由資料的共享自身又可極大地減少資料冗餘性,不僅減少了不必要的儲存空間,更為重要的是可以避免資料的不一致性。所謂資料的一致性是指在系統中同一資料的不同出現應保持相同的值。
(9)關係表中的每一橫行稱為一個________。
A)元組 B)欄位 C)屬性 D)碼
答案:A
評析:在關係資料庫中,關係模型採用二維表來表示,簡稱“表”。二維表是由表框架及表元組組成。在表框架中,按行可以存放資料,每行資料稱為元組。
(10)資料庫設計包括兩個方面的設計內容,它們是________。
A)概念設計和邏輯設計 B)模式設計和內模式設計
C)內模式設計和物理設計 D)結構特性設計和行為特性設計
答案:A
評析:資料庫設計可分為概念設計與邏輯設計。概念設計的目的是分析資料間內在語義關聯,在此基礎上建立一個數據的抽象模型。邏輯設計的主要工作是將ER圖轉換為指定的RDBMS中的關係模型。
C筆試題及答案篇2
(1)請讀程式:
#include
main
{
int a;float b,c;
scanf(“%2d%3P%4f’,&a,&b,&C);
printf(”na=%d,b=%ec。%fn”,a,b,C);
}
若執行時從鍵盤上輸入9876543210l,則上面程式的輸出結果是________。
A)a=98,b=765,c=432 1
B)a=1 0,b=432,c=8765
C)a=98,b=765.000000,c=432 1.000000
D)a=98,b=765.0,c=432 1.0
答案:C
評析:scanf把使用者從鍵盤錄入的數字的第1、2位存入整型變數a;把第3、4、5位存入單精度實型變數b,把第6、7、8、9位存入單精度實型變數c,使用者錄入的第10位被scanf遺棄。這時變數a、b、c的值分別為:98、765.000000、4321.000000。
(2)一個良好的演算法由下面的基本結構組成,但不包括__________。
A)順序結構 B)選擇結構 C)迴圈結構 D)跳轉結構
答案:D
評析:1966年,Bohra和Jacopini提出了以下三種基本結構,用這三種基本結構作為表示一個良好演算法的基本單元:1、順序結構;2、選擇結構;3、迴圈結構。
(3)請選出以下程式的輸出結果________。
#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,%dn”,a,b,C);
}
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
答案:B
評析:sub函式的作用是將形參y和x的差賦給了z指向的那個記憶體地址,所以在sub(10,5,&a/I,10和5屬於值傳遞,a是屬於地址傳遞,也就是a與z指向了同一個儲存單元,在執行函式後,a的值隨*z變化,所以此次函式被呼叫後,a的值為y-x=-5,同理可知,在sub(7,a,&b)後,b的值發生變化,其值為-5-7=-12,在sub(a,b,&C)後,c的值發生變化,其值為-12-(-5)=-7。
(4)下面程式在螢幕上的輸出是________。
main
{
printf(”abbb c”);
}
A)abbb c B)a c C)abc D)ab c
答案:B
評析:c語言中允許使用一種特殊形式的字元常量,、就是以一個“”開頭的字元序列,這樣的字元稱為“轉義字元”。常用的轉義字元有:n,換行;t,水平製表;b,退格;r,回車。
(5)若x是整型變數,pb是基型別為整型的指標變數,則正確的賦值表示式是_______。
A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=*x
答案:A
評析:選項A將變數x的地址賦給指標變數pb,使pb指向x‘選項B是將x的值當作地址賦給指標pb,Db指向一個地址等於x值的記憶體單元;選項c將x的地址賦給指標pb指向的地址等於x的記憶體單元。
(6)設整型數i=5,則printf(“%d”,i+++++i);的輸出為________。
A)10 B)1l C)12 D)語法錯誤
答案:D
評析:c語言中有基本的算術運算子(+、-、*、/)還包括自增自減運算子(++、–),在c語言解析表示式時,它總是進行貪婪咀嚼,這樣,該表示式就被解析為i++ ++ +i,顯然該表示式不合c語言語法。
(7)若要用下面的程式片段使指標變數p指向一個儲存整型變數的動態儲存單元
int *p;
p=___________malloc(sizeof(im));
則應填入__________。
A)int B)int C)(*int) D)(int*)
答案:D
評析:不論p是指向什麼型別的指標變數,都可以通過強制型別轉換的方法使之型別一致,強制型別轉換的格式為(資料型別+)。
(8)下面程式輸出的結果是__________。
main
{
int i=5,J=9,x;
x=(I==j?i:(j=7));
printf(”n%d,%d”,I,J);
}
A)5,7 B)5,5 C)語法錯誤 D)7,5
答案:A
評析:條件表示式的一般形式為:表示式I?表示式2:表示式3;先求解表示式1,若為真則求解表示式2;若表示式l的值為假,則求解表示式3。本題中先判斷i==j,不等,執行j=7;然後執行x=7。故本題為A。
(9)若執行下面程式時從鍵盤上輸入5,
main
{
int x:
scanf(”%d”,&x);
if(x++>5)printf(”%dn”,x);
else printf(”%dn”,x–);
}
則輸出是________。
A)7 B)6 C)5 D)4
答案:B
評析:根據c語言的語法,x++是在使用x之後,再將x的值加1,在if語句中,x的值為5,條件不成立,執行else後面的語句,因為x的值已經加1,為6,所以列印結果為6。
(10)若有以下定義和語句:
int a={l,2,3,4,5,6,7,8,9,10},*p=a;
則值為3的表示式是_________。
A)p+=2,*(p++) B)p+=2,*++p
C)p+=3,*p++ D)p+=2,++*p
答案:A
評析:引用一個數組元素,可以用:(1)下標法,如a[i]形式;(2)指標法,如*(a+i)或*(p+i)。陣列的下標從0開始,值為3的陣列元素是a[2]。B、c的內容為a[3],D將a[2]前自加,結果為4。
C筆試題及答案篇3
(1)設a、b和c都是int型變數,且a=3、b=4、c=5,則下面的表示式中,值為0的表
達式是___________。
A)’a’&&’b’ B)a<=b C)a‖+c&&b-c D)!((a
答案:D
評析z選項A:‘a’&&‘b’是字元a與b的相與,不為0;選項B:a<=b,由題中變數賦值可知,結果為1。選項c:a‖+c&&b-c,結果為1;選項D:!((a
(2)以下程式執行後,輸出結果是_________。
main
{
char*d。{“ab”,”cde”};
printf(”%x”,d[1]);
}
A)cde B)字元c的ASCII碼值
C)字元c的地址 D)出錯
答案:C
評析:指標陣列中的每一個元素都相當於一個指標變數。一維指標陣列的定義形式為:型別名+陣列名[陣列長度],在本題main函式中定義指標陣列d,它有兩個元素,其初值分別是“ab”、“cde”的首地址。dB]的值為”cde”的首地址。%x是指以十六進位制數形式輸出整數。
(3)設有如下程式
#include
main
{
int**k,*j,i=100;
j=&i; k=&j;
printf(”%dn”,**k);
}
上述程式的輸出結果是________。
A)執行錯誤 B)100 C)i的地址 D)j的地址
答案:B
評析:j=&i,j的值就是i的地址,*j=100,將j的地址賦給k,這時*k=j,那麼,**k=*j,而1=100,所以**k=100,最後的列印結果應當為100。
(4)設有以下語句,其中不是對a陣列元素的正確引用的是:_______(其中O≤i<10)
int a=[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;
A)a[p-a] B)。(&a[i]) C)p[I] D)*(*(a+i))
答案:D
評析:觀察程式可知,a實際上就是陣列a的首地址,所以“+(a+i)”表示的就是陣列a中的第i個元素的值,進而,我們可以知道+(t(a+i))必然不是對a陣列元素的正確引用。
(5)以下程式執行後,輸出結果為________。
main
{
int a[2][3]={1,3,5,7,9,1 1},*s[2],**pp,*p;
s[0]=a[0],s[1]=a[1];
pp=s;
p=(int*)malloc(sizeof(int));
**pp=s[1][1];
p=*PP;
printf(”%dn”,*p);
}
A)l B)7 C)9 D)1l
答案:C
評析:s是一個含有兩個元素的指標陣列,pp是一個指向指標變數的指標,s[O]是指向二維陣列a行下標為0的元素的首地址,即a[0兒0]的地址,s[1]為a[1][0]的地址。pp的值為s[O]的地址。**pp=s[1][l]後,a[0][0]的值將被賦值為all][l]的值,執行p=*pp;後,p中將是s[0]的值,最後的輸出語句將輸出地址s[0]所指向的資料,即a[0][O]。
(6)有以下程式:
#include
main{
char c[6];
int I=0:
for(;i<6;c[-]=getchar,i++);
for(I=0;i<6;i++)putchar(c[i]);
primf(”n”);
}
如果從鍵盤上輸入:
ab
c
def
則輸出結果為_________.
A)a B)a C)ab D)abcdef
b b c
c c d
d d
e
f
答案:C
評析:har:此函式的作用是從終端(或系統隱含指定的輸入裝置)輸入一個字元。
har:此函式的作用是向終端輸出一個字元,也可以輸出控制字元。
本題在輸入字元時,ab和c後面的回車符分別賦給了c[2]和e[4],所以,正確答案為c。
(7)在呼叫函式時,如果實參是簡單變數,它與對應形參之間的資料傳遞方式是_______。
A)地址傳遞 B)單向值傳遞
C)由實參傳遞給形參,再由形參傳遞給實參
D)傳遞方式由使用者指定
答案:B
評析:c語言規定,實參變數對形參變數的資料傳遞是“單向值傳遞”,只由實參傳給形參。在記憶體中,實參單元與形參單元是不同的單元。呼叫結束後,實參單元仍保留並維持原值。
(8)下面程式
#include
#include
main
{ char*p1=”abc”,*p2=”ABC”,str[50]=”xyz”;
strcpy(str+2,strcat(p1,p2));
printf(”%sn”,str);
}
的輸出是_________。
A)xyzabcABC B)zabcABC
C)yzabcABC D)xyabcABC
答案:D
評析:strcat(pl,p2)將字串abcABC放到了*pl所指向的儲存單元中;strcpy在本題將abcABC複製到str+2所指向的儲存單元中,即覆蓋原str陣列中的字元z及其後的所有字元,故str的值為”xyabcABC”。
(9)下面程式
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+l]=*p+1;
else++p;
printf(”%d’.,。p);
}
}
的輸出是__________。
A)23 B)26 C)33 D)36
答案:A
評析:觀察題目,可以發現,*p=&aa[01[o]語句實際是將陣列aa的首地址賦給了指標變數p,將i的值帶入for迴圈中,i=0時,aa[0][1]=3,+p=2;*p輸出的是指標所指向的陣列值,此時p所指向的是aa[O][O],輸出2,而i=l時執行了++p操作使指標向後移動指向了aa[O兒1],所以在輸出*p時應為3。
(10)以下程式的輸出結果是_________。
#include
#include
fun(char*w,int n)
{
char t,*s1,*s2;
s1=w;s2=w+n-l:
while(s1
{
t=*s1++:
*sl=*s2–;
*s2=t;
}
}
main
{
char*p;
p=”1234567″;
fun(p,strlen(p));
puts(p);
}
A)1234567 B)7654321 C)1711717 D)717717l
答案:C
評析:在子函式fun中,sl為字串w的起始地址,s2為字串的結束地址(字元‘O’除外),當執行迴圈結束迴圈,w=“1711717”。