第一題
參加位運算的數據其類型不能是()。
A---int
B---char
C---float
D---long int
正確答案:C
解析:無論是float,還是double,在內存中的存儲分為三部分:符號位、指數位、尾數位;位運算符對它們沒有意義。
第二題
下面程序段描述正確的是()
int x=-1;
do
{x=x*x;
} while (!x);
A---是死循環
B---循環執行二次
C---循環執行一次
D---有語法錯誤
正確答案:C
解析:do-while循環結構中的循環體至少要執行一次,執行循環體中的語句后,x
的值為1,再對while后的表達式進行計算,因!x的值為0,所以循環結束,即整個循環只
執行了一次。故正確答案是C。
第三題
以下敘述中正確的是()
A---在語句char str[]="string!";中,數組str的大小等于字符串的長度
B---語句char str[10]="string!";和char str{"string!"};并不等價
C---對于一堆字符數組,不能使用字符串常量來賦初值
D---對于字符串常量“string!”,系統已自動在最后加入了“\0”字符,表示串結尾
正確答案:D
解析:A選項中數組的長度包含\0 ,求字符串的長度時 strlen()是不計算\0的長度的(求字符串占得空間是即sizeof才算\0的長度),所以數組要長一個。B選項中是等價的類比int數組 部分賦初值是 未賦值的部分自動賦0 此處一樣 未賦值的字符自動賦值\0,所以兩者一致。C選項中可以使用字符串常量來給一維字符數組賦值。
第四題
以下程序的輸出結果(32位機器上)是()
int main()
{ char *p = "abcdefgh", *r;long *q;q = (long*)p;q++;r = (char*)q;printf("%s\n", r);
}
A---abcd
B---bcde
C---cdef
D---efgh
正確答案:D
解析:?char* p = "abcdefgh",每個字符占1個字節,那么總共是8個字節,此時p指向'a'。如果是p++,那么p將指向'b'。打印p會得到"bcdefgh"。long* q = (long*)p 將p強制轉換為long*類型,也就是用long類型去解釋存儲了"abcdefgh"的這一段內存,此時q指向'a',由于long類型是4個字節,那么q++移動4個字節,q將指向'e',打印q將得到"efgh"。
第五題
C語言中,函數值類型的定義可以缺省,此時函數值的隱含類型是()
A---void
B---int
C---float
D---double
正確答案:B
解析:C語言中如果函數沒有指定返回類型,則默認為int 。C++中如過無返回值類型,必須寫void 。
第六題
函數
void foo()
{static int val;……
}
變量val的內存地址位于()
A---未初始化數據段
B---已初始化數據段
C---堆
D---棧
正確答案:A
解析:本題考察內存空間布局,解析如下:
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由os回收 。
3、全局區(靜態區)(static)—全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后有系統釋放。
4、文字常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放。
5、程序代碼區—存放函數體的二進制代碼。
? ? ? ? 保持對生活的愛和熱忱,把每一天活得熱氣騰騰!?