您的位置:首页 > 编程语言 > C语言/C++

C语言之函数的用法以及调用函数

2020-04-02 07:47 1086 查看

C语言之调用函数—“黑盒子”

这是我第一次去我们学校acm的集训学到的东西,也是我第一个博客,现在来整理第一个内容。

一、 引子

若题目中有一个要求:判断a,b,c,d是否在给定区间[0,10)/[45,55)/[90,100)内
知识先知:bool
bool函数返回值只是用于判断真假
如果bool里面的语句成立就返回真(1),否则返回假(0)
常用于判断语句中,下面只写一下部分代码体现bool的应用。

int main()
{
// 假设判断a, b, c, d分别是否满足
int a = 5, b = 10, c = 20, d = 95;
// 直接写
bool res_a = (0<=a&&a<10)||(45<=a&&a<55)||(90<=a&&a<100);
bool res_b = (0<=b&&b<10)||(45<=b&&b<55)||(90<=b&&b<100);
bool res_c = (0<=c&&c<10)||(45<=c&&c<55)||(90<=c&&c<100);
bool res_d = (0<=d&&d<10)||(45<=d&&d<55)||(90<=d&&d<100);

可以看出,以上代码的功能是一样的,只是参数不同,如果这样写,代码太长。
因此,如果用函数数把同一功能的代码封装起来后,直接输入参数来调用函数即可得到结果,可以明显地提高编程速度和质量,函数名又能起到一定的解释作用,代码显得更加清晰易读
相当于用函数将同一功能的代码封装成一个黑盒子,丢进参数,就可以输出想要的结果。

二、函数定义

类型 名称 (参数声明)
{
声明、语句
}

  • 例子1
bool is_satisfied(int n){
return (0<=n&&n<10)||(45<=n&&n<55)||(90<=n&&n<100);
}
int main()
{
// 假设判断a, b, c, d分别是否满足
int a = 5, b = 10, c = 20, d = 95;
bool res_a = is_satisfied(a);
bool res_b = is_satisfied(b);
bool res_c = is_satisfied(c);
bool res_d = is_satisfied(d);
  • 例子2
double cal_circle(double r){
const int pi = 3.1415926;
double S = pi * r * r;
return S;
}

下面以例子2来解释函数结构其中的含义
1.double :声明了输出的数据类型
2.cal_circle:声明了输出量的名称
3.(double r):声明了参数的类型和名称
4.{}里面是函数里的内容,即丢入参数后要做的事
5.const int pi = 3.1415926; //声明一个常量
6.double S = pi * r * r; // 声明一个变量及其表达式
7.return :返回值,后面跟着的就是要输出的(可以为常量、变量、表达式),如 return S指的就是返回S的值作为输出值,且该输出值数据类型为double(由第一个double决定的),名称为cal_circle

【再比如我们常用的 int main(void){ … return 0;}结构也是一样】

那,我把例2的函数的作用发挥出来,现在来跑一个代码作为例3:

double S(double r){
const int pi = 3.1415926;
double S = pi * r * r;
return S;
}
int main()
{
double r;
scanf("%lf",&r);
double result=S(r);
printf("%lf",result);
return 0;
}

注意事项

  1. 函数最好定义在前面,如果函数和int main()位置互换,会导致main里面用到的那个S()函数没有定义
  2. 如果在定义参数时要声明多个参数,每个参数都要给数据类型
    如:(int a, int b) √ (int a,b) × (int a)(int b) ×
  3. 函数里面的每个变量都要声明数据类型,但与下面int main()函数无关,在int main(){…}中,出现的变量也要声明,不是说函数内有声明了就不用声明了
  4. 在调用函数时,可以先声明一个变量(不可与函数输出名称相同)来装输出的值,也可以直接写在printf里面
    如: double result = S(r);printf("%lf",result); 或者 printf("%lf",S ( r ) );

三、函数调用函数

何为函数调用函数?
意思就是在某一函数的定义中用到了另一个函数的输出值
下面以计算圆环面积为例:

// 计算圆的面积
double cal_circle(double r){
const int pi = 3.1415926;
double S = pi * r * r;
return S;
}// 计算圆环的面积
double cal_area(double r1, double r2){
if(r1>r2){
int t = r1;
r1 = r2;
r2 = r;
}
return cal_circle(r2) - cal_circle(r1);
//上面语句就是函数调用函数的体现,该函数输出值的表达式用了函数cal_circle的输出值
}
int main(){
double S = cal_area(50,10);
//括号内就是你要输入的参数
return 0;
}

!!!请好好思考回味上面这个代码 !!!

以上就是今天的内容,谢谢我自己嘻嘻嘻
ps:部分内容摘自acm师兄的集训文档

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Bloodynu 发布了1 篇原创文章 · 获赞 0 · 访问量 60 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: