zoukankan      html  css  js  c++  java
  • C/C++程序员面试宝典(一)

    基本数据类型
    1、基础数据类型分为三种:整数型、浮点型和void型。(任何表达式都是可转换为void类型的)
    2、整型:表示整数、字符和布尔值的算术类型。
         包括short、int、long、char、bool等
    3、绝对值小于1的浮点数,其小数点前面的0可以省略,例如,0.22可写为.22。
    4、常量:整型常量、浮点型常量、字符型常量、字符串常量、转义字符常量()、地址常量(&)
    5、常量是不可以改变值的量,变量是可以改变值的量;
    常量在定义时必须初始化,变量在定义时可以暂不进行初始化;
    常量不可以寻址,它的地址不允许赋值给非常量指针,变量可以寻址;
    常量有相对较高的编译执行效率(以立即数形式编译进指令)。

    int main()
    {
    	const char a; //error
    	const char a = 't'; //OK,如果是对指针变量初始化,最好是通过取其它变量的地址
    	a = 's'; //error
    	
    	char p;
    	p = 'u'; //OK
    	a = p; //error
    	
    	int b;
    	int *c = &b; //OK
    	const int d = 1;
    	int *e = &d; //error
    
    	return 0;
    }
    

    操作符
    6、表达式由操作符、操作数字和标点符号组成。
    操作符:一元操作符(单目运算符++、–)、二元操作符(+、-、*、/、&&)、三元操作符(条件? =)。
    7、优先级决定了表达式的运算顺序。
    8、逻辑操作只返回true或false这两种值,可以用来做判断条件,不会改变被操作数的值。
    逻辑与、逻辑或:短路求值,逻辑非:取反。
    9、前自增自减操作的优先级大于=,而后自增自减操作的优先级小于=,后自增自减操作后表达式的值不会发生改变。

    int i=0,j;
    j=++i; //前自增,j=1,i=1
    j=i++; //后自增,j=1,i=2
    

    10、变量的自增自减是修改变量的值,指针的自增自减是修改指针的指向地址。

    变量
    11、变量是左值,可以出现在赋值语句的左边和右边,数字字面值是右值,不能被赋值。
    12、变量初始化:直接初始化(灵活,效率高)、赋值初始化

    int a(100); //直接初始化
    int b = 200; //赋值初始化
    
    • 1
    • 2

    13、变量可以声明多次,但有且仅有一次定义。声明的主要目的是表明变量的类型和名称,而定义的目的是为变量分配存储空间。

    extern int a; //声明变量,不分存储空间
    int a; //定义变量,分配存储空间
    
    • 1
    • 2

    14、变量的存储类型:
    自动类型变量(auto):局部类型的变量
    静态类型变量(static):为了在下次调用该函数时,能使用上次调用后得到的该变量的值
    寄存器类型变量(register):直接使用cpu的寄存器,提高对这类变量的存储速度
    外部类型变量(extern):在一个文件中引用另外一个文件的全局变量(要想不能被其它文件引用,可以加上static 全局变量)

    引用
    15、引用是对象的别名,主要用作函数的形参来使用。
    16、非const的引用不能用于指向const对象的引用。

    const int a = 100;
    const int &b = a; //OK
    int &c = a; //error
    
    • 1
    • 2
    • 3

    C与C++的联系
    17、C语言是结构化的编程语言,它是面向过程的,考虑的是实现过程,C++是面向对象的,考虑的是整个程序模型。

    编程规范
    18、变量名由数字、字母和下划线组成,且必须以字母或下划线开头,不可以与保留关键字和标准库冲突。

    循环语句
    19、如果循环中需要修改的变量值不需要初始化或者已经初始化了,则可以省略初始化语句(例如int i=0)。
    20、while循环和do-while循环的主要区别在于,如果条件语句为false,while不会执行循环体,而do-while保证循环体执行一次。
    21、for循环通常用于需要遍历的情况,而while和do-while通常用于状态判断并根据状态执行操作。
    22、continue语句只能出现在循环语句中,而break语句可以出现在switch语句中。continue是终止当前循环并进入下一次循环体的执行,break语句会退出循环语句。

    switch语句
    23、在switch结构中可以在最后一个case标号或default标号后面定义变量,或者引入块语句来定义变量,这样可以保证变量在使用前可以被定义和初始化。

    递归
    24、递归算法解题的效率相对较低,在递归次数过多容易造成栈溢出。
    25、汉诺塔问题的递归求解
    在这里插入图片描述

    #include <iostream>
    #include <cstdio>
    using namespace std;
     
    int cnt; //全局变量,每次调用会+1
    
    void move(int id, char from, char to) // 打印移动方式:编号,从哪个盘子移动到哪个盘子
    {
        printf ("step %d: move %d from %c->%c
    ", ++cnt, id, from, to);
    }
     
    void hanoi(int n, char x, char y, char z)
    {
        if (n == 0) //注意递归的出口,不然就是死递归了
            return;
        hanoi(n - 1, x, z, y); //将n-1个在x柱子上的盘子通过z这个柱子移动到y这个柱子上。
        move(n, x, z);
        hanoi(n - 1, y, x, z); //将n-1个在y柱子上的盘子通过x这个柱子移动到z这个柱子上。
    }
     
    int main()
    {
        int n;
        cnt = 0;
        scanf ("%d", &n);
        hanoi(n, 'A', 'B', 'C');
        return 0;
    }
    

    输入流与输出流
    26、输入输出可以重载,减少代码量。

    istream& operator>>(istream &in,类名 &s); //返回值是流的引用,这样可以连续赋值
    ostream& operator<<(ostream &out,const 类名 &s);
    
    • 1
    • 2

    异常与错误
    27、在c++中,系统通过try块和异常处理构成异常机制,通过catch语句来捕捉异常,并执行异常处理,通过throw语句抛出异常。

    	double m, n;
    	cin >> m >> n; //输入1 0
    	try {
    		cout << "before dividing." << endl;
    		if (n == 0)
    			throw -1; //抛出int类型异常,用于后面的catch捕获
    		else
    			cout << m / n << endl;
    		cout << "after dividing." << endl;
    	}
    	catch (double d) {
    		cout << "catch(double) " << d << endl;
    	}
    	catch (int e) { //捕获抛出的-1
    		cout << "catch(int) " << e << endl;
    	}
    	cout << "finished" << endl;
    

    include的使用
    28、标准头文件(#include<>)在系统文件目录下查找,用户自定义头文件(#include “”)会依次在用户目录的C++安装目录和系统文件中查找。

  • 相关阅读:
    LAMP----linux+apache+mysql+php详细安装步骤之一APACHE篇(openldap等)
    Apache2 httpd.conf 配置详解
    Apache+php+mysql的安装与配置
    linux PHP 安装及 GD库安装
    Linux下安装PHP的GD支持库
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令
    Android中Context详解 ---- 你所不知道的Context(转)
    Android简单文件浏览器源代码 (转)
    Android入门之文件系统操作(一)简单的文件浏览器 (转)
    Android入门之文件系统操作
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/13546459.html
Copyright © 2011-2022 走看看