二级C语言选择题专项强化真题试卷16
选择题
1.有以下程序(字母A的ASCII代码为65):
#include<stdio.h>
maln()
{
char c1=’A’,c2=’Y’t;
printf(\\(D)
A. 输出格式不合法,输出出错信息
B. A Y
C. 65 90
D. 65 89
解析:考查字符型数据。字符常量与其ASCII码值一一对应,在计算的时候,一般是字符数据对应的ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者ASCII码。所以答案选D。
2.有以下程序:
#include<stdio.h>
main()
{
int x;
for(x=5;x>0;x——)
if(x—<5)
printf(\\(B)
A. 4,3,2,
B. 4,3,1,
C. 5,4,2,
D. 5,3,1,
解析:本题主要考查if选择语句的嵌套和自加自减运算符的用法。其中x++和x——是先参与计算,再自加自减。x=5时,判断if条件x——<5,先比较x<5是否成立,而5<5显然不成立,此时x自减1即4,执行else后的语句,先输出4,;然后x再自加1为5,接着执行第2次for循环,此时经过for循环中的x——后,x变为4>0,执行if语句,由于4<5,条件成立,x先自减1为3,然后执行printf语句,输出3,;接着执行第三次for循环,经x——后,x值为2>0,判断2<5成立,x先自减为1,然后输出1,;接着执行第四次for循环,经x——后,x值为0,否循环表达式中判断条件x>0不成立,结束本次循环。故最后输出结果是4,3,1,。
3.下列数据结构中,属于非线性结构的是( )。(C)
A. 循环队列
B. 带链队列
C. 二叉树
D. 带链栈
解析:线性结构的特点:
①有且只有一-个根结点;
②每一个结点最多有一个前驱,也最多有一个后继。
不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可以用两个后继,属于非线性结构。
4.若有定义:
char s[30]={0};
运行时输入:
This is a string.
则以下不能正确读入整个字符串:
This is a string.
到字符数组s中的语句组是( )。(D)
A. i=0;while((c=getchar())!=’\n’)s[i++]=c;
B. gets(s);
C. for(i=0;(c=getchar())!=’\n’;i++)s[i]=c;
D. scanf(\\
解析:在使用格式符“%s”进行字符串的输入时,空格和回车(Enter)会被读入,并且函数scanf()以它们作为分隔符停止一个字符串的输入,因此答案为D选项。
5.函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,函数不完整。
int fun(int*a,int n)
{ int*p,*s;
for(P=a,s=a;P—a<n;p++)
if(________)s=P;
return * s:
}
在if语句下划线处应填入的选项是( )。(B)
A. p>s
B. *p>*s
C. a[p]>a[s]
D. p—a>p—s
解析:函数fun()的功能是在形参a所指的具有n个元素的数组中查找最大值并返回。通过for循环比较,s始终指向最大值的那个元素。使用*p取指针的值,比较*p和*s,当*s<*p时,修改指针s的指向,因此答案为B选项。
6.有以下程序:
#include<stdio.h>
int f(int x)
{
int y;
if(x==0||x==1)return(3);
y=x*x-f(x-2);
return y;
}
main( )
{
int z;
z=f(3);
prinff(\\(C)
A. 0
B. 9
C. 6
D. 8
解析:主函数中调用f函数,同时将数值3传递给变量x,执行条件不满足条件if(x==0||x==1);跳过return(3);,直接执行语句y=x*x-f(x-2);这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,判断条件成立,i反回3给f(1),y=3*3-3=6,最后将6返回丰函数,并进行输出。因此C选项正确。
7.设数据集合为D={1,3,5,7,9},D上的关系为R,下列数据结构B=(D,R)中为非线性结构的是( )。
D
解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。A选项中,5为根结点,线性表为51793。B选项中,9为根结点,线性表为97135。C选项中,1为根结点,线性表为19753。D选项,结点1与7都是根结点,属于非线性结构,故D选项正确。
8.有以下程序:
#include
#nclude
long fun(char s[])
{long n;int sign;
for(;isspace(*s);s++);
sign=(*s==’一’)?一1:1;
if(* s==’+’||*s=’一’)s++;
for(n=0;isdigit(木s);s++)
n=10*n+(*s一’0’);
return sign*n;
}
main()
{ char S[]=\\(D)
A. 一263
B. 2
C. 0
D. 一26
解析:isspace(c)检查参数c是否为空格字符。若参数c为空格字符,则返回TRUE,否则返回NULL(0)。Isdigit(c)函数检查参数c是否为阿拉伯数字0到9。返回值若为阿拉伯数字,则返回TRUE,否则返回NULL(0)。fun()函数的第一个for循环判断字符串是否为负号。第二个for循环获取符号后面的数字字符,并将它们转化为整数。若遇到了非数字的字符则跳出,最后返回数组的结果。因此,可知首先获取负号,紧接着获取数值26,遇到了字符a,跳出返回一26,因此打印的结果是一26。故答案为D选项。
9.有以下程序:
#include
fun(int x,int y)
{static int m=0,i=2;
i+=m+1;m=i+x+y;retum m;
}
main()
{int j=1,m=1,k;
本文档预览:3600字符,共9176字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载