C语言程序设计教程(第三版)课后习题10.3

http://wusttest.sinaapp.com/problem.php?id=1054代码如下:#include<iostream>usingnamespaces... http://wusttest.sinaapp.com/problem.php?id=1054
代码如下:
#include<iostream>
using namespace std;
#define N 10
void input(int a[N]){
int i;
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
}
void exchange(int a[N]){
int t,m=0,n=0;
int i;
int t1=a[0],t2=a[0];
for(i=0;i<10;i++){
if(a[i]>t1){
t1=a[i];
m=i;
}
if(a[i]<t2){
t2=a[i];
n=i;
}
}
t=a[0];a[0]=a[n];a[n]=t;
t=a[9];a[9]=a[m];a[m]=t;
}
void output(int a[N]){
int i;
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
int main(){
int a[N];
input(a);
exchange(a);
output(a);
return 1;
}
问题是:
当最大最小值出现在数组的首位和末尾是就会出错,该怎么解决?
ctrl+V的请自重!
展开
 我来答
帐号已注销
推荐于2018-04-13 · TA获得超过718个赞
知道小有建树答主
回答量:1179
采纳率:0%
帮助的人:609万
展开全部

#include<iostream>
using namespace std;
#define N 10
void input(int a[N]){
int i;
printf("shuru\n");
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
}
void exchange(int a[N]){
int t,m=0,n=0;
int i;
int t1=a[0],t2=a[0];
for(i=0;i<10;i++){
if(a[i]>t1){
t1=a[i];
m=i;
}
if(a[i]<t2){
t2=a[i];
n=i;
}
}
t=a[0];a[0]=a[n];a[n]=t;
t=a[9];a[9]=a[m];a[m]=t;
}


void ___exchange(int a[N]){
// int t,m=0,n=0;
int i;
int t1,t2; //t1=max.t2=min;
 t1=t2=a[0];
 // max = num[0];
for(i=0;i<10;i++){

if(t1<a[i])
t1=a[i];
if(t2>a[i])
t2=a[i];
}
a[0]=t1;
a[9]=t2;
// return a;

}















void output(int a[]){
int i;
printf("dayin\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
int main(){
int a[N];
input(a);
___exchange(a);
output(a);
return 1;
}

先mark~~看看你的代码先~~

之前的OK了~~就是一个比较~~遍历比较~~

追问

你的代码运行结果。你没有看清问题啊、、不过我已经解决了。

追答
没注意到你居然没有保存临时变量
704610875
2014-07-08
知道答主
回答量:3
采纳率:0%
帮助的人:2.8万
展开全部
看来代码后运行了一下,发现问题出自
t=a[0];a[0]=a[n];a[n]=t; (1)
t=a[9];a[9]=a[m];a[m]=t; (2)
这两行。
当第一个不是最大值,最后一个不是最小值时,一切正常。第(1)句把最小值移到了第一位,第(2)句把最大值移到了最后一位。
但是当第一个是最大值,最后一个是最小值时,执行完语句(1),a[n](最小值)已经与a[0](最大值)交换了位置,所以执行完语句(2)相当于再次换位,即两个语句作用抵消。所以换位失败。
建议楼主在语句(2)前加一个判断语句:
t=a[0];a[0]=a[n];a[n]=t;
if(!(n==9 && m==0)) // 只有最大值在第一位,最小值在最后一位时不执行下列语句
{
t=a[9];a[9]=a[m];a[m]=t;
}
楼主可以运行下,谢谢。纯手打,望采纳。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式