分析下面的程序:
#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,兩者都為不可顯示字符,所以就顯示了?。