【简单的c程序设计精选题】
简单的c程序设计精选题
- 一、易错题
- 1.1🏆printf 函数的格式化输出1
- 1.2🏆printf 函数的格式化输出2
- 1.3🏆scanf函数的输入1
- 1.4🏆scanf函数的输入2
- 1.5🏆字符型变量的正确赋值
- 1.6🏆赋值语句1
- 1.7🏆赋值语句2
- 二、精选填空
- 2.1🏆负数的进制转换
- 2.2🏆printf 格式化输出
- 2.3🏆printf 格式化输出2
- 2.4🏆printf 格式化输出3
- 2.5🏆printf 强制输出符号4
- 2.6🏆 整型变量的值
🍻适合计算机二级,考研复试,期末复习…
一、易错题
1.1🏆printf 函数的格式化输出1
printf(“y = %-8ld\n”, y);:%-8ld 表示以长整型输出 y 的值,并且左对齐,总宽度为 8 个字符。因为数值本身占 6 个字符(包含负号),所以后面会补 2 个空格 ,输出 y = -43456 。
printf(“y = %-08ld\n”, y);:%-08ld 这种写法在标准 C 中,-(左对齐)和 0(用 0 填充)是冲突的,大多数编译器会忽略 0 标志,只按照左对齐处理,输出 y = -43456 。
printf(“y = %08ld\n”, y);:%08ld 表示以长整型输出 y 的值,总宽度为 8 个字符,不足的部分用 0 填充,输出 y = -0043456。
printf(“y = %+8ld\n”, y);:%+8ld 表示以长整型输出 y 的值,总宽度为 8 个字符,并且输出数值的符号,右对齐,前面补空格,输出 y = -43456。
答案C
该 C 程序涉及 printf 函数的格式化输出知识点:
宽度控制:如 %8ld 表示输出长整型数,总宽度为 8 个字符,默认右对齐,不足则补空格。
左对齐标志:%-8ld 中 - 表示左对齐,即数据在指定宽度内靠左,剩余位置补空格。
0 填充标志:%08ld 中 0 表示用 0 填充宽度不足的部分 。
符号显示:%+8ld 中 + 使输出数值带上正负号。 同时需注意,左对齐和 0 填充冲突时,多数编译器忽略 0 填充。
ld是格式说明符的一部分,用于指定输出的数据类型为长整型(long)
lx用于将长整型(long)数据按照十六进制无符号整数的形式输出,且十六进制字母以小写表示
1.2🏆printf 函数的格式化输出2
printf(“y = %3o\n”, y);:%3o 表示以八进制形式输出 y 的值,总宽度为 3 个字符。y 的值为 2456,转换为八进制是 4630,由于宽度为 3,而 4630 占 4 位,所以按实际位数输出,即输出 y = 4630。
printf(“y = %8o\n”, y);:%8o 表示以八进制形式输出 y 的值,总宽度为 8 个字符。右对齐,前面补空格,所以输出 y = 4630。
printf(“y = %#8o\n”, y);:%#8o 中 # 是一种标志,会在八进制数前加上前缀 0 ,总宽度为 8 个字符,右对齐,前面补空格, 输出 y = 04630。
答案 D
🎈在八进制中,%#o 会在输出的八进制数值前添加前缀 0;在十六进制中,%#x 会在输出的十六进制数前添加前缀 0x,%#X 则添加前缀 0X,用于明确标识输出数值的进制形式 。 而在十进制(%d)等其他常见整数输出格式中,# 标志通常没有特殊效果。
1.3🏆scanf函数的输入1
选项 A:%d 用于读取 int 型数据给 x,%lx 用于读取十六进制表示的长整型数据赋值给 y(int 类型可以接收),%le 用于读取 double 型数据给 z,格式和数据类型匹配,调用合法。
选项 B:%2d限制读取两位整数,*为字面字符需原样输入,%d对应int,%lf对应double。整体调用合法。
选项 C:%x 用于读取十六进制整数给 x,%*d 中 * 表示跳过一个 int 型输入数据,%o 用于读取八进制整数给 y,调用合法。
选项 D:scanf中不允许指定精度(如%6.2f),这是printf的用法。
答案D
1.4🏆scanf函数的输入2
第一个 scanf(“%d%d”, &a1, &a2)
%d 会跳过输入中的空白字符(包括换行符),读取两个整数。
输入 10 后换行,scanf 会跳过换行符,继续读取 20,此时 a1=10, a2=20。
输入流剩余字符:A, B, 换行符。
第二个 scanf(“%c%c”, &c1, &c2)
%c 不会跳过空白字符,直接读取输入流中的下一个字符。
输入流剩余字符为 A 和 B,因此 c1=‘A’, c2=‘B’,符合题目要求。
连续的%c前不能空格符分割,连续的%d必须通过空格符进行分割输入!
1.5🏆字符型变量的正确赋值
选项 A:在 C 语言中,字符型变量只能存储一个字符,‘123’ 是用单引号括起来的三个字符,这不符合字符型变量的赋值规则,单引号用于表示单个字符常量,所以 A 错误。
选项 B:‘\xff’ 是一个十六进制转义字符表示形式。在 C 语言中,以 \x 开头后面跟十六进制数字表示一个字符的 ASCII 码值,ff 是十六进制数,它对应一个确定的字符,这种赋值方式是正确的。
选项 C:‘\08’ 是错误的转义字符表示。八进制转义字符是以 \ 开头,后面跟的数字应该是 0 到 7 之间的数,而这里出现了数字 8,不符合八进制的规则,所以 C 错误。
选项 D:在 C 语言中,双引号 “” 用于表示字符串,而字符型变量只能存储单个字符,应该用单引号 ‘’ 来表示单个字符,所以 ch = “”" 是错误的,D 错误。
答案B
如果想让123表示字符对应的 ASCII 码:char ch = 123;char ch = ‘\173’; char ch = ‘\x7b’;
1.6🏆赋值语句1
选项 A:在 C 语言中,一条语句结束要用分号;,多个语句写在一行时,每个语句后都要有分号。a = 1; b = 2, 中b = 2 后面是逗号,不是分号,属于语法错误,所以 A 选项不正确。
选项 B:b++ 是自增运算符,表示将变量b的值增加 1,是合法的赋值表达式语句,所以 B 选项正确。
选项 C:在 C 语言中,不能在一个赋值语句中连续对多个变量赋值,a = b = 5这种写法不符合语法规则,正确的写法可以是b = 5; a = b; ,因此 C 选项错误。
选项 D:在 C 语言中,将浮点数x强制转换为整数赋值给b,强制类型转换的正确写法应该是b = (int)x; ,而不是b = int (x); ,所以 D 选项错误。
答案B
注意:虽然变量b未初始化直接使用b++在语法上是允许的 。b++会对b当前的值进行自增操作,只是由于b未初始化,其初始值是不确定的,自增后的结果也是不确定值,但从语句本身的语法结构来看,它符合 C 语言中自增表达式语句的形式,所以该赋值语句在语法层面是正确的。
1.7🏆赋值语句2
答案D
二、精选填空
2.1🏆负数的进制转换
答案: i: dec = -4, oct = 177774, hex = ffff fc, unsigned = 65532
负数的进制转换:
2.2🏆printf 格式化输出
d(1)=%e → 默认显示6位小数,3.5 → 3.500000e+00
d(2)=%.4e → 小数点后4位,3.5000e+00
d(3)=%10.4e → 宽度10,刚好填充,3.5000e+00(没有前导空格)
d(4)=%e → -3.500000e+00
d(5)=%.6e → 小数点后6位,-3.500000e+00
d(6)=%-12.5e → 左对齐,小数点后5位,总宽度12,-3.50000e+00(无尾随空格)
答案:
关键点总结:
%e格式:科学计数法,默认6位小数,格式为[±]x.xxxxxxe±yy。
精度控制:.n指定小数点后位数(如.4e保留4位小数)。
宽度与对齐:%m.ne 中m为总宽度,默认右对齐;%-m.ne 为左对齐,不足时填充空格。
负数处理:负号占用一个字符宽度,影响总宽度计算。小数点也占位。
另外:%g 格式会根据数值的大小,自动选择 %f (小数形式)或者 %e (科学计数法形式)中较短的一种来输出,并且去掉末尾无意义的零。pi 输出为 3.1416。
2.3🏆printf 格式化输出2
【1】解析
在 printf 格式控制字符串中,* 是一种宽度修饰符。当遇到 * 时,printf 函数会从参数列表中获取一个整数值,以此作为该输出项的宽度。
【2】循环从 i = 1 开始,到 i <= 5 结束。每次循环:
对于 printf(“# # %*d\n”,i,i);,第一个 i 用于指定第二个 i 的输出宽度。
2.4🏆printf 格式化输出3
printf(“%6d # #\n”, x);
%6d表示输出至少占6个字符的十进制整数,右对齐,不足部分用空格填充。变量x的值为12(占2位),因此左侧填充4个空格。
输出: 12 # #
printf(“%-6d # #\n”, x);
%-6d中的-表示左对齐,总宽度仍为6字符。12占2位,右侧填充4个空格。
输出: 12 # #
printf(“%14.10lf # #\n”, a);
%14.10lf表示总宽度14字符,保留10位小数,右对齐。变量a的值为3.1415926,但格式化为10位小数时会补充末尾零,结果为3.1415926000(共12位:1位整数+1位小数点+10位小数)。总宽度14字符下,左侧填充2个空格。
输出: 3.1415926000 # #
printf(“%-14.10lf # #\n”, a);
%-14.10lf表示左对齐,总宽度14字符。数值部分仍为3.1415926000(12位),右侧填充2个空格以满足总宽度。
输出: 3.1415926000 # #
答案:
2.5🏆printf 强制输出符号4
整数部分 %+06d 的解析:
%+ 表示强制输出符号(正数显示 +,负数显示 -)。
06 表示最小字段宽度为6,不足部分用 0 填充。
a 的值是325(正数),加上符号占1位,剩余5位用零填充,因此输出 +00325。浮点数部分 %+e 的解析:
%+e 表示以指数形式输出,强制显示符号。
3.1415926 默认保留6位小数,四舍五入后为 3.141593,指数部分 e+00 表示乘以10的0次方。最终输出 +3.141593e+00。
答案:
2.6🏆 整型变量的值
变量 x 的值
x 被赋值为 32767。由于16位有符号整型 (int) 的范围是 -32768 到 32767,32767 是其最大值,因此 x 的值合法且未发生溢出,最终为 32767。
变量 z 的值
z 的赋值语句为 z = m = 0xFFFF。十六进制 0xFFFF 对应十进制 65535。
若 long 类型为32位(常见于16位系统),m 会存储 65535(32位无符号)。但 z 是16位有符号整型 (int),将 65535 转换为 int 时,会截断为低16位 0xFFFF,对应有符号整型的 -1(二进制补码表示)。
因此,z 的最终值为 -1,printf 输出 -1。
变量 m 的值
m 是 long 类型。若 long 为32位,则 m 存储 0xFFFF 的完整值 65535。若 long 为16位(罕见),则 0xFFFF 会被视为有符号的 -1。但根据C标准,long 至少为32位,因此更合理的值为 65535。