解题思路:

先把数组元素全部换算至对应的绝对值放进另一个数组,然后遍历比较换算为绝对值之后的数组,找出最小值的下标,用来方便与最后一个元素进行交换,最后输出原来的数组。到这里相信大家都会做了吧!!
注意事项:
注意题目说的是绝对值

参考代码:

//二级C语言-最小绝对值

#include<stdio.h>

#include<math.h>

int main()

{

    int a[10],s[10];

    int t;

    int temp;

    for(int i=0;i<10;i++){

    scanf("%d",&s[i]);

    a[i]=abs(s[i]);//这里换算绝对值

    }

    int min=a[0];

    for(int i=1;i<=9;i++){

    if(min>a[i]){

    min=a[i];//这里遍历比较找最小值

t=i;//这里是下标

    }

    }

    temp=s[t];

    s[t]=s[9];

    s[9]=temp;//这里与最后的元素进行交换

    for(int j=0;j<10;j++){

    // if(j==9){

    // printf("%d",a[9]);

    // break;//

    // }

    printf("%d ",s[j]);//最后输出就可以啦

    }

    return 0;

}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 15 条评论

hantangmingw 10月前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    int temp=a[1],x=0;
    for(int i=0;i<10;i++)
    {
        if(fabs(temp)>fabs(a[i]))
        {
            temp=fabs(a[i]);
            x=i;
        }
    }
    int y=0;
    y=a[9];
    a[9]=a[x];
    a[x]=y;
    for(int i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}
3g芯片 1年前 回复TA
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
int main(void)
{
    
    int i       ;
    int j       ;
    int a[10]   ;
    int temp[10];
    int temp_1;

    for (i = 0; i < 10; i++) 
    {
        scanf("%d",&a[i]);
    }

    for (i = 0; i < 10; i++) 
    {
        temp[i] = abs(a[i]);
    }

    for(i = 0; i < 10 ; i++)
    {
        for (j = i + 1; j < 10; j++) 
        {  
            if(temp[i] >= temp[j])
            {
                temp_1 = temp[j];
                temp[j] = temp[i];
                temp[i] = temp_1;
            }
        }
    } 

    for (i = 0; i <
Travis 1年前 回复TA
int main()
{
	int i = 0;
	int t = 0;
	int arr[10] = { 0 };
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	int min = abs(arr[0]);
	for (i = 0; i < 10; i++)
	{
		if (min > abs(arr[i]))
		{
			min = arr[i];
			t = i;
		}
	}
	arr[t] = arr[9];
	arr[9] = min;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
滚哥圆滚滚 2年前 回复TA
@RPG7 int 定义的是b【10】,不是b【i】啊
陈志超 2年前 回复TA
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <math.h>
int main() {
  int p[11],pp[11],i,max=10000,j,t;
  for(i=0;i<10;i++)
  {
  	scanf("%d",&p[i]);
  	pp[i]=abs(p[i]);
  }
  for(i=0;i<10;i++)
  {
  	for(j=i;j<10;j++){
  	 if(pp[i]>pp[j]){
  	 	max=pp[i];
  		pp[i]=pp[j];
  		pp[j]=max;
  	 }
   }
  }
  for(i=0;i<10;i++){
  if(abs(p[i])==pp[0])
  {
  	t=p[i];
  	p[i]=p[9];
  	p[9]=t;
  }
  }
  for(i=0;i<10;i++)
  printf("%d ",p[i]);
	return 0;
}
壹身尘埃 2年前 回复TA
@壹身尘埃 for(int i=1;i<10-1;i++){这个地方已经从1开始了,不需要-1正确的应该是for(int i=1;i<10;i++){
壹身尘埃 2年前 回复TA
#include<stdio.h>
#include<math.h>
int main(){
	int num[10];
	
	for(int i=0;i<10;i++){		//输入所有数据到数组
		scanf("%d",&num[i]);
	}
	
	int t=num[0],flag=0;		//设置临时变量为num[0],下标标志
	for(int i=1;i<10-1;i++){	//10个数字只需要比较9次,所以需要减1
								//num[0]已经提取出了,循环可以从1开始,避免下标需要+1
		if(fabs(t)>fabs(num[i])){//比较两个数字的绝对值
			t = num[i];			//保存最小数到t
			flag = i;			//记录最小数下标
		}	
	}
	
	t=num[flag];num[flag]=num[10-1];num[10-1]=t;//交换最小数与最后一个数

	for(int i=0;i<10;i++){		//打印输出
		printf("%d ",num[i]);	
	}
	
	return 0;
}
沉浸无池的爱 2年前 回复TA
@暴走哈士奇 你没定义最小值所在的下标啊
暴走哈士奇 2年前 回复TA
@暴走哈士奇 我自己是通过的,提交上去就是错误的
变形金刚本钢 2年前 回复TA
@暴走哈士奇 如果是刷题通过就是格式没对应