1、下面兩段代碼中for循環分別執行了多少次?
- unsigned short i,j;
- for(i=0, j=2; i!=j; i+=5, j+=7)
- {}
- unsigned short i,j;
- for(i=3,j=7;i!=j;i+=3,j+=7)
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的值分別是多少?
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]的積。
程序要求:要求具有線性復雜度,不能使用除法運算符。
參考答案(歡迎討論) 轉載請注明來源 http://www.cnblogs.com/jerry19880126/
- 第一個執行了32767次,第二個執行了16383次。注意定義的數據類型是short,i==j當且僅當j已經超過32768(unsigned short的模)后才可以滿足。因此可以列式:(0+5x)+65536=2+7x,得x=32767。第二個答案同理可得。
- 第一個是POINT,第二個是ER,第三個是ST,第四個是EW。注意+1的涵意,其實是越過一塊地址,“塊”的大小由指針維數決定的。
- 用VS試過了,makeS()不知道是什么東西,如果你知道,請留言。
- a=0,c=6,e=5,h=0,x=1,y=2,z=3,w=121,s=100,t=101,枚舉。第一個從0開始,后面的從前面一個數的下一個開始。
- 參考騰訊加分題的第一題,這里稍稍有些不同,因為沒有要求空間復雜度,而這里又恰好只給了數組a。解決方法是定義一個數組b,將a中的元素拷貝到b中,然后就可以套用騰訊加分題的方法了(只是a與b的含義互換了)。