输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
解答如下
#include <stdio.h>
#define max 10000
void swap(int t[],int i,int j)
{
int tem=t[i];
t[i]=t[j];
t[j]=tem;
}
int main()
{
int n;
printf("输入数组元素个数:");
scanf("%d",&n);
int t[n];
int i;
printf("输入n个数:\n");
for(i=0;i<n;i++)//输入数组
{
scanf("%d",&t[i]);
}
int maxnum=t[0];
int maxp=0;
int minnum=t[0];
int minp=0;
for(i=1;i<n;i++)
{
if(t[i]>maxnum)
{
maxnum=t[i];
maxp=i;
}
if(t[i]<minnum)
{
minnum=t[i];
minp=i;
}
}
//最大的与第一个元素交换,最小的与最后一个元素交换
swap(t,maxp,0);
swap(t,minp,n-1);
printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
for(i=0;i<n;i++)//输出数组
{
printf("%d ",t[i]);
}
return 0;
}
#include<stdio.h>
int main() {
int max, min, temp;
int max_index = 0, min_index = 0;
int arr[10];
int i;
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
max = arr[0];
min = arr[0];
for (i = 1;i < 10;i++) {
if (max < arr[i]) {
max = arr[i];
max_index = i;
}
if (min > arr[i]) {
min = arr[i];
min_index = i;
}
}
printf("max = %d,max_index = %d\n", max, max_index);
printf("min = %d,min_index = %d\n", min, min_index);
temp = arr[0];
arr[0] = max;
arr[max_index] = temp;
temp = arr[9];
arr[9] = min;
arr[min_index] = temp;
for (int i = 0;i < 10;i++)
printf("%5d", arr[i]);
return 0;
}
#include<stdio.h>
int main(){
int arr[10];
int i,max,min,maxindex,minindex,temp;
printf("请输入10个数据:(空格隔开)\n");
for(i=0;i<10;i++){
scanf("%d",&arr[i]);//获取数组,10个元素
}
printf("交换前:\n");
for(i=0;i<10;i++){
printf(" %d",arr[i]);
}
max=arr[0];
min=arr[0];
for(i=1;i<10;i++){
if(max<arr[i])
{max=arr[i];
maxindex=i;}//记录最大的下标
if(min>arr[i])
{min=arr[i];
minindex=i;}//记录最小的下标
}
//最大的与第一个进行交换
temp=arr[0];
arr[0]=arr[maxindex];
arr[maxindex]=temp;
//最小的与最后一个in进行交换
temp=arr[9];
arr[9]=arr[minindex];
arr[minindex]=temp;
printf("\n");
printf("交换后:\n");
for(i=0;i<10;i++){
printf(" %d",arr[i]);
}
return 0;
}
你好,你可以看下代码,这个题目有点歧义就是第一个元素如果是最小值的话该如何处理,首先第一个元素要与最大值交换,但是它本身是最小值的话还得和最后一个元素交换,如果不考虑这些特殊情况的话下面的代码是可以的,就是输入的话第一个元素不能输入成最小值,最后一个元素不能输入成最大值,有疑问可以@我
#include<stdio.h>
// 想输入数组中元素的个数 修改N即可
#define N 10
int main()
{
int i; // 用于循环
int arr[N]; // 存储数据
int Max; // 存储数组最大值
int Min; // 存储数组最小值
int MaxIdx; // 存储数组中最大值的下标
int MinIdx; // 存储数组中最小值的下标
int t; // 交换数据存储
// 提示用户入N个数字
printf("Plese Input %d Mumbers:\n", N);
// 将用户输入存储到arr数组
for(i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
// 初始化数据
Max = arr[0];
Min = arr[0];
MaxIdx = 0;
MinIdx = 0;
// 查找最大值和最小值以及它们的下标
for(i = 0; i < N; i++)
{
if(arr[i] > Max)
{
Max = arr[i];
MaxIdx = i;
}
if(arr[i] < Min)
{
Min = arr[i];
MinIdx = i;
}
}
// 最大值与第一个值交换
t = arr[0];
arr[0] = arr[MaxIdx];
arr[MaxIdx] = t;
// 最小值与最后一个值交换
t = arr[N - 1];
arr[N - 1] = arr[MinIdx];
arr[MinIdx] = t;
// 输出数组
for(i = 0; i < N; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
分开两次搜索是防止最大最小值正好在头尾位置,发生重复交换
#include<stdio.h>
int main() {
int max, min; //记录最值
int max_index = 0; //记录最值的下表,并且初始化为0
int min_index = 0;
int temp; //后面交换时用到的变量
int arr[10] = { 1,2,3,4,5,6,7,850,9,10 }; //假设一个大小为10的数组
for (int i = 0; i < 10; i++) //输出变化前的数组
printf("%d ", arr[i]);
printf("\n");
//找最大值在数列中位置,并且将max_index指向最大值位置
max = arr[0];
for (int i = 1; i < 10; i++) {
if (max < arr[i]) {
max_index = i;
max = arr[i];
}
}
//最大值和第一位交换
temp = arr[0];
arr[0] = arr[max_index];
arr[max_index] = temp;
//找最小值在数列中的位置,并且将min_index指向最小值位置
min = arr[0];
for (int i = 1; i < 10; i++) {
if (min > arr[i]) {
min_index = i;
min = arr[i];
}
}
//最小值和数组最大一位交换
temp = arr[9];
arr[9] = arr[min_index];
arr[min_index] = temp;
for (int i = 0; i < 10; i++)
printf("%d ", arr[i]);
}
int main() {
int max, min, temp;
int max_index = 0, min_index = 0;
int arr[10] = { 5,2,3,4,5,6,7,8,9,6 };
max = arr[0];
min = arr[0];
for (int i = 1;i < 10;i++) {
if (max < arr[i]) {
max = arr[i];
max_index = i;
}
if (min > arr[i]) {
min = arr[i];
min_index = i;
}
}
printf("max = %d,max_index = %d\n", max, max_index);
printf("min = %d,min_index = %d\n", min, min_index);
temp = arr[0];
arr[0] = max;
arr[max_index] = temp;
temp = arr[9];
arr[9] = min;
arr[min_index] = temp;
for (int i = 0;i < 10;i++)
printf("%5d", arr[i]);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
/** 交换元素的值 */
void swap(int* array, int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/** 打印数组 */
void print(int* array, int length)
{
int i;
for (i = 0; i < length; i++)
printf("%d ", array[i]);
}
int main(void)
{
int size, i, maxIndex, minIdex; // 从左向右依次为 数组大小、i、最大元素下标、最小元素下标
int* array; // 指向整型变量的指针
maxIndex = minIdex = 0; // 初始化元素下标
// 输入大小
printf("输入数组元素个数:");
scanf_s("%d", &size);
array = (int*)malloc(sizeof(int) * size); // 动态分配内存
printf("输入%d个元素:\n", size);
for (i = 0; i < size; i++) // 输入元素
{
scanf_s("%d", &array[i]);
if (array[i] > array[maxIndex]) maxIndex = i; // 如果当前下标元素大于最大下标元素,更新最大下标
if (array[i] < array[minIdex]) minIdex = i; // 如果当前下标元素小于最小下标元素,更新最小下标
}
// 输出原数组
printf("原数组:");
print(array, size);
putchar('\n');
// 交换数组指定下标元素
swap(array, 0, maxIndex);
swap(array, size - 1, minIdex);
// 输出新数组
printf("新数组:");
print(array, size);
putchar('\n');
free(array); // 释放内存空间
return 0;
}
解答在这,望采纳(详细分析):
#include <stdio.h>
void swap(int t[], int i, int j){ //交换函数
int tep = t[i];
t[i] = t[j];
t[j] = tep;
}
int main(){
int n;
printf("输入数组元素的个数:");
scanf("%d", &n);
int t[n];
int i;
printf("输入n个数:\n");
for(i = 0; i < n; i++){//输入数组
scanf("%d", &t[i]);
}
int mn = t[0]; //存第一个元素
int maxp = 0; //最大的那个元素
int minnum = t[0]; //存最后一个元素
int minp = 0; //最小的那个元素
//以上这些变量的初始化是因为后续的排序要使用
for(i = 1; i < n; i++) {//排序
if(t[i] > mn) {
mn = t[i];
maxp = i;
}
if(t[i] < minnum) {
minnum = t[i];
minp = i;
}
}
//最大的与第一个元素交换,最小的与最后一个元素交换
swap(t, maxp, 0);
swap(t, minp, n-1);
printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
for(i = 0;i < n;i ++){//输出数组
printf("%d ", t[i]);
}
return 0;
}
#include <stdio.h>
#define max 10000
void swap(int t[],int i,int j)
{
int tem=t[i];
t[i]=t[j];
t[j]=tem;
}
int main()
{
int n;
printf("输入数组元素个数:");
scanf("%d",&n);
int t[n];
int i;
printf("输入n个数:\n");
for(i=0;i<n;i++)//输入数组
{
scanf("%d",&t[i]);
}
int maxnum=t[0];
int maxp=0;
int minnum=t[0];
int minp=0;
for(i=1;i<n;i++)
{
if(t[i]>maxnum)
{
maxnum=t[i];
maxp=i;
}
if(t[i]<minnum)
{
minnum=t[i];
minp=i;
}
}
//最大的与第一个元素交换,最小的与最后一个元素交换
swap(t,maxp,0);
swap(t,minp,n-1);
printf("最大的与第一个元素交换,最小的与最后一个元素交换:\n");
for(i=0;i<n;i++)//输出数组
{
printf("%d ",t[i]);
}
return 0;
}
设定一个空值,遍历和每个数进行比较,找出最大值和最小值放在前后