AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第230题 (1.0分) 题号:132若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97),则以下程序段的执行结果是()。ch='a'; k=12; printf(”%x,%o,”,ch,ch,k); printf(”k=%%d\n”,k);

A
 因变量类型与格式描述符的类型不匹配,输出无定值
B
 输出项与格式描述符个数不符,输出为零值或不定值
C
 61,141,k=%d
D
 61,141,k=%12

答案解析

正确答案:C

解析:

这是一道关于 C 语言 `printf` 函数格式化输出及参数匹配的经典题目。我们需要逐步分析代码的执行过程,特别是格式控制字符串与参数列表的对应关系。 ### 1. 变量初始化 * `ch = 'a'`:字符 `'a'` 的 ASCII 码十进制值为 97。 * `k = 12`:整型变量 k 的值为 12。 ### 2. 第一条 printf 语句分析 ```c printf("%x,%o,", ch, ch, k); ``` * **格式字符串**:`"%x,%o,"` * `%x`:以十六进制小写形式输出整数。 * `%o`:以八进制形式输出整数。 * 注意:格式字符串中只有两个格式说明符(`%x` 和 `%o`),但后面提供了三个参数(`ch`, `ch`, `k`)。 * **参数匹配规则**:`printf` 会按照顺序将参数传递给格式说明符。多余的参数会被忽略(除非使用 `%n` 等特殊说明符,这里不涉及)。 * 第一个 `%x` 对应第一个参数 `ch`。 * `ch` 是 char 类型,值为 `'a'` (ASCII 97)。 * 在传递給可变参数函数时,char 会被提升为 int。 * 97 的十六进制表示:$97 = 6 \times 16 + 1$,即 `61`。 * 所以第一部分输出:`61`。 * 第二个 `%o` 对应第二个参数 `ch`。 * 同样,`ch` 值为 97。 * 97 的八进制表示:$97 = 1 \times 64 + 4 \times 8 + 1$,即 `141`。 * 所以第二部分输出:`141`。 * 第三个参数 `k` 没有对应的格式说明符,因此被忽略,不产生输出。 * 格式字符串末尾有一个逗号 `,`,所以紧接着输出一个逗号。 * **第一条语句的最终输出结果**:`61,141,` ### 3. 第二条 printf 语句分析 ```c printf("k=%%d\n", k); ``` * **格式字符串**:`"k=%%d\n"` * `k=`:普通字符,直接输出 `k=`。 * `%%`:在 `printf` 中,`%%` 是转义序列,用于输出一个百分号字符 `%`。它**不**消耗任何参数。 * `d`:普通字符,直接输出 `d`。 * `\n`:换行符。 * **关键点**:整个格式字符串中**没有任何格式说明符**(如 `%d`, `%s` 等)来消耗参数 `k`。虽然传入了参数 `k`,但它没有被使用。 * **第二条语句的最终输出结果**:`k=%d` (随后换行) ### 4. 综合输出结果 将两条语句的输出拼接起来: 1. `61,141,` 2. `k=%d` 最终屏幕显示为:`61,141,k=%d` ### 5. 选项对比 * A. 错误。虽然参数个数多于格式说明符,但这在 C 语言中是合法的,只是多余参数被忽略,不会导致“输出无定值”的错误行为(除非格式说明符多于参数,那才是未定义行为)。 * B. 错误。同上,多余参数被忽略,已匹配的部分正常输出。 * C. **正确**。`61` 是 97 的十六进制,`141` 是 97 的八进制,`k=%d` 是字面量输出。 * D. 错误。`%%` 输出的是 `%`,而不是消耗参数 `k` 的值 `12`。如果格式串是 `"k=%d"`,才会输出 `k=12`。 ### 结论 正确答案是 **C**。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码