1、函数
函数由四部分组成:返回值 函数名(参数列表) { 函数体实现 }
1.1 单独函数
将功能代码从 main 函数中移到其他函数中
举个简单的栗子:
int main()
{
int a, b;
printf("please input 2 numbers:");
scanf("%d %d", &a, &b);
if(a >= b)
printf("max = %d\n", a);
else
printf("max = %d\n", b);
return 0;
}
将代码修改之后如下:
int Max()
{
int a, b;
printf("please input 2 numbers:");
scanf("%d %d", &a, &b);
if(a >= b)
printf("max = %d\n", a);
else
printf("max = %d\n", b);
return 0;
}
int main()
{
return 0;
}
1.2 利用参数列表
在我们使用软件的过程中,并不会出现通过黑屏状态下输入数据,拿数据从何而来呢?答案就是通过 参数列表。将变量定义和 scanf 语句删除,改成参数列表即可
举个简单的栗子:
int Max(int a, int b) // 形参
{
if(a >= b)
printf("max = %d\n", a);
else
printf("max = %d\n", b);
return 0;
}
int main()
{
Max(10, 20); // 传入实参
Max(3, 5);
return 0;
}
1.3 使用返回值
在功能函数中不能使用 printf,printf 只是用于简单的单元测试,我们应该使用返回值将结果返回给调用函数。
所以我们将代码进行修改,如下:
int Max(int a, int b) // 形参
{
if(a >= b)
return a;
else
return b;
}
1.4 函数体
2、测试用例
函数写完后应该进行单元测试,看看我们的函数结果是否有错。测试用例尽量写的全面
举个简单的栗子:
int Max(int a, int b)
{
return a>b ? a:b; // 三目运算符,替换了if else 表达式
}
int main()
{
// 编写测试用例
int m = Max(10, 20); // 先接受返回值,然后输出
printf("%d\n", m);
printf("%d\n", Max(20, 10)); // 直接输出
return 0;
}
3、函数的使用
函数测试完成之后,就可以给自己或者别人使用,如,利用 Max() 函数来实现求两个数的最大值,当然也可以实现求多个数的最大值
举个简单的栗子:
int Max(int a, int b, int c)
{
return Max(Max(a, b), c);
}
【注】真题演练
bool Fun(int n)
{
int i = 2;
while( (n%i)!=0 && i*1.0<sqrt(n) )
i++;
if( i*1.0 > sqrt(n) )
return true;
else
return false;
}
- 该函数的作用是什么?
判断一个数是否为 素数 - 该函数的时间复杂度为多少?
时间复杂度为sqrt(n)
例题1:利用函数实现判断给定的年份是否为闰年
// 利用函数实现判断给定的年份是否为闰年
void Is_Leap(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("%d 是闰年!\n", year);
}
else
{
printf("%d 不是闰年!\n", year);
}
}
int main()
{
int year;
printf("Please input year:");
scanf_s("%d", &year);
Is_Leap(year);
return 0;
}
运行结果如下:
例题2:利用给定函数实现判断一个数是否为素数
void Is_Prime(int num)
{
// 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数
int i = 2;
for (i; i*1.0 < sqrt(num); i++)
{
if (num % i == 0)
break;
}
if (num % i == 0)
printf("%d 不是素数!\n", num);
else
printf("%d 是素数!\n", num);
}
其运行结果为: