自己定义函式有几个优点:
<回传型别> <函式名称>(<参数>){
<执行内容>
⋮
<执行内容>
}
回传型别就是这个函式回传值的型别,如果没有回传值(例如单纯作做一些动作)可以省略或以 void
标示
如果函式没有参数时可以省略,或用 void
标示
下面的范例中,当输入的数不合条件,会呼叫自订函式 showErrorMessage()
showErrorMessage()
会执行 printf("Error!!!");
#include<stdio.h>
#include<stdlib.h>
void showErrorMessage(){
printf("Error!!!");
}
int main(){
int x;
scanf("%d", &x);
if(x>100 && x%2==0)
printf("OK!")
else
showErrorMessage();
return 0;
}
函式的参数要写成 <型别> <参数名称>
,有多个参数时用逗号分隔
在自订函式的区块中,参数可以像变数一样使用
下面范例中,函式 add()
有两个型别为 int
的参数,功能是在视窗上显示两者的和
#include<stdio.h>
#include<stdlib.h>
void add(int x, int y){
printf("%d\n", x+y);
}
int main(){
int a=10, b=20;
add(a, b);
return 0;
}
函式中的参数和变数不能有相同的名字,但不同函式中的参数和变数互不影响
也就是说在 main()
区块中没办法使用 add()
中的变数,main()
中的变数 a
和 add()
中的变数 a
是两个不同的变数
#include<stdio.h>
#include<stdlib.h>
void add(int x, int y){
int a=x+y;
printf("%d\n", z);
}
int main(){
int a=10, b=20;
add(a, b);
int x=10, y=100;
add(x, y);
return 0;
}
使用 return <回传值>
回传资料,另外 return
代表函式结束,不管後面还有没有内容,函式都会停止
回传值的型别不同,函式定义时标注的型别也要修改
#include<stdio.h>
#include<stdlib.h>
int add(int x, int y){
int z=x+y;
return z;
}
int main(){
int x=10, y=20, a;
a = add(x, y);
printf("%d\n", a);
return 0;
}
回传值可以是任何有值的东西,例如一个运算
#include<stdio.h>
#include<stdlib.h>
int add(int x, int y){
return x+y;
}
int main(){
int x=10, y=20;
printf("%d\n", add(x, y));
return 0;
}
或是一个数值
#include<stdio.h>
#include<stdlib.h>
float pi(){
return 3.14;
}
int main(){
float r;
scanf("%f", &r);
printf("Perimeter: %f\n", 2*pi()*r);
return 0;
}
也可以是另一个函式的结果
下面范例中,fun()
会在 a
是偶数时呼叫 sum()
并将结果回传,是奇数时呼叫 factorial()
并将结果回传
#include<stdio.h>
#include<stdlib.h>
int sum(int x){
int result=0;
for(int i=1; i<=x; i++)
result+=i;
return result;
}
int factorial(int x){
int result=1;
for(int i=1; i<=x; i++)
result*=i;
return result;
}
int fun(int a){
if(a%2==0)
return sum(a)
else
return factorial(a)
}
int main(){
int n;
scanf("%d", &n);
printf("%d\n", fun(n));
return 0;
}
用数学的方式表示:
在函式的里面可以定义另一个函式
下面例子中的 pow()
会计算 m
的 n
次方
#include<stdio.h>
#include<stdlib.h>
int fun(int x, int y, int a, int b){
int pow(int m, int n){
int result=1;
for(int i=0; i!=n; i++)
result*=m;
return result;
}
return pow(x, a) + pow(y, b);
}
int main(){
int x, y, i, j;
scanf("%d%d%d%d", &x, &y, &a, &b);
printf("%d\n", fun(x, y, i, j));
return 0;
}
函式 f()
中的函式 g()
可以使用函式 f()
的参数
#include<stdio.h>
#include<stdlib.h>
int f(int x, int y){
int g()
return x*y;
if(x==0)
return 0;
else
return g();
}
int main(){
int m, n;
scanf("%d%d", &m, &n);
printf("%d\n", f(m, n));
return 0;
}
如果函式的定义在 main()
,要在 main()
之前先宣告
#include<stdio.h>
#include<stdlib.h>
int add(int x, int y);
int main(){
int x=10, y=20;
printf("%d\n", add(x, y));
return 0;
}
int add(int x, int y){
return x+y;
}
<<: [Day 28] Node thread pool 3
>>: 30天学会 Python: Day 12-人生苦短,使用 Python
今天放假好开心,睡超饱的ヾ(^▽^))), 但是还是要起床发文啦~ Text顾名思义就是可以输入文字...
前言 今天要接续DataFrame的介绍 这篇文章会分成两个部分: 资料的删除 资料的新增 会利用k...
今天大概会聊到的范围 slot api modifier scope inline classes...
在软件开发过程中,最不确定的因素是「需求」。因为通常要做的系统是没人用过的新系统,常常使用者没看到系...
Virtual Judge ZeroJudge Zerojudge 直接破图 题意 输入一数字 N...