1樓:gta小雞
union是聯合體,其中的所有變數共用一片記憶體空間,該空間長度為union中最長的變數長度,即int陣列i[2]的長度8。
union會牽涉到大小端問題,而題中給出的陣列的第0個元素在低位並不能說明機器為大端序還是小端序,因為陣列的生長方向永遠向上,和大小端以及堆疊的生長方向沒有關係。這意味著這道題目是有很嚴重的問題的,因為它並沒有說明機器是大端序還是小端序,而給出的答案只在小端序下才成立。
假設機器是小端序,那麼s->i[0]=0x39會將union的低四個位元組寫為39 00 00 00,s->i[1]=0x38會將union的高四個位元組寫為38 00 00 00。此時整個union的資料是:低39 00 00 00 38 00 00 00高
對於union中的char c[4]陣列來說,它會使用第0~3個位元組作為自己的4個元素,即c[0]~c[3]分別為39、00、00、00。這裡的39是十六進位制的0x39,換算成十進位制就是57。接著以%c格式輸出c[0],最終輸出的就是57的ascii碼對應的字元'9'。
而如果機器是大端序的話,那麼結果將完全不同。
c語言的問題
2樓:縹緲一樣
一、c語言規定總是從main()開始執行的(這個函式也叫「主函式」)。因此,你發來的題目中的(1、6、8)敘述都是錯誤的,都應該選擇f。
二、第2題中,c語言對其資料在記憶體中所佔用的實際位元組數,隨著程式中宣告的資料型別以及資料的多少而變化,c語言本身並沒有明確規定。這題應該選f。
三、第3題,c語言中強制型別轉換,僅對轉換的語句有效,而不會改變所轉換變數的原有資料型別,這是正確的,應該選t。
四、第4題,i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);實際上是一個程式執行類題目,執行這一句時,先取得ij變數的值,其中有一個++i(先自增),一個j++(後自增),先自增的i先加上1,也就是i=8+1=9,而後自增的j在列印之後再加1,所以列印時仍是j=10。所以列印出來是:9 10 9 10。
這是正確的。
五、第5題「c語言中放在「」之間的內容都被視為字串的一個構成部分,都可以在螢幕上原樣顯示」的說法是錯誤的。舉一個例子就可以了:print("%d",8);是列印不出來%d的,它只能列印出來8。
所以它是錯的。
六、第7題,設x、t均為int型變數,則執行語句"x = 10;t = x && x >10;"後,t的值為,這個題目好似沒有寫完,成了填空題了,現在來看計算過程,t = x && x >10,根據計算的優先順序,>號是6級,&&是11級,先計算x >10,因為x=10,故x>10是不成立的,所以它的值是0,第二步再計算x && 0=10 && 0=0。t的值最後應該是0。
希望對你有所幫助。
c語言基本問題
3樓:岔路程式緣
一、c語言規定總是從main()開始執行的(這個函式也叫「主函式」)。因此,你發來的題目中的(1、6、8)敘述都是錯誤的,都應該選擇f。
二、第2題中,c語言對其資料在記憶體中所佔用的實際位元組數,隨著程式中宣告的資料型別以及資料的多少而變化,c語言本身並沒有明確規定。這題應該選f。
三、第3題,c語言中強制型別轉換,僅對轉換的語句有效,而不會改變所轉換變數的原有資料型別,這是正確的,應該選t。
四、第4題,i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);實際上是一個程式執行類題目,執行這一句時,先取得ij變數的值,其中有一個++i(先自增),一個j++(後自增),先自增的i先加上1,也就是i=8+1=9,而後自增的j在列印之後再加1,所以列印時仍是j=10。所以列印出來是:9 10 9 10。
這是正確的。
五、第5題「c語言中放在「」之間的內容都被視為字串的一個構成部分,都可以在螢幕上原樣顯示」的說法是錯誤的。舉一個例子就可以了:print("%d",8);是列印不出來%d的,它只能列印出來8。
所以它是錯的。
六、第7題,設x、t均為int型變數,則執行語句"x = 10;t = x && x >10;"後,t的值為,這個題目好似沒有寫完,成了填空題了,現在來看計算過程,t = x && x >10,根據計算的優先順序,>號是6級,&&是11級,先計算x >10,因為x=10,故x>10是不成立的,所以它的值是0,第二步再計算x && 0=10 && 0=0。t的值最後應該是0。
希望對你有所幫助。
4樓:匿名使用者
第一題:f,是從主函式的第一條語句開始執行的。
第二題:t,每一種資料型別在c語言中都佔用固定的位元組數。
第三題:f,強制型別轉換會改變資料型別。
第四題:f,輸出結果為8,10,9,10。
第五題:f,不能被原樣顯示的有預處理命令中被包含檔名(如"stdio.h")、printf函式的轉義字元(如"\n")。
第六題:f,程式執行是從主函式第一條語句開始,執行到主函式最後一條語句結束。
第七題:t的值為0,因為x>10的值為0。
第八題:f,c程式執行從主函式開始。
5樓:匿名使用者
f( t )c語言程式是從原始檔的第一條語句開始執行的。
//c語言程式是從主函式中的第一條語句開始執行的
2. f( t )c語言對其資料在記憶體中所佔用的實際位元組數是有明確規定的。
//c語言對其資料在記憶體中所佔用的實際位元組數沒有明確規定,比如:整型資料在turbo c中佔2位元組,在vc中佔4位元組
3. t( f)c語言中強制型別轉換不會改變原變數的原有資料型別。
//強制型別轉換不會改變原變數的原有資料型別,得到的結果是轉換後的型別資料
4. t( f )程式段:i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);其結果9,10,9,10.
//先執行j++,輸出10 再執行++i,輸出9,然後輸出i和j的值,分別是9,10
5. f( t )c語言中放在「」之間的內容都被視為字串的一個構成部分,都可以在螢幕上原樣顯示。
//c語言中放在「」之間的內容都被視為字串的一個構成部分,前半句是正確的
//都可以在螢幕上原樣顯示。不一定,比如有些轉義字元,換行符\n,退格\b等等
6. f( t )c程式的執行是從程式的第一行開始,一直到程式的最後一行結束。
//c程式的執行是從主函式的第一行開始,一直到主函式的最後一行結束
7. t( f)設x、t均為int型變數,則執行語句"x = 10;t = x && x >10;"後,t的值為。
//執行語句"x = 10;t = x && x >10;"後,t的值為0
8. f(t )c程式的執行從程式頭開始。
//c程式的執行是從主函式的第一行開始,主函式可以位於程式中的任何地方,不一定是程式的開頭
6樓:匿名使用者
1經常程式執行是由啟動**開始的,而啟動**一般都是彙編寫的,2.不確定的,資料型別定義的時候是確定的,執行的時候根據硬體多不同會有所不同
3.毫無疑問肯定會了,要不還說什麼強制呢,對吧4.應該是8,10,9,10吧。
因為printf語句就執行了一次,所以第一個i是8,第二個i是先+後輸出應該是9,第一個j是9,第二個j是先輸出後++,而程式只執行了一次,所以還是沒有+,等於10。
5.雙引號是c的字串格試符,所以是對的。
6.同第一題
7·沒有看明白
8.同第一題
7樓:匿名使用者
1、假,從main開始執行。
2、假,int的長度不明確。
3、真。
4、假,從左向右計算,8,10,9,10
5、假,有轉義字元。
6、假,見1
7、t=0
8、假,見1
8樓:匿名使用者
第4題你是正確的 ,不同的編譯器會有不同的結果,這屬於垃圾**
9樓:蹉燦紫婉娜
("a/1000>=1")
你這句寫錯了,應該是
(a/1000>=1)
把引號去掉
10樓:狂雲德潮鶯
1·c語言程式的基本單位是(b函式)a過程b函式c子程式d標誌符2·如果a=5<<2,為什麼a=20?
a=5<<2相當於a=a*2的平方
即a=5*4=20
3·不能正確對字串賦值的是(a
二維陣列不應該這樣賦值)a
char
st[4][5]=;b
char
*s;scanf("%s",s);
cchar
*s;s="abcde";d
char
s[5]=;
4·正確輸入字元組a的是(d)a
gets('a');
bscanf("%c",a);
cscanf("%s",a);d
gets("a");
5·如果c=35,為什麼printf("%d\n",c&c)的值為35?那個c&c是什麼東西。&在這裡是「按位與」運算
c&c化為二進位制的比較,都為1
則為1,否則為0.再化回10進位制數
11樓:淦菀歐陽陽冰
if("a/1000>=1")
這句應改為
if(a/1000>=1)
不然永為真
c語言的問題?
12樓:匿名使用者
一、c語言規定總是從main()開始執行的(這個函式也叫「主函式」)。因此,你發來的題目中的(1、6、8)敘述都是錯誤的,都應該選擇f。二、第2題中,c語言對其資料在記憶體中所佔用的實際位元組數,隨著程式中宣告的資料型別以及資料的多少而變化,c語言本身並沒有明確規定。
這題應該選f。三、第3題,c語言中強制型別轉換,僅對轉換的語句有效,而不會改變所轉換變數的原有資料型別,這是正確的,應該選t。四、第4題,i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);實際上是一個程式執行類題目,執行這一句時,先取得ij變數的值,其中有一個++i(先自增),一個j++(後自增),先自增的i先加上1,也就是i=8+1=9,而後自增的j在列印之後再加1,所以列印時仍是j=10。
所以列印出來是:9 10 9 10。這是正確的。
五、第5題「c語言中放在「」之間的內容都被視為字串的一個構成部分,都可以在螢幕上原樣顯示」的說法是錯誤的。舉一個例子就可以了:print("%d",8);是列印不出來%d的,它只能列印出來8。
所以它是錯的。六、第7題,設x、t均為int型變數,則執行語句"x = 10;t = x && x >10;"後,t的值為,這個題目好似沒有寫完,成了填空題了,現在來看計算過程,t = x && x >10,根據計算的優先順序,>號是6級,&&是11級,先計算x >10,因為x=10,故x>10是不成立的,所以它的值是0,第二步再計算x && 0=10 && 0=0。t的值最後應該是0。
希望對你有所幫助。
c語言問題,C語言問題?
include include int main max min i 0 sum i 0 i 1 i 2 i 3 i 4 i 5 i 6 for j 0 j 6 j printf 去掉一個最高分 0.6lf max printf 去掉一個最低分 0.6lf n min printf 該選手最後的得分...
c語言問題,C語言問題?
char的範圍是 128 127的 你362就溢位了嘛 是這樣的 0362 0是表示8進位制 於是362在10進位制下是242 242溢位了 128 127 於是結果變成242 128 128 14 要明白這個,首先要明白記憶體中 c 變數是什麼樣子的。整數在記憶體中是以補碼的形式存取的。c 036...
C語言的問題,C語言問題,求助
1.設x的值為3,則表示式 x x x x 的值為?x先進行4次加1運算為7,後再相加為28 2.用long a 0xffffff int b char c 定義。執行b a,c b b後。b c的值為?a為長整型三個位元組為全1,賦值給b後b是整型,b的2個位元組也是全1,但b是有符號整型第一位元...