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("");
}这样写的话我运行完之后可以找出最小数,也可以打印,但是找不到最大数怎么回事儿??? 展开
#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("");
}这样写的话我运行完之后可以找出最小数,也可以打印,但是找不到最大数怎么回事儿??? 展开
展开全部
你的程序错误在求最值的函数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;
}
第一个明显的错误是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;
}
展开全部
#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;
}
满意请采纳。
#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;
}
满意请采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询