当前位置: 首页 > news >正文

【时时三省】(C语言基础)习题:分析一个程序

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

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

c1 = 197;

c2 = 198;

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

( 3 )如果将程序第3行改为

int cl , c2 ;

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

( 1 )输出结果:

原因:

在C语言中, char 类型本质上是整数类型,它可以存储整数值。这里将整数97赋值给 c1 ,98赋值给 c2 。在ASCII码表中,97代表字符 'a' ,98代表字符 'b' 。

第一个 printf 函数使用 %c 格式说明符,它会将 c1 和 c2 的值当作字符来输出,所以输出 c1=a,c2=b 。

第二个 printf 函数使用 %d 格式说明符,它会将 c1 和 c2 的值当作整数来输出,所以输出 c1=97,c2=98 。

( 2 )输出结果:

原因:

char 类型通常是8位有符号整数(范围一般是 - 128到127)。当给 c1 赋值197时,197超出了 char 类型的表示范围。197的二进制表示为 11000101 ,截断到8位后是 11000101 ,这是一个负数的补码形式(最高位为1表示负数)。

计算补码对应的原码:补码 11000101 ,先减1得 11000100 ,再按位取反得 00111011 ,即十进制的59,所以这个补码表示的是 - 59。同理,198截断到8位后是 11000110 ,其补码对应的原码是58,即表示 - 58。

第一个 printf 函数使用 %c 格式说明符,由于 - 59和 - 58没有对应的可打印字符,所以输出 ? 。

第二个 printf 函数使用 %d 格式说明符,输出 c1=-59,c2=-58 。

( 3 )输出结果:

原因:

将 c1 和 c2 声明为 int 类型后,给 c1 赋值197, c2 赋值198,这两个值都在 int 类型的表示范围内(通常 int 类型的范围比 char 类型大得多)。

第一个 printf 函数使用 %c 格式说明符,197和198没有对应的可打印字符,所以输出 ? 。

第二个 printf 函数使用 %d 格式说明符,输出 c1=197,c2=198 ,即输出它们的整数值。

相关文章:

  • 深入理解traceroute命令及其原理
  • 药房链路轨道“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
  • 大模型应用中如何保持实时性和多人对话一致性问题?
  • 蓝桥杯练习day2:拿硬币
  • Linux日志管理
  • 微分方程求解及推导过程
  • 华为欧拉 22.03 版本部署 nginx
  • 【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频
  • NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL
  • string练习题
  • 并发编程面试题三
  • MCP技术将重塑 SaaS 与 AI 的协作范式
  • 【操作系统】进程间通信方式
  • Boost C++ `split()` 全面解析:高效字符串拆分与优化实践
  • Spring Boot 3 新特性实战:从理论到实践
  • 15-双链表-双链表基本操作
  • 毕业论文答辩自述模板(本科、硕博均可使用)
  • Claude:从安全优先的 AI 实验室到创作者协作者(2025 深度解析)
  • BoNBoN——结合行为模仿和偏好对齐进行Best-of-N对齐的方法
  • 【Linux】深入理解Linux进程状态与优先级管理
  • 体坛联播|博洛尼亚时隔51年再夺意杯,皇马逆转马洛卡
  • 联合国第二届运动会闭幕,刘国梁受邀成为“联合国运动会大使”
  • 国台办:80年前台湾重归中国版图,80年后不可能让台湾分裂出去
  • “75万买299元路由器”事件进展:重庆市纪委等三部门联合介入调查
  • 一手实测深夜发布的世界首个设计Agent - Lovart。
  • 江西吉水通报一男子拒服兵役:不得考公,两年内经商、升学等受限