这是本文档旧的修订版!
c语言程序设计基础实验
点击下载
以下是所有程序重新用指针实现的版本:
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) 访问,指针间接操作代替了下标。 • 字符串删除操作采用双指针法。 • 排序和循环右移直接用指针运算完成。
以上代码均可复制运行。
评论