c语言,输入10个数字,讲其中最小的数与第一个调换,最大的与最后的调换,哪里写错了?

#include<stdio.h>intmain(){voidenter_number(inta[]);voiddeal_number(inta[]);voidprint... #include<stdio.h>int main()
{
void enter_number(int a[]);
void deal_number(int a[]);
void print_number(int a[]);
int a[10];
enter_number(a);
deal_number(a);
print_number(a);
return 0;
}
void enter_number(int a[])
{
int i;
for(i=0;i<10;i++)
scanf("%d",a[i]);
}
void deal_number(int a[])
{
int j,z;
int t,m,y,n;
for(j=1,m=a[0];j<10;j++)
{
if(m<a[j])

{t=a[j];
a[j]=a[9];
a[9]=t;}
}
for(z=1,y=a[0];z<10;z++)
{
if(y>a[z])
{n=a[z];
a[z]=a[0];
a[0]=n;}
}

}
void print_number(int a[])
{int k;
for(k=0;k<10;k++)
printf("%d",a[k]);
}
展开
 我来答
lylovehl
2012-12-24 · TA获得超过1785个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:148万
展开全部
主要问题出在deal_number函数上,应该先找出数组中的最大值和最小值,并记录下它们的下标,然后再分别与第一个元素和最后一个元素交换。另外enter_number函数中的scanf中应该使用&a[i],修改后的程序如下:
#include<stdio.h>
int main()
{
void enter_number(int a[]);
void deal_number(int a[]);
void print_number(int a[]);
int a[10];
enter_number(a);
deal_number(a);
print_number(a);
return 0;
}
void enter_number(int a[])
{
int i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);//应该使用&a[i]
}
void deal_number(int a[])
{
int max=a[0],min=a[0],max_i=0,min_i=0,i;
//先找出数组中的最大元素和最小元素,并记录下它们的下标
for(i=1;i<10;i++)
{
if(a[i]>max)
{
max_i=i;
max=a[i];
}
if(a[i]<min)
{
min_i=i;
min=a[i];
}
}
//将最小值和第一个元素交换
i=a[0];
a[0]=min;
a[min_i]=i;
//将最大值和最后一个元素交换
i=a[9];
a[9]=max;
a[max_i]=i;
}
void print_number(int a[])
{
int k;
for(k=0;k<10;k++)
printf("%d",a[k]);
}
追问
{t=a[j];
a[j]=a[9];a[9]=t;}
这个方法不是讲将俩个数的值 对调嘛?
追答
你得先找到数组中的最小值和最大值之后再分别与第一个元素以及最后一个元素对调。你程序中m保存的是a[0]的值,然后只要有元素比a[0]小就换,数组中的元素就会被弄混乱了。但是你题目中的意思是将最小值和第一个元素交换,最大值和最后一个元素交换,也就是将最小值在数组中的那个位置放a[0]的值,而a[0]则放最小值。最大值在数组中的位置放a[9]的值,而a[9]则放最大值。
hustcsheng
2012-12-24 · 超过24用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:60.4万
展开全部
enter_number中的scanf赋值少了&取地址符号了

scanf("%d",a[i]);
修改为 scanf("%d",&a[i]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昌念垒0I0291
2012-12-24 · TA获得超过1072个赞
知道小有建树答主
回答量:1180
采纳率:60%
帮助的人:248万
展开全部
问题肯定出现在函数 void deal_number(int a[]); 上,因为你的思路错误。分析一下你的解法:第一步:最大的和最后一个数对换,你的思路有2个错误:1,标准不该取a[0],而应取a[9]; 2,即使标准取为a[9],还是错,因为你只确保了最后一个是最大的,过程中数组顺序有可能已被打乱,因为每次当a[9]<a[i]时候,对换,打乱数组顺序不合要求(同理对于最小的与第一个数对换)。

正确思路应为:先找出最小数与最大数,然后再依次按要求将其对换。还有啊,看了你写的C源程序,我头疼不已啊,我想为何你写一个这么简单的程序,需要用到这么多变量......不用的,举例来说循环语句里头的变量,你可以用一个变量"i"就够了,不必j,z,k这么多的,因为就像英语一样,很多字符都有其特定的含义,这样读起来也简单方便,更是节省了不少时间与字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
加菲819
2012-12-24
知道答主
回答量:3
采纳率:0%
帮助的人:2.9万
展开全部
void deal_number(int a[])
{
int i,j,max,min,x,y;
for(i=1;i<10;i++){
min=a[0];
max=a[9];
if(a[i]<a[o]){
x=a[0];
a[0]=a[i];
a[i]=x;
}}
for(j=0;j<9;j++){
if(a[j]>a[9])
{
y=a[9];
a[9]=a[j];
a[j]=y;

}}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
342097224
2012-12-24 · TA获得超过116个赞
知道答主
回答量:252
采纳率:0%
帮助的人:110万
展开全部
把main函数放到最后 面或者在main前面先定义 一下用到的函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式