c语言编程:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 我的答案错了
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");
}
其次,函数参数的数组的中括号不用填写数字。由于,数组的参数传递的是数组第一个参数的地址。
帮你稍微调整了一下。应该没有什么问题。还是,这么简单的一个功能被你写得那么复杂。后面附上一个相对简短的程序。
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]);
}
这样写相对没那么乱。你也可以把它改成你希望的函数形式。
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]);
}
//错误是改好了 但还有个问题 就是当最小值是最后一个的时候交换会出问题 你可以分开找最小值和最大值 先找到一个最大值然后交换 然后找最小值 找出最小值后再交换
或是在交换时不同情况不同对待
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;
}