(1) 定义一个 int 型一维数组 a,并用指针 p 指向它。 (2) 用指针实现各个数组元素的输入。 (3) 用指针访问各个数组元素实现选择法排序。 (4) 输出排序结果。 [2] 参考程序 /* 用指针实现的选择法排序程序 */ #include<stdio.h> #include<stdlib.h> #include<time.h> #define M 20 int main() { int a[M],i,temp,*p,*q; srand((unsigned)time(NULL)); printf("随机产生%d 个整数:\n",M); for(p=a;p<a+M;p++) { ; //随机产生 1-100 的整数 printf("%4d",*p); } for(i=0;i<M-1;i++) //用于选择排序的外循环 { q=&a[i]; //假设最小元素的位置 for(p=&a[i+1]; ;p++)//用于选择排序的内循环,找出未经排序的数据中最小的 一个 if( ) //假设不成立 q=p; temp=a[i]; a[i]= ; =temp; //把当前最小值交换到数组适当位置 } printf("\n 选择法排序后数列:\n"); for(p=a;p<a+M;p++) //输出排序结果 printf("%4d",*p); return 0; }
时间: 2024-03-08 20:51:25 浏览: 58
这是一道比较典型的 C 语言数组与指针操作的题目,我们可以按照题目要求一步步实现。
首先,定义一个 int 型一维数组 a,并用指针 p 指向它,可以按照下面的代码实现:
```c
int a[M], i, temp, *p, *q;
p = a; // 指针 p 指向数组 a 的首地址
```
接下来,用指针实现各个数组元素的输入,可以借助 scanf 函数和指针的特性,用循环语句实现,代码如下:
```c
for (p = a; p < a + M; p++) {
scanf("%d", p); // 使用指针 p 输入数组元素
}
```
然后,用指针访问各个数组元素实现选择法排序,我们可以借助选择排序的思想,用两个指针 p 和 q 分别指向当前未排序的部分中的最小值和当前未排序的部分的第一个元素,然后不断地交换它们的值,完成排序。代码如下:
```c
for (i = 0; i < M - 1; i++) {
q = &a[i]; // 假设最小元素的位置
for (p = &a[i + 1]; p < a + M; p++) {
if (*p < *q) { // 找出未经排序的数据中最小的一个
q = p;
}
}
temp = a[i]; a[i] = *q; *q = temp; // 交换当前最小值和当前未排序的部分的第一个元素
}
```
最后,输出排序结果,可以用循环语句和 printf 函数实现,代码如下:
```c
printf("\n选择法排序后数列:\n");
for (p = a; p < a + M; p++) {
printf("%4d", *p); // 输出排序结果
}
```
整个程序的完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 20
int main() {
int a[M], i, temp, *p, *q;
p = a; // 指针 p 指向数组 a 的首地址
srand((unsigned)time(NULL));
printf("随机产生%d个整数:\n", M);
for (p = a; p < a + M; p++) {
*p = rand() % 100 + 1; // 随机产生 1-100 的整数
printf("%4d", *p);
}
for (i = 0; i < M - 1; i++) {
q = &a[i]; // 假设最小元素的位置
for (p = &a[i + 1]; p < a + M; p++) {
if (*p < *q) { // 找出未经排序的数据中最小的一个
q = p;
}
}
temp = a[i]; a[i] = *q; *q = temp; // 交换当前最小值和当前未排序的部分的第一个元素
}
printf("\n选择法排序后数列:\n");
for (p = a; p < a + M; p++) {
printf("%4d", *p); // 输出排序结果
}
return 0;
}
```
希望这个例子能够帮助你更好地理解数组和指针的操作。
阅读全文