题目
本题是谭浩强《C程序设计课后习题》题8.3。
题目:
输入10个整数,将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。
写3个函数:
①输人10个数;
②进行处理;
③输出10个数。
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
一、解题思路
思路:
一,首先根据题目要求,把主函数先写出,在主函数里定义一个能存放10个数的整形数组,然后丢进去3个处理函数即可。
二.我们在外面分别定义3个函数:
第一个是输入函数,这个最简单,需要注意的是接收是定义整形指针接收数组即可,因为数组名对应首单元地址,所以接收时是int * number
第二个是处理函数,这个函数还是有点难度的,理一下思路:
1。首先定义max和min两个指针变量,用于进行指向。然后定义一个p指针变量和temp用于存放临时值。
2。把max和min先指向第一个数,也就是max=min=number,number代表首元素地址,指针变量指向地址,没毛病。
3。先遍历找到数组中的最小值,然后把min指向最小值 的地址后立马进行交换,此时数组中最小值就在第一位了
4,然后遍历找到数组中的最大值,把max指向最大值的地址(地址就是指针变量不加*,加*表示的意思是值)然后进行交换,即把最大值和最后一位交换
三,调用输出函数将处理完的数组输出即可。
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
void input(int* number)
{
printf("请输入10个数,用空格分隔:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &number[i]);
}
}
void max_min_value(int* number)//交换函数
{
int* max, * min, * p, temp;
max = min = number;//开始时max和min都指向第一个数。
for (p = number + 1; p < number + 10; p++)
if (*p < *min)min = p;//如果p指向的数小于min指向的数,就使min指向p指向的数。
temp = number[0]; number[0] = *min; *min = temp;//将最小数与第一个数交换。
for (p = number + 1; p < number + 10; p++)
if (*p > *max)max = p;//如果p指向的数大于max指向的数,就使max指向p指向的数。
temp = number[9]; number[9] = *max; *max = temp;
}
void output(int* number)
{
int* p;
printf("经过处理,目前这10个数的顺序为:\n");
for (p = number; p < number + 10; p++)
printf("%d ", *p);
/*for (int i = 0; i < 10; i++)
{
printf("%d", number[i]);
}*/
}
int main()
{
int number[10];
input(number);
max_min_value(number);
output(number);
return 0;
}
三、执行结果
输出:
请输入3个字符串,按回车键结束:c
请输入10个数,用空格分隔:
10 9 8 7 6 5 4 3 1 2
经过处理,目前这10个数的顺序为:
1 9 8 7 6 5 4 3 2 10