C语言函数基础

C语言函数基础

前言

一、函数的定义与分类

1、 函数是什么?

函数是组织好的,可以重复利用的,用来实现相关联功能的代码段。

2、函数的分类

(1)常用的函数分为三大类,分别是主函数库函数自定义函数。
(2)主函数就是main函数,在C语言中有且仅有一个哟。
(3)库函数是C语言编译软件自带的函数,如输入/输出函数scanf/printf等。
(4)自定义函数是用户自己编写的,能完成某些功能的函数。

二、库函数

1、库函数链接:

https://zh.cppreference.com/w/c/header

2、头函数

库函数是在标准库中对应的同文件中声明的,如想要用printf函数需要有(stdio.h)头文件。

三、自定义函数

1、自定义函数的形式

一般定义形式如下

函数返回值类型 函数名(类型名 形参1,类型名 形参2,类型名 形参3{   
	说明部分
	语句部分
}

2、注意事项

(1)函数名是唯一的,函数不能嵌套定义,就是不能再一个函数内部再定义一个函数。
(2)省略函数返回值类型时,默认为int型,不需要返回值时,可定义为空类型,如void。
(3)函数可以没有形参,形参以及函数体再被调用时才临时开辟内存单元,退出函数时,将被全部释放。

3、函数值

函数值通过return 语句返回,例如

return 表达式;return (表达式);return;

表达式的类型必须和函数首部说明的类型一致,若不一致,则转换为函数定义时的类型。

示例

#include<stdio.h>

int ret(double a, double b)
{
	double s = a*b;
	return s;
}
int main()
{
	double a = 3.1;
	double b = 3.1;
	double r = ret(a, b);
	printf("%lf\n", r);
}

本来返回值为double,但是函数返回值为int,导致结果为9.000000。

4、函数的调用

函数调用一般形式如下

函数名(实参表列)
add(a,b);

实参个数要和形参个数匹配,函数应先定义在调用

5、函数的说明

函数说明一般形式如下

类型名  函数名(形参1的类型 ,形参2的类型)
int add(int,int);

6、综合示例

两数之和

第一种
#include<stdio.h>
double add(double,double);//函数说明
int  main()
{
	double a,b,sum = 0;
	scanf("%lf %lf",&a,&b);
	sum = add(a,b);//函数调用,将获得的函数值赋给sum
	printf("sum = %lf\n",sum);
}
double add(double x,double y)//函数定义
{
	double s;
	s = x+y;
	return s;
}

或者
第二种
#include<stdio.h>
double add(double x,double y)//函数定义
{
	double s;
	s = x+y;
	return s;
}
int  main()
{
	double a,b,sum = 0;
	scanf("%lf %lf",&a,&b);
	sum = add(a,b);//函数调用,将获得的函数值赋给sum
	printf("sum = %lf\n",sum);
}

二、调用函数和被调用函数的数值传递

1、实参传给形参

实参传给形参的数据传递是单向的,按值传递。
如sum =add(a,b)中a和b就是实参,有确定的值,调用时将a,b的值各复制一份,分别赋给形参的a和b。

2、通过函数返回值传递

如sum=add(a,b)获得的函数值赋给sum,通过return 语句将函数值返回调用处,就是add(a,b)带回来一个值,将这个值赋值给了sum。

3、综合示例

判断素数

#includ<stdio.h>
#include<math.h>//sqrt需要包含的头文件
int isprime(int a)
{
	int i = 0;
	for(i = 2;i<=sqrt(a);i++)//sqrt是开方的函数,一个数的因子一定会小于或等于它的平方根
	{
		if(a%i==0)
		return 0;
	return 1;
	}
}
int main()
{
	int n = 0;
	scanf("%d",&n);
	if(isprime(n))
		printf("%d是素数\n",n);
	else
		printf("%d不是素数\n",n);
}

求1/1-1/3+1/5-1/7+…1/n的值

#include<stdio.h>
double fun(int n)
{
	int  flag = 1;
	double s = 0.0;
	for (int i = 1; i <= n; i++)
	{
		s += (1.0/i*flag);
		flag *= -1;
	}
	return s;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%lf\n", fun(n));
	return 0;
}

编写函数计算n的x次方

#include<stdio.h>
int fun(int x, int n)
{
	int i, s = 1;
	for (i = 1; i <= x; i++)
	
		s *= n;
		return s;
	
}
int main()
{
	int a, b, m = 0;
	printf("请输入两个数\n");
	scanf("%d %d", &a, &b);
	m = fun(a, b);
	printf("%d的%d次方是%d\n", b, a, m);
	return 0;
}
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强在此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值