1、国家二级 C+机试(基本控制结构和数组、指针与引用)模拟试卷 2及答案与解析 一、选择题 1 有如下程序: #include iostream using namespace std; int main() char str 100, *p; cout Please input a string: ; cin; str; p=str; for(int i=0; *p!= 0; p+, i+); cout i end1; return 0; 运行这个程序时,若输入字符串为: abcdefg abcd 则输出结果是 ( )。 ( A) 7 ( B) 12 ( C) 13 ( D) 100 2 if
2、语句的语法格式可描述为: 格式 1: if(条件 )语句 或 格式 2: if(条件 )语句 1 else语句 2 关于上面的语法格式,下列表述中错误的是 ( )。 ( A)条件部分可以是一个 if语句,例如 if(if(a=0-) ( B)语句部分可以是一个 if语句,例如 if()if() ( C)如果在条件前加上逻辑非运算符 !并交换语句 1和语句 2的位置,语句功能不变 ( D)语句部分可以是一个循环语句,例如 if()while() 3 若 x和 y是程序中的两个整型变量,则下列 if语句中正确的是 ( )。 ( A) if(x=0)y=1; else y=2; ( B) if(x=
3、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=(a b?(1) c?1: 0): 0); ”的功能等价的是 ( )。 ( A) if(a =b) n=0; ( B) if(a b)Il(b c)n=1; else n=0; ( C) if(a b)if(b c) n=1: else n=0; else n=0; ( D) if(a b) n=1; else if( =c)n=1; else if(b c)n=1; else n=0; 5 有如下程序 #inclu
4、de iostream using namespace std; int main() char a; cin a; if(a=*) cout * end1; else cout # end1; rerurn 0: 输入字符 +时,程序的运行结果是 ( )。 ( A) * ( B) # ( C) *# ( D)无输出 6 执行语句序列 ( )。 int i=0; while(i 25)i+=3; cout i; 输出结果是 ( A) 24 ( B) 25 ( C) 27 ( D) 28 7 有如下程序: int x=3; do x-=2; cout x; while(1(-x); 执行这个程序
5、的输出结果是 ( )。 ( A) 1 ( B) 30 ( C) 1-2 ( D)死循环 8 执行下列语句段后,输出字符 *“的个数是 ( )。 for(int i=50; i 1: -i)cout *; ( A) 48 ( B) 49 ( C) 50 ( D) 51 9 执行下列语句段后,输出字符 “*”的个数是 ( )。 for(int i=50; i 1; I-=2)cout *; ( A) 24 ( B) 25 ( C) 26 ( D) 50 10 有如下程序: #include iostream using namespace std; int main() hat sum; for(
6、int i=0; i 6; i+=3) sum=i; for(int j=i; j 6; j+)sum+=j; cout sum end 1; return 0: 运行时的输出结果是 ( )。 ( A) 3 ( B) 10 ( C) 12 ( D) 15 11 有如下程序段: int i=5; while(int i=0)cout *; i-; 运行时输出 *的个数是 ( )。 ( A) 0 ( B) 1 ( C) 5 ( D)无穷 12 有如下程序段: int i=1; while(1) i+; if(i=10) break; if(i 2=0) cout *; 执行这个程序段输出字符 *的
7、个数是 ( )。 ( A) 10 ( B) 3 ( C) 4 ( D) 5 13 下列循环语句中有语法错误的是 ( )。 ( A) int i; for(i=1; i 10; i+)cout *; ( B) int i, j; for(i=l, j=0; i 10; i+, j+)cout *; ( C) int i=0; for(; i 10; i+)cout *; ( D) for(1)tout *; 14 有如下程序: #include iostream using namespace std; int main() int f, f1=0(), t2=1; for(int i=3; i
8、 =6; i+) f=f1+f2; f1=f2; f2=f; cout f end1; return 0; 运行 时的输出结果是 ( )。 ( A) 2 ( B) 3 ( C) 5 ( D) 8 15 有如下程序: #include iostream using namespace std; int main() int a6=23, 15, 64, 33, 40, 58; int s1, s2; s1=s2=a0; for(int*p=al+1; p a+6; p+) if(s1 *p)s1=*p; if(s2 *p)s2=*p; cout s1+s2 end1; return 0; 运行时
9、的输出结果是 ( )。 ( A) 23 ( B) 58 ( C) 64 ( D) 79 16 有如下程序: #include iostream using namespace std; int main() int i, s=0; for(i=1; s 20; i+=2)s+=i*i; cout i end1; return 0; 运行这个程序的输出结果是 ( )。 ( A) 3 ( B) 5 ( C) 7 ( D) 9 17 要定义一个具有 5个元素的一维数组 vect,并使其各元素的初值依次是 30,50, -88, 0和 0,则下列定义语句中错误的是 ( )。 ( A) int vect
10、=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; 18 已知有数组定义 char a34; 下列表达式中错误的是 ( )。 ( A) a2=WIN ( B) strcpy(a2, WIN) ( C) a23=W ( D) a01=a01 19 已知数组 arr的定义如下: int arr5=1, 2, 3, 4, 5; 下列语句中输出结果不是 2的是 ( )。 ( A) tout *arr+1 end1; ( B) cout *
11、(arr+1) ( C) cout arr1 end1 ( D) cout *arr end1; 20 有如下类定义: ciass A char*a; public: A(): a(0) A(char*aa)把 aa所指字符串拷贝到 a所指向的存储空间 a=_; strcpy(a, aa); A()(deletea; ; 横线处应填写的表达式是 ( )。 ( A) new charstrlen(aa)+1 ( B) charstrlen(aa)+1 ( C) charstrlen(aa) ( D) new charsizeof(aa)-1 21 要定义整型数组 x,使之包括初值为 0的三个元素
12、,下列语句中错误的是 ( )。 ( A) im x3=0, 0, 0; ( B) int x=0; ( C) static int x3=0; ( D) int x=0, 0, 0; 22 有如下语句序列: char str10; ci str; 当从键盘输入 I love this game时, str中的字符串是 ( )。 ( A) I love this game ( B) I love thi ( C) I love ( D) I 23 字符串 “a+b=12 n t”的长度为 ( )。 ( A) 12 ( B) 10 ( C) 8 ( D) 6 24 下列有一维数组 a的定义中,语法
13、正确的是 ( )。 ( A) int a(10); ( B) int n=7, an; ( C) int n; cin n; int an; ( D) const int size=10; int asize; 25 有如下程序: #include iostream using namespace std; int main() int *p; *p=9; cout The value atp: *p; return 0; 编译运行程序将出现的情况是 ( )。 ( A)编译时出现语法错误,不能生成可执行文件 ( B)运行时一定输出: The value at p: 9 ( C)运行时一定输出:
14、 The value at p: *9 ( D)运行时有可能出错 26 下列语句中,错误的是 ( )。 ( A) const int buffer=256; ( B) const double*point; ( C) int const buffer=256; ( D) double*const point; 27 有如下说明 int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p=a; 则数值为 9的表达式是 ( )。 ( A) *p+9 ( B) *(p+8) ( C) *p+=9 ( D) p+8 28 语句 int*p= k;定义了指针 p,与这个语句等效的
15、语句序列是 ( )。 ( A) int*p; p=&k; ( B) int*p; p=k; ( C) int*p; *p=&k; ( D) int*p; *p=k 29 有如下定义: int a5=1, 3, 5, 7, 9, *p=a; 下列表达式中不能得到数值 5的是 ( )。 ( A) a2 ( B) a3 ( C) *(p+2) ( D) *p+4 30 下列语句中,正确的是 ( )。 ( A) char*myString=Hello-World!; ( B) char myString=Hello-World!; ( C) char myString11=“Hello-World!;
16、 ( D) char myString12=Hello-World!; 31 下列定义语句中,错误的是 ( )。 ( A) int px*; ( B) char*acp10; ( C) char(*pac)10; ( D) int(*p)(); 32 有如下语句序列: int x=100, &r=x; cout x - r end1: 已知其中变量 x的地址为 0012FF7C,则执行该语句序列的输出结果为 ( )。 ( A) 100-100 ( B) 100 0012FF7C ( C) 0012FF7C-100 ( D) 0012FF7C-0012FF7C 33 若字符指针 p所指向的字符串
17、为 abcdefg,在执行语句 ( )。 Char*ap=new charstrlen(p)+1; 之后,印指向的字符数组的元素个数为 ( A) 9 ( B) 8 ( C) 7 ( D) 6 34 有如下程序段: int i=0, j=1; int r=i: r=j int*p=&i; *p=&t 其中会产生编译错误的语句是 ( )。 ( A) ( B) ( C) ( D) 国家二级 C+机试(基本控制结构和数组、指针与引用)模拟试卷 2答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 此题考查的是默认输入格式。本题输入数据类型为 char,因此输入的数据是 “从第一个非空白字符开始
18、到下一个空白字符结束 ”,而输入数据为abcdefg abed,其中 abcdefg后有空格。所以输入后 str中的字符串为 “abcdefg:主函数中接下来 for语句的作用是计算字符串 p的长度,故最终输出字符串“abcdefg的长度 7。 【知识模块】 基本控制结构 2 【正确答案】 A 【试题解析】 此题考查的是 if语句。 If语句的条件部分是一个表达式而不是语句,因此选项 A叙 述错误。 【知识模块】 基本控制结构 3 【正确答案】 A 【试题解析】 if else语句的形式为: if(条件 ) 语句 1 else语句 2 所以符合以上形式的 if else语句为选项 A。 【知识
19、模块】 基本控制结构 4 【正确答案】 C 【试题解析】 条件表达式 (a b?(b c?1: 0): 0)的含义是,如果 a b成立,则此表达式的值等于条件表达式 (b c?1: 0)的值,否则其值等于 0。而条件表达式 (b c?1: 0)的含义是,如果 b c成立,其值 等于 1,否则其值等于 0。 【知识模块】 基本控制结构 5 【正确答案】 A 【试题解析】 本题的考点是双分支选择语句的执行流程,答题的关键点在于选择条件的判定。双分支选择语句的执行流程是首先计算 if后表达式的值,如果表达式的值为非零,则执行 if后面的分支,否则执行与其匹配的 else后面的分支。本题执行时虽然输入
20、变量 a的值为 +,但是在执行 if后括号内表达式 (a=*)的时,由于此表达式为赋值表达式,因此表达式的值为赋值号右边的值 *,其 ASCII码的值非零,执行 if后面的输出语句 “*”后回车。 【知识模块】 基本控制结构 6 【正确答案】 C 【试题解析】 此题考查的是循环语句 while的使用。 i为 3的倍数,当 i=24时, i 25,执行 while的循环体 i+=3,则 i=27,不满足 i 25的条件,结束循环。 【知识模块】 基本控制结构 7 【正确答案】 C 【试题解析】 此题考查的是 do-while循环语句。 do-while循环首先执行 do语句中的循环体,再判断是否
21、需要继续执行循环。题目中 do语句 “x-=2”, while语句中 “-x”即 x为 0,取反为 非 0,循环继续执行;执行 “x-=2”和 “-x”取反后,循环结束程序退出。 【知识模块】 基本控制结构 8 【正确答案】 B 【试题解析】 此题考查的是 for循环语句。 For循环中 i从 50开始逐渐递减,直到 i=1时退出,而此时没有机会执行到循环体,因此一共执行了 49次循环体,所以最终输出的是 49个字符 *。 【知识模块】 基本控制结构 9 【正确答案】 B 【试题解析】 此题考查的是 for循环语句。执行循环语句,变量 i从 50递减,每次减 2,所以循环会执行 25次,输出
22、25个 *。 【知识模块】 基本控制结构 10 【正确答案】 D 【试题解析】 由题干可以知道,外层循环会进行两次,且第一次的结果我们可以不去理会和计算,读者仔细观察能发现,在第一次的循环以后 sum和 j都会被重新赋值,所以外层第二次循环如下: 此时 i=3, sum=3内层循环开始如下: j=3, j 6, sum=6; j=4, j 6, sum=10,j=5, j 6, sum=15, j=6退出内层循环。得到 sum=15。 【知识模块】 基本控制结构 11 【正确答案】 A 【试题解析】 因为 while循环中,因为 i的值等于 0,所以 while循环体一次也不执行。因而运行时输
23、出 “*”的个数是 0。 【知识模块】 基本控制结构 12 【正确答案】 C 【试题解析】 这段程序代码的功能是计算在 1 10(包括 10)之间偶数 i的个数,如果整数 i为偶数,则输出一个 *,共有 4个偶数,所以共输出 4个 *。 【知识模块】 基本控制结构 13 【正确答案】 D 【试题解析】 这道题目主要考查 for循环语句的语法。 for循环语句的语法格式如下: for(表达式 1;表达式 2;表达 式 3 )语句,在三个表达式都省略的情况下,其格式如下 for(; ),这时 for循环语句是一个死循环。 【知识模块】 基本控制结构 14 【正确答案】 C 【试题解析】 在主函数中
24、 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 【正确答案】 D 【试题解析】 变量 s1和 s2的初值都等于 23,那么在执行第一次 for循环时, *p的值等于 15,它小于 23,所以把 15赋给变量 s1;执行第二次 for循环时, *p的值等于
25、64,它大于 23,所以把 64赋给变量 s2;而数组 a中 a2后面的元素的值都大于 15,小于 64,因而变量 s1, s2的值不会再发生变化,最终值为15+64=79。 【知识模块】 基本控制结构 16 【正确答案】 C 【试题解析】 在这段程序中 for循环共执行 3次,每次循环 变量 i的值增 2,在执行第三次循环语句时,变量 s的值等于 25,大于 20而退出循环,此时再执行循环变量 i加 2运算,所以最后变量 i的值等于 7。 【知识模块】 基本控制结构 17 【正确答案】 A 【试题解析】 此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数
26、组的大小就由列表中元素的个数来确定。所以选项 A中数组只定义 3个元素,不符合题目。 【知识模块】 数组、指针与引用 18 【正确答案】 A 【试题解析】 本题主要是对字符数组的考查。选项 A中 a2为一个地址,所以不能用等号进行赋值操作。 【知识模块】 数组、指针与引用 19 【正确答案】 D 【试题解析】 因为一维数组 alT5的首地址是第一数组元素的地址,所以选项 D中,输出 *art的值就是数组 alT5中第一数组元素 1。其他选项都输出数组 nit5的第二元素 2。 【知识模块】 数组、指针与引用 20 【正确答案】 A 【试题解析】 函数 strlen(aa)返回字符串 aa中字符
27、的个数,不包括末尾的空字符。所以在内存空间创建字符数组 a时,需要字符数组的长度 是 strlen(aa)+1。 【知识模块】 数组、指针与引用 21 【正确答案】 B 【试题解析】 当数组声明时没有给出数组的大小,但是有初始化列表时,数组的大小就由列表中元素的个数来确定。对于选项 B定义数组 x时,没有给出数组的大小,初始化时只给出了一个元素 0。所以数组 x只包含一个元素为 0的元素。 【知识模块】 数组、指针与引用 22 【正确答案】 D 【试题解析】 由于字符 0作为字符串的结束标志,所以当从键盘上输入 “I love this game”时,只把字母 I输入字符 串 str。 【知识
28、模块】 数组、指针与引用 23 【正确答案】 C 【试题解析】 题目给出的字符串含有 7个字符,再加字符串的结束字符,所以共8个字符。 【知识模块】 数组、指针与引用 24 【正确答案】 D 【试题解析】 定义一维数组的一般格式为: 类型标识符数组名 常量表达式 ; 常量表达式的值表示元素的个数,即数组长度。常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说, C+不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的 值。 【知识模块】 数组、指针与引用 25 【正确答案】 D 【试题解析】 此题考查的是指针的使用。本题中,在给 *p赋值前,指针 p并没有指
29、向一个具体的对象。此时可以通过编译,但运行时由于 p中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。 【知识模块】 数组、指针与引用 26 【正确答案】 D 【试题解析】 此题考查的是常指针和指针常量的概念。常指针是指向一个常量的指针变量,指针自身的内容可以改变但指针指向的内容不可以改变:指针常量是一个常量,即不能修 改指针自身的内容,但可以通过指针修改其所指向的内容。 D选项中指针常量 point没有初始化,编译无法通过。 【知识模块】 数组、指针与引用 27 【正确答案】 B 【试题解析】 此题考查的是指针的运用。选项 A中, *p返回的是数组元素 a0的值,所以
30、最后结果是 1+9=10;选项 B是指针 p后移 8个单位位置处的值,即a8其值为 9;选项 C中表达式的值和选项 A相同;选项 D的值是一个地址值,该值无法确定。 【知识模块】 数组、指针与引用 28 【正确答案】 A 【试题解析】 此题考查 的是指针的赋值。题目中的语句 int, *p=&k;定义了一个 int类型的指针 p,并将变量 k的地址 &k赋给指针 p。所以等效语句是:int*p; p=&k;。 【知识模块】 数组、指针与引用 29 【正确答案】 B 【试题解析】 此题考查的是指针引用数组元素。 B选项中, a3是数组的第四个元素,即 7,其它选项的引用均可得到 5。 【知识模块
31、】 数组、指针与引用 30 【正确答案】 A 【试题解析】 对于 B来说,会造成溢出,对于 C和 D来说同样如此,因为“Hello-world!”一个是 12个字符组成,加上空字符一共 13个,所以都会造成溢出,只有 A是将字符串的地址赋给字符型指针。 【知识模块】 数组、指针与引用 31 【正确答案】 A 【试题解析】 指针变量声明的一般形式为:数据类型 *变量名,在选项A中, *放在变量名的后面。所以是错误的。 【知识模块】 数组、指针与引用 32 【正确答案】 A 【试题解析】 在语句 int x=100, &r=x;中声明 r初始化对 x的引用,所以 x和&r的值都是 100。 【知识模块】 数组、指针与引用 33 【 正确答案】 B 【试题解析】 字符指针 p所指向的字符串为 “abcdefg,所以函数 strlen(p)的值等于 7,再加 1,等于 8。 【知识模块】 数组、指针与引用 34 【正确答案】 A 【试题解析】 此题考查的是指针和引用。本题中,语句 是一条合法的引用声明语句,使得变量 i被 r引用;语句 通过引用 r将变量 j的值赋给变量 i;语句 声明了指针变量 p,并初始化指向变量 i;语句 中, *p代表了变量 i的值,要将&r赋给 *p,这会使编译器产生类型不符的错误提示。 【知识模块】 数组、指针 与引用
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1