03. C Pro 关于数组与指针的用例

/* 1. 求一段字符串中的最长单词

int LTH = 0;
int length=0;
char result[100];  // 如果放在函数longest中,函数调用完毕,会将其释放
int alpha(char c) {
  if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
    return 1;
  else
    return 0;
}
char * longest(char * c) {
  int i, len;
  char * point;
  len = 0;
  for (i = 0; i <= LTH; i++) {
    if (alpha(*c)) len++;
    else {
      if (len > length) {
        length = len;
        point = c - length;
      }
      len = 0;
    }
    c += 1;
  }
  for (i = 0; i < length; i++) {
    result[i] = * point;
    point += 1;
  }
  result[length] = '\0';
  return result;
}
int main() {
  char str[100] = {' '};
  char * tmp;
  gets_s(str);
  LTH = strlen(str);
  tmp = longest(str);
  printf("the longest word is :");
  for (int i = 0; i < length; i++) {
    printf("%c", *tmp);
    tmp += 1;
  }

}

*/

/* 2. 数组作为地址,在函数间的传递
int * update(int b[], int n) {
  printf("\nb[] = ");
  for (int i = 0; i < n; i++) {
    b[i] = b[i] + 1;
    printf("%d ", b[i]);
  }
  return b;
}

int main() {
  int a[5] = { 0 }, c[5] = { 0 };
  int * tmp;

  tmp = update(a, 5);
  for (int i = 0; i < 5; i++) {
    c[i] = *tmp;
    tmp += 1;
  }

  printf("\nupdate a[] = ");
  for (int i = 0; i < 5; i++) printf("%d ",a[i]);
  printf("\nupdate c[] = ");
  for (int i = 0; i < 5; i++) printf("%d ", c[i]);

}
*/

/* 3. 函数递归:汉诺塔
void hanno(int n, char x, char y, char z) {
  if (n == 1)

    printf("%c --> %c\n",x,z);
  else {
    hanno(n - 1, x, z, y);   // 将前n-1层塔,借助z,移动到y
    printf("\n%c --> %c\n", x, z); // 将第n层塔,移动到z
    hanno(n - 1, y, x, z);   // 再将前n-1层塔,借助x,移动到z
  }
}

int main() {
  int n;
  scanf("%d", &n);
  hanno(n, 'a', 'b', 'c');
}
*/

/* 4. 一群人围成一圈,1-3报数,凡3退出,求最后剩下的是第几号
  1.按人数 n 编号;
  2.报数 n-1 次,标记退出人员
  3.输出最终胜出者
*/
/*
#define MAX_NUM 50
#define BEGIN 1
#define END 3
#define REMOVED 0

void initialize(int * num, int n) {
  for (int i = 0; i < n; i++) {
    *num = i + 1;
    num += 1;
  }
}

void count_off(int * num, const int n) {
  int i, k, m;
  i = k = m = 0;
  while (m < n - 1) {
    if (*(num + i) != REMOVED) {
      k++;
      if (k == 3) {
        *(num + i) = REMOVED;
        k = 0;
        m++;
      }
    }
    i++;
    if (i == n) i = 0;
  }
}

void output(int * num, int n) {
  for (int i = 0; i < n; i++) {
    if (*num != REMOVED) {
    printf("剩下的是原来的第%d号", i);
    return;
  }
  num += 1;
}
}
int main() {
  int num[MAX_NUM];
  int n;   //人数

  printf("请输入人数:");
  scanf("%d", &n);

  initialize(num, n);
  count_off(num, n);
  output(num, n);

  return 0;
}
*/
/*
int main(void) {
  int i, k, m, n, num[50], *p;
  printf("input number:");
  scanf("%d", &n);
  p = num;

  for (i = 0; i < n; i++) {
    *(p+i) = i + 1;
  }

  i = k = m = 0;
  while (m < n - 1) {
    if (*(p + i) != 0) {
      k++;
      if (k == 3) {
        *(p + i) = 0;
        k = 0;
        m++;
      }
    }
    i++;
    if (i == n) i = 0;
  }
  while (*p == 0) p++;
  printf("the last one No.%d\n", *p);
  return 0;
}
*/

posted @ 2021-12-03 14:08  雅丽梅  阅读(11)  评论(0)    收藏  举报