c语言编程:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 我的答案错了

#include "stdio.h"
int i;
int main()
{
void input(int d[10]);
void change(int b[10]);
void output(int c[10]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}
void input(int d[10])
{
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[10])
{
int temp,m=b[0],n=b[0],s,t;
for(i=0;i<10;i++)
{
if(m>b[i+1])
{
m=b[i+1];
s=i+1;
}
if(n<b[i+1])
{
n=b[i+1];
t=i+1;
}

}
temp=b[0];
b[0]=b[s];
b[s]=temp;
temp=b[9];
b[9]=b[t];
b[t]=temp;
}
void output(int c[10])
{
for(i=0;i<10;i++)
printf("%d",c[i]);
}
请问错哪了?

#include "stdio.h"
int i;
int main()
{
 void input(int d[10]);
 void change(int b[10]);
 void output(int c[10]);
 int d[10];
 input(d);
 change(d);
 output(d);
 return 0;
}
void input(int d[10])
{
 for(i=0;i<10;i++)
  scanf("%d",&d[i]);
}
void change(int b[10])
{
 int temp,min=b[0],max=b[0],s,t;//这里定义为min和max好区分
 for(i=0;i<10;i++)
 { 
  if(min>=b[i]) //因为你已经定义第一个元素给他了就用不着再+1了,你+1后反而会溢出
  { 
   min=b[i];  
   s=i;
  }
  if(max<=b[i])
  { 
   max=b[i];
   t=i;
  }
}
 temp=b[0];
 b[0]=b[s];
 b[s]=temp;
 temp=b[9];
 b[9]=b[t];
 b[t]=temp;
}
void output(int c[10])
{
 for(i=0;i<10;i++)
  printf("%3d",c[i]);
 printf("\n");
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-16
首先函数声明不能声明在主函数内、
其次,函数参数的数组的中括号不用填写数字。由于,数组的参数传递的是数组第一个参数的地址。

帮你稍微调整了一下。应该没有什么问题。还是,这么简单的一个功能被你写得那么复杂。后面附上一个相对简短的程序。
int main()

{
int d[10];

input(d);
change(d);
output(d);

return 0;
}

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

void change(int b[])
{
int temp,m=b[0],n=b[0],s,t;

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

if(m>b[i+1]){
m=b[i+1];
s=i+1;
}

if(n<b[i+1]){
n=b[i+1];
t=i+1;
}

}

temp=b[0];
b[0]=b[s];
b[s]=temp;

temp=b[9];
b[9]=b[t];
b[t]=temp;
}

void output(int c[])
{
for(i=0;i<10;i++)
printf("%d",c[i]);
}

建议程序:

#include <stdio.h>

int main(void)
{
int a[10], max, min, temp;

int i, j;

printf("please input 10 number:\n");

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

scanf("%d", a++); # a代表数组a的第一个参数的地址,所以无需要&

max = a[0];

min = a[0];

for( i = 0; i < 10; i++){ #判断最大值所在的位置

if(a[i] > max){

max = a[i];

j = i;

}
}

temp = a[j]; #把最大值与最后一位交换

a[j] = a[9];

a[9] = temp;

for( i = 0; i < 10; i++){ #判断最小一位的位置

if(a[i] < min){

min = a[i];
j = i;

}

}

temp = a[j]; #交换第一位和最小值

a[j] = a[0];

a[0] = temp;

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

printf("% ", a[i]);

}

这样写相对没那么乱。你也可以把它改成你希望的函数形式。本回答被提问者采纳
第2个回答  2013-05-16
#include "stdio.h"
int i;
int main()
{
void input(int d[]);
void change(int b[]);
void output(int c[]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}
void input(int d[])
{
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[])
{
int temp,m=b[0],n=b[0],s,t;
for(i=1;i<10;i++)
{
if(m>b[i])
{
m=b[i];
s=i;
}
if(n<b[i])
{
n=b[i];
t=i;
}

}
temp=b[0];
b[0]=b[s];
b[s]=temp;
temp=b[9];
b[9]=b[t];
b[t]=temp;
}
void output(int c[])
{
for(i=0;i<10;i++)
printf("%2d",c[i]);
}
//错误是改好了 但还有个问题 就是当最小值是最后一个的时候交换会出问题 你可以分开找最小值和最大值 先找到一个最大值然后交换 然后找最小值 找出最小值后再交换
或是在交换时不同情况不同对待本回答被网友采纳
第3个回答  2013-05-16
在你的change函数中,由于你的循环控制变量i没有控制好,导致了两个循环都不能很好的完全遍历整个数组,所以答案是错误的。个人意见第一种方法是最大最小数的查找用两个循环实现,第二种方法是增加循环控制变量。谢谢
第4个回答  2013-05-16
#include "stdio.h"
void input(int d[10])
{int i;
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[10])
{int i;
int temp,m=b[0],n=b[0];
for(i=0;i<9;i++)//比较九次即可
{
if(m>b[i+1])
{
m=b[i+1];//你那s,t没啥作用吧

}
if(n<b[i+1])
{
n=b[i+1];
}
}
temp=m;
m=b[0];//你这乱的
b[0]=temp;

temp=n;
n=b[9];
b[9]=temp;
}
void output(int c[10])
{ int i;
for(i=0;i<10;i++)
printf("%2d",c[i]);
}
int main()
{
void input(int d[10]);
void change(int d[10]);
void output(int d[10]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}

c语言编程:输入10个整数,将其中最小的数与第一个数对换,把最大的数...
void input(int number[10]); \/\/此函数向首地址为number的数组输入10个元素 void max_min_value(int array[10]); \/\/此函数交换array数组的对应元素 void output(int array[10]); \/\/此函数输出array数组的10个元素 void input(int number[10]){ int i;printf("请输入十个元素:\\n"...

C语言提问:输入10个整数,将其中最小的数与第一个数对换,把最大的数...
include<stdio.h> void input(int a[10]){ int i;for (i=0;i<10;i++){ scanf("%d",&a[i]);} } void exchange(int a[10]){ int i,min,max,temp,big,small;min = max = a[0];for (i=0;i<10;i++){ if (maxa[i]){ min = a[i];small = i;} } temp=a[0];...

求教:C语言输入10个整数,将其中最小的数与第一个数字对换,把最大的数字...
include<iostream> include<cmath> using namespace std;int main(){ int b=0,c=10,i,k;int a[10]={0};\/\/用的4.9.9.2版本,数组从下标为1开始 for(i=1;i<=10;i++){ cin>>a[i];b=max(b,a[i]);c=min(c,a[i]);} a[1]=b;a[10]=c;for(k=1;k<=10;k++){ c...

C语言编程:输入十个整数,将其中最小的数和第一个数对换位置,最大...
include<stdio.h> void input(int a[10]){ int i;for(i=0;i<10;i++){ scanf("%d",&a);} } void exchange(int a[10]){ int i,min,max,temp,big,small;min=max=a[0];for(i=0;i<10;i++){ if(max<a){ max=a;big=i;} if(min>a){ min=a;small=i;} } temp=a[...

C语言,输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后...
地址是array+9,所以我觉得是这里出了问题,因为p指向的array+10的地址储存的是个未知的值,下面再进行交换的时候再用*p作为中间量进行值的交换时可能就会出问题。所以我建议楼主在上面这段代码下写个:printf("now,*p=%d\\n",*p);看*p是否能够正确打印出来。再定义一个整型变量temp作为中间变量应该...

C语言:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后...
cin>>m;} void key(int*m){ int max=m[0],min=m[0],n=0,k=0,z;for(int i=1;i<10;i++){ if(max<m){ max=m;n=i;} } for(int i=1;i<10;i++){ if(min>m){ min=m;k=i;} } if(n==0&&k==9){ z=m[0];m[0]=m[9];m[9]=z;} else if(n==0&&k!

C语言。输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后...
include <stdio.h>#include <stdlib.h>void deal(int a[10]){ int i,temp; int *p,*pmax,*pmin; p=pmax=pmin=a; for(i=0; i<10; i++,p++) { if(*p>*pmax) pmax=p; if(*p<*pmin) pmin=p; } temp=a[0]; a[0]=*pmin; *pmin=temp; if(pm...

C语言编程:输入十个整数,将其中最小的数和第一个数对换位置,最大...
全程用指针处理的程序:main(){int a[10],i,t;int*p,*q;printf("请在下面输入10个数字:\n");for(i=0;i<10;i++)scanf("%d",p+i);p=q=a;for(i=1;i<10;i++){if(*(a+i)<*p)p=a+i;else if(*(a+i)>*q)q=a+i;} if(p!=a){t=*a;a=*p;p=t;} if(q!=...

输入十个数,将其中最小的数与第一个数对换,把最大的数与最后一个数对 ...
a[i]);} putchar('\\n');} int main(void){ int i,a[10];for (i = 0; i < 10; i++) { scanf("%d",a+i);} chg(a,10);prt(a,10);return 0;} \/\/---

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数...
int max(int x,int y);\/\/少了这两行 int min(int a, int b);int i,m,n,e,f,a[10];for(i=0;i<=9;i++)\/\/多了分号 scanf("%d",&a[i]);{ for (i=1,m=a[0];i<=9;i++)\/\/多了分号 if(max(m,a[i])>m)m=max(m,a[i]);} { for (i=1,n=a[0];i<=9...

相似回答