输入10个整数, 将其中最小的数与第一个数对换, 把最大的数与最后一个数对换。①输入10个数;②进行处理;③输出10个数。

输入10个整数,
将其中最小的数与第一个数对换,
把最大的数与最后一个数对换。

写三个函数; ①输入10个数;②进行处理;③输出10个数。

输入
10个整数

输出
整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

样例输入
2 1 3 4 5 6 7 8 10 9
样例输出
1 2 3 4 5 6 7 8 9 10

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void swap_int_pointer(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//在此下方插入自定义函数对的声明:
/* 用指针读入并保存数字 */
int read(int *p, int n)
{
for (int i = 0; i < n; i++)
{
if(scanf("%d", p + i) == EOF)
{
return 0;
}
}
return 1;
}
void deal(int *p,int n)
{
int min_index = 0; /* 最小元素的 索引/偏移量 */
int max_index = 0;
for (int i = 1; i < n; i++)
{
if (*(p + min_index) > *(p + i))
{
min_index = i;
}
/*
由于本题要求交换的操作有两处,故不宜同时确定min_index 和max_index,因为第一次swap后元素的排列很可能发生了改变.
宜再第一次swap后再重新扫描.
if (*(p + max_index) < *(p + i))
{
max_index = i;
} */
}
// int temp;
// temp = *(p+min_index);
// *(p+min_index) = *(p);
// *p = temp;
swap_int_pointer(p + min_index, p);
//这里发生了自定义的函数嵌套调用,因为内部的函数在外部函数之前定义了所以不必再在调用函数里声明,类似于main()
for (int i = 1; i < n; i++)
{
if (*(p + max_index) < *(p + i))
{
max_index = i;
}
}
swap_int_pointer(p + max_index, p + n - 1);
}
void print(int *p,int n)
{
for(int i = 0;i<n;i++)
{
printf("%d ",*(p+i));
}
printf("\n");
}
//主函数main
int main()
{
//复制模版式删除这个或者再下面一个
int n;
int size_int = sizeof(int);
int *p;
//printf ("test\n");
p = (int *)malloc(10 * size_int);
//free(p);
while (read(p, 10))
{
deal(p, 10);
print(p, 10);
}
free(p);
return 0;
}
posted @   xuchaoxin1375  阅读(31)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-04-16 mysql_数据库(或指定表)的备份(mysqldump)和到导入的若干方案/数据的导入(Navicat:excel的批量导入到某一张表)
点击右上角即可分享
微信分享提示