C語言操作符題型
阿新 • • 發佈:2018-11-02
////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; //}