C语言学习周总结001


本周主要学习了if-elseswitch-case判断语句for循环结构等内容。

以下是这些新内容的一些实践应用:


 


 

1.计算时间差

        计算两个时间之间的时间差,这是生活当中较为常见

的程序设计应用,它存在于手机电脑里绝大部分的应用程序里。比如每当你在手机里设定一个闹钟,它可能会显示还有几时几分响铃。想要搞清楚这一程序运行的原理,我开始试着用自己所学的C语言知识来编写这段程序的代码,于是有了第一次的代码:

#include <stdio.h>

int main() { int t1, t2; scanf("%d %d", &t1, &t2); int th, tm; int m1, m2; th = t2/100 - t1/100; m1 = t1%100; m2 = t2%100; tm = m2 - m1; printf("%d:%d", th, tm); return 0; }

写完以上代码并用几组不同数据进行运行测试后,我发现了几处问题。一是 当第二个时间的分钟小于第一个时间的分钟时,时间差的分钟数会出现负数错误答案;二是 输出格式的问题,我想要以小时和分钟均以占两位的格式输出,也就是形如01:02的格式而不是1:2的格式输出。

于是我重新反思检查了我的代码,同时还上网浏览了些相关内容,接着就有了修改后的代码:

#include <stdio.h>
#include <stdlib.h> int main() { int t1, t2; scanf("%d %d", &t1, &t2); int th, tm; int m1, m2; th = t2/100 - t1/100; m1 = t1%100; m2 = t2%100; if (m2 > m1) { tm = m2 - m1; } else if (m2 < m1) { tm = m2 + 60 - m1; th--; } printf("%02d:%02d", th, tm);
  
   system("pause");
return 0; }

同时附上流程图:

 

这次引入了if-else判断语句,分析判断时间2的分钟是否大于时间1的分钟,若大于,则可直接用时间2减去时间1来得到时间差;若小于,则向小时借一,将时间2的分钟加上60再来减去时间1的分钟,同时先前计算好的小时差要减一。 这下我们就得到了正确答案,但输出格式还不够完美,于是我把输出控制符改为%02d来保证以两位数的格式输出,即当数据为个位数时往十位补上0输出。 当我信心满满地将源代码编译链接完准备用生成的可执行文件(.exe)进行运行测试时才发现,每当输入完数据准备输出结果时,程序就会立即关闭,上网查了下才知道,需要在结尾处return 0上一句加上system("pause");语句才能让程序在运行结束后不会立即退出,同时该语句还需引用stdlib.h头文件才能正常使用。

2. 统计成绩等级

        该程序可用于统计一批学生成绩的等级分布,比如在总分100分的条件下大于等于90分的为等级A,大于等于80且小于90的为等级B,大于等于70且小于80的为等级C,大于等于60且小于70的为等级D,低于60分的为等级E。有了以上标准后,结合学到的switch-case判断和for循环的知识,我们就可以编写出这样一段正确的代码:

 

#include <stdio.h> #include <stdlib.h>

int main() { int n, i, score; int a = 0, b = 0, c = 0, d = 0, e = 0; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &score); switch (score / 10) { case 10: case 9: a++; break; case 8: b++; break; case 7: c++; break; case 6: d++; break; default: e++; break; } } printf("A=%d\n", a); printf("B=%d\n", b); printf("C=%d\n", c); printf("D=%d\n", d); printf("E=%d\n", e); system("pause"); return 0; }

 

IPO:定义完变量后,先输入要统计的成绩个数n,接着用for循环依次输入n个成绩,每次输入成绩score后将其除以10然后进入switch-case判断,找到对应的case语句后将对应等级的值加一。执行完n次循环后以每行单独输出形如 “等级=人数” 的格式输出。

在此之前,我还遇到过因忘了在switch结构里的每个子语句结尾加上break而造成的问题,这种问题情况下,程序会从对应的case语句开始往下执行所有的case语句,加入break的目的就是要使程序在switch结构里执行完对应的case语句后立即跳出switch结构,进行下一步骤。



这是我的第一篇博客,在经过本周的学习后,我试着以自己的理解写了上述的两道程序设计应用实例,也许还有很多不足,但我相信,只要我肯坚持下去,一定可以做好的。

有任何错误欢迎大家指正~

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM