国家二级(C语言)机试模拟试卷503
选择题
1.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是( )。(D)
A. 快速排序
B. 冒泡排序
C. 直接插入排序
D. 堆排序
解析:除了堆排序算法的比较次数是O(nlog2,n),其他的都是,n(n-1)/2。
2.以下语句的输出结果是
printf(\\(A)
A. 5
B. 8
C. 14
D. 输出项不合法,无正常输出
解析:字符串\\
3.支持子程序调用的数据结构是( )。(A)
A. 栈
B. 树
C. 队列
D. 二叉树
解析:栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时,要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
4.字符串’’\\\’’ABCDEF\’’\\’’的长度是( )。(B)
A. 11
B. 10
C. 5
D. 3
解析:本题涉及字符串的两个最基本的概念。①字符串的长度是指字符串中字符的个数,但不包含字符串结束符;②以反斜线“\”开头的特殊字符序列,意思是把反斜线后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“\”连同后面的字符为一个长度。
5.若有char s[3][3]={=\\
D
解析:二维字符数组在定义时可省略第一维的维数,根据初始化有3个字符串,所以选项D中数组有3行,与已知说明语句等价。
6.下列说法不正确的是( )。(D )
A. int*ptr;//指针指向整形数据
B. char*ptr;//指针的类型是字符型指针
C. int**ptr;//指针的类型是双重指针
D. int(*ptr)[3];//是一个指针数组,数组共有三个元素,而三个元素是int型指针
解析:int(*ptr)[3]是一个数组指针,指针指向一个有3个int型变量的数组。
7.若要求从键盘读入含有空格字符的字符串,应使用函数( )。(B)
A. getc()
B. gets()
C. getchar()
D. SCallf()
解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getehar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str adr),其中str adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。
8.下列数据结构中,属于非线性结构的是( )。(C)
A. 循环队列
B. 带链队列
C. 二叉树
D. 带链栈
解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。
9.以下四个程序中,完全正确的是( )(B)
A. #include
main( );
{/*/programming/*/
pfinff(\\
B. #include
main( );
{/*/programming/*/
pfinff(\\
C. #include
main()
{/*/*programming*/*/
printf(\\
D. #include
main()
{/* programming*/
printf(\\
解析:C语言中注释语句的注释方法是:/*注释内容*/或//注释一行。所以A与C错误,D选项中预编译命令include前丢掉了“#”号。所以选择B。
10.下列4个程序中,完全正确的是( )。
B
解析:选项A中,main()函数后面的分号是错误的,C语言在函数名后面不能有分号;在C语言中注释内容必须放在“/*”和“*/”之间,“/#”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“/*”和“*/”,选项C的程序段中注释语句之间有嵌套;C语言用#include命令行来实现文件包含的功能。#include命令行的形式为:#include“文件名”,选项D中的include前面少了一个#符号。
11.以下选项中能表示合法常量的是( )。(D)
A. 1,200
B. 1.5E2.0
C. ’\’
D. \007
解析:A选项中整型常量应表示为1200,不能包含“,”。B选项中E后面的指数必须为整数。C选项中转义字符以“\”开始,若要表示字符“\”,应写为“\\”。
12.两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是( )。
#inc1ude
main()
{int x;
scanf(”%d”,&x);
if(x++>2) printf(”%d”,X);
else printf(\\(A)
A. 4和3
B. 4和2
C. 4和1
D. 3和2
解析:本题考查if…else语句。首先,scanf函数通过键盘读入x的值。当x=3时,第一个if语句先判断条件,取x的值3和2比较,然后将x的值加1,if条件成立,执行下面的printf语句,输出x的值4。当x=2时,第一个if语句先判断条件,先取x的值2和2比较,然后将x的值加1(x的值变为3),if条件不成立,执行下面的else语句,先输出x的值3,再将x的值减1。
13.若有以下函数首部
int fun(double x[10], int *n)
则下面针对此函数的函数声明语句中正确的是(B)
A. int fun(double , int );
B. int fun(double *, int *);
C. int fun(double *x, int n);
D. int fun(double x, int *n);
解析:函数声明的一般形式为:类型说明符 被调函数名(类型 形参,类型 形参…); 或为:类型说明符 被调函数名(类型,类型…);由于函数首部为int fun(double x[10], int *n),因此B选项正确。
14.对于函数声明void fun(float array[],int*ptr);以下叙述正确的是( )。(A)
本文档预览:3600字符,共15020字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载