【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc

上传人:周芸 文档编号:1331717 上传时间:2019-10-17 格式:DOC 页数:12 大小:63KB
下载 相关 举报
【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc_第1页
第1页 / 共12页
【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc_第2页
第2页 / 共12页
【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc_第3页
第3页 / 共12页
【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc_第4页
第4页 / 共12页
【计算机类职业资格】国家二级C++机试(基本控制结构和数组、指针与引用)模拟试卷1及答案解析.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、国家二级 C+机试(基本控制结构和数组、指针与引用)模拟试卷1 及答案解析(总分:68.00,做题时间:90 分钟)一、选择题(总题数:34,分数:68.00)1.有如下程序: #includeiostream using namespace std; int main() char str 100,*p; coutPlease input a string:; cin;str; p=str; for(int i=0;*p!=0;p+,i+); coutiend1; return 0; 运行这个程序时,若输入字符串为: abcdefg abcd 则输出结果是( )。(分数:2.00)A.7B.

2、12C.13D.1002.if 语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句1else语句 2 关于上面的语法格式,下列表述中错误的是( )。(分数:2.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0-)B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()3.若 x 和 y 是程序中的两个整型变量,则下列 if 语句中正确的是( )。(分数:2.00)A.if(x=0)y=1;else y=2

3、;B.if(x=0)then y=1 else y=2;C.if(x=0)y=1 else y=2;D.if(x=0)y=1;else y=2;4.下列语句中,与语句“1n=(ab?(1)c?1:0):0);”的功能等价的是( )。(分数:2.00)A.if(a=b) n=0;B.if(ab)Il(bc)n=1;else n=0;C.if(ab)if(bc) n=1:else n=0;else n=0;D.if(ab) n=1;else if(=c)n=1;else if(bc)n=1;else n=0;5.有如下程序 #ineludeiostream using namespace std;

4、 int main() char a; cina; if(a=*) cout*end1; else cout#end1; rerurn 0: 输入字符+时,程序的运行结果是( )。(分数:2.00)A.*B.#C.*#D.无输出6.执行语句序列( )。 int i=0; while(i25)i+=3; couti; 输出结果是(分数:2.00)A.24B.25C.27D.287.有如下程序: int x=3; do x-=2; coutx; while(1(-x); 执行这个程序的输出结果是( )。(分数:2.00)A.1B.30C.1-2D.死循环8.执行下列语句段后,输出字符*“的个数是(

5、 )。 for(int i=50;i1:-i)cout*;(分数:2.00)A.48B.49C.50D.519.执行下列语句段后,输出字符“*”的个数是( )。 for(int i=50;i1;I-=2)cout*;(分数:2.00)A.24B.25C.26D.5010.有如下程序: #includeiostream using namespace std; int main() hat sum; for(int i=0;i6;i+=3) sum=i; for(int j=i;j6;j+)sum+=j; coutsumend 1; return 0: 运行时的输出结果是( )。(分数:2.00

6、)A.3B.10C.12D.1511.有如下程序段: int i=5; while(int i=0)cout*;i-; 运行时输出*的个数是( )。(分数:2.00)A.0B.1C.5D.无穷12.有如下程序段: int i=1; while(1) i+; if(i=10) break; if(i2=0) cout*; 执行这个程序段输出字符*的个数是( )。(分数:2.00)A.10B.3C.4D.513.下列循环语句中有语法错误的是( )。(分数:2.00)A.int i;for(i=1;i10;i+)cout*;B.int i,j;for(i=l,j=0;i10;i+,j+)cout*;

7、C.int i=0;for(;i10;i+)cout*;D.for(1)tout*;14.有如下程序: #includeiostream using namespace std; int main() int f,f1=0(),t2=1; for(int i=3;i=6;i+) f=f1+f2; f1=f2;f2=f; coutfend1; return 0; 运行时的输出结果是( )。(分数:2.00)A.2B.3C.5D.815.有如下程序: #inclu coutfend1; return 0; 运行时的输出结果是( )。(分数:2.00)A.2B.3C.5 D.8解析:解析:在主函数中

8、 for 循环语句执行 4 次,第一次循环结束时,变量 f 的值等于 1,n 的值等于1,f2 的值等于 1;第二次循环结束时,变量 f 的值等于 2,f1 的值等于 1,f2 的值等于 2:第三次循环结束时,变量 f 的值等于 3,f1 的值等于 2,f2 的值等于 3;第四次循环结束时,变量 f 的值等于 5,f1的值等于 3,f2 的值等于 5;结束循环。15.有如下程序: #inclu&iostream using namespace std; int main() int a6=23,15,64,33,40,58; int s1,s2; s1=s2=a0; for(int*p=al+

9、1;pa+6;p+) if(s1*p)s1=*p; if(s2*p)s2=*p; couts1+s2end1; return 0; 运行时的输出结果是( )。(分数:2.00)A.23B.58C.64D.79 解析:解析:变量 s1 和 s2 的初值都等于 23,那么在执行第一次 for 循环时,*p 的值等于 15,它小于23,所以把 15 赋给变量 s1;执行第二次 for 循环时,*p 的值等于 64,它大于 23,所以把 64 赋给变量s2;而数组 a 中 a2后面的元素的值都大于 15,小于 64,因而变量 s1,s2 的值不会再发生变化,最终值为 15+64=79。16.有如下程序

10、: #includeiostream using namespace std; int main() int i,s=0; for(i=1;s20;i+=2)s+=i*i; coutiend1; return 0; 运行这个程序的输出结果是( )。(分数:2.00)A.3B.5C.7 D.9解析:解析:在这段程序中 for 循环共执行 3 次,每次循环变量 i 的值增 2,在执行第三次循环语句时,变量 s 的值等于 25,大于 20 而退出循环,此时再执行循环变量 i 加 2 运算,所以最后变量 i 的值等于7。17.要定义一个具有 5 个元素的一维数组 vect,并使其各元素的初值依次是 3

11、0,50,-88,0 和 0,则下列定义语句中错误的是( )。(分数:2.00)A.int vect=30,50,-88; B.int vect=30,50,-88,0,0;C.int vect5=30,50,-88;D.int vect5=30,50,-88,0,0;解析:解析:此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项 A 中数组只定义 3 个元素,不符合题目。18.已知有数组定义 char a34; 下列表达式中错误的是( )。(分数:2.00)A.a2=WIN B.strcpy(a2,WIN)C.

12、a23=WD.a01=a01解析:解析:本题主要是对字符数组的考查。选项 A 中 a2为一个地址,所以不能用等号进行赋值操作。19.已知数组 arr 的定义如下: int arr5=1,2,3,4,5; 下列语句中输出结果不是 2 的是( )。(分数:2.00)A.tout*arr+1end1;B.cout*(arr+1)C.coutarr1end1D.cout*arrend1; 解析:解析:因为一维数组 alT5的首地址是第一数组元素的地址,所以选项 D 中,输出*art 的值就是数组 alT5中第一数组元素 1。其他选项都输出数组 nit5的第二元素 2。20.有如下类定义: ciass

13、A char*a; public: A():a(0) A(char*aa)把 aa 所指字符串拷贝到 a 所指向的存储空间 a=_; strcpy(a,aa); A()(deletea; ; 横线处应填写的表达式是( )。(分数:2.00)A.new charstrlen(aa)+1 B.charstrlen(aa)+1C.charstrlen(aa)D.new charsizeof(aa)-1解析:解析:函数 strlen(aa)返回字符串 aa 中字符的个数,不包括末尾的空字符。所以在内存空间创建字符数组 a 时,需要字符数组的长度是 strlen(aa)+1。21.要定义整型数组 x,使

14、之包括初值为 0 的三个元素,下列语句中错误的是( )。(分数:2.00)A.im x3=0,0,0;B.int x=0; C.static int x3=0;D.int x=0,0,0;解析:解析:当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项 B 定义数组 x 时,没有给出数组的大小,初始化时只给出了一个元素 0。所以数组 x只包含一个元素为 0 的元素。22.有如下语句序列: char str10;cistr; 当从键盘输入I love this game时,str 中的字符串是( )。(分数:2.00)A.I love this ga

15、meB.I love thiC.I loveD.I 解析:解析:由于字符0 作为字符串的结束标志,所以当从键盘上输入“I love this game”时,只把字母 I 输入字符串 s 仃。23.字符串“a+b=12nt”的长度为( )。(分数:2.00)A.12B.10C.8 D.6解析:解析:题目给出的字符串含有 7 个字符,再加字符串的结束字符,所以共 8 个字符。24.下列有一维数组 a 的定义中,语法正确的是( )。(分数:2.00)A.int a(10);B.int n=7,an;C.int n;cinn;int an;D.const int size=10;int asize;

16、解析:解析:定义一维数组的一般格式为: 类型标识符数组名常量表达式; 常量表达式的值表示元素的个数,即数组长度。常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,C+不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。25.有如下程序: #includeiostream using namespace std; int main() int *p; *p=9; coutThe value atp:*p; return 0; 编译运行程序将出现的情况是( )。(分数:2.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:The valu

17、e at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错 解析:解析:此题考查的是指针的使用。本题中,在给*p 赋值前,指针 p 并没有指向一个具体的对象。此时可以通过编译,但运行时由于 p 中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。26.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=256;B.const double*point;C.int const buffer=256;D.double*const point; 解析:解析:此题考查的是常指针和指针常量的概念。常指针是指向一个常量的

18、指针变量,指针自身的内容可以改变但指针指向的内容不可以改变:指针常量是一个常量,即不能修改指针自身的内容,但可以通过指针修改其所指向的内容。D 选项中指针常量 point 没有初始化,编译无法通过。27.有如下说明 int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为 9 的表达式是( )。(分数:2.00)A.*p+9B.*(p+8) C.*p+=9D.p+8解析:解析:此题考查的是指针的运用。选项 A 中,*p 返回的是数组元素 a0的值,所以最后结果是1+9=10;选项 B 是指针 p 后移 8 个单位位置处的值,即 a8其值为 9;选项 C 中表达式的值和选项

19、 A 相同;选项 D 的值是一个地址值,该值无法确定。28.语句 int*p=k;定义了指针 p,与这个语句等效的语句序列是( )。(分数:2.00)A.int*p;p=&k; B.int*p;p=k;C.int*p;*p=&k;D.int*p;*p=k解析:解析:此题考查的是指针的赋值。题目中的语句 int,*p=&k;定义了一个 int 类型的指针 p,并将变量 k 的地址&k 赋给指针 p。所以等效语句是:int*p;p=&k;。29.有如下定义: int a5=1,3,5,7,9,*p=a; 下列表达式中不能得到数值 5 的是( )。(分数:2.00)A.a2B.a3 C.*(p+2)

20、D.*p+4解析:解析:此题考查的是指针引用数组元素。B 选项中,a3是数组的第四个元素,即 7:其它选项的引用均可得到 5。30.下列语句中,正确的是( )。(分数:2.00)A.char*myString=Hello-World!; B.char myString=Hello-World!;C.char myString11=“Hello-World!;D.char myString12=Hello-World!;解析:解析:对于 B 来说,会造成溢出,对于 C 和 D 来说同样如此,因为“Hello-world!”一个是 12 个字符组成,加上空字符一共 13 个,所以都会造成溢出,只有

21、 A 是将字符串的地址赋给字符型指针。31.下列定义语句中,错误的是( )。(分数:2.00)A.int px*; B.char*acp10;C.char(*pac)10;D.int(*p)();解析:解析:指针变量声明的一般形式为:数据类型*变量名,在选项 A 中,*放在变量名的后面。所以是错误的。32.有如下语句序列: int x=100,&r=x; coutx-rend1: 已知其中变量 x 的地址为0012FF7C,则执行该语句序列的输出结果为( )。(分数:2.00)A.100-100 B.1000012FF7CC.0012FF7C-100D.0012FF7C-0012FF7C解析:

22、解析:在语句 int x=100,&r=x;中声明 r 初始化对 x 的引用,所以 x 和&r 的值都是 100。33.若字符指针 p 所指向的字符串为abcdefg,在执行语句( )。 Char*ap=new charstrlen(p)+1; 之后,印指向的字符数组的元素个数为(分数:2.00)A.9B.8 C.7D.6解析:解析:字符指针 p 所指向的字符串为“abcdefg,所以函数 strlen(p)的值等于 7,再加 1,等于8。34.有如下程序段: int i=0,j=1; int r=i: r=j int*p=&i; *p=&t 其中会产生编译错误的语句是( )。(分数:2.00)A. B.C.D.解析:解析:此题考查的是指针和引用。本题中,语句是一条合法的引用声明语句,使得变量 i 被 r 引用;语句通过引用 r 将变量 j 的值赋给变量 i;语句声明了指针变量 p,并初始化指向变量 i;语句中,*p 代表了变量 i 的值,要将&r 赋给*p,这会使编译器产生类型不符的错误提示。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1