计算机等级二级C语言模拟试题1(九)
1.选择题(1)-(10)各2分,(11)-(50)各1分,共60分)
下列问题A)、B)、C)、D)中的四个选项只有一个是正确的。请在答题卡的相应位置涂上正确选项,答案不会在试卷上计分。
(1)算法分析的目的是_ _ _ _ _ _ _ _。
A)找出数据结构的合理性B)找出算法的输入和输出之间的关系
C)分析算法的可理解性和可靠性D)分析算法的效率以便改进
回答:D
点评:算法分析是指对一个算法的运行时间和占用情况进行定量分析空分析的目的是降低时间复杂度和空之间的复杂度,提高算法的执行效率
(2)n顶点强连通图的边数至少是_ _ _ _ _ _ _ _。
A)n-1b)n(n-1)C)n d)n+l
答案:C
点评:在一个有向图中,如果任意两个顶点相连,则称为强连通图。这样的有向图是圆形的,所以它至少应该有n个。
(3)已知数据表A中的每个元素离其最终位置不远。为了节省时间,算法应该是_ _ _ _ _ _ _ _ _。
A)堆排序B)直接插入排序C)快速排序D)直接选择排序
答案:B
备注:当数据表A中的每个元素离其最终位置不远时,意味着数据表A基本上是按照键值排序的。当要排序的序列基本有序时,插入排序耗时最少,所以答案是选项b。
(4)用链表表示线性表的优点是_ _ _ _ _ _ _ _。
A)易于插入和删除;b)数据元素的物理顺序与逻辑顺序相同
C)比顺序存储少存储空;d)易于随机存取
答案:A
点评:链式存储结构克服了顺序存储结构的缺点:其节点/其数据元素的逻辑顺序由节点的指针指示,不需要移动数据元素。因此,链式存储结构下的线性表易于插入和删除。
(5)下列不属于结构分析的常用工具是_ _ _ _ _ _ _ _ _。
A)数据流图b)数据字典c)决策树D)PAD图
回答:D
点评:结构化分析常用的工具有数据流图、数据字典、决策树、决策表。PAD图是图形设计中常用的工艺设计工具。
(6)软件开发的结构化生命周期法将软件生命周期分为_ _ _ _ _ _ _ _ _ _。
A)定义、开发、运维
B)设计阶段、编程阶段、测试阶段
C)总体设计、详细设计、编程和调试
D)需求分析、功能定义、系统设计
答[/br]可分为软件定义、软件开发和软件运维三个阶段。
(7)在软件工程中,白盒测试可以用来测试程序的内部结构。这种方法将程序视为_ _ _ _ _ _ _ _。
A)循环的集合B)地址的集合C)路径的集合D)目标的集合
答案:C
评价:软件的白盒测试方法将测试对象视为一个开放的盒子,它允许测试人员利用程序的内部逻辑结构和相关信息,设计或选择测试用例来测试程序的所有逻辑路径。
(8)在数据管理技术的发展过程中, 文件系统和数据库系统的主要区别在于,数据库系统有_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _之分 _ _ _ _ _ _ _
A)数据没有冗余B)数据可以共享
C)专门的数据管理软件D)特定的数据模型
回答:d
点评:在文件系统中,其内部结构的独立记录的最简单形式是长度相等、格式相同的记录的集合,便于存储/[/k0/在数据库系统中,数据是结构化的,不仅需要描述数据本身,还需要描述数据之间的关系,这是通过采用特定的数据模型来实现的
(9)分布式数据库系统不具备的特点是_ _ _ _ _ _。
A)分布式B)数据冗余
C)数据分布和逻辑完整性D)位置透明和复制透明
答案:B
点评:分布式数据库系统具有数据分布、逻辑完整性、位置透明和复制透明的特点,其数据也是分布式的;而在分布式数据库系统中,数据往往是重复存储的,数据也不一定要重复存储,这主要取决于数据的分布方式。如果分配方式是一对多,即一个段分配到多个站点存储,则是冗余数据库,否则是非冗余数据库。
(10)下列说法中,不属于数据模型描述内容的是_ _ _ _ _ _ _ _ _。
A)数据结构B)数据操作C)数据查询D)数据约束
答案:C
点评:数据模型描述的内容有三部分,分别是数据结构、数据操作和数据约束。操作主要描述对相应数据结构的操作类型和方式;数据模型中的数据约束主要描述数据结构中数据之间的语法和语义关系,它们之间的约束和依赖关系,以及数据动态变化的规则,以保证数据的正确性、有效性和冗余性。
(11)在结构化程序设计中,限制使用goto语句的原因是_ _ _ _ _ _ _ _。
A)提高程序的执行效率
B)提高程序的清晰性和可靠性
C)方便程序的合成
D)此语句不适用于任何结构的任何程序
答案:B
注释:在C语言中,gotoo的使用受到限制。
(12)下列选项中的法定实常数是_ _ _ _ _ _。
a)5e 2.0b)e-3c). 2e0d)1.3e
答案:C
备注:用指数形式表示实数时,字母e(或e)前必须有一个数字,e后的指数必须是整数。
(13)下列说法中,正确的是_ _ _ _ _ _ _ _ _。
A)C中既有逻辑类型又有集合类型
B)C中没有逻辑类型但有集合类型
B)C中有逻辑类型但没有集合类型
B)C中没有逻辑类型也没有集合类型
答案:B
。在自定义类型中,C提供struct、enum和union类型,但不提供set类型,在pascal中提供set类型。
(14)已知大写字母A的ASCII码是65,小写字母A的ASCII码是97,那么用八进制表示的字符常数' \ l '是_ _ _ _ _ _ _ _ _。
A)字符A B)字符a C)字符e D)非法常数
答案:A
备注:八进制101到十进制的转换是65,而字母A的ASCII码是65,所以八进制表示的字符常数' \ 101 '是A。
(15)设A和B都是双常数,且A = 5.5,B = 2.5,则表达式(int) A+B/B的值为_ _ _ _ _ _ _ _ _ _。
A)6.500000 b)6 c)5.500000d)6.00000
回答:D
评价:当各种数值型数据混合时,应先将不同类型的数据转换成同一类型,再进行运算。转换规则是:运算时始终转换为精度更高的数据类型,字符数据转换为整数,短数据转换为int数据,浮点数据转换为双精度数据,提高运算精度。
(16)下列四个选项中,不能视为单一陈述的是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ A){;} B)a=0,b:0,c = 0;c)如果(a > 0);d)如果(b = = 0)m = l;n = 2;
回答:D
点评:选项A是一个空语句,选项B是一个逗号运算符表达式构成的语句,选项C是一个条件语句,选项D有两个分号。它由两个语句组成,不能视为一个语句。
(17) I、J和K被称为int变量。如果从键盘输入:1,2,3↙,设I的值为l,j的值为2,k的值为3。下列选项中正确的输入语句是_ _ _ _ _ _ _ _ _。
A)scanf("%2d%2d%2 dtt,&i,&j,& k);
B)scanf("%d %d %d ",&i,&j,& k);
C)scanf("%d,%d,%dfI,&i,&j,& k);
D)scanf("i=%d,j=%d,k=%d-t,&i,&j,& k);
答案:C
备注:如果“格式控制”字符串中除了格式描述之外还有其他字符,那么在输入数据时应该输入与这些字符相同的字符。
(18)关于goto语句的使用,下列说法正确的是_ _ _ _ _ _ _ _ _。
A)转到2;b)转到g;c)转至g:;d)转到2;
2:exit(0);g:出口(O);g:出口(O);②退出(0);
答案:B
备注:在C中,goto语句后标签的命名规则与C语言中标识符的命名规则相同。不要在goto语句后的标签后添加“:”。在某一行添加标签时,在标签后添加“:”。
(19)如果有以下程序:
main()
{int k=2,i=2,m;
m =(k+= I * = k);
printf("%d,%d、n ",m,I);
}
执行后的输出结果是_ _ _ _ _ _ _ _ _。
A)8,6 B)8,3 C)6,4 D) 7,4
答案:C
备注:在求值器“=”前加其他运算符可以构成复合运算符。此操作是右关联的,即从右向左计算。I*=k表示i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。
(20)以下函数的作用是通过键盘输入数据,并给数组中的所有元素赋值。
# define N 10
void arrin(int x[N])
{ int I = 0;
while(i}
下划线里应该填的是_ _ _ _ _ _ _ _ _。
A)X+IB)& X[I+L]C)X+(i++)D)& X[++ I]
答案:C
注释:在C中,对于一维数组,数组变量表示数组中第一个元素的地址。当使用scanf函数向数组X的第I个元素输入整数数据时,只需执行scanf ("%d" x+i):由于数组中的元素和数组中的元素是循环输入的,所以地址值必须连续递增。所以,这个问题的答案是c。
(21)现有定义:int x=3,y = 4,z = 5;,然后是表情!(x+y)+z-l&&y+z/2的值是_ _ _ _ _ _ _ _ _。
A)6 B)0 C)2 D)1
回答:D
点评:在这个问题中,运算符的优先级是:!>/>+,--> & &也就是:!(3+4)+5-1 & & 4+5/2 = 0+5-1 & & 4+2 = 4 & & 6 = l .
(22)下列选项中,与k=11++完全等价的表达式是_ _ _ _ _ _ _ _ _。
A)k=n,n=n+1 B)n=n+1,l(=n C)l(= what n d) k+-n+1
答案:A
评价:n++是自动递增运算,而且是
(23)以下程序运行后,输出结果是_ _ _ _ _ _ _ _ _。
main()
{
int y = 18,i=0J,a[8];
do
{ a[I]= y % 2;i++;y .y/2;
}while(y > .1);
for(j = I-1 0 > = 00-1)
printf(" % d " a[j]);
printf(" \ n ");
}
A)10000 B)10010 c)0010d)10100
答案:B
点评:分析程序不难知道,这个程序的作用其实就是将十进制数据通过除法和舍入转换成二进制数。对于十进制数18,转换成二进制数后,结果是10010。
(24)下面这个程序的功能是:依次读入10个学生的4门课程成绩,计算每个学生的平均分并输出。程序如下:
main()
{int n,k;
float score,sum,ave
sum = 0.0;
for(n = 1;n { for(k = l;k {seal3f("%f ",& score);
sum+= score;
}
ave = sum/4.0;
printf("NO%d:%f\n ",n,ave);
}
}
上述程序运行后,结果不正确。在调试过程中,发现一条语句出现在程序不正确的位置。这种说法是_ _ _ _ _ _ _ _ _。
A)sum = O . O;b)sum+= score;
C)ave = sum/4.0;D)printf("NO%d:%fua ",n,ave);
答案:A
点评:题目中要求每个学生的平均分。首先要求每个学生的总成绩,这是程序中的总和。因此,应该在第一个for循环中为sum赋值一个初始值。如果在循环外赋值初始值,将得到所有学生的分数之和,这是不可能的。
(25)执行下面的程序后,输出结果是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
main()
{
charx = ox ddff;
printf("%d\n ",x);
}
a)-35b)-1c)255d)-8705
答案:B
备注:由于字符变量X在程序中被赋值为0xddff,而字符变量只占一个字节,所以C单元中存储的实际值是十六进制的下半部分。数字以整数格式输出,结果为-1。
(26)有以下程序
main ()
{int a = 15,b = 21,m = o;
switch(a % 3)
{ case O:m++;打破;
case l:m++:
switch(b % 2)
{ default:m++;
case O:m++;打破;
}
}
printf(" % d \ n ",m);
}
程序运行后,输出结果是_ _ _ _ _ _ _ _ _。
A)l B)2 C)3 D)4
答案:A
备注:因为a% 3是常量,所以只执行一次就会跳出switch结构。即只执行m++,此时m为1。
(27)如果有解释:int n=2,*p=&n,* q = p;那么下列非法赋值语句是_ _ _ _ _ _ _ _ _。
A)p = q;b)* p = * q;c)n = * q;d)p * n;
回答:D
点评:指针变量不同于整型变量和其他类型的变量。它们用于存储地址(指针)。不能将整数(或任何其他非地址类型的数据)赋给指针变量。这种转让是非法的。
0条评论