admin 管理员组

文章数量: 1087139


2023年12月21日发(作者:js覆盖html代码)

c语言指针数组经典题目详解

指针数组是一个数组,其元素都是指针。C语言中,指针数组经常用于存储一组字符串或一组指向不同类型对象的指针。

下面是一些经典的题目,对指针数组进行详细解析。

题目1:将一个字符串数组按字典排序。

解析:首先,我们声明一个指向字符串的指针数组,将字符串数组的每个元素赋值给指针数组的对应元素。然后使用冒泡排序法对指针数组进行排序,最后按照排序后的顺序打印指针数组元素所指向的字符串。

```c

#include

#include

#define MAX_LENGTH 100

#define MAX_NUM 10

void bubbleSort(char* arr[], int size) {

for (int i = 0; i < size - 1; i++) {

for (int j = 0; j < size - 1 - i; j++) {

if (strcmp(arr[j], arr[j+1]) > 0) {

char* temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

int main() {

char* strings[MAX_NUM] = {"dog", "cat", "apple", "banana",

"elephant", "fish", "goat", "zebra", "horse", "tiger"};

int size = sizeof(strings) / sizeof(strings[0]);

bubbleSort(strings, size);

for (int i = 0; i < size; i++) {

printf("%sn", strings[i]);

}

return 0;

}

```

题目2:将一个整数数组按升序排序。

解析:这道题类似于题目1,只不过其中的元素类型是int而不是char*。

```c

#include

#define MAX_NUM 10

void bubbleSort(int* arr, int size) {

for (int i = 0; i < size - 1; i++) {

for (int j = 0; j < size - 1 - i; j++) {

if (arr[j] > arr[j+1]) {

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

int main() {

int nums[MAX_NUM] = {9, 2, 8, 4, 5, 1, 7, 3, 6, 0};

int size = sizeof(nums) / sizeof(nums[0]);

bubbleSort(nums, size);

for (int i = 0; i < size; i++) {

printf("%dn", nums[i]);

}

return 0;

}

```

题目3:将一个数组中的奇数放在前面,偶数放在后面。

解析:首先,我们可以创建两个指针数组,分别用于存储奇数和偶数。然后遍历原始数组,将奇数存储到奇数指针数组中,将偶数存储到偶数指针数组中。最后将奇数指针数组和偶数指针数组合并成一个新的数组。

```c

#include

#define MAX_NUM 10

void splitArray(int* arr, int size, int** oddArr, int* oddSize, int**

evenArr, int* evenSize) {

int oddCount = 0;

int evenCount = 0;

for (int i = 0; i < size; i++) {

if (arr[i] % 2 == 0) {

evenCount++;

} else {

oddCount++;

}

}

*oddArr = (int*)malloc(oddCount * sizeof(int));

*evenArr = (int*)malloc(evenCount * sizeof(int));

int oddIndex = 0;

int evenIndex = 0;

for (int i = 0; i < size; i++) {

if (arr[i] % 2 == 0) {

(*evenArr)[evenIndex] = arr[i];

evenIndex++;

} else {

(*oddArr)[oddIndex] = arr[i];

oddIndex++;

}

}

*oddSize = oddCount;

*evenSize = evenCount;

}

int* mergeArray(int* oddArr, int oddSize, int* evenArr, int

evenSize) {

int* mergedArr = (int*)malloc((oddSize + evenSize) *

sizeof(int));

for (int i = 0; i < oddSize; i++) {

mergedArr[i] = oddArr[i];

}

for (int i = 0; i < evenSize; i++) {

mergedArr[oddSize + i] = evenArr[i];

}

return mergedArr;

}

int main() {

int nums[MAX_NUM] = {5, 12, 8, 3, 7, 9, 2, 6, 4, 1};

int size = sizeof(nums) / sizeof(nums[0]);

int* oddArr;

int oddSize;

int* evenArr;

int evenSize;

splitArray(nums, size, &oddArr, &oddSize, &evenArr,

&evenSize);

int* mergedArr = mergeArray(oddArr, oddSize, evenArr,

evenSize);

for (int i = 0; i < oddSize + evenSize; i++) {

printf("%dn", mergedArr[i]);

}

free(oddArr);

free(evenArr);

free(mergedArr);

return 0;

}

```

这些题目都是通过指针数组来进行排序或筛选,通过对指针数组的操作,间接地影响了原始的数组。指针数组的使用非常灵活,可以根据具体的需求来对指针数组进行操作和利用。


本文标签: 数组 指针 偶数 排序 元素