aa

这是本文档旧的修订版!


c语言程序设计基础实验

实验3.zip

2024_10_21_c_epx_4.zip

点击下载

以下是所有程序重新用指针实现的版本:

1. 交换数组 a 和数组 b 的对应元素

#include <stdio.h>

void swap(int *a, int *b, int n) {

  for (int i = 0; i < n; i++) {
      int temp = *(a + i);
      *(a + i) = *(b + i);
      *(b + i) = temp;
  }

}

int main() {

  int a[] = {1, 2, 3};
  int b[] = {4, 5, 6};
  int n = sizeof(a) / sizeof(a[0]);
  swap(a, b, n);
  printf("Array a: ");
  for (int i = 0; i < n; i++) printf("%d ", *(a + i));
  printf("\nArray b: ");
  for (int i = 0; i < n; i++) printf("%d ", *(b + i));
  return 0;

}

2. 求整型数组中的最大值

#include <stdio.h>

int findMax(int *arr, int n) {

  int max = *arr;  // 首元素
  for (int i = 1; i < n; i++) {
      if (*(arr + i) > max) max = *(arr + i);
  }
  return max;

}

int main() {

  int arr[] = {3, 5, 7, 2, 8};
  int n = sizeof(arr) / sizeof(arr[0]);
  printf("Maximum value: %d\n", findMax(arr, n));
  return 0;

}

3. 删除字符串中所有字符 ‘k’

#include <stdio.h>

void removeChar(char *str, char ch) {

  char *p1 = str, *p2 = str;
  while (*p1 != '\0') {
      if (*p1 != ch) {
          *p2 = *p1;
          p2++;
      }
      p1++;
  }
  *p2 = '\0';  // 结束符

}

int main() {

  char str[] = "bookkeeper";
  removeChar(str, 'k');
  printf("Modified string: %s\n", str);
  return 0;

}

4. 用指针方法完成选择排序

#include <stdio.h>

void selectionSort(int *arr, int n) {

  for (int i = 0; i < n - 1; i++) {
      int *min = arr + i;
      for (int *j = arr + i + 1; j < arr + n; j++) {
          if (*j < *min) {
              min = j;
          }
      }
      int temp = *(arr + i);
      *(arr + i) = *min;
      *min = temp;
  }

}

int main() {

  int arr[] = {64, 25, 12, 22, 11};
  int n = sizeof(arr) / sizeof(arr[0]);
  selectionSort(arr, n);
  printf("Sorted array: ");
  for (int i = 0; i < n; i++) printf("%d ", *(arr + i));
  return 0;

}

5. 实现整型数组元素循环右移 m 位

#include <stdio.h>

void rotateRight(int *arr, int n, int m) {

  m = m % n;
  for (int i = 0; i < m; i++) {
      int last = *(arr + n - 1);
      for (int *j = arr + n - 1; j > arr; j--) {
          *j = *(j - 1);
      }
      *arr = last;
  }

}

int main() {

  int arr[] = {1, 2, 3, 4, 5};
  int n = sizeof(arr) / sizeof(arr[0]);
  int m = 2;
  rotateRight(arr, n, m);
  printf("Rotated array: ");
  for (int i = 0; i < n; i++) printf("%d ", *(arr + i));
  return 0;

}

程序说明

•	每个程序都通过指针操作数据结构。
•	数组元素通过 *(arr + index) 访问,指针间接操作代替了下标。
•	字符串删除操作采用双指针法。
•	排序和循环右移直接用指针运算完成。

以上代码均可复制运行。

请输入您的评论. 可以使用维基语法:
V F T I X
 
  • aa.1732530667.txt.gz
  • 最后更改: 2024/11/25 18:31
  • doge24190