元小白(猿小白)进阶日记:五(函数)

自定义函数

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值