<C语言>练习题5

目录

1.自定义函数

2.交换数组(假设两个数组一样大)

3.计算一个整数二进制中1的个数

4.判断一个数字是不是2的n次方

5.比较两个整数有多少个不同的二进制位

6.打印整数二进制的技奇数位和偶数位


1.自定义函数

要求:1)初始化数组

2)输出函数

3)逆序

void init(int arr[],int sz)
{
	int i = 0 ;
	for (i = 0; i < sz; i++)
	{
		arr[i] = 0;
	}
}

void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
}

void reverse(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;

	while (left < right)
	{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
	
}

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

	print(arr, sz);
	reverse(arr,sz);
	print(arr, sz);
	init(arr,sz);
	print(arr, sz);

	return 0;
}

2.交换数组(假设两个数组一样大)

int main()
{
	int arr1[7] = { 1,2,3,4,5,6,7 };
	int arr2[7] = { 11,12,13,14,15,16,17 };

	int i = 0;
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	while (i < sz)
	{
		int tmp = 0;
		tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
		i++;

	}

	return 0;
}

3.计算一个整数二进制中1的个数

上面两种的问题是:如果是-1的话就会出错。

修改:

int my_back(int n)
{
	int count = 0;
	int i = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	
	return count;
}

因为n &( n - 1)就会去掉一个1。


4.判断一个数字是不是2的n次方

int juge(int n)
{
	if ((n & (n - 1)) == 0)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}	

int main()
{
	int num = 9;
	int ret = juge(num);
	if (ret == 0)
	{
		printf("%d是2的次方:",num);
	}
	else
	{
		printf("%d不是2的次方:", num);
	}
	return 0;
}

5.比较两个整数有多少个不同的二进制位

	int m = 10;//1010
	int n = 15;//1111
	int count = 0;
	scanf_s("%d %d", &m, &n);
	
	for (int i = 0; i < 32; i++)
	{
		if(((m >> i) & 1) != ((n >> i) & 1))
		{
			count++;
		}
	}
	printf("%d", count);

优化:

	int m = 10;//1010
	int n1 = 15;//1111
	int count = 0;
	int n = m ^ n1;
	//统计一下n中有几个1,就说明m和n的二进制有几个不同的位
	while ( n )
	{
		n = n & (n - 1);
		count++;
	}
	printf("%d", count);

6.打印整数二进制的技奇数位和偶数位

	int m = 10;
	int i = 0;
	//打印偶数位
	for (i = 31;i >= 1 ; i-=2)
	{
		printf("%d", (m >> i) & 1);
	}
	//打印奇数位
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d", (m >> i) & 1);
	}

猜你喜欢

转载自blog.csdn.net/m0_64432537/article/details/122827208