Jimmy Chen

A Programmer

C Primer Plus 第六版 第六章课后编程练习答案

编程环境Visual Studio 2017

此文为博主原创文章,转载请注明出处

  1. m4sk说道:

    :cry: 初学者表示,前几章就像小学一样,到了循环一章,课后习题好像直接上了大学,做的是一脸蒙蔽……我是不是该跳过去先过一边书再回来做题。 :confused:

    1. jimmychen说道:

      :idea: 可能会用到后面章节的一些特性吧,要是第一次学的话,可以等看完一遍后再统一做一遍习题。博主是强烈推荐课后的编程题是一定要做一遍的,不然看完书只是知道有这个语法,等到以后要用到真正开始写程序的时候也还是会一脸懵逼的。主要还是坚持啊

  2. 乃么好说道:

    太棒了,原书上练习题答案总是跳过一些题,居然在这找到了,果断关注!!其实也学了一些了,可是真的看到一道题目的时候脑子里学的东西一股脑全部涌上来,烂七八糟毫无头绪,到头来脑子一片空白,不知道你有没有经历这个过程,正如你说的,主要是坚持,向你学习!爱您! :arrow:

    1. jimmychen说道:

      我以前也经历过这样的过程,看着书和代码感觉是基本都理解了,但是做起习题来就连基本的语法都会弄错。坚持多练习多写写代码,这种不适感慢慢会消失的。另外刚刚开始的时候,进度是会有点慢的,不要急躁就好

  3. Ninw说道:

    自从开始学C,觉得自己真TM笨1

    1. jimmychen说道:

      :lol: :lol: 哈哈,没事没事。其实刚刚开始都这样,坚持一段时间就会有感觉了

  4. sunrise说道:

    18题 后面为啥要加这个 我感觉前面程序已经满足条件了。刚学习写程序 啥也不懂哈 所以瞎问 博主别介意哈
    int main(int argc, char **argv)
    {
    p6_18();

    getchar();

    return 0;
    }

    1. jimmychen说道:

      兄弟,这是main函数啊,拿来测试上面的习题用的

  5. 橙了个棒棒糖说道:

    老哥 12题真的没问题吗 还是我理解问题1+1/2+1/3+1/4.。。。不应该是一直小于2吗 还有底下那行 我RUN 你的程序 好像我也不太懂他的结果.....

    1. jimmychen说道:

      :redface: 兄弟,1+1/2+1/3+1/4就已经大于2了啊;这个主要是按照练习算法来写的,具体的求和公式名就不太记得了

      1. 橙了个棒棒糖说道:

        我偷偷我说 你这个貌似有问题欸,我手算好像不太对 而且你的数值好大啊,em 1+1/2+1/3+1/4+1/5 = 11E了都 打印的结果 和最后的你的计算结果也不一样 不然老哥 你留个邮箱? 我题目 运行结果结果什么 的都发给你?(或许我眼拙 没注意什么地方?)

        1. jimmychen说道:

          xiaojimmychen@gmail.com,欢迎给我发邮件!

          1. 橙了个棒棒糖说道:

            之前没注意 现在已发 注意查收 3Q博主了

          2. 橙了个棒棒糖说道:

            之前没注意 现在已发 注意查收

  6. 发大水r说道:

    float money=100.0;
    float left=100.0;
    int i=0;
    do
    {
    i++;
    money=money*1.08;
    left=money-10.0;

    }while(left>0);
    printf("after %d years money will be zreo",i);

    return 0;

    }
    第十七题我是这样写的,但不知道哪里出错了

    1. jimmychen说道:

      这个,你其实可以自己带入数字算两三个循环就能看出问题了。按照你这个写,money和left只会越来越大,是不可能会退出do while循环的

  7. XueZhe说道:

    第五道练习题 内层循环条件应该是length-i-1

    1. jimmychen说道:

      谢谢,改回来了!

  8. my说道:

    13题应该是pow(2,i)吧

  9. Mr_cola说道:

    大大,我很想了解一下第七题的memset这个函数的作用是什么。我在运行后,把这俩行删除了,运行结果也是一样的。能不能告诉一下这个作用是啥。

    1. jimmychen说道:

      memset作用是对一块内存地址填充为对应值,相当于初始化,具体作用你可以百度一下这个函数就好

  10. arcu说道:

    楼主,第5题char ch = 0和scanf_s("%c", &ch);那里,为什么ch定义为int结果就是空白呢?int获取的不是也是ascii码吗

    1. jimmychen说道:

      你用的是什么编译器?用visual studio是可以的

  11. sh说道:

    14题 double darray1[8]和for (size_t i = 0; i < 8; i++)这儿。数组不是从[0]开始的吗.
    我是darray1[7],for (size_t i = 0; i <=7; i++)这样。但是最后第8个就不会显示或者0,[7]改成[8]就正常了,楼主求解

    1. jimmychen说道:

      数组是从[0]开始的,你定义darray1[7],代表数组有7个成员,从[0]开始计算的话,那最大到[6],这就有7个成员了,而for(size_t i = 0; i <=7; i++),是从[0]到[7],这里有8个成员,当赋值darray1[7]的时候就会导致数组越界了

      1. ch说道:

        谢谢楼主回复了,意思是数组[x]里的数字实际上是代表有x个成员而不是有0~x这么个位置?也就是数组从0开始只能容纳[X-1]个?

        1. jimmychen说道:

          是的,就是这个意思

  12. 光辉岁月说道:

    楼主好!我是C初学者。然后刚进这个论坛,不太清楚评论规则。刚才发表了两次评论,我发现找不到。我又申请了个账号再来评论。希望你能看到。如有打扰之处,请谅解。感谢。
    你看我把第一题这样写行不行,如果有不对的地方请一定不吝赐教。再次感谢!
    #include
    int main()
    {
    char x[26];
    x[0] = 'a';
    int y;
    for (y = 0;y < 26;y++)
    {
    x[y] = 'a' + y;
    printf("%c ", x[y]);
    }
    printf("\n");
    return 0;

    1. jimmychen说道:

      看起来没什么问题啊,你编译运行后得不到想要的答案吗?

      1. txt1994说道:

        头文件没拼写全 :lol:

  13. 染指让你萌萌哒说道:

    请问你写程序之前有没有什么先前步骤呀,特别是第五题开始,没有思路。不知道怎么开始。还有循环的出入条件。。。我都不能完全确定诶。。。

    1. jimmychen说道:

      感觉也是看功能需求是什么,然后就会想用什么算法实现比较简单,怎么组织代码,之类的。

  14. 加币娘说道:

    忘记勾选电子邮件通知了。博主你的主题太好看了,有配置文件方便发下吗谢谢 :mrgreen:

    1. jimmychen说道:

      博客的主题在最底部有原作者的链接,你可以去看看

  15. jimmychen说道:

    博客的主题在最底部有原作者的链接,你可以去看看

  16. Allen说道:

    分享一个第三题有意思的写法哈哈
    int i=0;
    char c = 'F';
    for(;i<6;c='F',printf("\n"),i++)
    for(int l = 0;printf("%c",c),l<i;c--,l++);

    1. jimmychen说道:

      :mrgreen: :mrgreen: 哈哈,这个写法也可以。方法多样,能实现就行

  17. ALLEN说道:

    第五题也可以这么写
    #include
    #include
    int main(void)
    {
    int i;
    for(i=1; i<6;i++)
    {
    for(int l=0;l<5-i;l++,printf(" "));
    for(int p = -i+1;p<i;printf("%c",'A'+i-1-abs(p)),p++);
    printf("\n");
    }
    }

  18. 闵波路三舅说道:

    第5题的主函数去哪了?? :lol:

    1. jimmychen说道:

      主函数放在源码最后

  19. 友人A说道:

    第11题要求倒序打印这8个数,这样的话是要把第二个for循环改成这样吗?
    for(size_t i = 0;i < 8;i++)
    {
    printf("%d",ch[7-i]);
    }

    1. jimmychen说道:

      如果是要求倒序的话,那就按你上面写的做。当时我可能看错了

  20. junxing zhou说道:

    :redface: :redface:
    请教一下博主 第五题打印金字塔 我想用书上前面提到的变宽度输出 printf("%*c",width,ch); 但我的边界老出错 可以告诉我该怎么改嘛 我试了好几天了

  21. 快乐小年说道:

    你这答案复杂化了 不知道是不是故意搞这么深沉

    1. jimmychen说道:

      不知道你说的是哪道题?以及你的想法是?

  22. eeee说道:

    你们好,我是C语言的初学者
    关于第7题,我填写了2个式子:
    一个是#include
    #include
    #define SIZE 40
    int main(void)
    {
    char words[SIZE];
    int i=0;

    while ((words[i] = getchar()) != '\n')
    {

    i++;

    }
    for (size_t j=i; j > 0; j--)
    printf("%c", words[j-1]);

    getchar();
    getchar();
    return 0;

    }
    另一个是:
    #include
    #include
    #define SIZE 40
    int main(void)
    {
    char words[SIZE];
    int i=0;

    while ((words[i] = getchar()) != '\n')
    {

    i++;

    }

    for (size_t j=i; j > 0; j--)
    printf("%c", words[j-1]);

    getchar();
    getchar();
    return 0;

    }

    for (size_t j=i; j > 0; j--)
    printf("%c", words[j-1]);

    getchar();
    getchar();
    return 0;

    }
    但我在调试的时候,一个是成功的,另一个是失败的,我不知道到底哪里产生区别了,求助大佬们。

  23. iiiiiiiiiiii说道:

    感谢!

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

%d 博主赞过: