C和C++程序员面试秘笈①

it2022-05-05  114

本系列博客基于董山海的<C和C++程序员面试秘笈>,旨在记录,欢迎交流,可联系 zywang@shu.edu.cn !


第一章:C/C++程序基础


文章目录

1、面试题12、面试题23、面试题34、面试题45、面试题56、面试题67、面试题78、面试题8

1、面试题1

赋值语句:位运算与逻辑运算以及三元操作符的区别

2、面试题2

C++域操作符,注意全局变量和局部变量的区别

3、面试题3

+ + i ++i ++i:先 i i i 自增 1 1 1,然后再打印 i i i; i + + i++ i++:先打印 i i i,再 i i i 自增 1 1 1; − i − − -i-- i:先打印 − i -i i,再 i i i 自减 1 1 1;

4、面试题4

内建数据类型的时候, i + + i++ i++ + + i ++i ++i 效率没有区别; 自定义数据类型(比如类)的时候, + + i ++i ++i 效率比较高;

5、面试题5

有符号变量与无符号变量的值的转换

#include <stdio.h> // char getChar (int x,int y) { char c; unsigned int a = x; (a+y > 10) ? (c = 1): (c = 2); return c; } // int main (void) { char c1 = getChar(7,4); char c2 = getChar(7,3); char c3 = getChar(7,-7); char c4 = getChar(7,-8); // printf("c1 = %d\n",c1); printf("c2 = %d\n",c2); printf("c3 = %d\n",c3); printf("c4 = %d\n",c4); // return 0; }

输出结果为: c 1 = 1 c1=1 c1=1 c 2 = 2 c2=2 c2=2 c 3 = 2 c3=2 c3=2 c 4 = 1 c4=1 c4=1 首先,C语言中提供了很多数据类型,比如整型 ( i n t ) (int) (int)等,它们的区别就是范围的大小,int代表是有符号的整数,可正可负可为0。所以基本数据类型划分为signed(有符号)和unsigned(无符号)两大类。

整数是以原码的形式存储的,而负数是以补码的形式存储的,原码大家都知道也就是它对应的二进制码,那什么是补码呢,就是原码的反码加1,反码就是原码的各位取反。

当一个有符号和一个无符号之间的数进行相加减会发生什么呢? 是这样的: a + b a+b a+b,首先把负数转换为无符号数,然后在进行运算。 b b b 转换为无符号数就是对 b b b 取模, 2 32 + b 2^{32}+b 232+b,结果为4294967286。

6、面试题6

不使用任何中间变量就将a、b值进行交换,推荐异或交换方式。

#include<bits/stdc++.h> using namespace std; //使用加减法完成交换 void swap1(int &a,int &b){ a = a + b; b = a - b; a = a - b; } //使用局部变量进行交换 void swap2(int &a,int &b){ int temp = a; a = b; b = temp; } //使用异或运算完成交换 void swap3(int &a,int &b){ a = a ^ b; b = a ^ b; a = a ^ b; }

7、面试题7

标准头文件中的一些通用结构

#ifndef _INCvxWorksh //这边防止该头文件被重复引用,如果不存在,则定义 #define _INCvxWorksh #ifdef _cplusplus //这边表示使用的是C++编译器 extern "C"{ //c++编译器提供的与C连接交换指定的符号,解决C++与C名字匹配问题 #endif /*...*/ #ifdef _cplusplus } #endif /* _INCvxWorksh */

8、面试题8

头文件引用中的 <> 与 " " 的区别

尖括号 <>:表示这个文件是一个工程或者标准头文件,查找过程会首先检查预定义的目录,我们可以通过设置搜索路径或者命令行来修改这些目录;

引号" ":表示该文件是用户提供的头文件,现在当前文件目录中寻找,然后在标准位置寻找文件。


最新回复(0)