C语言指针问题 在线等 挺急的

从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。

#include<stdio.h>
#define N 10
void Swap(int *x,int *y);
int Max(int a[],int n);
int Min(int a[],int n);
void main()
{
int i,num,max,min;
int a[N];
printf("Input 10 numbers:");
for(i=0;i<N;i++)
{
scanf("%d",&num);
}
max=Max(a,N);
min=Min(a,N);
Swap(&max,&min);
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}
}
/*函数功能:交换两个整型数的值*/
void Swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*x = *y;
*y = temp;
}
/*函数功能:找出最大值*/
/*函数形参:数组*/
/*函数返回值:最大值*/
int Max(int a[],int n)
{
int i,max=a[0];
for(i=1; i<n; i++)
{
if(max<a[i])
{
max=a[i];
}
}
return max;
}
/*函数功能:找出最小值*/
/*函数形参:数组*/
/*函数返回值:最小值*/
int Min(int a[],int n)
{
int i,min=a[0];
for(i=1; i<n; i++)
{
if(min>a[i])
{
min=a[i];
}
}
return min;
}

请问最后输出的为什么是这样的?

直接修改你的代码如下:

#include<stdio.h>
#define N 10
void Swap(int *x,int *y);
int Max(int a[],int n);
int Min(int a[],int n);
void main()
{
int i,num,max,min;
int a[N];
printf("Input 10 numbers:");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]); //这里要把num改为a[i]
}
max=Max(a,N);
min=Min(a,N); //分别获取a数组最大值、最小值的下标
Swap(&a[max],&a[min]); //应该交换a[max]和a[min]
for(i=0;i<N;i++)
{
printf("%d",a[i]);
}
}
/*函数功能:交换两个整型数的值*/
void Swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
//*x = *y; 多了一句了,注释掉
*y = temp;
}
/*函数功能:找出最大值*/
/*函数形参:数组*/
/*函数返回值:最大值的下标*/
int Max(int a[],int n)
{
    int i,max=0; //max初始化0下标
    for(i=1; i<n; i++)
    {
        if(a[max]<a[i])
        {
            max=i;
        }
    }
    return max;
}
/*函数功能:找出最小值*/
/*函数形参:数组*/
/*函数返回值:最小值的下标*/
int Min(int a[],int n)
{
    int i,min=0;
    for(i=1; i<n; i++)
    {
        if(a[min]>a[i])
        {
            min=i;
        }
    }
    return min;
}

注意Max和Min函数的功能修改为获取最大值和最小值的下标。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-22
具体的实现我没看,但是你的输入是有问题的:scanf("%d",&num);
而且你的“换位函数”Swap(&max,&min);是无效的,并没有成功交换他们在数组中的位置。追问

追答

利用数组下标,再借用第三个变量交换他们的值,或者max=max+min;min=max-min;max=max-min;当然,max和min指的是对应数组的值。

本回答被网友采纳
第2个回答  2015-11-22
for(i=0;i<N;i++)
{
scanf("%d",&num);
}
这里

c语言 函数指针一道题目不懂,在线等,谢谢!
while((*n)--);后面有个分号 所以循环没有其他语句 即当 *n=0时跳出循环 由于 (*n)--的原因 i--是先使用 i 在使i-- 所以 *n=0时 先是跳出循环 然后 *n再-- 变成了 -1 printf(“%d”,++(*n));++*n 这个 ++i是先自加 然后在使用 i 所以 现在*n是-1 应该先+1...

c语言这几道题 关于指针的 望大神解答
1、D选项,*x本身就错误,因为x是int类型,没法使用*操作符。2、A之所以错是因为代码中有一句q=NULL,也就是说q是一个空指针了,你再向里面写东西就错了,而且你在vc6.0中可以试一下,马上会出现一条0xc000 0005的写异常。。3、是的,你不管给它赋值多少都是4的。。就好比一个4平方米的房子...

c语言指针问题
指针就是一个指向地址的变量,使用之前需要先给它赋值,也就是先将将一个变量的地址赋值给它,这个时候指针里面存的就是这个变量的地址。理解了指针的概念,上面这些问题就好理解了~

c语言编程realloc的问题,在线急等,高分相送
include <malloc.h> include <stdio.h> void main(){ int j,*a=NULL,*p;for(int i=0;i<10;i++){ a=(int *)realloc(a,(i+1)*sizeof(int)); \/*其他都没改,就这里改了点,已经可以实现动态数组增长*\/ a[i]=i;printf("%d\\n",a[i]);} for(i=0;i<10;i++){ printf("...

求助C语言:用指针法求转置矩阵(急用,在线等)
int a[N][M] = {1,2,3,4,5,6,7,8,9,8,8,8 };int b[M][N];int main (){ int i, j;for(i=0;i<N;i++){ for(j=0;j<M;j++) { \/*b[j][i] = a[i][j];*\/ \/*数组方式*\/ (*(b+j)+i) = *(*(a+i)+j);\/*指针方式*\/ } } for(i=0;i<M;i...

C语言指针问题
1.这里根本就没有赋值的语句,所以没有复制。(*s)&&(*t)&&(*t++==*s++) 这个条件就是没到s的结束且没到t的结束且*t == *s,就循环,t和s的指针都往后移。2.p是指针数组,就是有两个指针 for(i=0;i<2;i++) p[i]=ch[i];这个就是赋值给p指针,其中p[0] 等于ch二维...

C语言指针问题,求高手解答
char* ss = "0123456789";要求这种字符串的长度是不能用sizeof的,如果用sizeof它计算出来的会是这个指针的长度,在32系统下,指针一般都是4个字节,所以,结果是4。计算字符串的长度,可以使用库函数strlen来计算,它计算出来的长度不包含字符串结束符\\0。有了这个思路,其实你可以自己写一个函数来...

c语言里指针问题
int s[5]={1,3,5,7,9};int *p=s; \/\/将s的起始地址赋给p,也就是 p指向地址s[0],那么 *p就是s[0]的值也就是1 那么值为3的是什么,是s[1],也就是p指针的下一个地址里存的值,也就是*(p+1); 也就是 (++p) 选A B答案的++(*p)是 先得到*p 也就是1,然后++,也就是...

C语言指针问题求大神解答
A返回的是a[1][0]这个位置的地址 并且 告诉编译器 它是一个指向一维int [5]类型数据的指针 B返回的是a[3][0]这个位置的地址 并且 告诉编译器 它是一个指向 int的地指针 C返回的是a[3][3]这个位置的地址 并且 告诉编译器 它是一个指向 int的地指针 D返回的是a[2][0]这个位置的别名 ...

C语言指针问题。
这是一个运算顺序的问题。注意括号的运用。(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。(2)*(pointer-2)是先移动指针,再取值。

相似回答