数组下标的应用
将数组元素倒置
void Ints(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
void Reverse(int arr[], int sz)
{
int left = 0;//左下标
int right = sz-1;//右下标
int temp = 0;//临时变量
while (left < right)//数组元素前后交换范围
{
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
printf("\n");
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);//打印函数
Reverse(arr, sz);//函数元素倒置
print(arr, sz);//打印函数
//Ints(arr, sz);//对函数进行初始化为0
return 0;
}
不同数组元素交换
int main()
{
int arr1[] = { 1,3,5,7,9 };
int arr2[] = { 2,4,6,8,10 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
int temp = 0;
int i = 0;
for (i = 0; i < sz; i++)
{
temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
}
求一个数二进制中1的个数
第一种
int count_bit(unsigned int input)//负数必须以无符号数比较
{
int count = 0;
while (input)//为0跳出循环
{
if (1 == input % 2)
{
count++;
}
input = input / 2;//每次循环都要改变所求的值
}
return count;
}
int main()
{
printf("请输入数字");
int input = 0;
scanf("%d", &input);
int ret = count_bit(input);
printf("ret = %d\n", ret);
return 0;
}
第二种
int count_bit(int input)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)//按位&
{
if (1 == ((input >> i) & 1))
{
//00000000000000000000000000000001011
//00000000000000000000000000000000001
count++;
}
}
return count;
}
int main()
{
printf("请输入数字");
int input = 0;
scanf("%d", &input);
int ret = count_bit(input);
printf("ret = %d\n", ret);
return 0;
}
第三种
int count_bit(int input)
{
int count = 0;
while (input)
{
input = input & (input - 1);
//110 n &
//101 n-1
//
// 100 n
// 011 n-1
// 每次都会使n的二进制数最右边的1消失
// 000 为 0 跳出循环
count++;
}
return count;
}
int main()
{
printf("请输入数字");
int input = 0;
scanf("%d", &input);
int ret = count_bit(input);
printf("ret = %d\n", ret);
return 0;
}
分别打印一个数二进制的奇数位和偶数位
void prin_diff(int n)
{
printf("奇数:\n");
int i = 0;
for (i = 30; i >= 0; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n偶数:\n");
for (i = 31; i >= 1; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
}
int main()
{
printf("请输入数字\n");
int input = 0;
scanf("%d", &input);
prin_diff(input);
return 0;
}
使用函数递归倒置字符串
int My_strlen(char* arr)
{
int count = 0;
while(*arr != '\0')
{
arr++;
count++;
}
return count;
}
void reverse_string(char* arr)
{
char temp = *arr;
int len = My_strlen(arr);
*arr = *(arr + len - 1);
*(arr + len - 1) = '\0';//凑成另一个字符串 好使用函数的递归
if (len >= 2)
{
reverse_string(arr + 1);
}
*(arr + len - 1) = temp;//保存首元素的重要性
}
int main()
{
//倒置字符串
char arr[] = "ling song";
reverse_string(arr);//调用自定义函数
printf("%s\n", arr);
return 0;
}
使用递归的方式求一个无符号数之和
int Digitsum(unsigned int num)
{
if (num > 9)
{
return Digitsum(num / 10) + num % 10;
}
else
return num;
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
int ret = Digitsum(num);
printf("%d\n", ret);
return 0;
}