1.单项选择题
1.1 使用C语言将一个1G字节的字符数组从头到尾全部设置为字符'A',在一台典型的当代PC上,需要花费的CPU时间的数量级最接近:
A. 0.001秒 B. 1秒 C. 100秒 D. 2小时
解答:现在机器cpu都是GHz,每次需要若干个指令,大约在1秒。
1.2 在某些极端要求性能的场合,我们需要对程序进行优化,关于优化,以下说明正确的是:
A. 将程序整个用汇编语言改写会大大提高程序性能。
B. 在优化前,可以先确定哪部分代码最为耗时,然后对这部分代码使用汇编语言改写,使用的汇编语句数目越少,程序就运行越快。
C. 使用汇编语言虽然可能提高程序性能,但是降低了程序的可移植性和可维护性,所以应该绝对避免。
D. 适当调整汇编指令的顺序,可以缩短程序运行的时间。
解答:A中,不应该将程序整个改写,应该只改写关键部分,整个改写降低了程序的可移植性和可维护性,B,汇编语句不是数目越少越快,循环等
C。不应该绝对避免
1.3 对如下c语言程序在普通的x86 pc上面运行时候的输出叙述正确的是:
char *f()
{
char X[512];
sprintf(X, "hello world");
return X+6;
}
void main()
{
printf("%s",f());
}
A.程序可能崩溃,也可能输出hello world
B.程序可能崩溃,也可能输出world
C.程序可能崩溃,也可能输出hello
D.程序一定会崩溃
解答:
这个程序是想返回一个数组的值,X是一个数组,是函数f()中的一个局部变量,在这个函数结束的时候,将会释放掉这个数组,
而X+6只是一个指向world的一个地址,f()返回的就是这个地址,但是地址中的内容没有了。
这里主要是讨论的数组返回的问题参考地址:http://www.cnblogs.com/yangxi/archive/2011/09/18/2180759.html
1.4 方程x1+x2+x3+x4 =30有多少满足x1>=2,x2>=0,x3>=-5, x4>=8的整数解?
A.3276 B. 3654 C.2925 D.17550
解答:整数划分问题;y1 = x1 - 2 >= 0,y2 = x2 >= 0,y3 = x3 + 5 >= 0,y4 = x4 - 8 >= 0;故y1 + y2 + y3 + y4 = 25,Num = 28 * 27 * 26/6