不怎么重要的前言
上一篇介绍了要设计一个程式时会使用到的流程图,如果对于凭空想像程式怎么写有障碍的朋友,可以考虑使用流程图的方式来辅助写程式!
今天我们来介绍另一个很重要的语法--「副函式」!
副函式?
不晓得大家还记不记得,在遥远的第三篇我们有稍微的介绍主函式(main function),一个程式主要运行的部分就是主函式了,大家有没有想过既然有主函式,会不会有副函式之类的呢?
今天我们就来介绍副函式吧!
先来举一个只有主函式的判断奇偶数程式:
#include <stdio.h>int main(){ int n; scanf("%d", &n); if(n%2==0){ printf("even.\n"); } else{ printf("odd.\n"); } return 0;}
转换成由副函式来判别后传值(偶数回传0,奇数回传1):
#include <stdio.h>int judge_num(int);int main(){ int n; scanf("%d", &n); printf("%d", judge_num(n)); return 0;}int judge_num(int num){ if(num%2==0){ return 0; } else{ return 1; }}
也可以由副函式直接代劳输出:
#include <stdio.h>void judge_num(int);int main(){ int n; scanf("%d", &n); judge_num(n); return 0;}void judge_num(int num){ if(num%2==0){ printf("even.\n"); } else{ printf("odd.\n"); }}
正式使用副函式
规则(1) 宣告函式:就像变数在使用前需要宣告,副函式也必须在使用之前就宣告好。
(2) 副函式的资料型态:就像变数有不同的资料型态一样,但函式中的资料型态是针对回传值的型态,且与变数不同的是也有无回传值的资料型态(void)。
(3)副函式可要求传入值:副函式可以接受其他函式的传入值进行处理使用,有传入值的话呼叫副函式时也要记得传值。
写一个程式,让使用者输入整数n,并把小于等于整数n的所有质数列印出来。
我们可以把判断质数的部分单独拆出来,用另一个副函式去处理,这样主函式看起来就会清楚很多:
#include <stdio.h>int is_num_prime(int);int main(){ int n; scanf("%d", &n); printf("小于等于n之所有质数: "); for(int i=2; i<=n; i++){ if(is_num_prime(i)==0){ printf("%d ", i); } } return 0;}int is_num_prime(int num){ int k=0; for(int i=2; i<num; i++){ if(num%i==0){ k=1; break; } } if(k==0){ return 0; } else{ return 1; }}