二级C语言选择题专项强化真题试卷30
选择题
1.设有宏定义;#define IsDIV(k,n)((k%n==1)?1:0),且变量m已正确定义并赋值。则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是( )。(D)
A. 判断m是否能被5或者7整除
B. 判断m是否能被5和7整除
C. 判断m被5或者7整除是否余1
D. 判断m被5和7整除是否都余1
解析:IsDIV(m,5)&&IsDIV(m,7)都为真,即表达式((m%5==1)?1:0)结果为1,且表达式((m%7==1)?1:0)结果也为1,因为m%5,m%7都等于1,所以题目表达的是,判断m被5和7整除是否都余1。
2.下列与队列结构有关联的是( )。(D)
A. 函数的递归调用
B. 数组元素的引用
C. 多重循环的执行
D. 先到先服务的作业调度
解析:队列的修改是依“先进先出”的原则进行的,故D选项正确。
3.如下所示的系统结构图的最大出扇数是( )。
(A)
A. n
B. 1
C. 3
D. 4
解析:系统结构图的扇出数指的是一个模块直接调用的其他模块数,图中的最大扇出数为n,答案选A。
4.有以下程序:
#include<stdio.h>
main()
{
int x,y,z;
x=y=1;
z=x++;y++;++y;
printf(\\(C)
A. 2 3 2
B. 2 3 3
C. 2 3 1
D. 2 2 1
解析:考查逗号表达式。逗号表达式的计算过程是分别计算所有表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。x=y=1;将x、y初始化为1,逗号表达式z=x++,y++,++y;中先计算z=x++,得到x=2,z=1,计算y++,得y=2,再计算++y,得y=3。所以最终结果为x=2,y=3,z=1,答案选C。
5.若有定义语句:
double x,y,*px,*py;
执行
px=dex;py=&y;
正确的输入语句是( )。(D)
A. seanf(\\
B. scanf(\\
C. scard\\
D. seanf(\\
解析:%1Jf,%le是针对double类型的数据,如果仅用%f,输入的数据可能不能被完全接收,数据的精度可能不足。%f主要针对float类型的变量输入,B选项错误。根据scanf(格式,变量地址),A,C选项错误。故答案为D选项。
6.有以下程序:
#include
int f(int k)
{ static int n=0;
int m=0;
n++;m++;k++;
return 11+m+k:
}
main()
{ int k;
for(k=0;k<2;k++)printf(\\(A)
A. 3,5,
B. 3,6,
C. 3,7,
D. 0,3,
解析:static静态变量只在声明时初始化一次。因此,第一次调用函数f(k=0),此时n=m=k=0,经过自增操作n=1,m=1,k=1,返回值为3。第二次调用函数f(k=1),此时n=1,k=1,m=0,经过自增操作,n=2,k=2,m=1,返回值为5。故最终结果为3,5。故答案为A选项。
7.有以下程序:
#include
main()
{FILE*fp;
int i,a[6]={1,2,3,4,5,6},k;
fp=fopen(\\(A)
A. 6
B. 21
C. 123456
D. 654321
解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件“dat(a)dat”,随后先给文件写入数据a[0]。由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a[]中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据为6)写入变量k中,关闭文件,输出k值,故答案为A选项。
8.有以下程序:
#include
main()
{ int a[4],p,x,i; ,
for(i=3;i>0;i一一)a[i一1]=i*2—1;
scanf(\\(C)
A. 1 2 3 4
B. 5 4 3 1
C. 1 2 3 5
D. 3 2 1 4
解析:第一个for循环初始化数组a,分别为1,3,5,随机数,形成了基本有序的序列,再将输入的数字插入到数组a,使它们形成有序序列。因此可以分析出,打印的结果为1,2,3,5。故答案为C选项。
9.在软件开发中,需求分析阶段可以使用的工具是( )。(B)
A. N-S图
B. DFD图
C. PAD图
D. 程序流程图
解析:在需求分析阶段可以使用的工具有数据流图(DFD)、数据字典(DD)、判定树与判定表,所以选择B)。
10.若有定义:char C;double d;程序运行时输入:1 2,能把字符1输入给变量c、数值2输入给变量d的输入语句是( )。(B)
A. scarff(\\
B. scanf(\\
C. scanf(\\
D. seanf(\\
解析:%If是针对double类型,如果仅用%f,输入的数据可能没有被完全接收,数据的精度可能不足,选项C、D错误。%f主要针对float类型的变量的输入,%d主要针对整型数据的输入,%c主要针对字符类型的数据的输入,选项A错误。故答案为B选项。
11.有以下程序:
#include
main()
{ int x,y,z;
x=y=1;
z=x++,y++,++y;
printf(\\(C)
A. 2,3,3
B. 2,3,2
C. 2,3,1
D. 2,2,1
解析:z=x++,y++,++y;,因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。
12.对于以下函数声明
void fun(int array[4],int*ptr);
以下叙
本文档预览:3600字符,共7777字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载