第6章 回顾数据类型和表达式
【练习6-1】 输入一个十进制数,输出相应的八进制数和十六进制数。例如:输入 31,输出 37 和 1F。
解答:
#include
int main(void)
{
int x;
scanf("%d", &x);
printf("%o %x\n", x, x);
return 0;
}
【练习6-2】 在程序段:
printf("input a, b: ");
scanf("%o%d", &a, &b);
printf("%d %5d\n", a, b); /* %5d 指定变量 b 的输出宽度为 5 */
中,如果将scanf("%o%d", &a, &b) 改为 scanf("%x%d", &a, &b),仍然输入 __17 ___17__,输出是什么?
解答: 23 17(中间有三个空格)
【练习6-3】 如果字符型变量 ch 的值是大写字母,怎样的运算可以把它转换为小写字母?
解答:
ch=ch-‘A’+‘a’;
【练习6-4】 证明下列等价关系。
(1)a&&(b||c) 等价于a&&b||a&&c。
(2)a||(b&&c)等价于(a||b)&&(a||c)。
(3)!(a&&b)等价于 !a||!b。
(4)!(a||c)等价于!a&&!b。
解答:
(1)
a b c a&&(b||c) a&&b a&&c a&&b||a&&c
0(假) 0(假) 0(假) 0 0 0 0
0(假) 0(假) 非 0(真) 0 0 0 0
0(假) 非 0(真) 0(假) 0 0 0 0
0(假) 非 0(真) 非 0(真) 0 0 0 0
非 0(真) 0(假) 0(假) 0 0 0 0
非 0(真) 0(假) 非 0(真) 1 0 1 1
非 0(真) 非 0(真) 0(假) 1 1 0 1
非 0(真) 非 0(真) 非 0(真) 1 1 1 1
(2)
a b c b&&c a||(b&&c) a&&b a||c (a||b)&&(a||c)
0(假) 0(假) 0(假) 0 0 0 0 0
0(假) 0(假) 非 0(真) 0 0 0 1 0
0(假) 非 0(真) 0(假) 0 0 1 0 0
0(假) 非 0(真) 非 0(真) 1 1 1 1 1
非 0(真) 0(假) 0(假) 0 1 1 1 1
非 0(真) 0(假) 非 0(真) 0 1 1 1 1
非 0(真) 非 0(真) 0(假) 0 1 1 1 1
非 0(真) 非 0(真) 非 0(真) 1 1 1 1 1
(3)
a b a&&b !a&&b !a !b !a||b
0(假) 0(假) 0 1 1 1 1
0(假) 非 0(真) 0 1 1 0