memset strcpy 利用函数交换两数 函数调用 传值调用 传址调用 判断闰年方法 二分查找折半查找 函数链式访问

memset

memset的作用就是将 arr 的前六个字符改变成#或者其它设置的

#include<stdio.h>
#include <string.h>//memset
int main()
{
    
    
	char arr[] = "hello world";
	memset(arr, '#', 6);
	//memset的作用就是将 arr 的前六个字符改变成#或者其它设置的
	printf("%s\n", arr);
	return 0;
}

strcpy

#include<stdio.h>
#include<string>//strcpy 
int main()
{
    
    
	char arr1[] = "bit";
	char arr2[20] = "#######";
	strcpy(arr2, arr1);
	//这里的arr2意思拷贝的目的,arr1的意思是拷贝的源头
	//这里结合起来的意思就是将arr1的内容拷贝到arr2当中去
	printf("arr2 = %s\n", arr2);
	return 0;
}

利用函数交换a和b

#include<stdio.h>
void Add(int* pa,int *pb)
{
    
    
	int tmp = 0;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
    
    
	int a = 10;
	int b = 20;
	printf("交换前a=%d b=%d\n", a, b);
	Add(&a, &b);

	printf("交换后a=%d b=%d\n", a, b);
	return 0;
}

函数的调用

传值调用: 函数的形参和实参分别占有不同内存块,
对形参的修改不会影响实参
传址调用
1.传址调用是把函数外部创建变量的内存地址,传递给
函数参数的一种调用函数的方式
2这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量

写一个函数判断这个数是不是素数
素数判断是2->n-1个数全部除一遍都算出是素数才是

#include<stdio.h>
int is_prime(int n)
{
    
    	
	//素数判断是2->n-1个数全部除一遍都算出是素数才是	
	int j = 0;
	for (j = 2; j < n; j++)
	{
    
    
		if (n%j == 0)
			return 0;
	}
	return 1;
}
int main()
{
    
    
	int i = 0;
	//打印100-200之间的素数
	for (i = 100; i <= 200; i++)
	{
    
    
		if (is_prime(i) == 1)
			printf("%d ", i);
	}
	return 0;
}

判断1000-2000之内是闰年的

#include<stdio.h>
int is_leep_year(int x)
{
    
    
	if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
		return 1;
	else
		return 0;
}
int main()
{
    
    
	int i = 0;
	for (i = 1000; i <= 2000; i++)
	{
    
    
		if (is_leep_year(i) == 1)
		{
    
    
			printf("i=%d\n", i);
		}
	}
	return 0;
}

1.二分查找
2.在一个有序数组中查找具体的某个数
3.如果找到了返回这个数的下标,找不到的返回-1

#include<stdio.h>
//本质上arr是一个指针
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 (arr[mid] > k)
		{
    
    
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
    
    
			left = mid + 1;
		}
		else
		{
    
    
			return mid;
		}
	}
	return -1;
}
int main()
{
    
    
	/*二分查找
	在一个有序数组中查找具体的某个数
	如果找到了返回这个数的下标,找不到的返回-1*/
	int arr[] = {
    
     1, 2, 3, 4, -5, 6, 7, 8, 9, 10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);//sz数组最右侧下标
	int ret =  binary_search(arr, k, sz);
	if (ret == -1)
	{
    
    
		printf("找不到这个数\n");
	}
	else
	{
    
    
		printf("找到了这个数下标是%d\n", ret);
	}
	return 0; 
}

写一个函数,每调用一次这个函数,就会将num的值加1

#include<stdio.h>
void Add(int* p)
{
    
    
	(*p)++;
}
int main()
{
    
    
	int num = 0;
	Add(&num);
	printf("num=%d\n", num);
	Add(&num);
	printf("num=%d\n", num);
	Add(&num);
	printf("num=%d\n", num);

}

函数链式访问:把一个函数的返回值作为另一个函数的参数

#include<stdio.h>
int main()
{
    
    
	printf("%d",printf("%d",printf("%d",43)));
	//这里的打印结果是4321
	//因为这里首先打印43,然后调用printf这个函数它的返回值是打印元素个数
	//所以第二个printf打印的就是2,然后在调用printf,它的返回值是打印的元素
	//个数所以就是1,所以结果就是4321
	return 0;
}

Guess you like

Origin blog.csdn.net/weixin_52495715/article/details/119672136