目录
1.用"is_prime"函数打印100---200之间的素数
2."is_leap_year"函数打印1000--2000之间的闰年
😊【库函数】
例如:
1.strcpy--string copy
用strcpy函数实现字符串拷贝(strcpy函数属于库函数,可直接套用)
格式:char*strcpy(char*destination目的地,char*source源头)
#include<stdio.h>
#include<string.h>//strcpy函数的头文件
int main()
{
char arr1[] = "hello";
char arr2[] = "#####";
strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
2.memset--memory set 内存设置
用memset函数实现字符串的更改
格式:void*memset(void*ptr更改对象,int value想要改成的值,size_t num改变的数量)
#include<stdio.h>
int main()
{
char arr[] = "hello";
memset(arr, '*', 2);
printf("%s", arr);
return 0;
}
注意:void用于没有返回值的函数
🙂【自定义函数】
原型:
ret_type fun_name(para1,*)
{
statement;
}
ret_type:返回类型,例如:整形int ,浮点型double,float
fun_name:函数名
para1:函数参数
例如:1.创建一个get max函数
#include<stdio.h>
int getmax(int x, int y)
{
if (x > y)
return x;
else
return y;
}
int main()
{
int a = 19;
int b = 1;
int ret = getmax(a, b);
printf("%d", ret);
return 0;
}
例如:2.创建函数以达到交换的效果
#include<stdio.h>
int Swap1(int a, int b)
{
int tmp = 0;
tmp = a;
a = b;
b = tmp;
}
int Swap2(int* pa, int* pb)
{
int tmp= 0;//注意:设置临时变量tmp时不带*,tmp不是指针
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 0;
Swap1(a, b);
printf("Swap1:a=%d\n,b=%d\n", a, b);
Swap2(&a, &b);
printf("Swap2:a=%d\n,b=%d\n",a,b);
return 0;
}
运行后Swap1不能达到交换的作用,因为在Swap1中传过去的a,b属于形参
🥲【参数】
- 实际参数:(实参)真实传给函数的参数,可以是常量,变量,表达式,函数等(都有确定值)
- 形式参数:(形参)指函数名后括号中的变量,在调用完后就主动销毁了,(只运用于函数中),在函数被调用过程中才实例化
😐【函数的调用】(实际用函数的地方就是函数的调用)
- 传值调用(值传递):例如上述Swap1中将a,b的值传入进行调用
- 传址调用(地址传递):
- 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式
- 这种传参方式可以让函数和函数外部的变量建立起真正的联系,例如上述Swap2的应用
🙁【练习】
1.用"is_prime"函数打印100---200之间的素数
//运用"is_prime"函数进行判断该数是不是素数,是即返回1,不是返回0
#include<stdio.h>
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\n", i);
}
return 0;
}
2."is_leap_year"函数打印1000--2000之间的闰年
判断闰年的方法:1.是4的倍数不是100的倍数
2.是400的倍数
#include<stdio.h>
int is_leap_year(int n)
{
if (n % 4 == 0&&n%100!=0 || n % 400 == 0)
return 1;
}
int main()
{
int i = 0;
for (i = 1000; i <= 2000; i++)
{
if(is_leap_year(i) == 1)
printf("%d\n", i);
}
return 0;
}
注意闰年的判断方法:n%4==0&&n%100!=0||n%400==0
3.用"binary_search"函数实现二分查找
用函数的方法实现二分查找
#include<stdio.h>
int binary_search(int arr[], int i, int sz)
{
int left = 0;
int right = sz - 1;
int mid = (left + right) / 2;
while (left <= right)
{
if (arr[mid] < i)
{
left = mid + 1;
}
if (arr[mid] > i)
{
right = mid - 1;
}
return("找到了下标是:%d", i);
}
if (left > right)
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5 };
int i = 4;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = binary_search( arr, i, sz);
if (ret == -1)
printf("找不到");
else
printf("找到了,下标是%d", i);
return 0;
}
4.写一个函数,每调用一次这个函数,就会将num的值加一
#include<stdio.h>
int Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);//将num的地址传入,注意用&表示指针地址
printf("%d\n", num);
Add(&num);
printf("%d\n", num);
return 0;
}
☹️【函数的嵌套调用和链式访问】(函数之间可以有机的组合)
链式访问:把一个函数的访问值作为另一个函数的参数
例:
练习:
😞【函数的声明和定义】
🥴【函数的递归】
递归的两个必要条件:
- 存在限制条件,当满足这个限制条件时,递归便不再继续
- 每次递归之后越来越接近这个限制条件