第8章指针作业题解
一、编写函数void swap(int pa,int pb)完成两个整数的交换,在main( )函数中输入3个整数,调用函数void swap(int pa,int pb)将它们按由小到大的顺序输出。
#include <stdio.h>
void swap(int* pa, int* pb) {
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a > b) {
swap(&a, &b);
}
if (a > c) {
swap(&a, &c);
}
if (b > c) {
swap(&b, &c);
}
printf("%d %d %d\n", a, b, c);
return 0;
}
二、编写函数void max_min(int p, int n, int max, int min)完成找出指针p所指向数组中的最大值和最小值,n为数组中元素个数。运行函数为了能够得到两个结果值,可使用指针变量在函数之间“传递”数据,在main( )函数中调用函数void max_min(int p, int n, int max, int min)找出数组中的最大值和最小值,并输出。
#include <stdio.h>
void max_min(int* p, int n, int* max, int* min) {
int t;
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (*(p + j) > *(p + j + 1)) {
t = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = t;
}
}
}
*max = *(p + n - 1);
*min = *(p);
}
int main() {
int max, min;
int a[10] = { 52,38,3,28,81,48,98,36,69,77 };
max_min(a, 10, &max, &min);
printf("%d %d\n", max, min);
return 0;
}
三、编写程序,使用指针求二维数组元素的最大值,并确定最大值元素所在的行和列。
#include <stdio.h>
int main() {
int max, maxi, maxj, a[3][3] = { {85,88,17},{98,61,60},{71,37,73} };
max = a[0][0];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (*(*(a + i) + j) > max) {
max = a[i][j];
maxi = i;
maxj = j;
}
}
}
printf("最大值:%d,所在行:%d,所在列:%d\n", max, maxi+1, maxj+1);
return 0;
}