1.函数是什么?
函数即子程序
子程序,是一个大型程序中的某部份代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
2.C语言中函数的分类:
1.库函数
2.自定义函数
2.1函数的组成:
2.2 例:
求两个数的较大值
int get_max(int x, int y)
{
int z = 0;
z = (x > y ? x : y);
return z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = get_max(a, b);
printf("%d\n", m);
return 0;
}
2.3 错误示例:
交换两个整型变量的内容。
void Swap(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a = %d b = %d\n", a, b);
Swap(a, b);
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
//错误原因:当函数调用的时候,实参传给形参,形参其实是实参的一份临时拷贝,所以对形参的修改,不会影响实参。
修改后:
使用指针
void Swap(int* pa, int* pb)
{
int z = 0;
z = *pa;
*pa = *pb;
*pb = z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a = %d b = %d\n", a, b);
Swap(&a, &b);
printf("交换后:a = %d b = %d", a, b);
return 0;
}
3.函数的参数
3.1实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传送给形参。
3.2形式参数(形参)
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数被调用完成之后就自动销毁了。因此形式参数只有在函数中有效。
4.函数的调用
4.1传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
4.2传址调用
·传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
·这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
4.3练习
写一个函数可以判断一个数是不是素数
(打印100-200之间的素数)
int is_prime(int n)
{
int j = 0;
for(j = 2;j < n;j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
for(i = 100;i <= 200;i++)
{
if (is_prime(i) == 1)
printf("%d ", i);
}
return 0;
}
写一个函数判断一年是不是闰年
int is_leap_year(int n)
{
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
{
return 1;
}
else
return 0;
}
int main()
{
int y = 0;
for (y = 1000;y <= 2000;y++)
{
if (is_leap_year(y) == 1)
printf("%d ", y);
}
return 0;
}
写一个函数,实现一个整型有序数组的二分查找
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (k < arr[mid])
{
right = mid - 1;
}
else if (k > arr[mid])
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 8;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search(arr, k, sz);
if (ret == -1)
{
printf("找不到" );
}
else
{
printf("找到了,下标为%d", ret);
}
return 0;
}
写一个函数,每调用一次这个函数,就会将num的值增加1
void add(int* p)
{
*p = *p + 1;
}
int main()
{
int num = 0;
add(&num);
printf("%d\n", num);
add(&num);
printf("%d\n", num);
add(&num);
printf("%d\n", num);
return 0;
}
|