笔记(函数)

时间:2022-12-10 15:00:39

c语言中函数分为:库函数和自定义函数

​https://cplusplus.com/reference/clibrary/​​ (C library)

​https://zh.cppreference.com/mwiki/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh-hans​

int main(){

char arr1[] = "bit";
char arr2[20] = "########";
strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}

笔记(函数)

字符串 到\0时 此字符串结束

关于替换 函数

//形式参数只有在函数被调用时才会 实例化(开辟内存空间),当函数调用完后,被实例化
//的形参会被销毁
//当实参传给形参的时候,形参其实是实参的一份临时拷贝,对形参的修改是不会改变实参
void swap1(int x, int y) {
int tmp = 0;
tmp = x; // 此时x形参的地址 和 实际a实参的地址不一样
x = y; // 此时y形参的地址 和 实际b实参的地址不一样
y = tmp; //最后发现交换的是xy内地址的值,a和b地址内的值比没有交换
}
void swap2(int* x, int* y) {
int tmp = 0;
tmp = *x;
*x = *y;
*y = tmp;
}

int main() {
int a = 10;
int b = 20;
printf("a = %d b = %d \n", a, b);
//swap1(a, b); 值传递
swap2(&a, &b); // 传递地址
printf("a = %d b = %d \n", a, b);
return 0;
}

求素数


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;
}

函数 二分查找法

        //本质上 arr 是一个指针
int brnary_search(int arr[], int k, int sz) {
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k) {
left = mid + 1;
}
else if (arr[mid] > k) {
right = mid - 1;;
}
else
{
return mid;
}
}
return -1;
}

int main() {
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);

//传递过去的是数组arr 首元素的地址 ,so 需传递数组的长度
//int ret = brnary_search(arr, k);

int ret = brnary_search(arr, k,sz);
if (ret == -1) {
printf("找不到指定的数字");
}
else {
printf("找到了,下标是,%d \n", ret);
}
return 0;
}

递归

void print(int n) {

if (n > 9) {
print(n/10);
}
printf("%d ", n%10);

}

int main() {
int n = 0;
scanf("%d", &n);
print(n);
return 0;
}

笔记(函数)

计算字符串长度

int my_strlen1(char* str) {
//使用局部变量的方式
int count = 0;
while (*str != '\0') {
count++;
str++;
}
return count;
}
int my_strlen2(char* str) {
//使用递归的方式
if (*str != '\0') {
return 1 + my_strlen1(str + 1);
}
else {
return 0;
}
}

阶乘

int fac(int n) {
if (n <= 1) {
return 1;
}
else {
return n * fac(n - 1);
}
}

描述第n个斐波那契数

int Fib(int n) {
if (n <= 2) {
return 1;
}
else {
return Fib(n - 1) + Fib(n - 2);
}
}
int main() {
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = Fib(n);
printf("ret = %d \n", ret);
return 0;
}
//迭代 求
int Fib(int n) {
int a = 1;
int b = 1;
int c = 1;
while (n > 2) {
c = a + b;
a = b;
b = c;
n--;
}
return c;
}