C程序设计第五版(谭浩强 著)第三章课后习题第4题

第一部分 题目

分析下面的程序:

#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. 运行时会输出什么信息?为什么?

       以下为使用visual studio 2022运行上述代码所得到的结果截图:

       理由:首先,程序中定义了两个字符变量c1和c2,并分别给它们赋值为97和98。在ASCII码表中,97对应的字符是'a',98对应的字符是'b'。因此,当使用%c格式化输出时,会输出对应的字符,即 'a' 和 'b'。当使用%d格式化输出时,会输出字符的ASCII码值,即97和98。

2. 如果将程序第4,5行改为

                c1=197;

                c2=198;

运行时会输出什么信息?为什么?

       以下为使用visual studio 2022运行上述代码所得到的结果截图:

出现上述运行结果的原因如下:

       字符存储: 在C语言中,char类型通常是8位(1字节)的有符号整数,值的范围是-128到127。在这段代码中,赋值197198char类型的变量c1c2。但是,这两个值超出了char类型的正值范围(127),因此发生了整数溢出,导致这些数值被解释为负数。

       字符显示: 当用%c格式符输出时,字符编码会依据字符集(通常是ASCII或扩展的字符集,如UTF-8等)。197198(或其对应的负值)在普通ASCII字符集中并没有对应的可显示字符,所以打印出来显示为 ?(即不可打印字符的占位符)。

       数字显示: 当使用%d来输出时,输出的值是变量c1c2的整数表示。在有符号的char类型中,197被解释为-59198被解释为-58,所以第二个printf语句输出的结果是c1=-59,c2=-58

3. 如果将程序第3行改为

                int c1,c2;

运行时会输出什么信息?为什么?

       如果将程序第3行改为int c1,c2;,那么c1c2将不再是字符类型,而是整数类型。这意味着赋值时应该使用整数而不是字符。但是,如果仍然使用字符的ASCII码值来赋值(如97和98),那么在输出时,使用%c格式化输出会得到对应的字符,因为整数值会被隐式转换为对应的ASCII字符。使用%d格式化输出时,会输出它们的整数值。

       以下为使用visual studio 2022运行上述代码所得到的结果截图:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值