数组下标的应用
将数组元素倒置
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;
}








