分析下面的程式:
阿新 • • 發佈:2020-08-03
分析下面的程式:
#include<stdio.h>
int main()
{
char c1, c2;
c1 = 97;
c2 = 98;
printf("c1=%c, c2=%c\n", c1, c2);
printf("c1=%d, c2=%d\n", c1, c2);
return 0;
}
(1)執行時會輸出什麼資訊?為什麼?
答:會輸出 :
c1=97, c2=98
因為第一行十一字元形式輸出,所以會吧97和98當作相依字元的ascii值,輸出的時候按照字元顯示,
第二行由於是以整形輸出,所以輸出對應整數值
(2)如果將程式第4,5行改為
c1 = 197;
c2 = 198;
執行時會輸出什麼資訊?為什麼?
答: 會輸出:
因為c1和c2為char型別,其儲存的資料範圍為-128~127,當c1=197,c2=198時,已經超出了char型別所能夠儲存的資料範圍,此時會進行相應的轉換為c1=-59,c2=-58,只是第一行以字元輸出時,c1=-59,c2=-58為不可顯示字元,所以輸出了?,而第二行以整數輸出時就進行了相應的整數顯示。
(3)如果將程式第3行改為
int c1, c2;
執行時會輸出什麼資訊?為什麼?
答: 會輸出
因為c1和c2為int時,第二行以整形輸出自然能夠儲存的下,但第一行以字元輸出時,雖然資料int能夠儲存,但是在輸出時需要準換為字元,轉換後資料就超出了範圍,此時c1=-59,c2=-58,兩者都為不可顯示字元,所以就顯示了?。