一、选择题
(1)下列叙述中正确的是
A)线性表是线性结构
B)栈与队列是非线性结构
C)线性链表是非线性结构
D)二叉树是线性结构
(2)非空的循环单链表head的尾结点(由p所指向),满足
A)p->next==NULL
B)p==NULL
C)p->next=head
D)p=head
(3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是
A)堆排序
B)直接插入排序
C)快速排序
D)直接选择排序
(4)对建立良好的程序设计风格,下面描述正确的是
A)程序应简单、清晰、可读性好
B)符号名的命名只要符合语法
C)充分考虑程序的执行效率
D)程序的注释可有可无
(5)下列不属于结构化分析的常用工具的是
A)数据流图
B)数据字典
C)判定树
D)PAD图
(6)在软件生产过程中,需求信息的给出是
A)程序员
B)项目管理者
C)软件分析设计人员
D)软件用户
(7)下列工具中为需求分析常用工具的是
A)PAD
B)PFD
C)N-S
D)DFD
(8)NULL是指
A)0
B)空格
C)未知的值或无任何值
D)空字符串
(9)数据库的故障恢复一般是由
A)数据流图完成的
B)数据字典完成的
C)DBA完成的
D)PAD图完成的
(10)下列说法中,不属于数据模型所描述的内容的是
A)数据结构
B)数据操作
C)数据查询
D)数据约束
(11)C语言程序的基本单位是
A)程序行
B)语句
C)函数
D)字符
(12)下面四个选项中,均是合法整型常量的选项是
A)160 -0xffff 011
B)-0xcdf 01a 0xe
C)-01 986,012 0668
D)-0x48a 2e5 0x
(13)以下选项中合法的用户标识符是
A)long
B)_2Test
C)3Dmax
D)A.dat
(14)假定x和y为double型,则表达式x=2,y=x+3/2的值是
A)3.500000
B)3
C)2.000000
D)3.000000
(15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是
A)x/y*z
B)x*(1/(y*z))
C)x/y*1/z
D)x/y/z
(11)C语言程序的基本单位是
A)程序行
B)语句
C)函数
D)字符
(12)下面四个选项中,均是合法整型常量的选项是
A)160 -0xffff 011
B)-0xcdf 01a 0xe
C)-01 986,012 0668
D)-0x48a 2e5 0x
(13)以下选项中合法的用户标识符是
A)long
B)_2Test
C)3Dmax
D)A.dat
(14)假定x和y为double型,则表达式x=2,y=x+3/2的值是
A)3.500000
B)3
C)2.000000
D)3.000000
(15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是
A)x/y*z
B)x*(1/(y*z))
C)x/y*1/z
D)x/y/z
(21)C语言中 while 和do-while循环的主要区别是
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比do-while的循环控制条件更严格
C)do-while允许从外部转到循环体内
D)do-while 的循环体不能是复合语句
(22)以下程序的输出结果是
以下是引用片段: main() { int x=1,y=3; printf("%d,",x++); { int x=0;x+=y*2; printf("%d,%d, ",x,y); } printf("%d,%d\n",x,y); } |
A)1,6,3,1,3
B)1,6,3,6,3
C)1,6,3,2,3
D)1,7,3,2,3
(23)下面程序输出的结果是
以下是引用片段: main() { int i; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d ",a[2-i][i]); } |
A)1 5 9
B)7 5 3
C)3 5 7
D)5 9 1
(24)请阅读以下程序:
以下是引用片段: main() { int a=5,b=0,c=0; if(a=b+c)printf("***\n"); else printf("$$$\n"); } |
以上程序
A)有语法错不能通过编译
B)可以通过编译但不能通过连接
C)输出***
D)输出$$$
(25)以下程序的输出结果是
以下是引用片段: main() { char c=′z′; printf("%c",c-25); } |
A)a
B)Z
C)z-25
D)y
(26)下面函数的功能是
以下是引用片段: char *fun(char *str1,char*str2) {while((*str1)&&(*str2++=*str1++)); return str2; } |
A)求字符串的长度
B)比较两个字符串的大小
C)将字符串str1复制到字符串str2中
D)将字符串str1接续到字符串str2中
(27)下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
(28)下面程序段的运行结果是
以下是引用片段: char *s="abcde"; s+=2;printf("%d",s); |
A)cde
B)字符′c′
C)字符′c′的地址
D)无确定的输出结果
(29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是
以下是引用片段: void print_value(int *x) {printf("%d\n",++*x);} |
A)23
B)24
C)25
D)26
(30)当顺利执行了文件关闭操作时,fclose函数的返回值是
A)-1
B)TRUE
C)0
D)1
(21)C语言中 while 和do-while循环的主要区别是
A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比do-while的循环控制条件更严格
C)do-while允许从外部转到循环体内
D)do-while 的循环体不能是复合语句
(22)以下程序的输出结果是
以下是引用片段: main() { int x=1,y=3; printf("%d,",x++); { int x=0;x+=y*2; printf("%d,%d, ",x,y); } printf("%d,%d\n",x,y); } |
A)1,6,3,1,3
B)1,6,3,6,3
C)1,6,3,2,3
D)1,7,3,2,3
(23)下面程序输出的结果是
以下是引用片段: main() { int i; int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d ",a[2-i][i]); } |
A)1 5 9
B)7 5 3
C)3 5 7
D)5 9 1
(24)请阅读以下程序:
以下是引用片段: main() { int a=5,b=0,c=0; if(a=b+c)printf("***\n"); else printf("$$$\n"); } |
以上程序
A)有语法错不能通过编译
B)可以通过编译但不能通过连接
C)输出***
D)输出$$$
(25)以下程序的输出结果是
以下是引用片段: main() { char c=′z′; printf("%c",c-25); } |
A)a
B)Z
C)z-25
D)y
(26)下面函数的功能是
以下是引用片段: char *fun(char *str1,char*str2) {while((*str1)&&(*str2++=*str1++)); return str2; } |
A)求字符串的长度
B)比较两个字符串的大小
C)将字符串str1复制到字符串str2中
D)将字符串str1接续到字符串str2中
(27)下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
(28)下面程序段的运行结果是
以下是引用片段: char *s="abcde"; s+=2;printf("%d",s); |
A)cde
B)字符′c′
C)字符′c′的地址
D)无确定的输出结果
(29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是
以下是引用片段: void print_value(int *x) {printf("%d\n",++*x);} |
A)23
B)24
C)25
D)26
(30)当顺利执行了文件关闭操作时,fclose函数的返回值是
A)-1
B)TRUE
C)0
D)1
(31)设有如下定义
char *s[2]={ "abcd","ABCD"};
则下列说法错误的是
A)s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址
B)s是指针数组名,它含有两个元素分别指向字符型一维数组
C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素
D)s数组的两个元素中分别存放了字符′a′和′A′的地址
(32)以下不能对二维数组a进行正确初始化的语句是
A)int a[2][3]={0};
B)int a[][3]={{1,2},{0}};
C)int a[2][3]={{1,2},{3,4},{5,6}};
D)int a[][3]={1,2,3,4,5,6};
(33)有以下程序
以下是引用片段: struct STU { char num[10]; float score[3]; }; main() {struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75}, { "20023",100,95,90}, },*p=s; int i; float sum=0; for(i=0;i<3;i++) sum=sum+p->score[i]; printf("%6.2f\n",sum); } |
程序运行后的输出结果是
A)260.00
B)270.00
C)280.00
D)285.00
(34)若有说明:int a[10];则对a数组元素的正确引用是
A)a[10]
B)a[3,5]
C)a(5)
D)a[10-10]
(35)下面程序段中,输出*的个数是
char *s="\ta\018bc";
for(;*s!=′\0′;s++)printf("*");
A)9
B)5
C)6
D)7
(36)设有如下函数
以下是引用片段: fun (float x) { printf("\n%d",x*x);} |
则函数的类型是
A)与参数x的类型相同
B)是void
C)是int型
D)无法确定
(37)有如下定义
以下是引用片段: #define D 2 int x=5;float y=3.83; |
char c=′D′;
则下面选项中错误的是
A)x++;
B)y++;
C)c++;
D)D++;
(38)以下程序段的执行结果为
以下是引用片段: #define PLUS(X,Y)X+Y main() { int x=1,y=2,z=3,sum; sum=PLUS(x+y,z)*PLUS(y,z); printf("SUM=%d",sum); } |
A)SUM=9
B)SUM=12
C)SUM=18
D)SUM=28
(39)C语言规定,函数返回值的类型是由
A)return语句中的表达式类型所决定
B)调用该函数时的主调函数类型所决定
C)调用该函数时系统临时决定
D)在定义该函数时所指定的函数类型所决定
(40)下列程序的运行结果是
以下是引用片段: void fun(int *a,int *b) { int *k; k=a;a=b;b=k; } main() { int a=2004, b=9,*x=&a,*y=&b; fun(x,y); printf("%d%d",a,b); } |
A)2004 9
B)9 2004
C)0 0
D)编译时出错
(41)下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数:
876 675 896 101 301 401 980 431 451 777
以下是引用片段: #include #include int fun(int *s, int t, int *k) { int i; *k=0; for(i=0;i if(s[*k] return 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]); } |
则输出结果为
A)7,431
B)6
C)980
D)6,980
(42) C语言结构体类型变量在程序执行期间
A)所有成员一直驻留在内存中
B)只有一个成员驻留在内存中
C)部分成员驻留在内存中
D)没有成员驻留在内存中
(43)下面程序应能对两个整型变量的值进行交换。以下正确的说法是
以下是引用片段: main() {int a=10,b=20; printf("(1)a=%d,b=%d\n",a,b); swap(&a,&b); printf("(2)a=%d,b=%d\n",a,b); } swap(int p,int q) {int t; t=p;p=q;q=t; } |
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
D)以上说法都不对
(44)有以下程序
以下是引用片段: #include main() { char *p,*q; p=(char *)malloc(sizeof(char)*20); q=p; scanf("%s %s",p,q); printf("%s %s\n",p,q); } |
若从键盘输入:abc def<回车>,则输出结果是
A)def def
B)abc def
C)abc d
D)d d
(45)以下程序的输出结果是
以下是引用片段: int f() { static int i=0; int s=1; s+=i; i++; return s; } main() { int i,a=0; for(i=0;i<5;i++)a+=f(); printf("%d\n",a); } |
A)20
B)24
C)25
D)15
(46)已知 int a=1,b=3则a^b的值为
A)3
B)1
C)2
D)4
(47)如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是
A)fp=fopen("Demo","r");
B)fp=fopen("Demo","ab+");
C)fp=fopen("Demo","w+");
D)fp=fopen("Demo","r+");
(48)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是
A)fopen("A:\user\abc.txt","r")
B)fopen("A:\\user\\abc.txt","rt+")
C)fopen("A:\user\abc.txt","rb")
D)fopen("A:\user\abc.txt","w")
(49)有以下程序
以下是引用片段: #include main() { char *p="abcde\0fghjik\0 "; printf("%d\n ",strlen(p)); } |
程序运行后的输出结果是
A)12
B)15
C)6
D)5
(50) 有以下程序
以下是引用片段: #include struct NODE { int num; struct NODE *next; }; main() { struct NODE *p,*q,*r; p=(struct NODE*)malloc(sizeof(struct NODE)); q=(struct NODE*)malloc(sizeof(struct NODE)); r=(struct NODE*)malloc(sizeof(struct NODE)); p->num=10; q->num=20; r->num=30; p->next=q;q->next=r; printf("%d\n ",p->num+q->next->num); } |
程序运行后的输出结果是
A)10
B)20
C)30
D)40
二、填空题
(1)冒泡排序算法在最好的情况下的元素交换次数为 【1】 。
解析: 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。
(2)在最坏情况下,堆排序需要比较的次数为 【2】 。
答案:0(nlog2n)
(3)若串s="MathTypes",则其子串的数目是 【3】 。
解析: 串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。
(4)软件开发环境是全面支持软件开发全过程的 【4】 集合。
答案:软件工程
(5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。
解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。
(6)下列y的值是 【6】 。
int y; y=sizeof (2.25*4);
解析: sizeof (2.25*4)为sizeof (10.00)值为8,C语言规定浮点型常量当双精度处理(以IRM-PC机为例)。
(7)下列x的值是 【7】 。
int x;x=sizeof 2.25*4;
解析: sizeof运算符高于算术运算符,所以sizeof 2.25*4等价于(sizeof 2.25)*4为8×4=32(以IBM-PC机为例)。
(8)以下程序的输出结果是 【8】 。
以下是引用片段: main () {int i=010,j=10; pirntf ("%d,%d\n",i,j); } |
解析: 以0开头的是八进制数。
(9)下列程序的输出结果为 【9】 。
以下是引用片段: main () {int x=3,y=5; printf ("%d",x=(x--)*(--y)); } |
解析: x--的值为3,--y的值为4;注意前缀--和后缀--的区别。
(10)以下程序的输出结果是 【10】 。
以下是引用片段: fun (int x,int y,int z) { z =x*x+y*y;} main () {int a=31; fun (6,3,a) printf ("%d", a) } |
解析: 在函数调用时,形参值和改变,不能会改变实参的值。
二、填空题
(1)冒泡排序算法在最好的情况下的元素交换次数为 【1】 。
解析: 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。
(2)在最坏情况下,堆排序需要比较的次数为 【2】 。
答案:0(nlog2n)
(3)若串s="MathTypes",则其子串的数目是 【3】 。
解析: 串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。
(4)软件开发环境是全面支持软件开发全过程的 【4】 集合。
答案:软件工程
(5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。
解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。
(6)下列y的值是 【6】 。
int y; y=sizeof (2.25*4);
解析: sizeof (2.25*4)为sizeof (10.00)值为8,C语言规定浮点型常量当双精度处理(以IRM-PC机为例)。
(7)下列x的值是 【7】 。
int x;x=sizeof 2.25*4;
解析: sizeof运算符高于算术运算符,所以sizeof 2.25*4等价于(sizeof 2.25)*4为8×4=32(以IBM-PC机为例)。
(8)以下程序的输出结果是 【8】 。
以下是引用片段: main () {int i=010,j=10; pirntf ("%d,%d\n",i,j); } |
解析: 以0开头的是八进制数。
(9)下列程序的输出结果为 【9】 。
以下是引用片段: main () {int x=3,y=5; printf ("%d",x=(x--)*(--y)); } |
解析: x--的值为3,--y的值为4;注意前缀--和后缀--的区别。
(10)以下程序的输出结果是 【10】 。
以下是引用片段: fun (int x,int y,int z) { z =x*x+y*y;} main () {int a=31; fun (6,3,a) printf ("%d", a) } |
解析: 在函数调用时,形参值和改变,不能会改变实参的值。
答案
选择题
01-05 A C B A A
06-10 D D C C C
11-15 C A B D A
16-20 C C B A C
21-25 A C B D A
26-30 C B C D C
31-35 C C B D C
36-40 C D B D A
41-45 B A D A D
46-50 C D B D D
|