目录
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的绝对值
感谢观看