1. 程式人生 > >操作符的日常練習!

操作符的日常練習!

1.編寫函式:
unsigned int reverse_bit(unsigned int value);
這個函式的返回值value的二進位制位模式從左到右翻轉後的值。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int value)
{
	int ret = 0;
	for (int i = 0; i <= 32; i++)
	{
		if (value >>i&1)
		{ 
			ret |= (value >> i & 1) << (31 - i);
		}
	}
	return ret;
}
int main()
{
	int a ;
	printf("請輸入一個數:");
	scanf("%d", &a);
	printf("%u", reverse_bit(a));
	system("pause");
}

2.不使用(a+b)/2這種方式,求兩個數的平均值。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int Two_points(int x, int y)
{
	int sum;
	sum = (x + y) >> 1;
	return sum;

}
int main()
{
	int a;
	int b;
	printf("請輸入a和b:");
	scanf("%d %d", &a,&b);
	printf("%d", Two_points(a,b));
	system("pause");
}

3.程式設計實現:
一組資料中只有一個數字出現了一次。其他所有數字都是成對出現的。
請找出這個數字。(使用位運算)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int arr[9] = { 0,1,5,6,7,1,0,7,6 };
	int size = sizeof(arr) / sizeof(arr[0]);
	int ret = arr[0];
	printf("arr = %d ", arr[0]);
	int i = 0;
	for (i = 1; i < size; i++)
	{
		ret ^= arr[i];
		printf("%d ", arr[i]);
	}	
	printf("\n");
	printf("這個非成對數字是:%d\n", ret);
	system("pause");
	return 0;
}

4.
有一個字元陣列的內容為:“student a am i”,
請你將陣列的內容改為"i am a student".
要求:
不能使用庫函式。
只能開闢有限個空間(空間個數和字串的長度無關)。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int strlen(const char *arr)
{
	int leng = 0;
	assert(arr);
	while (*arr)
	{
		leng++;
		arr++;
	}
	return leng;
}
void reverse_arr(char *start, char *end)
{
	while (start < end)
	{
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;
	}
}
char *reverse(char *arr)
{
	int n = strlen(arr);
	char *ret = arr;
	char *start = arr;
	char *end = arr + n - 1;
	reverse_arr(start, end);
	while (*arr)
	{
		start = arr;
		while ((*arr != ' ')&&(*arr != '\0'))
		{
			arr++;
		}
		end = arr - 1;
		reverse_arr(start, end);
		if (*arr == ' ')
		{
			arr++;
		}
	}
	return arr;
}
int main()
{
	char arr[] = "student a am i"; 
	reverse(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;
}