• 抬起头,继续前进吧,去把这个不完美的故事,变成你成所期望的样子
  • 登山路上我们会放弃很多东西,但这些被我们丢掉在我们登上山顶之际,都会一一回来
  • 不论开发还是逆向,数学水平的高低直接决定了”你的饭碗里有没有肉”
  • 万丈高楼平地起,勿在浮沙筑高台

《C语言程序设计:现代方法》第四章练习

C 菜鸟 2年前 (2018-01-13) 7261次浏览 已收录 0个评论
[隐藏]

        本篇为菜鸟在学习《C 语言程序设计:现代方法》中第四章做的练习题,如果有错误或疑问的话,欢迎大家指正~

1、运算符

列出下列每段代码的输出结果。假设 i,j 和 k 都是 int 型变量
a)
i = 5 ; j = 3;
printf(“%d %d”, i / j, i % j);
b)
i = 2 ; j = 3;
printf(“%d”, (i + 10) % j);
c)
i = 7 ; j =8 ; k = 9
printf(“%d”, (i + 10) % k / j;
d)
i = 1 ; j = 2 ; k = 3;
printf(“%d”, (i + 5) % (j + 2) / k);
答:
a) 1 2
b) 2
c) 1
d) 0

2、运算顺序

如果 i 和 j 都是正整数,是否(- i)/ j 的值和 – (i / j)的值始终一样?验证
答:一样
验证:

[root@localhost lianxiti_4]# cat test2.c
#include <stdio.h>

main()
{
    int i, j;
    printf("Enter number i : ");
    scanf("%d", &i);
    printf("Enter number j : ");
    scanf("%d", &j);
    printf("%d %d\n", ((-i) / j), (-(i / j)));
    return 0;
}
[root@localhost lianxiti_4]# gcc -Wall -o test2 test2.c
test2.c:4: warning: return type defaults to ‘int’
[root@localhost lianxiti_4]# ./test2
Enter number i : 1
Enter number j : 1
-1 -1
[root@localhost lianxiti_4]# ./test2
Enter number i : 8
Enter number j : 10
0 0
[root@localhost lianxiti_4]# ./test2
Enter number i : 23
Enter number j : 11
-2 -2

3、数字反向 1

编写程序实现数字反向,%d 读入两位数,然后分解。执行过程如下
Enter a two-digit number: 28
The reversal is: 82

#include <stdio.h>

main()
{
    int x;
    printf("Enter a two-digit number: ");
    scanf("%d", &x);
    printf("The reversal is: %d%d\n", (x % 10), (x / 10));

    return 0;
}

4、数字反向 2

扩展问题 3,实现 3 位数的反向

#include <stdio.h>

main()
{
    int x;
    printf("Enter a two-digit number: ");
    scanf("%d", &x);
    printf("The reversal is: %d%d%d\n", (x % 100 % 10), (x % 100 / 10), (x / 100));

    return 0;
}

5、数字反向 3

不使用数学式分割数字方法,实现问题 4

#include <stdio.h>

main()
{
    int x, y , z;
    printf("Enter a two-digit number: ");
    scanf("%1d%1d%1d", &x, &y, &z);
    printf("The reversal is: %d%d%d\n", z, y, x);

    return 0;
}

6、赋值运算符

列出下列每段代码的输出结果。假设 i、j 和 k 都是 int 型变量
a)
i = 7 ; j = 8;
i *= j + 1
printf(“%d %d”, i, j);
b)
i = j = k = 1;
i += j += k;
printf(“%d %d %d”, i, j, k);
c)
i = 1; j = 2; k = 3;
i -= j -= k;
printf(“%d %d %d”, i, j, k);
d)
i = 2; j = 1; k = 0;
i *= j *= k;
printf(“%d %d %d”, i, j, k);
答:
a) 63 9
b) 3 2 1
c) 2 -1 3
d) 0 0 0

7、自增自减运算符 1

列出下列每段代码的输出结果。假设 i、j 和 k 都是 int 型变量
a)
i = 1;
printf(“%d ”, i++ – 1);
printf(“%d”, i);
b)
i = 10; j = 5;
printf(“%d ”, i++ – ++j);
printf(“%d %d”, i, j);
c)
i = 7; j = 8;
printf(“%d”, i++ – –j);
printf(“%d %d”, i, j);
d)
i = 3; j = 4; k = 5;
printf(“%d ”, i++ – j++ + –k);
printf(“%d %d %d”, i, j, k);
答:
a) 0 2
b) 4 11 6
c) 0 8 7
d) 3 4 5 4

8、前缀与后缀

表达式++i 和 i++中哪一个是与表达式(i += 1)完全相同?验证
答:++i
验证:

[root@localhost lianxiti_4]# cat test8.c
#include <stdio.h>

main()
{
    int i = 1;
    printf("++i : %d\n", ++i);
    i = 1;
    printf("i++ : %d\n", i++);
    i = 1;
    printf("(i += 1) : %d\n", (i += 1));
    return 0;
}
[root@localhost lianxiti_4]# gcc -Wall -o test8 test8.c
test8.c:4: warning: return type defaults to ‘int’
[root@localhost lianxiti_4]# ./test8
++i : 2
i++ : 1
(i += 1) : 2
知识点:
后缀自增自减,是先使用值然后在下一条语句执行之前进行自增自减

9、运算符优先级

用圆括号来显示 C 语言编译器解释下列表达式的方法
a) A * b – c * d + e
b) A / b % c / d
c) – a – b + c – + d
d) a * – b / c – d
答:
a) ((A * b) – (c * d) + e)
b) (((A / B)% c) / d)
c) ((-a – b)+ c) – (+d))
d) (((a * (-b)) / c) – d)

10、自增运算符副作用

表达式(i++)+ (i++)共有多少种可能的值?假设 i 初始值为 1,列出可能值
答:3 种,可能值为 2、3、4

11、表达式描述

请描述执行下列每条表达式语句后的效果(假设 i 的初始值为 1,j 的初始值为 2)
a) i += j;
b) i ++;
c) i * j / i;
d) i % ++j;
答:
a) 将 i+j 的值赋给 i。 i 为 3,j 为 2
b) 执行后结果为 1(丢弃),i 的值自增 1,i 为 2,j 为 2
c) 将 i*j 的结果再除以 i,最后的结果丢弃。 i 为 1,j 为 2
d) j 自增 1 后被 i 除以,得到的结果丢弃。i 为 1,j 为 3


学习心得 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明《C 语言程序设计:现代方法》第四章练习
喜欢 (2)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址