笔试题集锦

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 100using 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;}
时间: 2024-10-07 18:12:26

笔试题集锦的相关文章

笔试题集锦(智力题)

一.简答题 1. 动态链接库和静态链接库的优缺点 2. 轮询任务调度和可抢占式调度有什么区别? 3. 列出数据库中常用的锁及其应用场景 二.算法设计题 1. 给定N是一个正整数,求比N大的最小"不重复数",这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数. 2. 设N是一个大整数,求长度为N的字符串的最长回文子串. 3. 坐标轴上从左到右依次的点为a[0].a[1].a[2]--a[n-1],设一根木棒的长度为L,求L最多

笔试题集锦(编程题)

1.已知数组a前半部分a[0,mid - 1],后半部分a[mid,num-1],现前半部分和后半部分均已排好序.要求:实现a数组的从小到大排序.空间复杂度为O(1). void MergeSort(int *v, const int len, const int mid)   {         int i, temp;       int left = 0, right = mid;          while (left < right && right < len) 

fpga笔试题集锦(血的教训)

1.名词解释: FPGA:现场可编程门阵列,一般工艺SRAM(易失性),所以要外挂配置芯片. CPLD:复杂可编程逻辑器件,一般工艺Flash(不易失). ASIC:专用集成电路 SOC:片上系统 SOPC:片上可编程系统 2.Verilog语法类: ①Verilog两大数据类型:一类是线网类型,另一类是寄存器类型. 线网类型表示硬件电路元件之间实际存在的物理连线,有很多种:wire.tri.wor等等,当然日常使用wire最多,其他的都没遇到过. 寄存器类型表示一个抽象的数据存储单元,只能在i

iOS基础笔试题集锦

1. #import和#include的区别? #import是指Objective-C导入头文件的语法,可以避免重复导入 #include是指C / C++导入头文件的写法,如果是Objective-C 与 C / C++实行混编,那么还是需要用#include进行导入, 这种写法,需要添加防重复引用的语法 [email protected]的作用 @class是 告诉编译器的某个类的申明,但是在.m文件中还是需要#import进来,它的作用只是前向申明

web前端校招笔试题集锦

写一个求和的函数sum,达到下面的效果 // Should equal 15 sum(1, 2, 3, 4, 5); // Should equal 0 sum(5, null, -5); // Should equal 10 sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1); // Should equal 0.3, not 0.30000000000000004 sum(

2019阿里巴巴面试题集锦(有答案哦),收藏!

来源商业新知网,原标题:[收藏]2019阿里巴巴面试题集锦(含答案) [导读] 本文是阿里巴巴 2019 面试题集锦(含答案),是阿里巴巴自身技术专家们结合多年的工作.面试经验总结提炼而成的面试真题.通过这些面试题,还可以间接地了解技术大牛们出题思路与考察要点. 想要入职大厂可谓是千军万马过独木桥. 要通过层层考验, 刷题 肯定是必不可少的. 为帮助开发者们提升面试技能.有机会入职阿里,云栖社区特别制作了这个专辑—— 阿里巴巴资深技术专家们结合多年的工作.面试经验总结提炼而成的面试真题 这一次整

SpringMVC面试题集锦(精选)

以下来自网络收集,找不到原文出处.此次主要为了面试准备收集,希望对大家有所帮助~~~~ 1. 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合. 2. SpringMVC的流程? (1)用户发送请求至前端控制器Disp

MyBatis面试题集锦(精选)

以下来自网络收集,找不到原文出处.此次主要为了面试准备收集,希望对大家有所帮助~~~~ 1. 简单谈一谈MyBatis? Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使得开发者只需要专注于SQL语句本身,而不用去关心注册驱动,创建connection等 Mybatis通过xml文件配置或者注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql进行映射成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).