1、#include
union
a;
void main()
執行結果:266
3、路由器與交換機的區別:
4、程序與執行緒的差別
a、作業系統只排程程序,不排程執行緒
b、執行緒共享記憶體位址空間,程序不共享
c、執行緒間可以共享記憶體資料,但程序不可以
d、程序間可以通過ipc通訊,但執行緒不可以
5、下面排序演算法的時間複雜度不是nlogn的是
二分法插入排序快速排序歸併排序堆排序
6、字串匹配
void getnext(char *s,int next)
else ? }
} int kmp(char *m,char *s,int next)
else
j=next[j]; }
return -1; }
7、某工作有5道工序,某個工作不能在最後做,請問有多少種工作情況
8、記憶體中有3頁,初始為空,頁面走向為4,3,2,1,4,3,5,4,3,2,1,5,分別使用先進先出,最近最少使用,理想頁面置換演算法,請問缺頁次數是多少?
10,9,8 9,10,8 10,9,7 9,10,7
9、tcp具有但udp不具有的特點不包括:
a、對上層應用而言,收到資料報的順序與對方傳送的順序一致
b、源ip、目的ip均相同的資料報經過同樣的路由路徑
c、傳輸過程中個別資料報丟失,接收端存在檢測機制
d、傳輸資料前必須使用握手方式建立連線
10、#include
int func(int n)
void main()
執行結果:無結果
11、括號匹配的檢驗
#include
#include
#define true 1
#define false 0
#define stack_init_size 100
#define stackincrement 10
typedef int status;
typedef char selemtype;
typedef struct
sqstack;
status initstack(sqstack &s)
status push(sqstack &s,selemtype e)
*(s.top++)=e;
return true; }
status pop(sqstack &s,selemtype &e)
status cmp(selemtype a,selemtype b)
status check()
')
}if(s.top==s.base)return true;
return false; }
void main()
*****=
第一題:
#include
union
a; void main()
答案:266
解析:c語言中的聯合體(union)的概念是,聯合體中的多種資料型別共享同乙個記憶體空間。就拿你舉的例子來說:
在聯合體a中定義了兩種資料型別,字元陣列x以及整形變數i.其中整形變數是16位的,陣列大小為2的字元陣列為8x2=16位。如此一來,編譯器便會為聯合體a在記憶體中開闢乙個16位的空間,這個空間裡儲存聯合體的資料,但是這個空間只有16位,它既是整形變數的資料,也是字元陣列的資料。如果你的程式從字元陣列的角度解析這個空間,那麼它就是兩個字元,如果你的程式從整型的角度解析這個空間,那麼它就是乙個整數。
以你的程式為例子,現在已經開闢了乙個16位的空間,然後我們假定現在空間還沒有被賦值,為:
00000000 00000000
那麼在執行完**
a.x[0] = 10;
a.x[1] = 1;
之後,16位的空間變為:
00001100 00000001
然後程式執行
printf("%d",a.i);
就是把聯合體a當成乙個整數來解析,而不是字串陣列。那麼這樣一來,程式就把這16位變成了乙個完整的整數:
(00000001 00001100)二進位制 = (266)十進位制
注意,你可以看到程式在把16位弄成整數的時候把後面八位放在了前面,前面八位放在了後面。這個反序是計算機儲存結構造成的,這個和聯合體沒有直接關係。如果感興趣的話可以參考組合語言。
就是這個道理。
第二題:
main()
half;
}number;
number.i=0x4241; /*聯合成員賦值*/
printf("%c%c/n", number.half.first, mumber.half.second);
number.half.first='a'; /*聯合中結構成員賦值*/
number.half.second='b';
printf("%x/n", number.i);
getch();
} 答案: ab
解析:
發表於:2008-03-30 15:48:12
5樓 得分:0
第二個例子同樣,
unionhalf;
}number;
定義了聯合體number,這個聯合體有兩種資料型別,整形i(16位),以及乙個結構體(struct half)(2個char,16位)。所以編譯器為這個聯合體開闢乙個16位的空間:
00000000 00000000
然後賦值:
number.i=0x4241;
這個時候,聯合體以整形的身份出現,16位的空間將被整體認為是乙個整數賦值。
注意(0x4241)(16進製制) = (01000010 01000001)二進位制。還記得剛才說的,計算機儲存的時候是反著存的嗎,先存低位,再存高位(參考組合語言),因此16位位址被賦值位
01000001 01000010
然後 printf("%c%c/n", number.half.first, mumber.half.second);
實際上是把16位空間以結構體half的角度解析,也就是兩個char.
那麼第乙個:number.half.first = (01000001)二進位制 = (65)十進位制 = a(ascii碼)
同理number.half.second = b(ascii碼)
當然後頭又給first和second賦值位"a"和"b",這樣會把16位空間弄成是:
01100001 01100010
然後用
printf("%x/n", number.i);
就是把16位看成整數,記住高地位反過來
(01100010 01100001)二進位制 = (0x6261)16進製制
所以結果就是:0x6261.
getch();
最後記得按任意鍵結束程式。
********************===
創新工場 2014創新工場校園招聘之回文串修復
題目 所謂回文,就是正序和倒序遍歷結果一樣的字串,比如 aba abcdedcba 實現乙個方法pal 輸入乙個字串,列印出以這個字串為字首的乙個回文。比如輸入 abc pal 方法列印出 abcdcba 或 abcba 輸入 abcb 可以輸出 abcbcba 或 abcba 如果可能,輸出盡量短...
創新工場筆試題
1.輸入乙個整型無序陣列,用堆排序的方法是陣列有序 2.求乙個正整數的開方,要求不能使用庫函式sqrt,結果精度在0.01即可 3.給定乙個矩陣int matrixa m n 每行沒列都是增序的,實現乙個演算法尋找矩陣中的某個元素element 下面做出我的題解,能力有限,望見諒!第一題 堆排序 考...
創新工場筆試小記(創新工廠演算法筆試題)
筆試題量很小,答題時間1個小時。1道填空題,9道左右選擇題,最後一道程式設計題。第一題 c intf intx return c int f int x return c 對於int a 65536 1024 8 1 int b f a 執行後b等於多少?第二題 5個骰子,六個面分別標有1 6,現在...