1、下面代碼中for循環(huán)共執(zhí)行了多少次? unsigned short i,j; for(i=0, j=2; i!=j; i+=5, j+=7) {} unsigned short占用2個(gè)字節(jié),當(dāng)數(shù)據(jù)范圍到頭了(2^16-1),就又從0開始計(jì)數(shù)了,這個(gè)其實(shí)就是兩輛汽車行駛在一個(gè)圓圈里的汽車追及問題。一個(gè)速度為5,一個(gè)速度為7,當(dāng)速度為7的超越速度為5的時(shí)候,兩個(gè)汽車就相遇了,2 + 7n - 5n = 2^16 所以共循環(huán)了32767次。 unsigned short i,j; for(i=3,j=7;i!=j;i+=3,j+=7) 這個(gè)也是一樣的,7 + 7n - (3+3n) = 2^16 2、下面程序應(yīng)該輸出多少?
#include <iostream.h> using namespace std; char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main() { printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); system("pause"); return 0; } 輸出:POINTERSTEW 關(guān)鍵是理解,數(shù)組的下標(biāo)表示的真正的意義,是偏移-offset,a[i]對(duì)于編譯器的意思是,取出符號(hào)a代表的地址,pa,在加上i*sizeof(a元素)的偏移量,最后解析出來對(duì)應(yīng)的地址的內(nèi)容。 3、已知程序代碼如下: struct S { void func1(S &); void func2(const S&); void func3(S&) const; void func4(const S&) const; }; 下面哪些能正常執(zhí)行() A、makeS().func1(makeS()) B、makeS().func2(makeS()) C、makeS().func3(makeS()) D、makeS().func4(makeS()) 在gcc上做的實(shí)驗(yàn),這個(gè)結(jié)果和maskS()有關(guān)。首先
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的值分別是多少? 在枚舉類型中聲明的第一個(gè)枚舉成員它的默值為零。沒有顯示賦值的枚舉成員的值,總是前一個(gè)枚舉成員的值+1。 h:0 x:1 y:2 z:3 w:121 s:100 t:101 5、高度為1的平衡二叉樹節(jié)點(diǎn)為1個(gè),高度為5的平衡二叉樹節(jié)點(diǎn)最少多少個(gè)? 6、
7、下面代碼輸出什么? #pragma pack(4) int main(void) { unsigned char puc[4]; struct tamPIM { unsigned char ucPim1; unsigned char ucData0:1; unsigned char ucData1:2; unsigned char ucData2:3; }*pstPimData; pstPimData = (struct tamPIM*)puc; memset(puc, 0 , 4); pstPimData->ucPim1 = 1; pstPimData->ucData0 = 2; pstPimData->ucData1 = 3; pstPimData->ucData2 = 4; printf("%02x %02x %02x %02x\n",puc[0],puc[1],puc[2],puc[3]); return 0; } 第一個(gè)自己直接存儲(chǔ)0x01,這個(gè)不需要解釋的。關(guān)鍵是第二個(gè)自己的存儲(chǔ),首先1個(gè)bit為用來存儲(chǔ)2,導(dǎo)致最低位存0 ,其次兩位 11,再其次三位100,最后空兩個(gè)00。 8、C++什么時(shí)候使用拷貝構(gòu)造函數(shù)? 9、 call by value和call by reference的區(qū)別? 11、外部排序常用的算法?
int main(void) { unsigned int un = -1; // 0~4294967295 unsigned short us = -1; // 0~65535 printf("%d %d\n",us,un); /* us的二進(jìn)制表示是0xffff,以4個(gè)字節(jié)的int類型輸出時(shí)表示的是0x0000ffff,所以輸出65535 un的二進(jìn)制表示是0xffffffff,以4個(gè)字節(jié)的int類型輸出時(shí)表示的是-1,所以輸出-1 */ cout<<us<<endl; // -1在無符號(hào)的short數(shù)據(jù)中是65535 cout<<un<<endl; // -1在無符號(hào)的int數(shù)據(jù)中是4294967295 //printf("%x %x\n",us,un); // 16進(jìn)制的形式 //printf("%p %p\n",&us,&un); // 輸出地址 return 0; } 輸出:65535 -1 14、一個(gè)長度為n的數(shù)組a[0],a[1],...,a[n-1]?,F(xiàn)在更新數(shù)組的名個(gè)元素,即a[0]變?yōu)閍[1]到a[n-1]的積 思路是思想跟這個(gè)一樣,用兩個(gè)數(shù)組b、c int main(void) { int i, a[]={1,2,3,4}; int temp, n=4; int *b = new int[n]; b[0] = a[0]; for(i = 1; i < n-1; i++) { b[i]=b[i-1]*a[i]; } b[n-1] = a[n-1]; for(i = n-1; i >= 0; i--) { temp = a[i]; if(i == n-1) a[i] = b[i-1]; if(i>0 && i<n-1) { a[i] = b[i-1]*b[i+1]; b[i] = temp*b[i+1]; } if(i == 0) a[0] = b[1]; } //輸出最后的a元素 for(i = 0; i < n; i++) { printf("%d ",a[i]); } return 0; }
|
|