其实这个篇章放在这里有点小晚了,一直觉得好像单独放成一篇有点哪里不对,本来想说因为不是必要的一个语法,但对于写程式来说又有一定的重要性。
所以想了想还是要介绍一下,不过就当成番外篇来放吧!
程式设计的原则
要说到什么重要什么不重要,我们来提一下程式设计中重要的原则有什么:
避免重複如果一段程式码一直不断重複地出现,那我们可以将它利用迴圈或副函式等方式,来简化整体的程式,让程式码不再那么冗长。
e.g. 比如说我们今天要写一个程式,先输入一个数字,然后我们要列印出所有小于它的质数,并重複两次。
(1) 如果是这样子放两次程式码是很冗长的。
#include <stdio.h>int is_prime(int);int main(){ int input_num = 0; //第一次输入 scanf("%d", &input_num); //判断输入的整数是否大于1,否则重新输入 while(input_num<2){ scanf("%d", &input_num); } //开始处理 for(int i=2; i<=input_num; i++){ //回传1就是质数,要列印出来 if(is_prime(i)==1){ printf("%d ", i); } } printf("\n==========\n"); //第二次输入 scanf("%d", &input_num); //判断输入的整数是否大于1,否则重新输入 while(input_num<2){ scanf("%d", &input_num); } //开始处理 for(int i=2; i<=input_num; i++){ //回传1就是质数,要列印出来 if(is_prime(i)==1){ printf("%d ", i); } } return 0;}int is_prime(int num){ //判断状态 int k=0; for(int i=2; i<num; i++){ //可被整除的话,则不是质数 if(num%i==0){ k=1; break; } } //k=0时,是质数 if(k==0){ return 1; } //k=1时,不是质数 else{ return 0; }}
(2) 但我们可以透过迴圈来替代重複次数,减少多余的重複程式码
#include <stdio.h>int is_prime(int);int main(){ int input_num = 0; for(int t=0; t<2; t++){ scanf("%d", &input_num); //判断输入的整数是否大于1,否则重新输入 while(input_num<2){ scanf("%d", &input_num); } //开始处理 for(int i=2; i<=input_num; i++){ //回传1就是质数,要列印出来 if(is_prime(i)==1){ printf("%d ", i); } } printf("\n==========\n"); } return 0;}int is_prime(int num){ //判断状态 int k=0; for(int i=2; i<num; i++){ //可被整除的话,则不是质数 if(num%i==0){ k=1; break; } } //k=0时,是质数 if(k==0){ return 1; } //k=1时,不是质数 else{ return 0; }}
一班来说我们会力求程式码简明易懂,会加上适当的注解或分段使用单一功能的函式,使得整体程式码可以在多年后重看、甚至其他人也能快速了解,虽然写程式的当下,大家应该都很清楚自己在做什么,但隔了一段时间可就不一定了。
#include <stdio.h>int is_prime(int);int main(){ int input_num = 0; scanf("%d", &input_num); //判断输入的整数是否大于1,否则重新输入 while(input_num<2){ scanf("%d", &input_num); } //依序使用迴圈跑小于或等于输入整数之数,并判断是否质数、要不要列印 for(int i=2; i<=input_num; i++){ //回传1就是质数,要列印出来 if(is_prime(i)==1){ printf("%d ", i); } } return 0;}int is_prime(int num){ //判断状态 int k=0; for(int i=2; i<num; i++){ //可被整除的话,则不是质数 if(num%i==0){ k=1; break; } } //k=0时,是质数回传1 if(k==0){ return 1; } //k=1时,不是质数回传0 else{ return 0; }}
可维护性一般来说我们会把单独功能,拆解出一个函式来处理,因为所有程式码都塞在main function时,是非常杂乱不堪的,可阅读性也会很低,所以我们会尽量让功能的函式独立出来,以求维护、更新时可以快速找到、修改目标,甚至也可以重複使用。
像是以下就是判断质数的函式
int is_prime(int num){ //判断状态 int k=0; for(int i=2; i<num; i++){ //可被整除的话,则不是质数 if(num%i==0){ k=1; break; } } //k=0时,是质数回传1 if(k==0){ return 1; } //k=1时,不是质数回传0 else{ return 0; }}
正确性
相信正确性是一个非常基础的事情吧,如果连基本需求都有错误、做不到,这个程式可以说不需要存在了,甚至有时候一点误差就会产生严重的后果,所以我们在写程式时必须时时测试,并即时更正找到的bug。
执行效率
在进行程式设计时,我们需要注意程式的效率,可以注意演算法中提到的时间複杂度,越是能简化次数,程式执行的效率越佳。
int is_prime(int num){ //判断状态 int k=0; for(int i=2; i<=sqrt(num); i++){ //可被整除的话,则不是质数 if(num%i==0){ k=1; break; } } //k=0时,是质数回传1 if(k==0){ return 1; } //k=1时,不是质数回传0 else{ return 0; }}
注解的使用
介绍#include <stdio.h>int main(){ int input_num = 0; /* 第一部分 输入处理 */ scanf("%d", &input_num); //判断输入的整数是否大于1,否则重新输入 while(input_num<2){ scanf("%d", &input_num); } /* 第二部分 列印星星的部分 */ //行数 for(int i=1; i<=input_num; i++){ //单行星星数 for(int j=0; j<i; j++){ printf("*", i); } printf("\n"); } return 0;}