一、
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
讲解:
这个题目到手后脑子中有许多的解法,比如将数组元素一个个的判断奇数偶数,然后奇数放到一个数组,偶数放到一个数组,最后将两个数组在放到一个数组,然后打印出来…………
我认为,这些方法可行,但是复杂,有没有简单的方法呢?
下面是我写的代码,我在完成就排序的基础上又写了一个函数,对奇偶排序完成的数组,再一次进行了排序,使得奇数与偶数部分不仅分开,而且规律的从小到大排序出来。
arr数组变为这个时
结果:
二、
题目:下列函数运行的结果是什么
讲解:看到这个题目,一看好简单啊,a+b这不300吗,c又等于a+b,直接300,300。
可是,结果却是:
然后,直接凉凉。
先仔细看,a,b,c全都是无符号char类型。char类型只能储存8个二进制位,数值为0~255
a中实际储存的为11001000
b中实际储存的为01100100
计算a+b时,由于a,b为char类型,没有达到int的大小,所以要发生整形提升,a和b均为无符号数,所以最高位不是符号位,高位补零。
a:00000000000000000000000011001000
b:00000000000000000000000001100100
a+b=00000000000000000000000100101100
c为无符号char类型,只能存放8个二进制位
c:00101100
以%d(有符号数)的方式进行打印
a+b:00000000000000000000000100101100
符号位为0,正数,300
c:00101100
发生整型提升,c为无符号数,高位补0
c:00000000000000000000000000101100
符号位为0,正数,44
三、
题目:在32位大端处理器上变量b等于()
A:0x00
B:0x12
C:0x34
D:0x1234
讲解:这里涉及到一个知识点,大端字节和小端字节。
大端字节:把数据的低位字节内容存放在高地址处,高位字节放在低地址处
小端字节:把数据的低位字节内容存放在低地址处,高位字节放在高地址处
因为是大端处理器,所以存储应为00 00 12 34
&a强制类型转换(unsigned char*)只能访问一个字节,00,所以b里面存放的就是0x00
四、
题目:写一个函数打印杨辉三角
讲解:首先先画一个杨辉三角出来
画出来一看。
哎呦,这可怎么打印哦。
我们进行简化一下。
写成下面这种形式
再一看,哎,这不是一个二维数组?没错,就用这种思想来进行打印杨辉三角,但不是每个元素都是输上去的,而是发现规律进行计算得到。什么规律呢?我们发现第一列和对角线元素皆为1,从第三行第二列开始元素为上一行的前一列和这一列的和。
所以元素赋值可以这样写:
接下来是打印元素 ,可以直接打印吗?可以,用下面程序打印出来就是楼梯状的杨辉三角。
打印结果:
这时候就有有人说了,哎呀,不是 ,这啥,这是杨辉三角?
怎么了,这不是直角三角形?开玩笑!!!你怕是不懂哦。
现在对了吧
下面是新的打印函数:
空格怎么控制呢?我们发现,如果打印n行杨辉三角,那么第n行就顶格打印,没有空格,然后每少一行,空格多一个,也就是说第一行应该有n个空格。
但是程序中第一行是可不是第一行啊,是第0行(i=0),所以,空格数应该是n-1个,
第二行,也就是程序中的第一行(i=1)就是n-1-i个空格
所以空格数只需要小于n-1-i 就行了。
下面是完整程序:
五、
题目:猜凶手,某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个
以下为4个嫌疑犯的供词:
A:不是我
B:是C
C:是D
D:C在胡说
已经知道3个人说了真话,1个人说了假话,写一个程序判断凶手。
讲解:看到题目有点懵,这是啥啊,智力题啊?编程怎么搞嘛。
仔细分析发现,这考的不就是逻辑关系吗,条件判断而已。
经过分析发现符合条件的只有C是凶手的时候。
程序怎么写呢,很简单,我只需要创建一个变量为Killer,然后将killer从A到D进行赋值判断,ABCD所说的话定为判断条件,真的为1,假的为0;最后加起来看看等不等于3,等于就把此时killer所赋值的内容打出来就行了。
程序:
结果: