第一课——进阶
理解程序的本质
程序是为了实际的问题而存在
从本质上而言,程序是解决问题的步骤描述
一小步的进阶
首先理解实际问题!
确认问题类型
– 如:数值计算,求最小值个数
确认求解的步骤
– 如:打开文件,读数据,关闭文件,计算和
问题:
如何判断求解步骤的好坏,如下列所示:
#include <stdio.h> #include <malloc.h> long sum1(int n) { long ret = 0; int* array = (int*)malloc(n * sizeof(int)); int i = 0; for(i=0; i<n; i++) { array[i] = i + 1; } for(i=0; i<n; i++) { ret += array[i]; } free(array); return ret; } long sum2(int n) { long ret = 0; int i = 0; for(i=1; i<=n; i++) { ret += i; } return ret; } long sum3(int n) { long ret = 0; if( n > 0 ) { ret = (1 + n) * n / 2; } return ret; } int main() { printf("%ld\n", sum1(100)); printf("%ld\n", sum2(100)); printf("%ld\n", sum3(100)); return 0; }
运行结果如图:
从结果看出,三个函数都能达到我们的计算要求,但是我们要鉴别一个代码的好坏。
首先:第一个在堆上分配内存,再用数组遍历,完全没必要,代码看起来很臃肿。(要用尽量少的内存空间解决问题,用尽量少的步骤解决问题。)
第二个属于大众型的。
第三个使用高斯公式,代码实现最简单,至少目前给我们的直观感觉是这样的。
小结
程序是为了具体问题而存在的
程序需要围绕问题的解决进行设计
同一个问题可以有多种解决方案
如何追求程序的“性价比”?
是否有可量化的方法判别程序的好坏?
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并,获取更多隐藏干货,QQ交流群:859800032 微信公众号:Crystal软件学堂
作者:Liu_Jing bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |