上一篇介紹了要設計一個程式時會使用到的流程圖,如果對於憑空想像程式怎麼寫有障礙的朋友,可以考慮使用流程圖的方式來輔助寫程式!
今天我們來介紹另一個很重要的語法--「副函式」!
不曉得大家還記不記得,在遙遠的第三篇我們有稍微的介紹主函式(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)副函式可要求傳入值:副函式可以接受其他函式的傳入值進行處理使用,有傳入值的話呼叫副函式時也要記得傳值。
我們可以把判斷質數的部分單獨拆出來,用另一個副函式去處理,這樣主函式看起來就會清楚很多:
#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;
}
}