exercise12

//1.编写函数:
//unsigned int reverse_bit(unsigned int value);
//这个函数的返回值value的二进制位模式从左到右翻转后的值。
//
//如:
//在32位机器上25这个值包含下列各位:
//00000000000000000000000000011001
//翻转后:(2550136832)
//10011000000000000000000000000000
//程序结果返回:
//2550136832
//
//2.不使用(a + b) / 2这种方式,求两个数的平均值。
//
//3.编程实现:
//一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
//请找出这个数字。(使用位运算)
//4.
//有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".
//   要求:
//   不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
//
#include<stdio.h>
#pragma warning(disable:4996)

#define LEN 20

unsigned int reverse_bit(int x)
{
	int i = 0;
	int value;
	for (; i < 32; i++)
	{
		value= x % 2;
		printf("%d ",value);
		x/=2;
	}
}
int average(int x, int y)
{
	int min = x > y ? y : x;
	int max = x > y ? x : y;
	int average = min + (max - min) / 2;
	return average;
}
void find_num(int n[],int len)
{
	int i = 1;
	for (; i < len; i++)
	{
		n[0] = n[0] ^ n[i];
	}
	printf("%d\n",n[0]);
}

//
//int main()
//{
//
//	/*int x;
//	scanf("%d",&x);
//	reverse_bit(x);*/
//
//	/*int x, y;
//	scanf("%d%d",&x,&y);
//	printf("%d\n", average(x,y));*/
//
//	/*int n[] = { 1,3,4,1, 3, 4, 9 };
//	int len = sizeof(n) / sizeof(n[0]);
//	find_num(n, len);*/
//
//	char arr1[] = "student a am i";
//	char arr2[] = { 0 };
//	character(arr1,  arr2);
//	system("pause");
//	return 0;
//}


#include <stdio.h>  

void reverse_all(char *star, char *end)    
{
	while (star<end)
	{
		*star = *star^*end;
		*end = *star^*end;
		*star = *star^*end;
		star++;
		end--;
	}
}


int main()
{
	char arr[] = "student a am i";
	char *p = arr;  //指针p,q指向字符串首地址  
	char *q = p;
	reverse_all(arr,arr + strlen(arr) - 1);  //整体逆置 
	//局部逆置
	while (*p != '\0' && *q != '\0')
	{
		if (*q == ' ')  
		{
			reverse_all(p, q - 1);  //q指向空格,q-1尾部逆置  
			q++;    
			p = q;  
		}
		q++;   
	}
	reverse_all(p, q - 1);  //最后一个单词还需要逆置一次 
	printf("%s", arr);   
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zn_wuxunian/article/details/80109794