C语言-----习题

简介: C语言-----习题

1.通过这个例题,我们可以知道*p.a是无法打印99的,因为.的优先级比解引用*高;

struct S
{
  int a;
  int b;
};
int main()
{
  struct S a, * p = &a;
  //可以分为两部分理解
  //struct S a;
  //struct S *p = &a;
  a.a = 99;
  printf("%d\n", a.a);
  printf("%d\n", *p.a);//
  printf("%d\n", (*p).a);
  printf("%d\n", p->a);
  return 0;
}

2.买水问题,1元1瓶水,2空瓶换1瓶水:

int main()
{
  int money = 0;
  int total = 0;
  int empty = 0;
  scanf("%d", &money);
  total = money;
  empty = money;
  while (empty >= 2)
  {
    total = total + empty / 2;
    empty = empty / 2 + empty % 2;
  }
  printf("%d", total);
  return 0;
}

(1)对于这个问题,我们要考虑喝完之后剩下的空瓶,和原本就有的空瓶,

(2)而while循环里面的empty=empty/2(喝完之后又换的)+empty%2(原来剩下的)就是所有的空瓶子的个数;

(3)刚开始是喝的总瓶数等于钱数,空瓶数等于钱数,接下来通过循环不断地累加;

(4)循环的条件就是空瓶的个数大于2瓶,每次循环都要计算喝的总瓶数和新的空瓶子的个数;

(5)跳出循环后的total就是喝的总数

3.输入一串数字,通过编程实现----------这串数字的前面是奇数,后面是偶数:

int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int left = 0;
  int right = sz - 1;
  //奇数符合条件,偶数找出来
  while (left < right)
  {
    while ((left < right) && (arr[left] % 2 == 1))
    {
      left++;
    }
    while ((left < right) && (arr[right] % 2 == 0))
    {
      right--;
    }
    if (left < right)
    {
      int temp = arr[left];
      arr[left] = arr[right];
      arr[right] = temp;
      left++;
      right--;
    }
  }
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

(1)这个代码的整体逻辑就是把前面的偶数和后面的奇数进行对调;

(2)第二个while循环就是找出偶数,奇数符合条件,所以取余后是1的代表是奇数,让下标加1,当我们找到偶数的时候,就会跳出循环,并且记下这个时候的left;

(3)第二个while循环就是找奇数,取余是0就代表是偶数,让下标减去1,知道找到奇数,这个时候跳出循环,记下这个时候的right;

(4)为了防止越界,因为可能全部是奇数或者全部是偶数,所以第二个第三个while都要求left<right;

(5)if语句就是让前面的偶数和后面的奇数交换位置;

(6)因为这样一次只能交换一组数据,所以外面又加上一个while循环,知道全部遍历才结束;

(7)最后使用for循环对重新排列的数组进行打印。

CCCCCCCCCCCCCCCCCCCCCCCCCC

相关文章
TU^
|
5月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
30 1
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
81 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
5月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
24 2
TU^
|
5月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
40 1
TU^
|
5月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
34 1
TU^
|
5月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
29 1
TU^
|
5月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
18 1
TU^
|
5月前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
24 1
TU^
|
5月前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
23 1
TU^
|
5月前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
20 1