前言

前天拿这个《C/C++工程师综合练习卷》练习了一下,现将错题以及精题分析总结。

错题分析与总结

2 . 下面的程序可以从1….n中随机等概率的输出m个不重复的数。这里我们假设n远大于m,填充空缺语句。

knuth(int n, int m)
{
srand((unsigned int)time(0));
for (int i = 0; i < n; i++) {
if ( ) {
cout << i << endl;
( );
}
}
}

A. rand()%(n-i) <= m m–

B. rand()%(n-i) < m m–

C. rand()%(n-i) >= m m++

D. rand()%(n-i) > m m++

分析:

总结:

3 . 以下prim函数的功能是分解质因数。括号内的内容应该为?

void prim(int m, int n)
{
if (m > n)
{
while ( ) n++;
( );
prim(m, n);
cout << n << endl;
}
}

A . ram/n m/=n

B . m/n m%=n

C . m%n m%=n

D . m%n m/=n

分析:分解质因数是将一个数差分为几个质数相乘,首先找到一个n可以被m整除,整除就是余数为0才能跳出循环,而如果只是做除法,只有当m < n的时候才会出现等于0。这与if的条件判断相互冲突。

答案:D

总结:错选C

7 . 下面关于虚函数和函数重载的叙述不正确的是?

A . 虚函数不是类的成员函数

B . 虚函数实现了C++的多态性

C . 函数重载允许非成员函数,而虚函数则不行

D . 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定

分析:虚函数是类内定义的成员函数,所以A的说法明显不对;

虚函数和函数重载都实现了C++的多态性,但是表现形式不同,函数重载调用根据参数个数、参数类型等进行区分,而虚函数则是根据动态联编来确定调用什么,故,BD说法正确;

函数重载既可以是类的成员函数也可以是非成员函数,比如:

int fun(int a);
int fun(int a, int b);

这就是非成员重载,但是虚函数就必须是成员函数,否则就会失效,所以C选项也是正确的。

答案:A

总结:错选了C

10 . 下面程序运行后的结果为?

char str[] = "glad to test something";
char *p = str;
p++;
int *p1 = static_cast<int *="">(p);
p1++;
p = static_cast<char *="">(p1);
printf("result is %s\n", p);

A . glad to test something

B . ad to test something

C . test something

D . to test something

分析:该题的关键是要认清楚强制类型转换后指针的类型,p的类型是char * , p++后p指向str数组的第二个元素,即字母l的位置。

p1的类型是int * , p1++后p1指向的位置增加4个细节,指向str数组中的第6个元素,即t的位置。

因此最后p的内容为“to test something“

答案:D

总结:错选B

13 . 在Java中,以下关于方法重载和方法重写描述正确的是?

A . 方法重载和方法的重写实现的功能相同

B . 方法重载出现在父子关系中,方法重写是在同一类中

C . 方法重载的返回值类型必须一致,参数项必须不同

D . 方法重写的返回值类型必须相同。(或是其子类)

分析:方法重载的返回值的类型可以不同,因为判断方法重载的方法主要是根据方法的参数不同来判定;方法重写的返回值类型需要相同,重写就是子类继承了父类的方法,并在此方法上重写属于自己的特征,既然是继承过来的,那么它的返回值类型就必须要相同。

答案:D

总结:错选C

16 . In the main() function, after ModifyString(text) is called, what’s the value of ‘text’?

int FindSubString( char* pch )
{
int count = 0;
char * p1 = pch;
while ( *p1 != '\0' )
{
if ( *p1 == p1[1] - 1 )
{
p1++;
count++;
}else {
break;
}
}
int count2 = count;
while ( *p1 != '\0' )
{
if ( *p1 == p1[1] + 1 )
{
p1++;
count2--;
}else {
break;
}
}
if ( count2 == 0 )
return(count);
return(0);
}
void ModifyString( char* pText )
{
char * p1 = pText;
char * p2 = p1;
while ( *p1 != '\0' )
{
int count = FindSubString( p1 );
if ( count > 0 )
{
*p2++ = *p1;
sprintf( p2, "%i", count );
while ( *p2 != '\0' )
{
p2++;
}
p1 += count + count + 1;
}else {
*p2++ = *p1++;
}
}
}
void main( void )
{
char text[32] = "XYBCDCBABABA";
ModifyString( text );
printf( text );
}

A . XYBCDCBABABA

B . XYBCBCDAIBAA

C . XYBCDCBAIBAA

D . XYBCDDBAIBAB

分析:FindSubString()中

用到了“回文段落跳过”

*p1 == p1[1] - 1,即看该字符串是不是递增的,即x后面是y,y后面是z,然后用count记录

*p1 == p1[1] + 1,即看该字符串是不是递减的,即z后面是y,y后面是x,然后用count2递减

若回文则返回 回文子串长度,若不回文则返回0

ModifyString()中

过滤XY,找到第一个回文字段的开始,即BCDCB 中的B,然后跨过回文段

到ABABA,进入FindSubString() 得 ABA,即count=1;

sprintf( p2, “%i”, count );把B换成1,即A1,然后 *p2++=*p1++ A1BAA

答案:C

总结:错选B,没仔细做,蒙的,汗颜。。。

19 . 下面程序运行时的输出结果是?

#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(int i = 0)
{
cout << i;
}
MyClass(const MyClass &x) //拷贝构造函数
{
cout << 2;
}
MyClass &operator=(const MyClass &x) //赋值构造函数
{
cout << 3;
return *this;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1), obj2(2);
MyClass obj3 = obj1;
return 0;
}

A . 11214444

B . 11314444

C . 122444

D . 123444

分析:首先程序中存在三个MyClass对象;

前两个对象构造时分别输出1,2;

第三个对象是这样构造的MyClass obj3 = obj1;这里会调用拷贝构造函数,输出2;

然后三个对象依次析构,输出444;

所以最终输出122444;

答案:C

总结:错选D

精题收藏

4 . 问x的值等于?

enum string{
x1,
x2,
x3=10,
x4,
x5,
} x;

A . 5

B . 12

C . 0

D . 随机值

分析:在C语言中,函数外变量定义相当于全局变量,程序初始化为0;函数内变量定义相当于局部变量,程序初始化为随机值。

答案:C

《C/C++工程师综合练习卷》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 关于协程:nodejs和golang协程的不同

    nodejs和golang都是支持协程的,从表现上来看,nodejs对于协程的支持在于async/await,golang对协程的支持在于goroutine.关于协程的话题,简单来说,可以看作是非抢占 ...

  2. 进程与线程(3)- python实现多线程

    参考链接: https://www.jianshu.com/p/415976668b97?utm_campaign=maleskine&utm_content=note&utm_med ...

  3. Codeforces Round #319 (Div. 2)

    水 A - Multiplication Table 不要想复杂,第一题就是纯暴力 代码: #include <cstdio> #include <algorithm> #in ...

  4. git导出代码

    1.快速查询 $git archive --format zip --output "./output.zip" master -0 ./output.zip 是生成的文件 mas ...

  5. SAMBA服务初学练习

    服务概述 Samba最先在Linux和Windows之间架起了一座桥梁,正是由于Samba的出现,我们可以在Linux和Windows之间实现文件共享的相互通讯,我们可以将其架设成一个功能非常强大的文 ...

  6. R 关于全局变量

    不得不吐槽了 写了这么多,竟然今天才发现R的全局变量在函数名空间里是不能赋值的,我去!!! 就是说在函数里面,全局变量名是可读的,但不可写(写的时候 又会创建新的 自由变量了)

  7. state vs props

    我们来一个关于 state 和 props 的总结. state 的主要作用是用于组件保存.控制.修改自己的可变状态.state 在组件内部初始化,可以被组件自身修改,而外部不能访问也不能修改.你可以 ...

  8. AJPFX关于hashmap和hashtable 的区别

    Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...

  9. AJPFX循环结构整理资料

    Java语言基础(循环结构概述和for语句的格式及其使用)* A:循环结构的分类        * for,while,do...while * B:循环结构for语句的格式:*           ...

  10. JavaScript中,有三种常用的绑定事件的方法

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...