1、下面代码中for循环共执行了多少次?
unsigned short i,j; for(i=0, j=2; i!=j; i+=5, j+=7) {}unsigned short占用2个字节,当数据范围到头了(2^16-1),就又从0开始计数了,这个其实就是两辆汽车行驶在一个圆圈里的汽车追及问题。一个速度为5,一个速度为7,当速度为7的超越速度为5的时候,两个汽车就相遇了,2 + 7n- 5n= 2^16 所以共循环了32767次。
unsigned short i,j; for(i=3,j=7;i!=j;i+=3,j+=7)这个也是一样的,7 + 7n- (3+3n)= 2^16
2、下面程序应该输出多少?
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main(void) { printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0; }3、已知程序代码如下:
struct S { void func1(S &); void func2(const S&); void func3(S&) const; void func4(const S&) const; };下面哪些能正常执行()
A、makeS().func1(makeS())
B、makeS().func2(makeS())
C、makeS().func3(makeS())
D、makeS().func4(makeS())
4、下列代码的输出为多少?
int main(void) { enum {a, b=5, c, d=4, e}; enum {h,x, y, z, v=120, w, r=99,s,t}; return 0; }a、c、e、h、x、y、z、w、s、t的值分别是多少?
在枚举类型中声明的第一个枚举成员它的默值为零。没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1。
a:0 c:6 e:5
h:0 x:1 y:2 z:3 w:121 s:100 t:101
5、一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积
a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。
程序要求:要求具有线性复杂度,不能使用除法运算符。
思路是思想跟这个一样,用两个数组b、c
b[i] = a[0] *... * a[i - 1],c[i] = a[i + 1] *...*a[n] ,时间复杂度为O(2n)
最后a[i] = b[i]*c[i],我在这里没用c数组,少用c【i】数组的话,程序写起来就不是太好理解,其实是一个道理。