1. 程式人生 > >C語言操作符題型

C語言操作符題型

////1.編寫函式: 
////unsigned int reverse_bit(unsigned int value);
////這個函式的返回值value的二進位制位模式從左到右翻轉後的值。
////如:
////在32位機器上25這個值包含下列各位:
////00000000000000000000000000011001
////翻轉後:(2550136832)
////10011000000000000000000000000000
////程式結果返回:
////2550136832
////將提出的每一位依次儲存在一個字元陣列中,此時的問題便是如何將二進位制數準換成十進位制。
////同時需要將字元型轉換為整型。
//#include<stdio.h>
//#include<stdlib.h>
//#include<math.h>
//unsigned int reverse_bit(unsigned int value) {
//	int i = 0;
//	int ret = 0;
//	for (i = 0; i < 32; i++) {
//		if ((value >> i) & 1) {
//			ret|=(value>>i&1)<<(31-i);
//		}
//	}
//	return ret;
//}
//int main() {
//	int a = 25;
//	int ret = 0;
//	ret = reverse_bit(a);
//	printf("通過轉換後為:%u\n", ret);//注意此處一定要用%u表示無符號
//	system("pause");
//	return 0;
//}

////2.不使用(a + b) / 2這種方式,求兩個數的平均值。
////思路:右移就相當於除2
//#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//#include<stdlib.h>
//int main() {
//	int num1 = 0;
//	int num2 = 0;
//	printf("請輸入兩個數:\n");
//	scanf("%d %d", &num1, &num2);
//	printf("兩個數的平均數為:%d\n", (num1 + num2) >> 1);
//	system("pause");
//	return 0;
//}


////3.程式設計實現:
////一組資料中只有一個數字出現了一次。其他所有數字都是成對出現的。
////請找出這個數字。(使用位運算)
////思路:在一組資料中不同的那一個數和其他的數異或都是1,在這個數組裡面對每個元素進行異或
////的遍歷就可以得到只出現一次的那個數。
//#include<stdio.h>
//#include<stdlib.h>
//int main() {
//	int arr[] = { 1,1,2,2,5,5,7,7,8,8,12,3,3 };
//	int i = 0;
//	for (i = 1; i < sizeof(arr)/sizeof(arr[0]); i++) {
//		arr[0] = arr[0] ^ arr[i];//與不是自己的每一個元素進行異或
//	}
//	printf("the signal number is:%d\n", arr[0]);
//	system("pause");
//	return 0;
//}


////4.
////有一個字元陣列的內容為:"student a am i",
////	請你將陣列的內容改為"i am a student".
////	要求:
////	不能使用庫函式。
////	只能開闢有限個空間(空間個數和字串的長度無關)。
////
////	student a am i
////	i ma a tneduts
////	i am a student
////思路:先將這個陣列整體進行首尾交換,然後再將得到的陣列中每一個單詞進行首尾交換,這個
////單詞通過'\0'進行判斷一個單詞的長度
//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//#include<assert.h>
//void swap(char* left, char* right) {
//	assert(left != NULL);
//	assert(right != NULL);
//	while (left < right) {
//		char temp = 0;
//		temp = *left;
//		*left = *right;
//		*right = temp;
//		left++;
//		right--;
//	}
//}
//void reverse(char* arr) {
//	//整體逆置
//	int len = strlen(arr);
//	swap(arr, arr + len - 1);
//	//每個單詞的逆置
//	while (*arr != '\0') {//若不滿足則說明還沒有到最後一個位置
//		char* start = arr;//單詞起始位置
//		char* end = start;//單詞結束位置
//		while ((*end != '\0') && (*end != ' ')) {
//			end++;//end指向空格位置的地址
//		}
//		//單詞的起始位置為start,結束位置為end前一個
//		swap(start, end - 1);
//		if (*end != '\0') {
//			//當結束一個單詞的時候下一個單詞的起始為空格的後一個字元
//			arr = end + 1;
//		}
//		else {
//			arr = end;
//		}
//	}
//}
//int main() {
//	char arr[] = "student a am i";
//	reverse(arr);
//	printf("%s\n", arr);
//	system("pause");
//	return 0;
//}

////2+22+222+2222+22222
//#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//#include<stdlib.h>
//int main() {
//	int num = 0;
//	int sum = 0;
//	int sn = 0;
//	printf("請輸入一個數:\n");
//	scanf("%d", &num);
//	for (int i = 1; i <= 5; i++){//迴圈次數表示有幾項 
//		sum = num + sum * 10;//每次得到的都是沒有各位的項
//	    sn += sum;
//	    printf("每一項=%d\n", sum);
//	}
//	printf("sn=%d\n", sn);
//	system("pause");
//	return 0;
//}