做好闭环(一):不看答案可能就白学了
第一个程序:教你输出彩色的文字
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在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-165 - 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-183 - 1043思考题感觉确实很不简单,既能熟练所学内容又是重点要掌握的技能,把实际问题转换成变成思维,再转换成编程语言更好办一些,也更深刻一些。容我再思考思考练练再答今天和以前的题目。 另外想问一下胡老师用哪个发行版的Linux,我也要换,我现在用的是Debian10,安装了gcc如何才能打开呢?没安vim用系统自带的vi是不是也可以啊?百度查了一圈都是打开后的gcc,用什么命令打开gcc和别人的源程序文件呢?
作者回复: vim用来编辑程序,vi也可,gcc是用来编译程序的,不是用来打开程序的,编译好后,会在你当前文件夹下生成一个默认名字是a.out的文件,执行即可,执行需要运行命令./a.out,此外如上操作都需要在terminal下进行。我用的是Mac(。ì _ í。)
2020-04-031 - WaterZhai在百度上找的,那个叫线性同余法。
作者回复: d(^_^o) 学习习惯很棒!
2020-03-201 - 淡蓝色随机函数的那道题: #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-1621 - 信念第一个位数输出的程序 第7行的char output[50]; int ret = sprintf(output, "%d", n) 没太看懂,ret是什么意思呀?
作者回复: ret是个整形变量啊。没什么特殊的。
2020-02-0521 - 学写代码的猪渐入佳境,跟着学就是了。
作者回复: d(^_^o)
2020-01-181 - 学写代码的猪j == 1 || printf("\t"); 老师这样语句,c 的编译器一定从左往右一个一个条件判断(计算值)吗? 有可能从右往左或者随机吗?
作者回复: 对,你上网搜运算符优先级,其中每一个等级的运算符都有一个计算顺序,条件或的计算顺序是从左向右。这是有规定的,跟编译器无关。
2020-01-181 - 梅利奥猪猪毛丽莎肉酱其实有挺多东西想说的,首先我的确是七大罪动漫爱好者,虽然现在动画有点ppt了,哈哈扯远了,先说那个乘法表,那个或的知识应该是短路或者惰性的知识吧,我是个前端工程师,有时候就会写到条件&&函数(),这个其实就是条件为真则执行函数,然后还看到过个类似的基础题,true||true&&false答案是true,新手可能直接回答错,从左往右看,认为是false,稍微厉害点的,看优先级,然后得出答案是true,其实这边在多想一步,优先级先计算了右边的true&&false,但true||任何其他什么,肯定就是true,希望自己理解是对的,至于后面个迷你随机数,真的难,哈哈刚看了下互质和欧拉,勉强看懂,有种被要被劝退的感觉,关于随机数随机种子这个其实挺有兴趣的,兴趣来源于一个例子,叫做游戏里随机的场景,用户中途退了,下次进入场景和之前退出的游戏场景一致,就是用了随机种子,然后那个例子实现这个随机函数,用了三个很奇怪的数字,这个当时看也没有看的特别懂,总结就是虽然不知道怎么回事,但总觉得很厉害,学无止境,还是要持续的坚持学习~
作者回复: d(^_^o)
2020-01-181 - 小风体验利器那道题,实现strlen功能的那个,怎么让他输出字符长度呢,请老师解答
作者回复: 你可以用 printf 输出 sprintf 的返回值啊。 另外,你可以将 sprintf(str1, "%s", str1); 就看成是 strlen(str1); 的另一种代码表示方式,strlen(str1) 怎么用,sprintf(str1, "%s", str1); 就怎么用。
2020-05-043