2016年03月全国计算机等级考试二级《C语言》真题
(总分100, 考试时间90分钟)
一、选择题
1. 有以下定义:
struct data
{ int i;char c;double d;}x;
以下叙述中错误的是______。
A x的内存地址与x. i的内存地址相同
B struct data是一个类型名
C 初始化时,可以对x的所有成员同时赋初值
D 成员i、c和d占用的是同一个存储空间
答案:D
[解析] 变量i、c、d是结构体变量x中三个不同的成员,占用不同的存储空间。
2. 以下函数的功能是:计算a的n次方作为函数值返回。
double fun(double a,int n)
{ int i;double s=1.0;
for(i=1;i<=n;i++)s=______;
return s;
}
为实现上述功能,函数中下划线处应填入的是______。
A s*i
B s*a
C s+i*i
D s+a*a
答案:B
[解析] s为a的(i-1)次方的结果,所以令s=s*a即可得到a的i次方。
3. 有以下程序:
#include<stdio.h>
#include<string.h>
main( )
{ char str[ ]={"Hello,Beijing"};
printf("%d,%d\n",strlen(str),sizeof(str));
}
程序的运行结果是______。
A 13,13
B 13,14
C 13,15
D 14,15
答案:B
[解析] strlen返回字符串的长度,不包含字符串末尾的结束字符"\0",结果为13;sizeof返回字符串所占存储空间的大小,由于字符串最后要加上一个"\0",所以结果为13+1=14。
4. 若有说明:typedef struct{int a;char c;}w;,则以下叙述正确的是______。
A 编译后系统为w分配5个字节
B 编译后系统为w分配6个字节
C 编译后系统为w分配8个字节
D 编译后系统不为w分配存储空间
答案:D
[解析] w是一个自定义类型,不是变量,故编译后系统不为w分配存储空间。当w定义为结构体变量时才会为其分配存储空间。
5. 以下叙述中错误的是______。
A 同一个数组中所有元素的类型相同
B 不可以跳过前面的数组元素,给后面的元素赋初值0
C 定义语句:int a[10]={0},给a数组中所有元素赋初值0
D 若有定义语句:int a[4]={1,2,3,4,5};,编译时将忽略多余的初值
答案:D
[解析] 数组初始化时,若赋初值的个数多于所定义数组的元素个数时,编译器会报错。
6. 若有以下定义:
struct tt{char name[10];char sex;}aa={"aaaa","F"},*p=&aa;
则错误的语句是______。
A scanf("%c",aa.sex);
B aa.sex=getchar( );
C printf("%c\n",(*p).sex);
D printf("%c\n",p->sex);
答案:A
[解析] sex是一个char类型变量,不是地址,A项应为scanf("%c",&aa.sex);。
7. C语言编译程序的功能是______。
A 执行一个C语言编写的源程序
B 把C源程序翻译成ASCII码
C 把C源程序翻译成机器代码
D 把C源程序与系统提供的库函数组合成一个二进制执行文件
答案:C
[解析] 编译程序的功能是将"高级语言"翻译为"机器语言",将C语言语句转换成二进制的机器指令。
8. 有以下程序:
#include<stdio.h>
int fun(int n)
{ if(n)return fun(n-1)+n;
else return 0;
}
main( )
{printf("%d\n",fun(3));}
程序的运行结果是______。
A 4
B 5
C 6
D 7
答案:C
[解析] fun函数是一个递归函数,调用f(3),参数n=3,返回f(3-1)+3=f(2)+3=f(1)+2+3=f(0)+1+2+3=0+6=6。
9. 有以下程序:
#include<stdio.h>
main( )
{ int sum=0,x=5;
do{sum+=x;}while(!--x);
printf("%d\n",sum);
}
程序的运行结果是______。
A 0
B 5
C 14
D 15
答案:B
[解析] do-while循环,先执行循环体sum+=x,则sum=sum+x=0+5=5,再执行while中的表达式,结果为0,退出循环,所以运行结果是5。
10. 下面不属于软件设计阶段任务的是______。
A 软件的功能确定
B 软件的总体结构设计
C 软件的数据设计
D 软件的过程设计
答案:A
[解析] 软件设计阶段的任务包括:①结构设计;②数据设计;③接口设计;④过程设计。软件的功能确定是在需求分析阶段完成的。
11. 有以下程序:
#include<stdio.h>
#include<string.h>
typedef struct{char name[9];char sex;float score[2];}STU;
void f(STU*a)
{ strcpy(a->name,"Zhao");
a->sex="In";a->score[1]=90.0;
}
main( )
{ STU c={"Qian","f",95.0,92.0},*d=&c;
f(d);printf("%s,%c,%2.Of,%2.0f\n",d->name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是______。
A Qian,f,95,92
B Zhao,f,95,90
C Zhao,m,95,90
D Zhao,f,95,92
答案:C
[解析] f函数调用时,结构体数组名作为实参传给形参指针,结构体指针a指向数组c的首地址。因此,f可以对数组c中的元素赋值,故返回主函数之后,数组c中的成员值已被更新。main函数中有赋值语句"*d=&c;",指针d指向结构体数组c的首地址,故d->name=c.name,输出结果为Zhao,m,95,90。
12. 在C语言程序中,下列说法正确的是______。
A 函数的定义可以嵌套,但函数的调用不可以嵌套
B 函数的定义不可以嵌套,但函数的调用可以嵌套
C 函数的定义和调用均不可以嵌套
D 函数的定义和调用均可以嵌套
答案:B
[解析] 函数定义都是在函数外部进行的,函数调用是在函数内部进行的,所以函数的定义不可以嵌套,但函数的调用可以嵌套。
13. 执行以下程序段后,s的值为______。
int a[ ]={1,2,3,4,5,6,7,8,9},s=0,k;
for(k=0;k<8;k+=2)S+=*(a+k);
A 13
B 16
C 17
D 45
答案:B
[解析] 数组a中的元素为:a[0]=1,a[1]=2,…,a[8]=9。k=0时,s=s+*(a+0)=0+1=1;k=2时,s=1+*(a+2)=1+3=4;k=4时,s=4+5=9;k=6时,s=9+7=16。
14. 有以下程序:
#include<stdio.h>
#define M 5
#define f(x,y) x*y+M
main( )
{
int k;
k=f(2,3)*f(2,3);
printf("%d\n",k);
}
程序的运行结果是______。
A 22
B 41
C 100
D 121
答案:B
[解析] 宏定义中的函数在调用时只做简单的替换,不能进行任何修改。所以k=2*3+5*2*3+5=41。
15. 有以下程序:
#include<stdio.h>
main( )
{ char ch="Z";
ch=(ch-"A"+1)%26+"A";putchar(ch);
}
程序的运行结果是______。
A .Z
B .Y
C .B
D .A
答案:D
[解析] Z的ASCII码是90,A的ASCII码是65,所以ch=(ch-"A"+1)%26+"A"=26%26+65=65,输出65对应的字符A。
16. 下面属于黑盒测试方法的是______。
A 基本路径测试
B 等价类划分
C 判定覆盖测试
D 语句覆盖测试
答案:B
[解析] 等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类进行测试。基本路径测试、判定覆盖测试和语句覆盖测试都属于白盒测试。
17. 有以下程序:
#include<stdio.h>
main( )
{ int i,j,k,a=5,b=6;
i=(a==b)?++a:--b;
j=a++;k=b;printf("%d,%d,%d\n",i,j,k);
}
程序的运行结果是______。
A 7,6,5
B 5,5,5
C 7,5,5
D 5,6,5
答案:B
[解析] 条件表达式i=(a==b)?++a:--b;中先执行a==b,值为假,根据三元运算符语法规则,执行--b,此时b为5,赋给i,i=5;j=a++,将a=5先赋给j,再进行a++,j=5,a=6,k=b=5,
故最后输出的是5计算机二级c语言选择题库,5,5。
18. C语言程序中,若函数无返回值,则应该对函数说明的类型是______。
A int
B double
C char
D void
答案:D
[解析] int表示返回值是整型,double表示返回值是双精度型,char表示返回值是字符型,void表示无返回值。
19. 有以下程序:
#include<stdio.h>
main( )
{ int k,n=0;char c,str[]="teach";
for(k=0;str[k];k++)
{ c=str[k];
switch(k)
{ case 1: case 3: case 5: putchar(c);printf("%d",++n);break;default:putehar("N");
}
}
}
序的运行结果是______。
A Ne1NN
B e1a2e3
C Ne1Nc2N
D Na1NNNN
答案:C
[解析] 程序执行过程:k=0时,c=str[0]="t",执行default分支,输出N;k=1时,c="e",执行case 1分支,没有break语句,继续执行case 3分支,没有break语句,继续执行case 5分支,输出e1;k=2时,c="a",输出N;k=3,c="c",输出c2;k=4,c="h",输出N。故程序的输出结果为Ne1Nc2N。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论