由于我刚学习C语言,遇到很多的困惑。在这里,希望能得到大家的指导与帮助。我学习的教材是谭浩强主编的《C程序设计》第五版。在学习指针这一章时有一例题(p242页例8.10)用指针法对10个整数按由大到小的顺序排序。 这个题可以用多种方法来实现。

1.直接来实现。也就是不用函数,也不用指针。看代码

#include <stdio.h>
int main()
{
    int a[10];     //定义数组a
    int i,j,t;     //定义三个整型变量
    printf("please enter 10 integer numbers:\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);//给数组赋值
        for(i=0;i<10;i++) //十个数,进行九轮比较
        {
            for(j=i+1;j<10;j++)//第一个数比较九次,依次递减
            {
                if(a[i]<a[j])//如果a[i]<a[j]
                {
                    t=a[i];    //互换位置
                    a[i]=a[j];
                    a[j]=t;
                }
              }
                printf("%4d",a[i]);
        }
                return 0;
}

2.用函数来实现。只用函数,不用指针。看代码:

#include <stdio.h>
int main()
{
    void change(int x[],int n);     //声明函数change
    int a[10],i;
    printf("please enter 10 integer numbers \n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);       //给数组赋值
        change(a,10);           //调用函数change
        printf("The sorted array:\n");
        for(i=0;i<10;i++)
            printf("%4d",a[i]);//排序后的数组
        printf("\n");
        return 0;
}
void change(int x[],int n)//定义change函数
{
    int i,j,t;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
        {
    if(x[i]>x[j])    //当x[i]<x[j]
    {
        t=x[i];    //两个数互换位置
        x[i]=x[j];
        x[j]=t;
    }
        }
}

3.用指针来实现。看代码:

#include <stdio.h>
int main()
{
    void change(int x[],int n);//change函数声明
    int a[10],i;
    int *p;
    p=a;                        //使指针变量指向a[0]
    printf("please enter 10 integer numbers:\n");
    for(i=0;i<10;i++)
        scanf("%d",p++);      //输入10个整数
        p=a;                 // 指针变量p重新指向a[0]
    change(p,10);           //调用change函数
    printf("the sorted array:");//输出排序后的10个数组元素
    for(i=0;i<10;i++,p++)
        printf("%4d",*p);
    printf("\n");
}
void change(int x[],int n)//定义change函数,x是形参数组名
{
    int i,j,t;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
    {
        if(x[i]>x[j])     //如果x[i]<x[j]
        {
            t=x[i];      //x[i]与x[j]互换
            x[i]=x[j];
            x[j]=t;
        }
    }
}

我的困惑是这样的,我认为用指针来实现时,教材上在定义函数时用了四个参数,而我这里没有用那么多参数,也同样实现了,我这里有什么错误吗,错在哪里?另外我前面两个哪里有什么问题,请您不吝赐教,谢谢。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐