1.进制之间的转换
%d 十进制输出
%0x 十六进制输出
%08x 十六进制输出,输出8位,如果不够,补0
编程题:将十进制的数字转换成n进制的数字
#include <iostream>
#include <stack>
using namespace std;
//使用stack,将得到的数字压栈,最后逐一出栈
void MyTenToN1(int num, int n)//n表示进制
{
if(num < 0)
return;
else if(0 == num)
{
cout<<"0"<<endl;
return;
}
stack<int> st;
int i = 0;//余数
int j = num;//商
while(j != 0)//商为0是循环结束条件
{
i = j % n;
j = j / n;
st.push(i);
}
while(!st.empty())
{
cout<<st.top();
st.pop();
}
cout<<endl;
}
//每次得到最小位的数,乘位的权重
int MyTenToN2(int num, int n)
{
if(num < 0)
return -1;
else if(0 == num)
{
cout<<"0"<<endl;
return -1;
}
int i = 0;//余数
int j = num;//商
int count = 0;
int result = 0;
int pow = 1;
while(j != 0)
{
i = j % n;
j = j / n;
++count;
if(count != 1)
{
pow *= 10;
}
result += i*pow;
}
return result;
}
int main()
{
cout<<MyTenToN1(123,2)<<endl;
cout<<MyTenToN1(123,3)<<endl;
cout<<MyTenToN1(123,4)<<endl;
cout<<MyTenToN1(123,5)<<endl;
cout<<MyTenToN1(123,6)<<endl;
cout<<MyTenToN1(123,7)<<endl;
cout<<MyTenToN1(123,8)<<endl;
cout<<MyTenToN1(123,9)<<endl;
cout<<MyTenToN2(123,2)<<endl;
cout<<MyTenToN2(123,3)<<endl;
cout<<MyTenToN2(123,4)<<endl;
cout<<MyTenToN2(123,5)<<endl;
cout<<MyTenToN2(123,6)<<endl;
cout<<MyTenToN2(123,7)<<endl;
cout<<MyTenToN2(123,8)<<endl;
cout<<MyTenToN2(123,9)<<endl;
return 0;
}
编程题:判断当前字母是否为大写
#include <iostream>
using namespace std;
//由于字母的ASCII码不一定连续,自己构建小写字母连续的数组,进行比较
//引入头文件#include<ctype.h> bool islower(int ch);是库函数
bool Myislower(int ch)
{
int arr[] = {"abcdefghijklmnopqrstuvwxyz"};
int len = sizeof(arr)/sizeof(arr[0]);
for(int i=0; i<len-1; ++i)
{
if(arr[i] == ch)
{
return true;
}
}
return false;
}
int main()
{
cout<<Myislower('a')<<endl;
cout<<Myislower('c')<<endl;
cout<<Myislower('F')<<endl;
cout<<Myislower('G')<<endl;
cout<<Myislower('d')<<endl;
cout<<Myislower('R')<<endl;
return 0;
}
2.运算符的优先级
(1)/和% 不能除0,不能对0取余,程序会崩溃
(2)%运算符的操作数必须是整数
(3)<<和>>位移运算符
左移,右边补0 右移,左边补符号位 一般先化成二进制再比较
(4)1<2<5 永真 要注意大于小于运算符的连续比较
(5)表达式1 && 表达式2 如果表达式1为假,表达式2不计算 编译器优化
表达式1 || 表达式2 如果表达式1为真,表达式2不计算
3.变量的生存周期
4.switch…case 找到匹配的case进;显示的碰到break出
switch不能用float类型的数,float类型的数不能用“==”直接比较
5.宏替换 做题的最好方法:把用到宏的地方都替换一下,重抄代码计算结果
6.类型转换
同类型,无符号的数比有符号的数宽 有符号—->无符号
算数运算时,整型(int)起
无符号左边补0,有符号左边补1
7.面试题:既然do…while能做的事while都可以做,为什么还要设计do…while?
答:(1)辅助定义复杂的宏,防止出现替换错误
#define SOMETHING fun1(); fun2()
if(a < 0)
SOMETHING;
实则执行:
if(a < 0)
fun1();
fun2();//fun2()始终会被执行
如果使用do…while
#define SOMETHING do{fun1(); fun2()}while(0)
if(a < 0)
SOMETHING;
实则执行:
if(a < 0)
do
{
fun1();
fun2();
}while(0);
(2)避免空宏引起的warming
内核中由于不同架构的限制,很多时候会用到空宏,在编译的时候,空宏会给出warning,为了避免这样的warning,就可以使用do{}while(0)来定义宏。如:
#define SOMETHING do{}while(0)