C语言程序设计 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

写三个函数1.输入10个数;2进行处理;3,输出整理好的十个数,并要求运用函数指针数组的知识完成....我是这样写的:#include<stdio.h>voidarray... 写三个函数1.输入10个数;2进行处理;3,输出整理好的十个数,并要求运用函数指针数组的知识完成....我是这样写的:
#include<stdio.h>
void array(int[], int);
void maxmin(int[], int);
void print(int[], int);
int main(void)
{
int i;
int lala[10];
int m = sizeof(lala) / sizeof(int);
void(*x[3])(int[], int) = { array, maxmin, print };

for (i = 0; i < 3; i++)
{
x[i](lala, m);
}
return 0;
}
void array(int a[], int b)
{
int i;
printf("请输入十个数:\n");
for (i = 0; i < b; i++)
{
scanf_s("%d", &a[i]);
}
}
void maxmin(int a[], int b)
{
int i, min, max;
for (i = 0; i < b; i++)
{
if (a[i] < a[0])
a[0] = a[i];
}
for (i = 0; i < b; i++)
{
if (a[i]>a[b])
a[b] = a[i];
}

}
void print(int a[], int b)
{
int i;
for (i = 0; i < b; i++)
printf("%d ", a[i]);
puts("");
}这样写的话我运行完之后可以找出最小数,也可以打印,但是找不到最大数怎么回事儿???
展开
 我来答
蜗居小笨笨
2014-06-04 · TA获得超过208个赞
知道答主
回答量:70
采纳率:50%
帮助的人:55.3万
展开全部
你的程序错误在求最值的函数maxmin。你定义了max,min,却没有使用,说明你对老师讲过的求最值的算法有些印象,但没有理解。
第一个明显的错误是a[b]。数组a的下标应该是0~b-1,a[b]里是垃圾值,用它做比较,是典型的下标越界,当然结果是错的。
第二个错误是求最值的算法,也是我们要重点讨论的。
以最小值为例:
你在查找最小数时,将找到的最小直接赋给a[0],虽然将最小数放在a[0],但导致数组的数据被改写,这是错误的。
求最小值的算法是这样的,一般我们假设数组的第一个元素为最小值,然后和其他数组元素依次比较,记下每次比较找到的“小”数,然后再将找到的“小”数与下一个元素比较。比较到第b-1个元素,记下的“小”数就是最小数。
每次找到的“小”数用下标来标记。这里可以用min存“小”数的下标。
找最大数类似。
所以程序改为:
void maxmin(int a[], int b)
{ int i,t, min=0, max=0;
for (i = 1; i < b; i++)
{ if (a[i] < a[min]) min=i;
if (a[i]>a[max]) max=i;
}
t=a[0];a[0]=a[min];a[min]=t;
t=a[b-1];a[b-1]=a[max];a[max]=t;
}
闹惺炙91
2014-06-04 · 超过70用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:64.1万
展开全部
#include<stdio.h>
#define N 10
void main()
{ int x[N],i,*pmax,*pmin,k;
for ( i=0,p=x;i<N;i++,p++ ) scanf("%d",p);
for ( i=1,pmin=pmax=p=x,p++;i<N;i++,p++ )
{ if ( (*p)>(*pmax) ) pmax=p;
if ( (*p)<(*pmin) ) pmin=p;
}
k=x[0]; x[0]=(*pmin); (*pmin)=k;
k=x[N-1]; x[N-1]=(*pmax); (*pmax)=k;
}
满意请采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式