首页 > 代码库 > 笔试题集锦
笔试题集锦
1.C++有哪些数据类型?为什么long和int都是4字节?
C++的数据类型有字符型(char)、布尔型(bool)、短整型(short)、整型(int)、长整型(long)、浮点型(float)、双精度型(double)等类型
首先并不是所有的long和int都是4字节的,在C++中规定int的长度是大于等于short的长度,小于等于long的长度,并且要大于2字节,在16位CPU以及单片机中,int是2字节的,而在32位CPU及以上的CPU中int是4字节的;
在C++中long的长度应该是大于等于int的长度,且最小为4字节,在32位CPU中long为4字节,在64位机上long为8字节长度
2.JAVA和C++的区别是什么?分别用在什么情景比较好?
Java 和 C++ 都是面向对象的语言,但他们也存在着一些区别
1、Java 不支持多继承
2、Java 没有指针和引用
3、c++ 需要程序员手动管理堆内存,Java有自动垃圾回收机制
Java运行在java虚拟机上,速度相对较慢,在实时性要求高的场合应该用c++
java通常在手机上应用的比较多。
JAVA和C++的区别是:
1 JAVA对内存的分配是动态的,它采用面向对象的机制,使用new为每个对象分配内存,程序运行过程中JAVA系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集,使得系统资源得以充分利用。 而C++使用new和delete来分配内存,内存的处理需要程序员自己来释放,如果对已释放的内存再释放或者对未内分配的内存做释放,都会造成死机,如果对长期不用或不再使用的内存长期不释放,造成资源的浪费。
2 JAVA不 在所有类之外定义全局变量,而是在某个类中定义一种公共静态的变量来完成全局变量的功能;
3 JAVA不支持头文件,而C++使用头文件来定义类的原型、全局变量、库函数等;
4 JAVA不支持宏定义,使用关键字final来定义常量,在C++中则采用宏定义来实现常量定义
5 JAVA对每种数据类型都分配固定长度,而C++中对于不同平台,同一种类型分配不同的字节数
6 类型转换不同,JAVA在运行时系统对对象的处理要进行类型相容性检查,以防止不安全类型的转换,而C++中可以通过指针进行任意类型转换,常常带来不安全性。
7 结构和联合的处理不同,C++中结构和联合的所有成员均为公有,这就带来了安全性问题,而在JAVA中根本不存在结构和联合,所有的内容都封装在类里面。
8 JAVA不再使用指针,而C++中指针使用最灵活,蛋液最容易产生错误的数据类型,由指针多进行的内存地址操作常会造成不可预知的错误,同事通过指针对某个内存地址进行显示类型转换后,可以访问一个C++中的私有成员,从而破坏安全性,而JAVA对指针进行完全控制,程序员不能进行任何指针操作。
3.编程题:给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对。
#include"iostream"
#include"string"
#define MAX 100
using namespace std;
bool check(string str1,string str2)
{
bool flag = true;
for(int i=0; i<str1.length(); i++)
{
if(str1[i]!=str2[str1.length()-1-i])
{
flag = false;
return flag;
}
}
return flag;
}
int main(int argc, char* argv[])
{
string str[MAX];
int n,a[MAX];
bool flag[MAX];
cin>>n;
for(int i=0; i<n; i++)
{
cin>>str[i];
a[i] = str[i].length();
flag[i] = true;
}
int num = 0;
for(int i=0; i<n; i++)
{
int len = a[i];
if(flag[i]==true)
{
for(int j=0;j<n;j++)
{
if(flag[j]==true&&len==a[j])
{
if(check(str[i],str[j]))
{
num++;
flag[i] = false;
flag[j] = false;
break;
}
}
}
}
}
for(int i=0; i<n; i++)
cout<<str[i]<<‘\t‘;
cout<<endl;
cout<<"The Number of Matched String Is: "<<num<<endl;
return 0;
}
4.给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
void shudu() { const int n=3; int a[n][n]={0}; int i,j; i=0; j=n/2; a[i][j]=1; for(int c=2;c<=n*n;c++) { if (i-1>=0&&j+1<n) { if (a[i-1][j+1]==0) { i=i-1; j=j+1; } else { i=i+1; } } else { if (i-1<0&&j+1>=n) { i=i+1; } else { if (j+1>=n) { i=i-1; j=j+1-n; } else { j=j+1; i=i-1+n; } } } a[i][j]=c; } for (i=0;i<n;i++) { for (j=0;j<n;j++) { std::cout<<a[i][j]<<" "; } std::cout<<std::endl; } } |
5.C和C++有什么区别,能用C实现C++所有功能吗?C能实现多态吗?
原本的作业是批处理,也就是过程编程。缺点是不利于代码修改和重用。为了解决这个问题,出现了C语言的函数,实现结构化编程。
随着项目愈发的庞大,函数与函数间的逻辑关系愈发复杂,不利修改。另外,算法中逻辑步骤是一样的,但针对不同的数据类型,需要重写一遍。为了解决这个问题,出现了C++语言的class,实现面向对象编程。以及C++语言的模板,实现范式编程。
所以C实现结构化编程,C++实现结构化编程、面向对象编程和范式编程。
C++实现面向对象编程和范式编程,背后需要编译器提供相应的机制支持。这个机制支持本质是逻辑的,理论上,C语言能够模拟这套机制,也就是说理论上用C实现C++所有功能。但工作量会特别大,即实用角度看,用C不能实现C++所有功能。
C能实现多态。C++实现多态,是建一个表格,存储多态相关的函数指针,运行时根据调用对象的类型选择相应的函数。C语言可以模拟这个原理实现多态。
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
对语言本身而言,C是C++的子集, C实现了C++中过程化控制及其它相关功能,而在C++中的C,相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。
要用C模拟C++的多态性,可定义同一种函数指针类型和函数指针,运行过程中根据需要给函数指针赋函数地址。可以使用void *实现。
6.请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
#include <iostream>
#include <cstring>
using namespace std;
class String{
public:
// 默认构造函数
String(const char* str = NULL);
// 复制构造函数
String(const String &str);
// 析构函数
~String();
// 字符串连接
String operator+(const String & str);
// 字符串赋值
String & operator=(const String &str);
// 字符串赋值
String & operator=(const char* str);
// 判断是否字符串相等
bool operator==(const String &str);
// 获取字符串长度
int length();
// 求子字符串[start,start+n-1]
String substr(int start, int n);
// 重载输出
friend ostream & operator<<(ostream &o,const String &str);
private:
char* data;
int size;
};
// 构造函数
String::String(const char *str){
if(str == NULL){
data = new char[1];
data[0] = ‘\0‘;
size = 0;
}//if
else{
size = strlen(str);
data = new char[size+1];
strcpy(data,str);
}//else
}
// 复制构造函数
String::String(const String &str){
size = str.size;
data = new char[size+1];
strcpy(data,str.data);
}
// 析构函数
String::~String(){
delete[] data;
}
// 字符串连接
String String::operator+(const String &str){
String newStr;
//释放原有空间
delete[] newStr.data;
newStr.size = size + str.size;
newStr.data = new char[newStr.size+1];
strcpy(newStr.data,data);
strcpy(newStr.data+size,str.data);
return newStr;
}
// 字符串赋值
String & String::operator=(const String &str){
if(data == str.data){
return *this;
}//if
delete [] data;
size = str.size;
data = new char[size+1];
strcpy(data,str.data);
return *this;
}
// 字符串赋值
String& String::operator=(const char* str){
if(data == str){
return *this;
}//if
delete[] data;
size = strlen(str);
data = new char[size+1];
strcpy(data,str);
return *this;
}
// 判断是否字符串相等
bool String::operator==(const String &str){
return strcmp(data,str.data) == 0;
}
// 获取字符串长度
int String::length(){
return size;
}
// 求子字符串[start,start+n-1]
String String::substr(int start, int n){
String newStr;
// 释放原有内存
delete [] newStr.data;
// 重新申请内存
newStr.data = new char[n+1];
for(int i = 0;i < n;++i){
newStr.data[i] = data[start+i];
}//for
newStr.data[n] = ‘\0‘;
newStr.size = n;
return newStr;
}
// 重载输出
ostream & operator<<(ostream &o, const String &str){
o<<str.data;
return o;
}
本文出自 “小止” 博客,请务必保留此出处http://10541556.blog.51cto.com/10531556/1847398
笔试题集锦