近期國內新聞熱點事件高級seo
第一題
1、聲明以下變量,則表達式:?ch/i + (f*d – i)?的結果類型為( )
char ch;
int i;
float f;
double d;
A:?char?
B:?int?
C:?float?
D:?double
答案及解析?D
基本數(shù)據(jù)類型的等級從低到高如下:char-> int-> long-> float-> double
運算的時候是從低轉到高的,表達式的類型會自動提升或者轉換為參與表達式求值的最上級類型。
第二題
2、關于代碼的說法正確的是( )
#include <stdio.h>
int main()
{int x = -1;unsigned int y = 2;if (x > y){printf("x is greater");}else{printf("y is greater");}return 0;
}
A:?x is greater?
B:?y is greater?
C:?依賴實現(xiàn)?
D:?隨機
答案及解析?A
x是有符號數(shù)-1,內存中是全1,當有符號的x和無符號數(shù)進行比較時,x會隱式類型轉換被當做無符號數(shù),是一個很大的數(shù),這時就選擇A了
第三題
3、已知有如下各變量的類型說明,則以下不符合C語言語法的表達式是( )
int k, a, b;
unsigned int w = 5;
double x = 1.42;
A:?x % 3?
B:?w += -20?
C:?k = (a = 200,b = 300)?
D:?a += a -= a = 9
答案及解析 ?A
取余操作符兩邊必須是整數(shù)
第四題
4、下面函數(shù)的輸出結果是( )
void func()
{int k = 1^(1 << 31 >> 31);printf("%d\n", k);
}
A:?0?
B:?-1?
C:?-2?
D:?1
答案及解析 C
(1 << 31 );左移31位,并在右側填充0,得到0x80000000,即符號位為1,其他為0,即-2147483648
int k = 1^(1 << 31 >> 31);注意,這里在右移的時候,符號位保持為1,右移后填充1,結果為0xFFFFFFFF,即-1
0x00000001^0xFFFFFFFF,即0xFFFFFFFE(-2)
第五題
5、如下代碼的輸出結果是( )
#include <stdio.h>
int main()
{int i = 1;sizeof(i++);printf("%d\n", i);return 0;
}
A:?1?
B:?4?
C:?2?
D:?8
答案及解析 A
一般表達式的運算是在運行時執(zhí)行的,而sizeof是一個編譯階段就執(zhí)行的運算符,在其內的任何運算都不執(zhí)行,只推測出其中表達式結果的類型求其大小,故前后i的值不變。
也就是說sizeof括號里的不會進行運算