人人都能学会的编程入门课
胡光
原百度高级算法研发工程师
19410 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
开篇词 (1讲)
人人都能学会的编程入门课
15
15
1.0x
00:00/00:00
登录|注册

做好闭环(一):不看答案可能就白学了

你好,我是胡光。
不知不觉,语言基础篇已学习过半,我非常高兴,看到很多同学都在坚持学习。并且,还有一些同学,每每都能在专栏上线的第一时间里,给我留言,提出疑惑。当面对一些知识点的时候,如果在我的观念中它是不说自明,而对于新手的你来说,可能十分难理解的时候,我也很希望你能指出来,我会在留言区中给你解答的。因为,我知道这种讨论,肯定能够帮助到更多的人。
大部分留言,我都在相对应的文章中回复过了,而对于文章中的思考题呢,由于要给你留足思考时间,所以我选择,一起留在今天这样一篇文章中,给你进行一一的解答。
看一看我的参考答案,和你的思考结果之间,有什么不同吧。也欢迎你在留言区中,给出一些你感兴趣的题目的思考结果,我希望我们能在这个过程中,碰撞出更多智慧的火花。在这里呢,@rocedu 用户在第一篇留言区中给大家推荐的《程序设计实践》一书,也是非常优秀的书籍。有兴趣的小伙伴,也可以去到他提到的豆瓣读书主页中去游览一番。

第一个程序:教你输出彩色的文字

在这一篇里面呢,我们接触了如何在 Linux 环境下输出彩色文字的编程知识。初步学习了 scanf 和 printf 函数的基础用法,两者一个负责读入,一个负责输出。如果你对这篇文章的内容有点陌生,可以再回去看看《第一个程序:教你输出彩色的文字》。最后围绕着这两个函数,给你出了两个思考题。这两个思考题做的怎么样?下面来看看我的参考答案吧。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了在Linux环境下输出彩色文字的编程知识,以及如何使用scanf和printf函数的基础用法。此外,还涵盖了条件表达式、if语句、for语句等知识内容,并给出了相关思考题。另外,文章还介绍了程序中随机函数的基本原理,区分了“真随机”和“伪随机”的本质区别,并留下了一个设计随机函数过程的思考题。整体而言,本文内容涵盖了程序设计的基础知识,包括输入输出、条件判断、循环结构和随机函数,适合初学者快速了解程序设计的基础概念。文章还包括了两个思考题,分别涉及位数输出和读入一行字符串,以及打印乘法表的思考题。此外,还介绍了字符串的高级用法,以及相关的思考题。整体而言,本文内容涵盖了程序设计的基础知识,包括输入输出、条件判断、循环结构和随机函数,适合初学者快速了解程序设计的基础概念。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《人人都能学会的编程入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 罗耀龙@坐忘
    茶艺师学编程 看完了老师的解答,觉得前面的我简直就是蠢得可以······ 第一课: 思考题1 我使用了(int)log10(n)+1来算位数,老师直接用printf的返回值就搞定了。 而且老师使用的printf嵌套printf这一招,太漂亮了; 思考题2 我知道scanf碰到空格就会停止读取。但我傻傻的在接水管。老师直接一个[^\n](只要不是换行)就解决了问题了。 当然这个[]里面不能乱填,我就试过“null”······ 第二课: 思考题-乘法表 我这里使用了3个变量,多出来的一个是单独用来控制格式的。但老师直接使用两个变量加一个“||或”判断解决问题,漂亮。 第四课: 思考题-设计迷你随机函数 关键是在随机数的生成方法,我用的是以时间函数为种子,通过99 * rand()/RAND_MAX + 1选取100个随机数。 而老师使用的是以n=5,n = (n * 3) % 101,算100次。就观感而言,老师的随机感会比我的更明显——我的数字大概率是不会出现“100”。 第五课: 关键,是以m为倍数标记数组,再把被标记的数组去掉,进而得出“不能被整除的数”。这样的构思,太妙了。 第六课: 在这里我一直在想如何“遍历到结尾”,我找到的方法是“\n”,就是我们在输入后要按一下的回车。 而老师的判断条件str[i]实在是太漂亮了,字符串的结尾“\0”才是假值——结束循环。 还有老师的字符串循环,太漂亮了,我得好好学习——在printf里用str[i]就出错······

    作者回复: (′▽`〃)

    2020-05-16
    5
  • Jinlee
    看了老师的答疑,解决了前面不少的困惑。至于那个迷你随机数,是真的不怎么懂。先放着吧,先广后精,嘿嘿。还有,给老师提一个小小建议,就是在示例代码中加入一些文字,这样可读性更强,对初学者更友好。不然面对一个黑框框,初学者容易懵,不知道该干嘛了。去掉倍数那个思考题,自己也实现了,代码如下,但是老师的方法应该应用更加广泛。 #include <stdio.h> int main(){ int n, m; printf("请输入两个数:\n"); scanf("%d%d", &n, &m); int arr[n]; int i, j; for (i = 0; i < n; i++) { printf("输入第%d个正整数:\n", i+1); scanf("%d", &arr[i]); } printf("\n"); for (j = 1; j <= m; j++){ for (i = 0; i<n; i++){ if (j % arr[i] == 0) break; //能被n个不同正整数中某个整除则跳出循环,进入if语句 } if (i == n) printf("%d\n", j); // 如果i == n,则说明for循环一直进行到最后j都没有被n个不同正整数中的任意一个整除,此时j符合要求,输出 } return 0; }

    作者回复: 好的,你的建议非常好,我会在后面的文章中采纳,你的代码方法也是对的。d(^_^o)

    2020-01-18
    3
  • 1043
    思考题感觉确实很不简单,既能熟练所学内容又是重点要掌握的技能,把实际问题转换成变成思维,再转换成编程语言更好办一些,也更深刻一些。容我再思考思考练练再答今天和以前的题目。 另外想问一下胡老师用哪个发行版的Linux,我也要换,我现在用的是Debian10,安装了gcc如何才能打开呢?没安vim用系统自带的vi是不是也可以啊?百度查了一圈都是打开后的gcc,用什么命令打开gcc和别人的源程序文件呢?

    作者回复: vim用来编辑程序,vi也可,gcc是用来编译程序的,不是用来打开程序的,编译好后,会在你当前文件夹下生成一个默认名字是a.out的文件,执行即可,执行需要运行命令./a.out,此外如上操作都需要在terminal下进行。我用的是Mac(。ì _ í。)

    2020-04-03
    1
  • WaterZhai
    在百度上找的,那个叫线性同余法。

    作者回复: d(^_^o) 学习习惯很棒!

    2020-03-20
    1
  • 淡蓝色
    随机函数的那道题: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); for(int i=1;i<=10;++i) for(int j=1;j<=10;++j) { printf("%d ",rand()%100); if(j==10) printf("\n"); } return 0; }

    作者回复: 不对哦,你运行一下,看看其中是不是有重复的数字。

    2020-03-16
    2
    1
  • 信念
    第一个位数输出的程序 第7行的char output[50]; int ret = sprintf(output, "%d", n) 没太看懂,ret是什么意思呀?

    作者回复: ret是个整形变量啊。没什么特殊的。

    2020-02-05
    2
    1
  • 学写代码的猪
    渐入佳境,跟着学就是了。

    作者回复: d(^_^o)

    2020-01-18
    1
  • 学写代码的猪
    j == 1 || printf("\t"); 老师这样语句,c 的编译器一定从左往右一个一个条件判断(计算值)吗? 有可能从右往左或者随机吗?

    作者回复: 对,你上网搜运算符优先级,其中每一个等级的运算符都有一个计算顺序,条件或的计算顺序是从左向右。这是有规定的,跟编译器无关。

    2020-01-18
    1
  • 梅利奥猪猪毛丽莎肉酱
    其实有挺多东西想说的,首先我的确是七大罪动漫爱好者,虽然现在动画有点ppt了,哈哈扯远了,先说那个乘法表,那个或的知识应该是短路或者惰性的知识吧,我是个前端工程师,有时候就会写到条件&&函数(),这个其实就是条件为真则执行函数,然后还看到过个类似的基础题,true||true&&false答案是true,新手可能直接回答错,从左往右看,认为是false,稍微厉害点的,看优先级,然后得出答案是true,其实这边在多想一步,优先级先计算了右边的true&&false,但true||任何其他什么,肯定就是true,希望自己理解是对的,至于后面个迷你随机数,真的难,哈哈刚看了下互质和欧拉,勉强看懂,有种被要被劝退的感觉,关于随机数随机种子这个其实挺有兴趣的,兴趣来源于一个例子,叫做游戏里随机的场景,用户中途退了,下次进入场景和之前退出的游戏场景一致,就是用了随机种子,然后那个例子实现这个随机函数,用了三个很奇怪的数字,这个当时看也没有看的特别懂,总结就是虽然不知道怎么回事,但总觉得很厉害,学无止境,还是要持续的坚持学习~

    作者回复: d(^_^o)

    2020-01-18
    1
  • 小风
    体验利器那道题,实现strlen功能的那个,怎么让他输出字符长度呢,请老师解答

    作者回复: 你可以用 printf 输出 sprintf 的返回值啊。 另外,你可以将 sprintf(str1, "%s", str1); 就看成是 strlen(str1); 的另一种代码表示方式,strlen(str1) 怎么用,sprintf(str1, "%s", str1); 就怎么用。

    2020-05-04
    3
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部