《C/C++专项练习》— (1)
前言
每每到了一周之计的Monday啊,精神总是不佳,写篇博客提提神儿吧~
继上次完成《C/C++工程师综合练习卷》后,有事儿没事儿就想刷几道题,赶脚不错,巩固了不少基础知识呢,要坚持哦~
C/C++专项练习(1)
完成时间:2015-06-06 21:49
题目总量:10
做题时间:20m
正确率:8
C/C++专项有好多百道题目呢,是巩固编程语言基础的好去处。
专项练习考察的都是程序设计内的细节问题,其中很多C逻辑运算的题目、求代码段输出结果的题目、C++面向对象题目等等。
错题分析总结
1 . 下列代码编译时会产生错误的是()
#include <iostream>
using namespace std;
struct Foo {
Foo() {}
Foo(int) {}
void fun() {}
};
int main(void) {
Foo a(10); //语句1
a.fun(); //语句2
Foo b(); //语句3
b.fun(); //语句4
return 0;
16.
}
A. 语句1
B. 语句2
C. 语句3
D. 语句4
分析:这道题目考察的是结构体,代码段中定义了结构体类型Foo,其中包含了2个Foo的构造函数,以及一个foo()的普通函数。
在main中,语句1 定义了一个名为a的Foo对象,它将调用Foo(int ){} 这一构造函数,正确;
语句2中,使用对象a调用结构体成员函数fun(),没有问题;
语句3中,这是这一题目的关键所在,乍一看,貌似定义了一个名为b的结构体对象,但是仔细斟酌下,哪有这种形式定义对象呢?这好像是一个函数的声明形式,返回值为Foo对象,函数名为b,但是main函数内部还可以声明函数吗?查阅资料发现,还真的是可以,这牵涉的是作用域的问题,在不同的地方声明,那作用域也就不同,那么在main里边声明也就只能在main函数里起作用(函数内声明叫局部声明,反之在函数外部声明就叫全局声明)。所以说这一条语句也是没有问题的。
语句4中,既然语句3没有问题,是一个局部函数的声明,那也就不存在名为b的Foo对象了,所以该语句一定会编译出错!
答案:D
总结:错选C,知识面存储不够
3 . 下面程序的输出结果是()
char *p1= “123”, *p2 = “ABC”, str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str;
A. xyz123ABC
B. z123ABC
C. xy123ABC
D. 出错
分析: 这道题目考察的并不是你的字符串连接、复制的处理能力,而是你知不知道char *定义字符串常量。题目中定义的p1 和 p2 均是字符串常量,是只读的,所以答案就很显然了。
关于字符串常量与变量的问题,介绍如下:
从一般实现方式来看:
char s[]=”abcd”;——s为局部变量(自动变量或寄存器变量)时具有自动存储期,放在运行期内存的栈中;s为全局或局部静态变量时具有静态存储期,放在内存的静态区;字符串字面量”abcd”具有静态存储期,放在文字常量区。这里,对象”abcd”作为一个右值用来初始化对象s,两者不是同一回事。
char* s = “abcd”;(这种用法在C++中为deprecated,应使用const char* s = “abcd”;代替)——按指针引用s和“abcd”和”abcd”时视为引用同一个对象(作为一元&和sizeof的操作数等左值语义上下文中时则不同),一般放在文字常量区。
文字常量区是只读的,而且更改字面量本身语义是不明确的,因此C++把字符串字面量视为字符串常量,禁止通过指针更改字面量本身。但是基于为了兼容旧代码等原因,ISO C标准中,更改字符串字面量的行为是未定义的,尽管具体的编译器可能把字符串字面量作为常量处理。
答案:D
总结:错选C, 看到题目,想都没想就傻傻的算起来了,不仅浪费了时间,还做错了题目!
精题收藏
5 . 下列代码的输出为:
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for (itor = array.begin(); itor != array.end(); itor++)
{
if (*itor == 300)
{
itor = array.erase(itor);
}
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}
A. 100 300 300 500
B. 100 300 500
C. 100 500
D. 程序错误
分析:考查C++标准库中的容器vector,vector 的erase函数 删除指定位置的元素时, 返回值是一个迭代器,指向删除元素下一个元素。删除第一个300后,itor指向其后的300,然后执行itor++,指向了500。
9 .在80X86架构下,输出什么值?
union Test
{
char a[4];
short b;
};
Test test;
test.a[0]=256;
test.a[1]=255;
test.a[2]=254;
test.a[3]=253;
printf("%d\n",test.b);
A. -128
B. -256
C. 128
D. 256
分析:首先要知道大小端模式,80X86下是小端模式;当然可以编写下测试就可以了,short占2个字节,设左高地址,右低地址;
a[1] a[0]
1111 1111 0000 0000
short占用的是这a[1]、a[0]两个字节,最高位是1是一个负数,在计算机中采用补码表示,那么二进制表示为:1000 0001 0000 0000,转化为十进制就是-256。
10 . 在32位机器中,如下代码的输出是?
void example(char acWelcome[]){
printf("%d",sizeof(acWelcome));
return;
}
void main(){
char acWelcome[]="Welcome to Huawei Test";
example(acWelcome);
return;
}
A. 0
B. 4
C. 23
D. 24
分析: 此题考查sizeof()的使用,注意与strlen的区别。参考sizeof的百科知识
《C/C++专项练习》— (1)的更多相关文章
- 1<<33这种写法是错的!!!
1<<33不能这么写,1默认int类型,应该改为(long long)1<<33
- mysql 5.6.33 重置密码后报错
[root@ Desktop]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; o ...
- 【C语言】++(a++)的写法是错的
http://bbs.csdn.net/topics/390764053 a++得到的是一个右值,++操作需要的是一个左值. ------------------------------------- ...
- [C语言]易错知识点、小知识点复习(1)
1. 计算机只能识别由0和1组成的二进制指令,需要将用高级语言(如C.C++)编写的源程序(.c..cpp)编译成二进制目标文件(.obj).一个程序可以根据需要写在不同的文件里,编译是以文件为单位进 ...
- js自执行函数的几种不同写法的比较
经常需要一个函数自执行,可惜这一种写法是错的: function(){alert(1);}(); 原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从 ...
- 菜鸟的Xamarin.Forms前行之路——从新建项目到APP上架各种报错问题解决方法合集(不定时更新)
出自:博客园-半路独行 原文地址:http://www.cnblogs.com/banluduxing/p/7425791.html 本文出自于http://www.cnblogs.com/banlu ...
- django migrate报错:1005 - Can't create table xxx (errno: 150 "Foreign key constraint is incorrectly formed")
自从mysql升级,以及使用mariaDB以来,很多不曾更新django中model的外键, 今天,按以前的思路写完外键之后, migrate命令报错: 1005 - Can't create tab ...
- 《C++primer》v5 第2章 变量和基本类型 读书笔记 习题答案
2.1 int,long long ,short 可表示范围和占用内存空间不同.具体与计算机有关. 无符号类型只能表示0和正数,带符号类型可以表示负数,0,正数. float是单精度,一般占用4个字节 ...
- Go第七篇之规范的接口
接口本身是调用方和实现方均需要遵守的一种协议,大家按照统一的方法命名参数类型和数量来协调逻辑处理的过程. Go 语言中使用组合实现对象特性的描述.对象的内部使用结构体内嵌组合对象应该具有的特性,对外通 ...
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
随机推荐
- morphia(2)-添加
1.简单 @Test public void add() throws Exception { final Employee em = new Employee("遥远2",500 ...
- Hibernate、Spring和Struts工作原理及使用理由
1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭Sesst ...
- JAVA设计模式之策略模式 - Strategy
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...
- webpack入门之最简单的例子 webpack4
webpack在目前来说应该是前端用的比较多的打包工具了,那么对于之前没有接触过这块的该怎么办呢?答案很明显嘛,看资料,查文档,自己去琢磨,自己去敲一敲,跑一跑: 那么,这边我将以一个最基础的例子来将 ...
- GetClassName 取得的类名有
今天上午稍微跟踪了一下自己的项目里面的各个空间,得知GetClassName可以取到以下类名:Static\Edit\Button\ComboBox\msctls_trackbar32\SysTabC ...
- kettle数据同步方法
1.实时性要求不高,采用全删全插的方式(适合于维度表.大数据量表) 2.有时间维度,直接从事实表同步的数据,可以采用根据时间字段进行筛选,增量同步.这个网上有很多例子,就不重复写了. 3.没有时间维度 ...
- ubuntu kylin 13.10 无法安装ia32-libs解决方案
1.安装 Synaptic 2.sudo apt-get install synaptic 3.进入synaptic ,设置->软件库 4.点击 其他软件->添加 5.输入“deb ht ...
- C++通讯录
C++通讯录1.0 历时一天,终于把通讯录写好了. 项目要求: 编写一个通讯录管理程序. 有一已存在的通讯录文件,数据内容为各联系人信息. 每个联系人信息的组成部分为: 姓名.电话号码和住址 等个人基 ...
- AppCrawler自动化遍历使用详解(版本2.1.0 )(转)
AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击. 优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...
- win10文件共享的实现
1)启动网络发现 打开网络共享中心->更改高级共享设置->修改如下 2)如果需要其他客户端无密码访问 修改如下: 3)如果打算使用Guest访问 用户帐户->管理帐户 ...