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的请自重! 展开
代码如下:
#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的请自重! 展开
2个回答
展开全部
#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了~~就是一个比较~~遍历比较~~
展开全部
看来代码后运行了一下,发现问题出自
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;
}
楼主可以运行下,谢谢。纯手打,望采纳。
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;
}
楼主可以运行下,谢谢。纯手打,望采纳。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询