自定义函数
ret_type fun_name(paral,*)
{
statement;//语句项
}
ret_type 返回值类型
fun_name 函数名
paral 函数参数
举例
1、求两个数中较大的数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Max(int x, int y)
{
/*if (x > y)
{
return x;
}
else
{
return y;
}*/
return x>y?x:y;//以上语句可以用此语句代替。
}
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
printf("a=%d b=%d\n", a, b);
int max = Max(a, b);
printf("max=%d", max);
return 0;
}
2、交换两个整形变量
不建立临时变量法
#define _CRT_SECURE_NO_WARNLNGS 1
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("a=%d b=%d\n", a, b);
//用语句a=a^b;b=a^b;a=a^b;代替以下三个语句
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
函数方法
#define _CRT_SECURE_NO_WARNLNGS 1
#include <stdlib.h>
#include <stdio.h>//while循环
void Swap1(int x, int y)//此函数不能交换传入的a,b的值。实参a,b和形参x,y使用的不是一个空间,
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
void Swap2(int* px, int* py)//此函数可以实现数值的交换,传入的的是指针,交换的是地址。此时px,py的地址就是a,b的地址
{
int temp = NULL;
temp =*px;
*px = *py;
*py = temp;
}
void Swap4(int* px, int* py)//此函数不可以实现数值的交换,和Swap1类似
{
int* temp = NULL;
temp = px;
px = py;
py = temp;
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("a=%d b=%d\n", a, b);
Swap1(a, b);
printf("Swap1:a=%d b=%d\n", a, b);
/*Swap2(&a, &b);
printf("Swap2:a=%d b=%d\n", a, b);*/
/*Swap4(&a, &b);
printf("Swap4:a=%d b=%d\n", a, b);*/
system("pause");
return 0;
}
练习题:
1、用函数判断素数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int Prime(int n)
{
int i = 1;
for (i = 2; i <= (sqrt((double)n) / 2); i++)
{
if (n%i== 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n= 1;
scanf("%d", &n);
int result = Prime(n);
if (1 == result)
{
printf("%d是素数\n", n);
}
else
{
printf("%d不是素数\n", n);
}
return 0;
}
2、用函数判断闰年
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int LeapYear(int year)
{
/*if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return 1;
}
return 0;*/
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)//以上代码可直接被此替换
}
int main()
{
int year= 1;
scanf("%d", &year);
if (LeapYear(year) != 0)
{
printf("%d is LeapYear\n", year);
}
else
{
printf("%d isn't LeapYear\n", year);
}
return 0;
}
3、用函数实现二分查找
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Search(int arr[],int len,int k,int left,int right)
{
while (left <= right)//左下标<=右下标
{
int mid = left + (right - left) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return 0;
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int k = 0;
printf("请输入你要查找的数字:\n");
scanf("%d", &k);
int len = sizeof(arr) / sizeof(arr[0]);
int right = len - 1;
int left = 0;
int result=Search(arr, len, k, left, right);
if (result != 0)
{
printf("你要查找的数字%d的下标是%d\n", k, result);
}
else
{
printf("找不到你要查找的数字%d\n");
}
return 0;
}