03 | 判断与循环:给你的程序加上处理逻辑
今日任务
必知必会,查缺补漏
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了C语言中的判断与循环的基础知识,通过一个具体的任务引入,帮助读者快速了解了C语言中的条件判断语句和循环语句的使用方法。文章详细讲解了条件判断语句“if...else”的语法结构和条件表达式的概念,以及循环语句“while”和“for”的语法结构和使用方法。通过具体的代码示例,读者可以学习如何在C语言中实现逻辑判断和重复执行功能。此外,文章还提到了闰年的规则和如何将思路转换成程序过程。总体而言,本文通过实际任务的引入和具体的代码示例,帮助读者快速了解了C语言中判断与循环的基础知识,并展示了如何运用这些知识解决实际问题。值得注意的是,文章还强调了程序的执行顺序对于理解程序的重要性,为读者提供了重要的技术指导。
《人人都能学会的编程入门课》,新⼈⾸单¥59
全部留言(58)
- 最新
- 精选
- Paradise思路清晰,语言干练,通俗易懂,做了几年前端看老师的文章一样觉得很有收获!
作者回复: d(^_^o)
2020-01-1310 - Noya#include <iostream> using namespace std; int year, month, day; int x; bool isLeap() { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true; return false; } int calcMonth() { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: { if (isLeap()) return 29; else return 28; } default: return 30; } } void calc(int x) { int surplus = calcMonth() - day; if (surplus >= x) { printf("%d %d %d", year, month, day + x); return; } else { x -= surplus; day = 0; month++; if (month > 12) { year++; month = 1; } calc(x); } return; } int main(void) { printf("Please enter the start date!\n"); scanf("%d%d%d", &year, &month, &day); printf("Please enter the number of days!\n"); scanf("%d", &x); calc(x); return 0; }
作者回复: 赞,你这种解答,倒是挺新鲜的。Y(^_^)Y
2020-04-269 - 研发1.乘法表 #include <stdio.h> int main() { for(int i= 1;i<=6;i++){ for(int j=1;j<=i;j++){ if(j==i){ printf("%d*%d=%d",j,i,i*j); }else{ printf("%d*%d=%d\t",j,i,i*j); } } printf("\n"); } return 0; } 2.日期计算 #include <stdio.h> int main(){ int y,m,d; int x; scanf("%d%d%d",&y,&m,&d); scanf("%d",&x); for(int i=0;i<x;i++){ d+=1; switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: if(d>31){ d=1; m+=1; } break; case 12:{ if(d>31){ d=1; m+=1; } if(m==13){ m=1; y+=1; } break; } case 6: case 9: case 11: if(d>30){ d=1; m+=1; } break; case 2: if(y%4==0&&y%100!=0||y%400==0){ if(d>29){ d=1; m+=1; } }else{ if(d>28){ d=1; m+=1; } } } } printf("%d-%d-%d\n",y,m,d); return 0; }
作者回复: perfect!!完全正确!
2020-03-0355 - 罗耀龙@坐忘茶艺师学编程 花了好几天才把这节课给消化完······ 在补全课文的例子时卡了很久,到了后来才发现,switch···case···语句的case是要把switch的情况给穷举了,对应与课文中的例子,switch(m),月的情况,对应就要有case1、case2、case3、······、case9、case10、case11、case12。 这里是补全的代码: #include <stdio.h> int main() { int y, m, d, X; // 定义存储 年月日 和 X 的变量 scanf("%d%d%d", &y, &m, &d); // 读入年月日 scanf("%d", &X); // 读入 X 值 for (int i = 0; i < X; i++) { // 循环 X 次,每次向后推一天 d += 1; switch (m) { //这里是以月(m)的情况做处理 ,一年有12个月,因此下面的Case要有12个(这里卡了我好久啊) case 1: case 3: case 8: case 7: case 10: case 12: case 5: { // 第一部分逻辑 31天的月份处理 if (d > 31) d = 1, m += 1; if (m == 13) m = 1, y += 1; }; break; case 4: case 11: case 9: case 6: { // 第二部分逻辑 30天的月份处理 if (d > 30) d = 1, m += 1; } break; case 2: { // 第三部分逻辑 2月的处理 if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { if (d > 29) d = 1, m += 1; } else if (d > 28) { d = 1, m += 1; } } break; } } printf("%d %d %d\n", y, m, d); return 0; } 作业题,按照格式打印1-6的乘法表。我分阶段的遇到一下问题: 不知道如何生成乘法表 生成的乘法表有有重复的部分 生成的乘法表不懂得换行 每一道坎我都花了一天·······但还是出来了。 尤其是我想到用变量c来控制乘法表的换行,并真的实现的时候,真的很有成就感。 但不过1秒,我觉得这代码还得该:行的间距太大了····· 这是代码: #include <stdio.h> int main() { int a,b,c; //三个变量,第三个是用来控制格式的 for (b = 1 ; b <= 6 ; b++ ){ //这里处理乘法表(1-6)的部分 for (a=1;a<=b;a++)printf(" %d * %d = %d\t",a,b,a*b); for (c=1; c<=6;c++)printf("\n"); //这里处理展示格式的 } return 0; }
作者回复: 很不错了!c循环内部,输出6个换行,着实没有必要。其实输出1和换行即可。
2020-04-243 - Jinlee老师您好,我的没有输出。编译没有错误,也和老师的代码对比了,不知道哪里出错了,麻烦老师有时间帮忙看下,谢谢 代码如下: #include <stdio.h> int main() { int y, m, d, X; scanf("%d%d%d", y, m, d); scanf("%d", X); int i; for(i = 0; i < X; i++) { d += 1; switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { if (d > 31) d = 1, m += 1; if (m == 13) m = 1, y += 1; }; break; case 2: { if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) { if (d > 29) d = 1, m += 1; if (m == 13) m = 1, y += 1; } else if (d > 28) { d = 1, m += 1; } } break; case 4: case 6: case 9: case 11: { if (d > 30) d = 1, m += 1; if (m == 13) m = 1, y += 1; } break; } } printf("%d%d%d", y, m, d); return 0; }
作者回复: 读入的时候,变量前面需要加&符号
2020-01-133 - 徐洲更作业地址: https://github.com/xuzhougeng/learn-c-in-JKSJ/blob/master/jksj-c-03.c 我今天写作业的时候,明明觉得自己的逻辑好像是对的,但是结果错了,应该如何debug呢? 特别是写了那么长的代码的时候。
作者回复: 看到你的代码了,对于 switch...case 的整体结构理解很准确。debug 的话,可以尝试如下三种方式: 1. 心算推理法,通过看代码找 bug,这个通常适用于经验丰富的老手。 2. 关键步骤输出信息,在程序中,找到关键的位置,输出相关变量的值,通过程序输出找错误。 3. 借助调试工具,IDE 一般都带有自己的单步调试工具,Linux 下面可以借助 gdb 进行调试。
2020-01-093 - Never give up今天学习了if–else 分支语句,while 以及for 循环,虽然作业自己没有独立完成,在借鉴其他同学的答案后顺利运行了程序,一直觉得自己没有什么编程逻辑,尽管可能天赋不如别人,但努力学,敲代码,加理解,一步步来。
作者回复: 加油!d(^_^o)
2020-03-272 - sam#include <stdio.h> int main() { int y,m,d,x; scanf("%d%d%d", &y, &m, &d); scanf("%d", &x); for (int i = 0; i < x; i++) { d++; if ( 1 == m || 3 == m || 5 == m || 7 == m || 8 == m || 10 == m || 12 == m ) { if ( 31 < d ) { m++; d = 1; } if ( 13 == m ) { m = 1; y++; } } else if ( 2 == m ) { if ( ( y % 4 == 0 && y % 100 != 0 ) || y % 400 == 0 ) { if ( 29 < d ) { m++; d = 1; } } else { if ( 28 < d ) { m++; d = 1; } } } else { if ( 30 < d ) { m++; d = 1; } } } printf("%d%02d%02d\n", y, m, d); return 0; }
作者回复: 正确,能改写成switch...case结构的程序就更好了!
2020-02-021 - rocedu还是从语法角度讲循环。我觉得可以从应用模式讲一下更好。循环应用有两类: 1. 固定次数的 2. 事件驱动的,会使用到条件语句 这更体现编程不仅仅是语言。
作者回复: 嗯,你说的这些内容,可以放到讲完循环基本语法以后的总结部分。d(^_^o)
2020-02-021 - 行问请教下,C 语言的编码规范有什么推荐的,专栏中的代码代码规范是如何进行的?
作者回复: C语言的专门的编码规范在国内不太多,基本都是参考一些流行的C++的编码规范。
2020-01-0921