操作符的日常練習!
阿新 • • 發佈:2019-01-14
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;
}