关于函数的补充

目录

1. 形参和实参

2. 如何在软件开发中合理的设计函数来解决实际问题

3. 常用的系统函数


1. 形参和实参

    参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

#include<stdio.h>
void f(int i)
{
	printf("%d\n", i);
}

int main(void)
{
	f(5);

	return 0;
}

         在这里5就是一个实参,而i是一个形参 

   但实参和形参是什么关系呢? 

    1. 个数一定形同    2. 位置一一对应   3. 数据类型必须相互独立

2. 如何在软件开发中合理的设计函数来解决实际问题

    我们先来看个例子

#include<stdio.h>
int main(void)
{
	int val;
	int i;

	scanf_s("%d", &val);
	for (i = 2; i < val; ++i)
	{
		if (0 == val % i)
			break;
	}
	if (i == val)
		printf("Yes!\n");
	else
		printf("No!\n");

	return 0;
}

    这是一个关于判断一个数是否是素数的程序,这个程序不太好,原因在于我们要判断下一个数字还要写一个for循环,代码利用率不高,我们可以用一个函数来改正。

    假设 我们设计的 f 函数是如果它是一个素数,输出yes,不是输出no。但万一加入另一个程序,如果是素数就输出,不是就不输出。那 f 就无法调用了,因为它处理的结果是yes或no,而我们要的是输出这个值或不输出这个值,我们可以根据要求设计一个函数 g 。但要是有别的要求,我们又要设计一个函数。

    也就是说,这个功能,把好多个功能融合在一起,将来一旦要求变了的话,这个函数利用率就不高了,所以说这个功能最好划分的详细一点,就好像我写这样的一个函数,它的功能只是判断这个函数是否是素数,至于如何处理,可以通过其它程序去处理它。

     这样设计函数利用率就最高,因为我们只判断它是或不是,将来我们哪一个程序需要这个功能都可以调用它。

#include<stdio.h>
bool IsPrime(int val)
{
	int i;

	for (i = 2; i < val; ++i)
	{
		if (0 == val % i)
			break;
	}
	if (i == val)
		return true;
	else
		return false;
}
int main(void)
{
	int val;
	int i;

	scanf_s("%d", &val);
	if (IsPrime(val))
		printf("Yes!\n");
	else
		printf("No!\n");

	return 0;
}

用单独的函数来实现,代码的可重复性提高了

求100以内的素数

include<stdio.h>
int main(void)
{
	int val;
	int i;
	int j;

	scanf_s("%d", &val);
	for (i = 2; i <= val; ++i)
	{//判断i是否是素数,是输出,不是不输出
		for (j = 2; j < i; ++j)
		{
			if (0 == i % j)
				break;
		}
		if (i == j)
			printf("%d\n", i);

	}
	return 0;
}

这个程序不好,只用main函数,有局限性

                       1 代码重复性不高

                        2 不容易理解

#include<stdio.h>

bool IsPrime(int m)
{
	int i;
	for (i= 2; i<m; ++i)
	{
		if (0 == m % i)
			break;
	}
	if (i == m)
		return true;
	else
		return false;
}

int main(void)
{
	int val;
	int i;

	scanf_s("%d", &val);
	for (i = 2; i <= val; ++i)
	{
		if (IsPrime(i))
			printf("%d\n", i);
	}

	return 0;
}

    用一个函数来求100以内的素数

     优点:代码比上一个个容易理解

                代码的可重用性比上一个更高

     缺点:代码的可重用性仍然不是非常高,比如求1000个数字,它们每一个从一到它本身的素数,for就要调用1000次了

#include<stdio.h>
//本函数的功能是把1到n之间所用的素数在显示器上输出
void TraverseVal(int n)
{
	int i;

	for (i = 2; i <= n; ++i)
	{
		if (IsPrime(i))
			printf("%d\n", i);
	}
}
//本函数的功能是:判断m是否是素数,是返回true,不是返回false
bool IsPrime(int m)
{
	int i;
	for (i = 2; i < m; ++i)
	{
		if (0 == m % i)
			break;
	}
	if (i == m)
		return true;
	else
		return false;
}

int main(void)
{
	int val;
	int i;

	scanf_s("%d", &val);
	TraverseVal(val);

	return 0;
}

用两个函数来实现1到某个数之间所有的素数,并将其输出

   本程序和前两个相比代码量更少,可重用性更高

总结

     一个函数的功能尽量独立,单一

3. 常用的系统函数

      函数是c语言的基本单位,类是Java,C#的基本单位

  double sqrt(double x);

            求的x的平方根

   int abs(int x);

             求x的绝对值

  double fabs(double x);

             求x的绝对值


感谢观看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值