编程模拟题-五级C++ 1 / 45 以下对字符串的函数描述错误的是( )。 A. splice(1,3) 用于删除或添加元素 B. strcpy(s1,s2) 用于复制字符串s2到字符串s1 C. strlen(s) 用于返回字符串s的长度 D. strchr(s, h) 用于返回字符h在字符串s中第一次出现的位置 本题从处理字符串时常用的几个函数的理解与应用方向考察学生编程操作能力。其中splice(1,3)并非字符串操作函数,而是在C++中处理数组和向量时使用的,它可以在数组或向量中插入或删除元素。因此,正确答案选A。 2 / 45 下列程序最终输出结果为( )。 A.-1 B.0 C.1 D.-2 本题从字符串的比较方法方向考察学生编程操作能力。strcmp函数用于比较两个字符串。该函数将比较两个字符串的ASCII代码值,直到两个字符串的字符不同或者遇到null字符为止。其返回的值为:如果str1 < str2,返回值 < 0。如果str1 == str2,返回值等于0。如果str1 > str2,返回值 > 0。在这里,比较的是字符数组a和b的内容。”job”和”hi”的第一个字符对应的ASCII码值分别为’j’和’h’,由于ASCII值的大小顺序为 ‘h’ < ‘i’ < ‘j’,所以”job” > “hi”,所以strcmp(a, b)的返回值 > 0因此,正确答案选C。 3 / 45 关于下列程序,打印的n值是( ) A.5 B.10 C.2 D.undefined 本题从变量作用域方向考察学生编程操作能力。在这个程序中,有三个名为’n’的变量,它们分别在全局作用域、函数fn内部,以及函数main内部定义。main函数内的n变量被赋值为2,在fn函数执行过程中并不会改变main函数内n变量的值。fn函数内部定义的n变量和全局的n变量同样不会改变main函数内部n变量的值,因为它们的作用域不同。因此,fn函数执行完毕后,即使在其内部更改了其自身作用域的n变量值,也不会影响main函数内部n变量的值。所以,打印的n值应该是main函数中的n值,也就是2。因此,正确答案选C。 4 / 45 以下关于数字类型内置函数的描述,正确的是( ) A. sin() 函数返回弧度角的余弦 B. sqrt() 函数返回参数的平方根 C. abs() 函数返回整数的取反值 D. floor() 函数返回参数的最小整数 本题从对内置函数的功能理解方向考察学生编程操作能力。sqrt() 是返回参数的平方根,而不是sin()返回弧度角的余弦,abs()返回整数的绝对值,而不是取反值。floor()返回不大于参数的最大整数,而不是最小整数。因此,正确答案选B。 5 / 45 下列程序输出结果是?( ) A. "" B. hello C. helloworld D. worldhello 本题从字符串处理函数方向考察学生编程操作能力。在这段代码中,函数strcat(a, b)是将字符串b连接到字符串a的尾端,所以字符串a经过连接后的内容为”worldhello”。可以看到,cout用于打印字符串a的内容,所以这个程序最终将输出字符串a的新内容,即”worldhello”。因此,正确答案选D。 6 / 45 如下有一段代码,请给m初始化一个值,使得程序输出suc。( ) A.2 B.4 C.1 D.3 本题从程序执行和数值推理方向考察学生编程操作能力。在这段代码中,循环输出了字符串str中的前len-m个字符。让我们首先分析一下,str的长度为7。我们希望输出”suc”,这意味着我们只需要前三个字符。因此,我们需要将m设置为使得len – m等于3。如果len为7,只有当m为4 ((7-4)=3),循环才能输出前三个字符(即”suc”)。因此,将m初始化为4时,程序将按照要求输出”suc”。因此,正确答案选B。 7 / 45 判断字符串s1是否大于字符串s2的是( ) A. if(s1 > s2) B. if(strcmp(s1, s2)) C. if(strcmp(s1, s2) < 0) D. if(strcmp(s1, s2) > 0) 本题从条件语句编写方法方向考察学生程序应用能力。在C++中,s1 > s2不能比较字符串大小,应该使用strcmp函数。strcmp(s1, s2)函数是比较两个字符串的ASCII值,如果s1大于s2,那么返回值大于0,所以应整理为if(strcmp(s1, s2) > 0)。因此,正确答案选D。 8 / 45 请选择对66转换二进制后正确的选项( ) A. 反码是 10111101 B. 补码是 01000010 C. 源码是 01000100 D. 补码是 01000001 本题从基数转换以及计算机内二进制表示的理解和应用方向考察学生知识认知能力。66转换成二进制为1000010,反码和补码都适用于负数。正数的反码和补码与原码相同。因此,正确答案选B。 9 / 45 办公室共有4杯水,有三位老师需要分别选择一杯水,有几种选择方案?( ) A. 12种 B. 3种 C. 24种 D. 120种 本题从逻辑推理方向考察学生逻辑思维能力。如果办公室有4杯水,而有3位老师需要分别选择一杯水,那么有432=24种选择方案,这是一个排列问题。因此,正确答案选C。 10 / 45 二进制数 00011001 和 00011110 相加后的反码是多少?( ) A. 00100110 B. 01001100 C. 00110111 D. 11001000 本题从二进制数的和的计算方法方向考察学生编程操作能力。我们只需对应位相加,如有进位则进位。00011001 和 00011110 相加结果是 00110111。因为是正数,其反码就与结果相同,即 00110111。因此,正确答案选C。 11 / 45 定义如下变量 int m = 6,n = 1; 那么 m >>n的值是?( ) A.3 B.0 C.2 D.6 本题从位运算符的使用方法方向考察学生编程操作能力。’>>’是右移运算符,将数字的二进制形式向右移动指定的位数。比如6的二进制形式是110,向右移动1位后变成11,也就是3。因此,正确答案选A。 12 / 45 下列程序最终输出结果为( ) A.报错 B.hello-world C. world-hello D. hello world 本题从对于C++字符串处理函数以及输出的理解和操作方向考察学生编程操作能力。在这段程序中,首先创建了三个字符数组a, b和c,并对a和b进行初始化。然后将a的内容(”world”)复制给c,接着将b(”hello”)的内容复制给a,最后又将c(”world”)的内容复制给b。所以在最后的输出中,a的内容已经被替换为”hello”,而b的内容已经被替换为”world”。因此,程序最后的输出结果为”hello-world”。因此,正确答案选B。 13 / 45 有关算法的描述,正确的是( ) A. 算法主要考虑时间复杂度、空间复杂度两个层面 B. 时间复杂度用大T表示 C. 空间复杂度用大S表示 D. 算法可以不考虑时间复杂度和空间复杂度 本题从对算法的认识和理解方向考察学生知识认知能力。算法的性能主要考虑时间复杂度和空间复杂度,时间复杂度的度量方法常用大O表示,空间复杂度用大O或者其他符号表示。因此,正确答案选A。 14 / 45 以下程序输出的m值是多少?( ) A. 10 B. 5 C. 0 D. 报错 本题从对于变量作用域和全局变量、局部变量的理解和应用方向考察学生编程操作能力和程序应用能力。根据C++的作用域规则,局部变量的生命周期仅限于其所在的代码块。而全局变量在整个程序运行期间都有效。在这个程序中,全局变量m被初始化为10,局部变量m被初始化为5。然后用cout输出m的值,此时由于局部变量的优先级高于全局变量,即在有局部变量和全局变量同名的情况下,局部变量将会覆盖全局变量,所以程序会输出局部变量m的值。因此,正确答案选B。 15 / 45 cout << isalpha('n'); 返回值是( ) A. 大于0的值 B. 0 C. True D. N 本题从函数用法方向考察学生编程操作能力。isalpha()函数用来判断参数是否为字母,如果参数是字母的话,则函数返回一个大于0的值。因此,正确答案选A。 16 / 45 字符串比较函数 strcmp 用于比较两个字符串是否相等,他比较的原理是什么?( ) A. 比较长度 B. 比较次数 C. 比较ASCII码 D. 比较二进制 本题从字符串操作的原理理解向考察学生编程操作能力。strcmp函数用于比较两个字符串是否相等。它首先从两个字符串的第一个字符开始比较,如果都相同则比较下一个字符,直到有字符不同或者字符串结束。其比较原理是通过比较每个字符的ASCII码值来确定。因此,正确答案选C。 17 / 45 按照 “FIFO”原则组织数据的结构是( ) A. 栈 B. 链表 C. 堆 D. 队列 本题从数据结构的特性方向考察学生编程操作能力。按照 “FIFO”(First In, First Out,即先进先出)原则组织数据的数据结构是队列(Queue)。队列可以让元素在一端添加,在另一端移除。因此,正确答案选D。 18 / 45 面向对象特点不包括( )。 A. 封装 B. 继承 C. 扩展 D. 多态 本题从面向对象编程的知识方向考察学生编程操作能力。关于面向对象编程(OOP)的特点,最经典的三个特性是封装、继承、多态,所以不包括C. 扩展。虽然扩展或者叫扩充是OOP编程时经常需要进行的操作,但它并不是OOP的核心特性之一。因此,正确答案选C。 19 / 45 下列不可能是代码打印结果的是( ) A.1 B.3 C.0 D.9 本题从for循环的使用方法方向考察学生编程操作能力。这段代码中,i是从0开始,每次循环增加3,这样打印出来的i依次会是0,3,6,9,直到i不小于10为止。因此,正确答案选A。 20 / 45 以下方法可以实现输入的是( )。 A. print() B. return C. scanf() D. log() 本题从输入函数的使用方向考察学生编程操作能力。scanf() 是在 C 语言和 C++ 语言中读取格式化的输入的函数。因此,正确答案选C。 21 / 45 以下函数声明正确的是?( ) A. int add(int a, int b); B. int add(a, b); C. int add(int a, b = 10); D. int add(a = 10, b = 2); 本题从函数声明的语法方向考察学生编程操作能力。正确的函数声明应该包括返回类型,函数名以及括号内的参数列表,参数列表应该包括参数的类型和名称。因此,正确答案选A。 22 / 45 下面程序运行后,输出结果为( ) A. 10 9 8 7 6 5 B. 9 6 3 0 C. 8 6 4 2 0 D. 9 7 5 3 1 本题从循环逻辑和分支逻辑方向考察学生编程操作能力。代码逻辑是这样的:首先设置了一个变量x值为10,然后进入一个while循环,只要x不为0,就会进入循环。在循环中,首先会让x的值减1,然后判断减1后的x是否能被3整除,即x%3的结果是否为0。如果x%3的结果不为0(也就是说x不能被3整除),则执行’continue’,即跳过后面的语句,直接开始下一次循环。如果x%3的结果为0(也就是说x能被3整除),则打印x的值。所以,从x=10开始,每次都减1,只有在x的值为9, 6, 3, 0时,x能被3整除,所以这四个值会被打印出来。因此,正确答案选B。 23 / 45 算法的时间复杂度是指( ) A. 执行算法所需要的空间 B. 执行算法需要的变量 C. 执行算法需要的运算次数 D. 算法的代码量 本题从算法的时间复杂度定义方向考察学生知识认知能力。时间复杂度是对一个算法在运行过程中临时存储空间需求量的度量,它在算法分析中表示的是执行算法需要的运算次数。因此,正确答案选C。 24 / 45 有一个字符串数组 char a22 = {“a”,”b”,”c”,”d”,”e”},如何输出字母c?( ) A. cout << a2200 << endl; B. cout << a1100 << endl; C. cout << a2211 << endl; D. cout << a1111 << endl; 本题从字符串数组的索引方法方向考察学生编程操作能力。在这个例子中,字符c位于第2位置的数组下,且为该数组的第0位置,故输出语句应为cout << a2200 << endl;因此,正确答案选A。 25 / 45 下列选项中可以对初始化二维数组 a 简化的是( )。 A. int a3344 = (0,1,2,3,4,5,6,7,8,9,10,11) B. int a3344 = {0,1,2,3,4,5,6,7,8,9,10,11} C. int a = (0,1,2,3,4,5,6,7,8,9,10,11) D. int a = {0,1,2,3,4,5,6,7,8,9,10,11} 本题从二维数组的写法方向考察学生编程操作能力。在C++中初始化一个二维数组有多种写法。对于这段代码中的二维数组a,可以使用一维数组的形式进行初始化,数组所有元素按照行主序依次存入数组中,且无需写出每行的花括号。因此,正确答案选B。 26 / 45 下列能将字符变量s中的小写字母转换成大写字母的操作是( ) A. s = S B. s.toUpperCase() C. s = s + 32 D. s = s — 32 本题从字符变量大小写转换方法方向考察学生编程操作能力。对于C++程序来说,字符变量s中的小写字母转换为大写字母应该用 ASCII 表来进行转换。在 ASCII 表中,小写字母比大写字母大32,所以减去32可以将小写字母转换为大写字母。因此,正确答案选D。 27 / 45 十进制 -35的补码是多少?( ) A. 11011110 B. 11011101 C. 00110011 D. 00111010 本题从对补码的理解方向考察学生知识认知能力。,补码是用于表示计算机中的负数的常用方法。对于一个十进制数-35,我们首先找到它的正数形式(即35)的二进制表示,然后取这个二进制数的反码(也就是将所有的1换成0,所有的0换成1),最后在反码的基础上加1得到补码。因此,-35的二进制补码为11011101。因此,正确答案选B。 28 / 45 以下声明数组的方式正确的是?( ) A. let arr = ; B. var arr = {}; C. int arr; D. int arr1010; 本题从数组声明的语法掌握方向考察学生编程操作能力。C++中,数组的声明应该包括类型、数组名称以及方括号内的元素个数。因此,正确答案选D。 29 / 45 定义整形m,int m = 1;下列选项能输出2的是?( ) A. cout << +m; B. cout << m++; C. cout << ++m; D. cout << m==1; 本题从基本操作符的掌握方向考察学生编程操作能力。选项A, cout << +m; 的输出为m的原始值1,"+"运算符并不会改变m的值。选项B, cout << m++; 这个选项会先输出m的原始值1,然后才对m进行递增操作。这是由于"m++"是后置递增运算符,它首先返回m的当前值,然后再增加m。选项C, cout << ++m; 这个选项会先对m进行递增操作,然后输出递增后的m。因为"++m"是前置递增运算符,它首先增加m,然后返回m的值。所以,这个选项会输出2。选项D, cout << m==1; 是一个比较操作,检查m的值是否为1。因为m的原始值是1,所以这个比较是真,C++中真的值为1,这个选项会输出1。因此,正确答案选C。 30 / 45 循环语句 while( a > b) { a–}; 等价于( ) A. if(a > b) { a = 1} B. if(a > b) { a — } C. for(; a > b; a –) D. for(a > b){a —} 本题从循环语句的编写规则方向考察学生编程操作能力。循环语句while(a > b){ a– } 等同于for循环for(; a > b; a –)。这两种结构在满足条件a > b 时都会执行a的递减运算。因此,正确答案选C。 31 / 45 在一个顺序表(1,3,4,6,8,9,12,20,22)中,用二分查找9,需要比较几轮?( ) A.3 B.4 C.5 D.6 本题从二分查找的算法应用方向考察学生编程操作能力。在二分查找中,每一轮都将剩余的搜索区间分为两部分。对于给定的顺序表,首先确定中间元素6,然后比较需要查找的元素9,因为9大于6,所以在第二轮中只需要查看6右边的部分。在第二轮中,又次确定中间元素12,此时9小于12,所以在第三轮中需要查找12左侧的部分。在第三轮中,只剩下一个元素9,与需要查找的元素相同。因此,总共需要比较3轮。因此,正确答案选A。 32 / 45 观察以下程序,如果想输出4该如何修改程序?( ) A. a 的初始值赋值为3 B. 判断条件改成 a > b C. b + 1 改成 b + 3 D. b的初始值赋值为4 本题从方向考察学生编程操作能力。在这个程序中,使用了C++的条件运算符(?:),这个表达式的格式是 (条件) ? 表达式1 : 表达式2 。如果条件为真,表达式将值设为表达式1的结果,如果条件为假,表达式将值设为表达式2的结果。当前的代码是 cout <<(a<b?a*a:b+1);这段代码的含义是:如果a小于b,那么输出a的平方,否则输出b+1。由于当前a在这个条件下小于b,所以结果是a的平方,也就是 -1*-1 = 1。选项B,如果将判断条件更改为a>b,那么在现有的a和b值下(即a=-1,b=3),判断条件将为假,因此结果将是b+1,即4。因此,正确答案选B。 33 / 45 下列语句描述中,正确的是?( ) A. break 语句不影响循环体内部执行逻辑 B. continue 语句不影响循环体内部执行逻辑 C. continue 语句会立即终止当前循环 D. break 语句在循环体中,可以立即终止循环 本题从流程控制语句的理解方向考察学生编程操作能力。break语句在循环体中可以立即终止循环。continue语句会立即终止当前循环的剩余部分,并判断是否进行下一次循环。因此,正确答案选D。 34 / 45 下列表达式值最小的是?( ) A. 5 | 5 B. 5 ^ 5 C. 5 + 5 D. 5 * 5 本题从对于位运算以及基本运算符的使用和理解方向考察学生知识认知能力。在C++中,’|’是按位或运算,’+’是加法运算,’*’是乘法运算,’^’是异或运算。我们一一进行运算。选项A,按位或运算,结果是5。选项B,异或运算,结果是0。选项C,加法运算,结果是10。选项D,乘法运算,结果是25。根据题干要求,正确答案选B。 35 / 45 小明想将hello放入一个数组中,下列选项正确的是?( ) A. int arr = "hello" B. char arr44 = 'hello' C. char arr55 = "hello" D. int arr55 = "hello" 本题从数组初始化的语法掌握方向考察学生编程操作能力。字符串”hello”含有5个字符以及一个结束字符’