一、選擇題
(1)算法的空間復(fù)雜度是指
A)算法程序的長(zhǎng)度
B)算法程序中的指令條數(shù)
C)算法程序所占的存儲(chǔ)空間
D)執(zhí)行過(guò)程中所需要的存儲(chǔ)空間
(2)用鏈表表示線性表的優(yōu)點(diǎn)是
A)便于隨機(jī)存取
B)花費(fèi)的存儲(chǔ)空間較順序存儲(chǔ)少
C)便于插入和刪除操作
D)數(shù)據(jù)元素的物理順序與邏輯順序相同
(3)數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的
A)存儲(chǔ)結(jié)構(gòu)
B)物理結(jié)構(gòu)
C)邏輯結(jié)構(gòu)
D)物理和存儲(chǔ)結(jié)構(gòu)
(4)結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是
A)程序的規(guī)模
B)程序的效率
C)程序設(shè)計(jì)語(yǔ)言的先進(jìn)性
D)程序易讀性
(5)軟件設(shè)計(jì)包括軟件的結(jié)構(gòu)、數(shù)據(jù)接口和過(guò)程設(shè)計(jì),其中軟件的過(guò)程設(shè)計(jì)是指
A)模塊間的關(guān)系
B)系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過(guò)程描述
C)軟件層次結(jié)構(gòu)
D)軟件開發(fā)過(guò)程
(6)檢查軟件產(chǎn)品是否符合需求定義的過(guò)程稱為
A)確認(rèn)測(cè)試
B)集成測(cè)試
C)驗(yàn)證測(cè)試
D)驗(yàn)收測(cè)試
(7)數(shù)據(jù)流圖用于抽象描述一個(gè)軟件的邏輯模型,數(shù)據(jù)流圖由一些特定的圖符構(gòu)成。下列圖符名標(biāo)識(shí)的圖符不屬于數(shù)據(jù)流圖合法圖符的是
A)控制流
B)加工
C)數(shù)據(jù)存儲(chǔ)
D)源和潭
(8)應(yīng)用數(shù)據(jù)庫(kù)的主要目的是
A)解決數(shù)據(jù)保密問(wèn)題
B)解決數(shù)據(jù)完整性問(wèn)題
C)解決數(shù)據(jù)共享問(wèn)題
D)解決數(shù)據(jù)量大的問(wèn)題
(9)在數(shù)據(jù)庫(kù)設(shè)計(jì)中,將E-R圖轉(zhuǎn)換成關(guān)系數(shù)據(jù)模型的過(guò)程屬于
A)需求分析階段
B)邏輯設(shè)計(jì)階段
C)概念設(shè)計(jì)階段
D)物理設(shè)計(jì)階段
(10)在數(shù)據(jù)管理技術(shù)的發(fā)展過(guò)程中,經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫(kù)系統(tǒng)階段。其中數(shù)據(jù)獨(dú)立性的階段是
A)數(shù)據(jù)庫(kù)系統(tǒng)
B)文件系統(tǒng)
C)人工管理
D)數(shù)據(jù)項(xiàng)管理
(11)以下敘述中正確的是
A)構(gòu)成C程序的基本單位是函數(shù)
B)可以在一個(gè)函數(shù)中定義另一個(gè)函數(shù)
C)main()函數(shù)必須放在其他函數(shù)之前
D)C函數(shù)定義的格式是K&R格式
(12)結(jié)構(gòu)化程序所規(guī)定的三種最基本控制結(jié)構(gòu)是
A)輸入、處理、輸出
B)樹形、網(wǎng)形、環(huán)形
C)順序、選擇、循環(huán)
D)主程序、子程序、函數(shù)
(13)一個(gè)C語(yǔ)言程序是由
A)一個(gè)主程序和若干子程序組成
B)函數(shù)組成
C)若干過(guò)程組成
D)若干子程序組成
(14)請(qǐng)選出可用作C語(yǔ)言用戶標(biāo)識(shí)符的是
A)void,define,WORD
B)a3_b3,_123,IF
C)FOR,--abc,Case
D)2a,Do,Sizeof
(15)下列各數(shù)據(jù)類型不屬于構(gòu)造類型的是
A)枚舉型
B)共用型
C)結(jié)構(gòu)型
D)數(shù)組型
(16)在16位C編譯系統(tǒng)上,若定義long a;,則能給a賦40000的正確語(yǔ)句是
A)a=20000+20000;
B)a=4000*10;
C)a=30000+10000;
D)a=4000L*10L
(17)以下不正確的敘述是
A)在C程序中,逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低
B)在C程序中,APH和aph是兩個(gè)不同的變量
C)若a和b類型相同,在計(jì)算了賦值表達(dá)式a=b后b中的值將放入a中,而b中的值不變
D)當(dāng)從鍵盤輸入數(shù)據(jù)時(shí),對(duì)于整型變量只能輸入整型數(shù)值,對(duì)于實(shí)型變量只能輸入實(shí)型數(shù)值
(18)sizeof(float)是
A)一個(gè)雙精度型表達(dá)式
B)一個(gè)整型表達(dá)式
C)一種函數(shù)調(diào)用
D)一個(gè)不合法的表達(dá)式
(19)若x,i,j和k都是int型變量,則計(jì)算表達(dá)式x=(i=4,j=16,k=32)后,x的值為
A)4
B)16
C)32
D)52
(20)下面程序的功能是把316表示為兩個(gè)加數(shù)的和,使兩個(gè)加數(shù)分別能被13和11整除,請(qǐng)選擇填空。
#include
main()
{ int i=0,j,k;
do{i++;k=316-13*i;}while(______);
j=k/11;
printf("316=13*%d+11*%d",i,j);
}
A)k/11
B)k%11
C)k/11==0
D)k%11==0
(21)設(shè)有定義:int n=0,*p=&n,**q=&p,則下列選項(xiàng)中正確的賦值語(yǔ)句是
A)p=1;
B)*q=2;
C)q=p;
D)*p=5;
(22)下面程序的運(yùn)行結(jié)果是
#include
main()
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
A)-1
B)1
C)8
D)0
(23)下面程序的輸出結(jié)果是
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));}
A)3
B)4
C)1
D)2
(24)有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p=&a[3],b;b=p[5];
則b的值是
A)5
B)6
C)9
D)8
(25)設(shè)有int x=11;則表達(dá)式(x++*1/3)的值是
A)3
B)4
C)11
D)12
(26)請(qǐng)選出以下語(yǔ)句的輸出結(jié)果
printf("%d\n",strlen("\t\"\065\xff\n"));
A)5
B)14
C)8
D)輸出項(xiàng)不合法,無(wú)正常輸出
(27)下列程序的輸出結(jié)果是
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d\n", d*y);
}
A)3
B)3.2
C)0
D)3.07
(28)下列程序的輸出結(jié)果是
int b=2;
int func(int *a)
{ b += *a; return(b);}
main()
{ int a=2, res=2;
res += func(&a);
printf("%d\n",res);
}
A)4
B)6
C)8
D)10
(29)下面能正確進(jìn)行字符串賦值操作的是
A)char s[5]={"ABCDE"};
B)char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};
C)char *s;s="ABCDE";
D)char *s;char a; scanf("%s",&s);
(30)執(zhí)行以下程序后,a,b的值分別為
main()
{ int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
A)-1,5
B)1,6
C)0,7
D)4,10
(31)設(shè)有數(shù)組定義: char array[]="China"; 則數(shù)組 array所占的空間為
A)4個(gè)字節(jié)
B)5個(gè)字節(jié)
C)6個(gè)字節(jié)
D)7個(gè)字節(jié)
(32)若已定義:
int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;
其中 0≤i≤9, 則對(duì)a數(shù)組元素不正確的引用是
A)a[p-a]
B)*(&a[i])
C)p[i]
D)a[10]
(33)以下不正確的定義語(yǔ)句是
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={′1′,′2′,′3′,′4′,′5′};
D)char c2[]={′\x10′,′\xa′,′\x8′};
(34)若有以下程序
#include
int a[]={2,4,6,8};
main()
{ int i;
int *p=a;
for(i=0;i<4;i++)a[i]=*p;
printf("%d\n",a[2]);
}
上面程序輸出結(jié)果是
A)6
B)8
C)4
D)2
(35)下面程序段的運(yùn)行結(jié)果是
char *format="%s,a=%d,b=%d\n";
int a=11,b=10;
a+=b;
printf(format,"a+=b",a,b);
A)for,"a+=b",ab
B)format,"a+=b"
C)a+=b,a=21,b=10
D)以上結(jié)果都不對(duì)
(36)C語(yǔ)言允許函數(shù)類型缺省定義,此時(shí)函數(shù)值隱含的類型是
A)float
B)int
C)long
D)double
(37)以下程序有語(yǔ)法錯(cuò)誤,有關(guān)錯(cuò)誤原因的正確說(shuō)法是
main()
{ int G=5,k;
void prt_char();
...
k=prt_char(G);
...
}
A)語(yǔ)句 void prt_char();有錯(cuò),它是函數(shù)調(diào)用語(yǔ)句,不能用void說(shuō)明
B)變量名不能使用大寫字母
C)函數(shù)說(shuō)明和函數(shù)調(diào)用語(yǔ)句之間有矛盾
D)函數(shù)名不能使用下劃線
(38)以下敘述中不正確的是
A)在不同的函數(shù)中可以使用相同的名字的變量
B)函數(shù)中的形式參數(shù)是局部變量
C)在一個(gè)函數(shù)內(nèi)定義的變量只在本函數(shù)范圍內(nèi)有效
D)在一個(gè)函數(shù)內(nèi)的復(fù)合語(yǔ)句中定義的變量在本函數(shù)范圍內(nèi)有效
(39)有以下程序:
#include
union pw
{ int i;
char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}
程序的輸出結(jié)果是
A)13
B)14
C)208
D)209
(40)在16位IBM-PC機(jī)上使用C語(yǔ)言,若有如下定義
struct data
{ int i;
char ch;
double f;
} b;
則結(jié)構(gòu)變量b占用內(nèi)存的字節(jié)數(shù)是
A)1
B)2
C)7
D)11
(41)下面程序的運(yùn)行結(jié)果是
#include
main()
{ int a=1,b=10;
do
{b-=a;a++;}while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A)a=3,b=11
B)a=2,b=8
C)a=1,b=-1
D)a=4,b=9
(42)以下程序的輸出結(jié)果是
void reverse(int a[],int n)
{ int i,t;
for(i=0;i { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf(" %d\n ",s);
}
A)22
B)10
C)34
D)30 (43)有如下程序:
long fib(int n)
{ if(n>2)return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{ printf("%d\n",fib(3));}
該程序的輸出結(jié)果是
A)2
B)4
C)6
D)8
(44)假定以下程序經(jīng)編譯和連接后生成可執(zhí)行文件PROG.EXE,如果在此可執(zhí)行文件所在目錄的DOS提示符下鍵入:
PROG ABCDEFGH IJKL<回車>,則輸出結(jié)果為
main( int argc, char *argv[])
{ while(--argc>0)
printf("%s",argv[argc]);
printf("\n");
}
A)ABCDEFG
B)IJHL
C)ABCDEFGHIJKL
D)IJKLABCDEFGH
(45)以下程序有錯(cuò),錯(cuò)誤原因是
main()
{ int *p,i;char *q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
......
}
A)p和q的類型不一致,不能執(zhí)行*p=*q;語(yǔ)句
B)*p中存放的是地址值,因此不能執(zhí)行*p=40;語(yǔ)句
C)q沒(méi)有指向具體的存儲(chǔ)單元,所以*q沒(méi)有實(shí)際意義
D)q雖然指向了具體的存儲(chǔ)單元,但該單元中沒(méi)有確定的值,所以執(zhí)行*p=*q;沒(méi)有意義,可能會(huì)影響后面語(yǔ)句的執(zhí)行結(jié)果
(46)函數(shù) rewind 的作用是
A)使文件位置指針重新返回文件的開始位置
B)將文件位置指針指向文件中所要求的特定位置
C)使文件位置指針指向文件的末尾
D)使文件位置指針自動(dòng)移至下一個(gè)字符位置
(47)設(shè)有以下說(shuō)明語(yǔ)句
struct ex
{ int x ; float y; char z ;} example;
則下面的敘述中不正確的是
A)struct結(jié)構(gòu)體類型的關(guān)鍵字
B)example是結(jié)構(gòu)體類型名
C)x,y,z都是結(jié)構(gòu)體成員名
D)struct ex是結(jié)構(gòu)體類型名
(48)設(shè)有以下語(yǔ)句:
char x=3,y=6,z;
z=x^y<<2;
則z的二進(jìn)制值是
A)00010100
B)00011011
C)00011100
D)00011000
(49)閱讀以下程序及對(duì)程序功能的描述,其中正確的描述是
#include
main()
{
FILE *in,*out;
char ch,infile[10],outfile[10];
printf("Enter the infile name:\n");
scanf("%s",infile);
printf("Enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("cannot open outfile\n");
exit(0);
}
while(! feof(in))fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
A)程序完成將磁盤文件的信息在屏幕上顯示的功能
B)程序完成將兩個(gè)磁盤文件合二為一的功能
C)程序完成將一個(gè)磁盤文件復(fù)制到另一個(gè)磁盤文件中
D)程序完成將兩個(gè)磁盤文件合并并在屏幕上輸出
(50)C語(yǔ)言中,能識(shí)別處理的文件為
A)文本文件和數(shù)據(jù)塊文件
B)文本文件和二進(jìn)制文件
C)流文件和文本文件
D)數(shù)據(jù)文件和二進(jìn)制文件
二、填空題
(1)數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和 【1】 兩大類。
解析: 數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和非線性結(jié)構(gòu)兩大類。
(2)順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置 【2】 的存儲(chǔ)單元中。
解析: 常用的存儲(chǔ)表示方法有4種,順序存儲(chǔ)、鏈?zhǔn)酱鎯?chǔ)、索引存儲(chǔ)、散列存儲(chǔ)。其中,順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置也相鄰的存儲(chǔ)單元中。
(3)一個(gè)類可以從直接或間接的祖先中繼承所有屬性和方法。采用這個(gè)方法提高了軟件的 【3】 。
解析: 本題考查了繼承的優(yōu)點(diǎn):相似的對(duì)象可以共享程序代碼和數(shù)據(jù)結(jié)構(gòu),從而大大減少了程序中的冗余,提高軟件的可重用性。
(4)軟件工程研究的內(nèi)容主要包括: 【4】 技術(shù)和軟件工程管理。
解析: 基于軟件工程的目標(biāo),軟件工程的理論和技術(shù)性研究的內(nèi)容主要包括:軟件開發(fā)技術(shù)和軟件工程管理。軟件開發(fā)技術(shù)包括:軟件開發(fā)方法學(xué)、開發(fā)過(guò)程、開發(fā)工具和軟件工程環(huán)境,其主體內(nèi)容是軟件開發(fā)方法學(xué)。軟件工程管理包括:軟件管理學(xué)、軟件工程經(jīng)濟(jì)學(xué),以及軟件心理學(xué)等內(nèi)容。
(5)關(guān)系操作的特點(diǎn)是 【5】 操作。
解析: 在關(guān)系操作中,所有操作對(duì)象與操作結(jié)果都是關(guān)系。而關(guān)系定義為元數(shù)相同的元組的集合。因此,關(guān)系操作的特點(diǎn)是集合操作。
(6)下面程序是指從終端讀入的20個(gè)字符放入字符數(shù)組中,然后利用指針變量輸出上述字符串,請(qǐng)?zhí)羁铡?BR> #include
main ()
{ int i; char s[21],*p;
for (i=0;i<20;i++)
s[i]=getchar ();
s[i]=【6】;
p =【7】
while (*p)putchar (【8】);
}
解析: 本題選通過(guò)for循環(huán)從鍵盤讀入20個(gè)字符,然后在最后賦一定值′\0′后為結(jié)束標(biāo)志,再使指針P指向字符串的首地址。最后通過(guò)while循環(huán)對(duì)字符串進(jìn)行掃描并輸出。
(7)以下程序?qū)?shù)組a的4個(gè)元素和數(shù)組b的6個(gè)元素寫到名為lett.dat的二進(jìn)制文件中,請(qǐng)?zhí)羁铡?BR> #include
main ()
{ FILE *fp;
char a[4]="1234",b[6]="abcedf";
if((fp=fopen("【9】","wb"))=NULL)exit(0);
fwrite(a,sizeof(char),4,fp);
fwrite(b,【10】,1,fp);
fclose(fp);
}
解析: 本題主要考查函數(shù)fwrite (char *pt,unsigned size,unsigned n,FILE *fp),把pt所指向的n*size個(gè)字節(jié)輸出到fp所指定的文件中。
(8)在C語(yǔ)言中(以16位PC機(jī)為例),一個(gè)float型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為4;一個(gè)double型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【11】。
解析: 在一般系統(tǒng)中,一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),一個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。
(9) 以下程序輸出的結(jié)果是【12】。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
解析: 本題的關(guān)鍵在于對(duì)變量c的賦值運(yùn)算:
d=(a>b>c)
d=(5>4>3)
先算5>3,為真,得1,即:d=(1>3),此時(shí)1>3,為假,得0。
(10)以下函數(shù)的功能是求出能整除x且不是偶數(shù)的各整數(shù),并按從小到大的順序放在pp所指的數(shù)組中,這些除數(shù)的個(gè)數(shù)通過(guò)形參n返回。
例如,若x中的值為30,則有4個(gè)數(shù)符合要求,它們是1,3,5,15。
請(qǐng)按題意,完成填空。
試題程序:
#include
#include
void fun (int x, int pp[], int *n)
{ int i,j=0;
【13】
if(x%i==0)pp[j++]=i;
【14】;
}
main ()
{ int x,aa[1000], n, i ;
clrscr();
printf("\nPlease enter an integer number : \n "); scanf ("%d ", &x);
fun (x, aa, &n);
for (i=0 ; i printf ("%d ", aa [i]);
printf ("\n ");
}
解析: 本題題干信息是能整除且不是偶數(shù)的所有整數(shù)之和。循環(huán)語(yǔ)句中i從1開始且每次增2,所以i始終是奇數(shù),*n=j;語(yǔ)句是記錄能夠符合題意的各個(gè)整數(shù)的各數(shù)。
#include
#include
int fun(int *s, int t, int *k)
{ int i;
*k=0;
【15】
if(s[*k] return【16】;
}
main()
{
int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
clrscr();
fun(a, 10, &k);
printf("%d, %d\n ", k, a[k]);
}
解析: 本題中直接使用指針變量k,但在使用時(shí)要注意對(duì)k的指針運(yùn)算,此外,一開始應(yīng)認(rèn)*k的值為數(shù)組中的某一下標(biāo)值,即*k=0。
(12)mystrlen函數(shù)的功能是計(jì)算str所指字符串的長(zhǎng)度,并作為函數(shù)值返回。請(qǐng)?zhí)羁铡?BR> int mystrlen(char *str)
{ int i;
for(i=0;【17】!= ′\0′;i++);
return(i);
}
解析: str是指針變量,它指向字符型數(shù)據(jù),在循環(huán)過(guò)程中,可以用 *(str+i)來(lái)訪問(wèn)字符串中的第i個(gè)元素,判斷是否是結(jié)束標(biāo)志,如果不是,i=i+1,繼續(xù)取下一個(gè)元素進(jìn)行判斷,直到 *(str+i)的值為′\0′為止,也可以用下標(biāo)的方式引用字符,如*(str+i)相當(dāng)于str[i]。
(13)以下程序的輸出結(jié)果為【18】。
#define JFT(x)x*x
main()
{ int a, k=3;
a=++JFT(k+1);
printf("%d",a);
}
解析: 宏替換的原則是按原樣替換,本題中遇到形參x則以實(shí)參k+1替換,其他字符不變。所以JFT(k+1)經(jīng)替換后為k+1*k+1,所以a=++k+1*k+1,若k+1,若k的值為3,則經(jīng)過(guò)運(yùn)算為a=4+1*4+1=9。
(14)以下定義的結(jié)構(gòu)體類型擬包含兩個(gè)成員,其中成員變量info用來(lái)存入整形數(shù)據(jù);成員變量link是指向自身結(jié)構(gòu)體的指針,請(qǐng)將定義補(bǔ)充完整。
struct node
{ int info;
【19】link;
};
解析: 本題中的結(jié)構(gòu)類型名為struct node,所以空白處應(yīng)填:struct node *。即定義一個(gè)指向自身的結(jié)構(gòu)體指針。
(15)設(shè)有以下結(jié)構(gòu)體類型:
struct st
{ char name[8];
int num;
float s[4];
}student[50];
并且結(jié)構(gòu)體數(shù)組student中的元素都已有值,若要將這些元素寫到硬盤文件fp中,請(qǐng)將以下fwrite語(yǔ)句補(bǔ)充完整:
fwrite(student,【20】,1,fp);
解析: fwrite函數(shù)的一般調(diào)用形式為:fwrite(buffer,size,count,fp),其中:
buffer:是一個(gè)指針變量,是要輸出數(shù)據(jù)的起始地址
size:要寫的字節(jié)數(shù)
count:要進(jìn)行寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)
fp:文件型指針
選擇題
01-05 D C C D B
06-10 A A C B A
11-15 A C B B A
16-20 D D B C B
21-25 D D A C A
26-30 A C B C C
31-35 C D B D C
36-40 B C D A D
41-45 B A B D D
46-50 A B B C B
(1)算法的空間復(fù)雜度是指
A)算法程序的長(zhǎng)度
B)算法程序中的指令條數(shù)
C)算法程序所占的存儲(chǔ)空間
D)執(zhí)行過(guò)程中所需要的存儲(chǔ)空間
(2)用鏈表表示線性表的優(yōu)點(diǎn)是
A)便于隨機(jī)存取
B)花費(fèi)的存儲(chǔ)空間較順序存儲(chǔ)少
C)便于插入和刪除操作
D)數(shù)據(jù)元素的物理順序與邏輯順序相同
(3)數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的
A)存儲(chǔ)結(jié)構(gòu)
B)物理結(jié)構(gòu)
C)邏輯結(jié)構(gòu)
D)物理和存儲(chǔ)結(jié)構(gòu)
(4)結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是
A)程序的規(guī)模
B)程序的效率
C)程序設(shè)計(jì)語(yǔ)言的先進(jìn)性
D)程序易讀性
(5)軟件設(shè)計(jì)包括軟件的結(jié)構(gòu)、數(shù)據(jù)接口和過(guò)程設(shè)計(jì),其中軟件的過(guò)程設(shè)計(jì)是指
A)模塊間的關(guān)系
B)系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過(guò)程描述
C)軟件層次結(jié)構(gòu)
D)軟件開發(fā)過(guò)程
(6)檢查軟件產(chǎn)品是否符合需求定義的過(guò)程稱為
A)確認(rèn)測(cè)試
B)集成測(cè)試
C)驗(yàn)證測(cè)試
D)驗(yàn)收測(cè)試
(7)數(shù)據(jù)流圖用于抽象描述一個(gè)軟件的邏輯模型,數(shù)據(jù)流圖由一些特定的圖符構(gòu)成。下列圖符名標(biāo)識(shí)的圖符不屬于數(shù)據(jù)流圖合法圖符的是
A)控制流
B)加工
C)數(shù)據(jù)存儲(chǔ)
D)源和潭
(8)應(yīng)用數(shù)據(jù)庫(kù)的主要目的是
A)解決數(shù)據(jù)保密問(wèn)題
B)解決數(shù)據(jù)完整性問(wèn)題
C)解決數(shù)據(jù)共享問(wèn)題
D)解決數(shù)據(jù)量大的問(wèn)題
(9)在數(shù)據(jù)庫(kù)設(shè)計(jì)中,將E-R圖轉(zhuǎn)換成關(guān)系數(shù)據(jù)模型的過(guò)程屬于
A)需求分析階段
B)邏輯設(shè)計(jì)階段
C)概念設(shè)計(jì)階段
D)物理設(shè)計(jì)階段
(10)在數(shù)據(jù)管理技術(shù)的發(fā)展過(guò)程中,經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫(kù)系統(tǒng)階段。其中數(shù)據(jù)獨(dú)立性的階段是
A)數(shù)據(jù)庫(kù)系統(tǒng)
B)文件系統(tǒng)
C)人工管理
D)數(shù)據(jù)項(xiàng)管理
(11)以下敘述中正確的是
A)構(gòu)成C程序的基本單位是函數(shù)
B)可以在一個(gè)函數(shù)中定義另一個(gè)函數(shù)
C)main()函數(shù)必須放在其他函數(shù)之前
D)C函數(shù)定義的格式是K&R格式
(12)結(jié)構(gòu)化程序所規(guī)定的三種最基本控制結(jié)構(gòu)是
A)輸入、處理、輸出
B)樹形、網(wǎng)形、環(huán)形
C)順序、選擇、循環(huán)
D)主程序、子程序、函數(shù)
(13)一個(gè)C語(yǔ)言程序是由
A)一個(gè)主程序和若干子程序組成
B)函數(shù)組成
C)若干過(guò)程組成
D)若干子程序組成
(14)請(qǐng)選出可用作C語(yǔ)言用戶標(biāo)識(shí)符的是
A)void,define,WORD
B)a3_b3,_123,IF
C)FOR,--abc,Case
D)2a,Do,Sizeof
(15)下列各數(shù)據(jù)類型不屬于構(gòu)造類型的是
A)枚舉型
B)共用型
C)結(jié)構(gòu)型
D)數(shù)組型
(16)在16位C編譯系統(tǒng)上,若定義long a;,則能給a賦40000的正確語(yǔ)句是
A)a=20000+20000;
B)a=4000*10;
C)a=30000+10000;
D)a=4000L*10L
(17)以下不正確的敘述是
A)在C程序中,逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低
B)在C程序中,APH和aph是兩個(gè)不同的變量
C)若a和b類型相同,在計(jì)算了賦值表達(dá)式a=b后b中的值將放入a中,而b中的值不變
D)當(dāng)從鍵盤輸入數(shù)據(jù)時(shí),對(duì)于整型變量只能輸入整型數(shù)值,對(duì)于實(shí)型變量只能輸入實(shí)型數(shù)值
(18)sizeof(float)是
A)一個(gè)雙精度型表達(dá)式
B)一個(gè)整型表達(dá)式
C)一種函數(shù)調(diào)用
D)一個(gè)不合法的表達(dá)式
(19)若x,i,j和k都是int型變量,則計(jì)算表達(dá)式x=(i=4,j=16,k=32)后,x的值為
A)4
B)16
C)32
D)52
(20)下面程序的功能是把316表示為兩個(gè)加數(shù)的和,使兩個(gè)加數(shù)分別能被13和11整除,請(qǐng)選擇填空。
#include
main()
{ int i=0,j,k;
do{i++;k=316-13*i;}while(______);
j=k/11;
printf("316=13*%d+11*%d",i,j);
}
A)k/11
B)k%11
C)k/11==0
D)k%11==0
(21)設(shè)有定義:int n=0,*p=&n,**q=&p,則下列選項(xiàng)中正確的賦值語(yǔ)句是
A)p=1;
B)*q=2;
C)q=p;
D)*p=5;
(22)下面程序的運(yùn)行結(jié)果是
#include
main()
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
A)-1
B)1
C)8
D)0
(23)下面程序的輸出結(jié)果是
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));}
A)3
B)4
C)1
D)2
(24)有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p=&a[3],b;b=p[5];
則b的值是
A)5
B)6
C)9
D)8
(25)設(shè)有int x=11;則表達(dá)式(x++*1/3)的值是
A)3
B)4
C)11
D)12
(26)請(qǐng)選出以下語(yǔ)句的輸出結(jié)果
printf("%d\n",strlen("\t\"\065\xff\n"));
A)5
B)14
C)8
D)輸出項(xiàng)不合法,無(wú)正常輸出
(27)下列程序的輸出結(jié)果是
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d\n", d*y);
}
A)3
B)3.2
C)0
D)3.07
(28)下列程序的輸出結(jié)果是
int b=2;
int func(int *a)
{ b += *a; return(b);}
main()
{ int a=2, res=2;
res += func(&a);
printf("%d\n",res);
}
A)4
B)6
C)8
D)10
(29)下面能正確進(jìn)行字符串賦值操作的是
A)char s[5]={"ABCDE"};
B)char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};
C)char *s;s="ABCDE";
D)char *s;char a; scanf("%s",&s);
(30)執(zhí)行以下程序后,a,b的值分別為
main()
{ int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
A)-1,5
B)1,6
C)0,7
D)4,10
(31)設(shè)有數(shù)組定義: char array[]="China"; 則數(shù)組 array所占的空間為
A)4個(gè)字節(jié)
B)5個(gè)字節(jié)
C)6個(gè)字節(jié)
D)7個(gè)字節(jié)
(32)若已定義:
int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;
其中 0≤i≤9, 則對(duì)a數(shù)組元素不正確的引用是
A)a[p-a]
B)*(&a[i])
C)p[i]
D)a[10]
(33)以下不正確的定義語(yǔ)句是
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]={′1′,′2′,′3′,′4′,′5′};
D)char c2[]={′\x10′,′\xa′,′\x8′};
(34)若有以下程序
#include
int a[]={2,4,6,8};
main()
{ int i;
int *p=a;
for(i=0;i<4;i++)a[i]=*p;
printf("%d\n",a[2]);
}
上面程序輸出結(jié)果是
A)6
B)8
C)4
D)2
(35)下面程序段的運(yùn)行結(jié)果是
char *format="%s,a=%d,b=%d\n";
int a=11,b=10;
a+=b;
printf(format,"a+=b",a,b);
A)for,"a+=b",ab
B)format,"a+=b"
C)a+=b,a=21,b=10
D)以上結(jié)果都不對(duì)
(36)C語(yǔ)言允許函數(shù)類型缺省定義,此時(shí)函數(shù)值隱含的類型是
A)float
B)int
C)long
D)double
(37)以下程序有語(yǔ)法錯(cuò)誤,有關(guān)錯(cuò)誤原因的正確說(shuō)法是
main()
{ int G=5,k;
void prt_char();
...
k=prt_char(G);
...
}
A)語(yǔ)句 void prt_char();有錯(cuò),它是函數(shù)調(diào)用語(yǔ)句,不能用void說(shuō)明
B)變量名不能使用大寫字母
C)函數(shù)說(shuō)明和函數(shù)調(diào)用語(yǔ)句之間有矛盾
D)函數(shù)名不能使用下劃線
(38)以下敘述中不正確的是
A)在不同的函數(shù)中可以使用相同的名字的變量
B)函數(shù)中的形式參數(shù)是局部變量
C)在一個(gè)函數(shù)內(nèi)定義的變量只在本函數(shù)范圍內(nèi)有效
D)在一個(gè)函數(shù)內(nèi)的復(fù)合語(yǔ)句中定義的變量在本函數(shù)范圍內(nèi)有效
(39)有以下程序:
#include
union pw
{ int i;
char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}
程序的輸出結(jié)果是
A)13
B)14
C)208
D)209
(40)在16位IBM-PC機(jī)上使用C語(yǔ)言,若有如下定義
struct data
{ int i;
char ch;
double f;
} b;
則結(jié)構(gòu)變量b占用內(nèi)存的字節(jié)數(shù)是
A)1
B)2
C)7
D)11
(41)下面程序的運(yùn)行結(jié)果是
#include
main()
{ int a=1,b=10;
do
{b-=a;a++;}while(b--<0);
printf("a=%d,b=%d\n",a,b);
}
A)a=3,b=11
B)a=2,b=8
C)a=1,b=-1
D)a=4,b=9
(42)以下程序的輸出結(jié)果是
void reverse(int a[],int n)
{ int i,t;
for(i=0;i
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf(" %d\n ",s);
}
A)22
B)10
C)34
D)30 (43)有如下程序:
long fib(int n)
{ if(n>2)return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{ printf("%d\n",fib(3));}
該程序的輸出結(jié)果是
A)2
B)4
C)6
D)8
(44)假定以下程序經(jīng)編譯和連接后生成可執(zhí)行文件PROG.EXE,如果在此可執(zhí)行文件所在目錄的DOS提示符下鍵入:
PROG ABCDEFGH IJKL<回車>,則輸出結(jié)果為
main( int argc, char *argv[])
{ while(--argc>0)
printf("%s",argv[argc]);
printf("\n");
}
A)ABCDEFG
B)IJHL
C)ABCDEFGHIJKL
D)IJKLABCDEFGH
(45)以下程序有錯(cuò),錯(cuò)誤原因是
main()
{ int *p,i;char *q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
......
}
A)p和q的類型不一致,不能執(zhí)行*p=*q;語(yǔ)句
B)*p中存放的是地址值,因此不能執(zhí)行*p=40;語(yǔ)句
C)q沒(méi)有指向具體的存儲(chǔ)單元,所以*q沒(méi)有實(shí)際意義
D)q雖然指向了具體的存儲(chǔ)單元,但該單元中沒(méi)有確定的值,所以執(zhí)行*p=*q;沒(méi)有意義,可能會(huì)影響后面語(yǔ)句的執(zhí)行結(jié)果
(46)函數(shù) rewind 的作用是
A)使文件位置指針重新返回文件的開始位置
B)將文件位置指針指向文件中所要求的特定位置
C)使文件位置指針指向文件的末尾
D)使文件位置指針自動(dòng)移至下一個(gè)字符位置
(47)設(shè)有以下說(shuō)明語(yǔ)句
struct ex
{ int x ; float y; char z ;} example;
則下面的敘述中不正確的是
A)struct結(jié)構(gòu)體類型的關(guān)鍵字
B)example是結(jié)構(gòu)體類型名
C)x,y,z都是結(jié)構(gòu)體成員名
D)struct ex是結(jié)構(gòu)體類型名
(48)設(shè)有以下語(yǔ)句:
char x=3,y=6,z;
z=x^y<<2;
則z的二進(jìn)制值是
A)00010100
B)00011011
C)00011100
D)00011000
(49)閱讀以下程序及對(duì)程序功能的描述,其中正確的描述是
#include
main()
{
FILE *in,*out;
char ch,infile[10],outfile[10];
printf("Enter the infile name:\n");
scanf("%s",infile);
printf("Enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("cannot open infile\n");
exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("cannot open outfile\n");
exit(0);
}
while(! feof(in))fputc(fgetc(in),out);
fclose(in);
fclose(out);
}
A)程序完成將磁盤文件的信息在屏幕上顯示的功能
B)程序完成將兩個(gè)磁盤文件合二為一的功能
C)程序完成將一個(gè)磁盤文件復(fù)制到另一個(gè)磁盤文件中
D)程序完成將兩個(gè)磁盤文件合并并在屏幕上輸出
(50)C語(yǔ)言中,能識(shí)別處理的文件為
A)文本文件和數(shù)據(jù)塊文件
B)文本文件和二進(jìn)制文件
C)流文件和文本文件
D)數(shù)據(jù)文件和二進(jìn)制文件
二、填空題
(1)數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和 【1】 兩大類。
解析: 數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和非線性結(jié)構(gòu)兩大類。
(2)順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置 【2】 的存儲(chǔ)單元中。
解析: 常用的存儲(chǔ)表示方法有4種,順序存儲(chǔ)、鏈?zhǔn)酱鎯?chǔ)、索引存儲(chǔ)、散列存儲(chǔ)。其中,順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置也相鄰的存儲(chǔ)單元中。
(3)一個(gè)類可以從直接或間接的祖先中繼承所有屬性和方法。采用這個(gè)方法提高了軟件的 【3】 。
解析: 本題考查了繼承的優(yōu)點(diǎn):相似的對(duì)象可以共享程序代碼和數(shù)據(jù)結(jié)構(gòu),從而大大減少了程序中的冗余,提高軟件的可重用性。
(4)軟件工程研究的內(nèi)容主要包括: 【4】 技術(shù)和軟件工程管理。
解析: 基于軟件工程的目標(biāo),軟件工程的理論和技術(shù)性研究的內(nèi)容主要包括:軟件開發(fā)技術(shù)和軟件工程管理。軟件開發(fā)技術(shù)包括:軟件開發(fā)方法學(xué)、開發(fā)過(guò)程、開發(fā)工具和軟件工程環(huán)境,其主體內(nèi)容是軟件開發(fā)方法學(xué)。軟件工程管理包括:軟件管理學(xué)、軟件工程經(jīng)濟(jì)學(xué),以及軟件心理學(xué)等內(nèi)容。
(5)關(guān)系操作的特點(diǎn)是 【5】 操作。
解析: 在關(guān)系操作中,所有操作對(duì)象與操作結(jié)果都是關(guān)系。而關(guān)系定義為元數(shù)相同的元組的集合。因此,關(guān)系操作的特點(diǎn)是集合操作。
(6)下面程序是指從終端讀入的20個(gè)字符放入字符數(shù)組中,然后利用指針變量輸出上述字符串,請(qǐng)?zhí)羁铡?BR> #include
main ()
{ int i; char s[21],*p;
for (i=0;i<20;i++)
s[i]=getchar ();
s[i]=【6】;
p =【7】
while (*p)putchar (【8】);
}
解析: 本題選通過(guò)for循環(huán)從鍵盤讀入20個(gè)字符,然后在最后賦一定值′\0′后為結(jié)束標(biāo)志,再使指針P指向字符串的首地址。最后通過(guò)while循環(huán)對(duì)字符串進(jìn)行掃描并輸出。
(7)以下程序?qū)?shù)組a的4個(gè)元素和數(shù)組b的6個(gè)元素寫到名為lett.dat的二進(jìn)制文件中,請(qǐng)?zhí)羁铡?BR> #include
main ()
{ FILE *fp;
char a[4]="1234",b[6]="abcedf";
if((fp=fopen("【9】","wb"))=NULL)exit(0);
fwrite(a,sizeof(char),4,fp);
fwrite(b,【10】,1,fp);
fclose(fp);
}
解析: 本題主要考查函數(shù)fwrite (char *pt,unsigned size,unsigned n,FILE *fp),把pt所指向的n*size個(gè)字節(jié)輸出到fp所指定的文件中。
(8)在C語(yǔ)言中(以16位PC機(jī)為例),一個(gè)float型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為4;一個(gè)double型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【11】。
解析: 在一般系統(tǒng)中,一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),一個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。
(9) 以下程序輸出的結(jié)果是【12】。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
解析: 本題的關(guān)鍵在于對(duì)變量c的賦值運(yùn)算:
d=(a>b>c)
d=(5>4>3)
先算5>3,為真,得1,即:d=(1>3),此時(shí)1>3,為假,得0。
(10)以下函數(shù)的功能是求出能整除x且不是偶數(shù)的各整數(shù),并按從小到大的順序放在pp所指的數(shù)組中,這些除數(shù)的個(gè)數(shù)通過(guò)形參n返回。
例如,若x中的值為30,則有4個(gè)數(shù)符合要求,它們是1,3,5,15。
請(qǐng)按題意,完成填空。
試題程序:
#include
#include
void fun (int x, int pp[], int *n)
{ int i,j=0;
【13】
if(x%i==0)pp[j++]=i;
【14】;
}
main ()
{ int x,aa[1000], n, i ;
clrscr();
printf("\nPlease enter an integer number : \n "); scanf ("%d ", &x);
fun (x, aa, &n);
for (i=0 ; i
printf ("\n ");
}
解析: 本題題干信息是能整除且不是偶數(shù)的所有整數(shù)之和。循環(huán)語(yǔ)句中i從1開始且每次增2,所以i始終是奇數(shù),*n=j;語(yǔ)句是記錄能夠符合題意的各個(gè)整數(shù)的各數(shù)。
#include
#include
int fun(int *s, int t, int *k)
{ int i;
*k=0;
【15】
if(s[*k]
}
main()
{
int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
clrscr();
fun(a, 10, &k);
printf("%d, %d\n ", k, a[k]);
}
解析: 本題中直接使用指針變量k,但在使用時(shí)要注意對(duì)k的指針運(yùn)算,此外,一開始應(yīng)認(rèn)*k的值為數(shù)組中的某一下標(biāo)值,即*k=0。
(12)mystrlen函數(shù)的功能是計(jì)算str所指字符串的長(zhǎng)度,并作為函數(shù)值返回。請(qǐng)?zhí)羁铡?BR> int mystrlen(char *str)
{ int i;
for(i=0;【17】!= ′\0′;i++);
return(i);
}
解析: str是指針變量,它指向字符型數(shù)據(jù),在循環(huán)過(guò)程中,可以用 *(str+i)來(lái)訪問(wèn)字符串中的第i個(gè)元素,判斷是否是結(jié)束標(biāo)志,如果不是,i=i+1,繼續(xù)取下一個(gè)元素進(jìn)行判斷,直到 *(str+i)的值為′\0′為止,也可以用下標(biāo)的方式引用字符,如*(str+i)相當(dāng)于str[i]。
(13)以下程序的輸出結(jié)果為【18】。
#define JFT(x)x*x
main()
{ int a, k=3;
a=++JFT(k+1);
printf("%d",a);
}
解析: 宏替換的原則是按原樣替換,本題中遇到形參x則以實(shí)參k+1替換,其他字符不變。所以JFT(k+1)經(jīng)替換后為k+1*k+1,所以a=++k+1*k+1,若k+1,若k的值為3,則經(jīng)過(guò)運(yùn)算為a=4+1*4+1=9。
(14)以下定義的結(jié)構(gòu)體類型擬包含兩個(gè)成員,其中成員變量info用來(lái)存入整形數(shù)據(jù);成員變量link是指向自身結(jié)構(gòu)體的指針,請(qǐng)將定義補(bǔ)充完整。
struct node
{ int info;
【19】link;
};
解析: 本題中的結(jié)構(gòu)類型名為struct node,所以空白處應(yīng)填:struct node *。即定義一個(gè)指向自身的結(jié)構(gòu)體指針。
(15)設(shè)有以下結(jié)構(gòu)體類型:
struct st
{ char name[8];
int num;
float s[4];
}student[50];
并且結(jié)構(gòu)體數(shù)組student中的元素都已有值,若要將這些元素寫到硬盤文件fp中,請(qǐng)將以下fwrite語(yǔ)句補(bǔ)充完整:
fwrite(student,【20】,1,fp);
解析: fwrite函數(shù)的一般調(diào)用形式為:fwrite(buffer,size,count,fp),其中:
buffer:是一個(gè)指針變量,是要輸出數(shù)據(jù)的起始地址
size:要寫的字節(jié)數(shù)
count:要進(jìn)行寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)
fp:文件型指針
選擇題
01-05 D C C D B
06-10 A A C B A
11-15 A C B B A
16-20 D D B C B
21-25 D D A C A
26-30 A C B C C
31-35 C D B D C
36-40 B C D A D
41-45 B A B D D
46-50 A B B C B

