解题思路:
先把数组元素全部换算至对应的绝对值放进另一个数组,然后遍历比较换算为绝对值之后的数组,找出最小值的下标,用来方便与最后一个元素进行交换,最后输出原来的数组。到这里相信大家都会做了吧!!
注意事项:
注意题目说的是绝对值
参考代码:
//二级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分
3 人评分
#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; }
#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 <
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; }
#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; }
#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; }
壹身尘埃 2022-04-04 08:03:45 |
for(int i=1;i<10-1;i++){这个地方已经从1开始了,不需要-1正确的应该是for(int i=1;i<10;i++){
#include <stdio.h> #include <stdlib.h> int main () { int a[10],i,min,c,b[i],d; for (i=0;i<10;i++){ scanf ("%d",&a[i]); b[i]=abs(a[i]); } min=b[0]; for (i=1;i<10;i++){ if (min>b[i]){ min=b[i]; c=i; } } d=a[9]; a[9]=a[c]; a[c]=d; for (i=0;i<10;i++) printf ("%d ",a[i]); return 0; } 有没有大佬看看为什么输出结果不对,感谢!!!
#include<stdio.h> #include<math.h> int main() { int a[10],b[10],i,min,temp; printf("请输入10个数:"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { b[i]=abs(a[i]); } min=b[0]; for(i=1;i<9;i++) { if(b[i]<min) min=b[i]; } for(i=0;i<10;i++) { if (abs(a[i])==min) { temp=a[i]; a[i]=a[9]; a[9]=temp; } } printf("交换后:"); for(i=0;i<10;i++) printf("%d ",a[i]); } 大佬们,哪里错了,求解~
printf基础练习2 (C语言代码)浏览:801 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1276 |
数列 (C++代码)浏览:707 |
C语言训练-素数问题 (C语言代码)浏览:1065 |
简单的a+b (C语言代码)浏览:564 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:691 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:769 |
1642题解浏览:784 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:672 |
简单的a+b (C语言代码)浏览:542 |