C language pointer classic problem (exchange two numbers)

1.互换两个数字:

# include<stdio.h>
void g(int * p,int * q)
{
    int t;          //如果要互换*p*q的值,则t必须定义为int,
    t = * p;         //不能定义为int*,否则会有语法错误.
    * p =  * q;
    * q = t;
}
int main()
{
    int a=3, b=5;
    g(&a,&b);
    printf("a = %d ",a);
    printf("b = %d ",b);
    return 0;
}

/*
#include<stdio.h>
void f(int a,int b)       //该函数不能完成互换功能!
{
    int t;
    t = a;
    a = b;
    b = t;
}
int main()
{
    int a=3,b=5;
    f(a,b);
    printf("a = %d ",a);
    printf("b = %d ",b);


    return 0;
}
*/

/*
# include<stdio.h>
void g(int * p,int * q)      //不能完成互换功能
{
    int * t;   //如果要互换指针变量,必须是int,不能是int*
    t = p;
    p = q;
    q = t;
}
int main()
{
    int a=3, b=5;
    g(&a,&b);
    printf("a = %d ",a);
    printf("b = %d ",b);
    return 0;
}
*/



2.输入n个数,按从小到大的顺序输出:

#include <stdio.h>
#include <malloc.h>
int main(void)
{
    int i,j,t,len;
    int *p;
    printf("请输入所排数的个数:\n");
    scanf("%d",&len);
    p=(int *)malloc(4*len);                       //    对数组赋值
    printf("输入所要排序的数\n");
    for(i=0;i<len;++i)
    scanf("%d",&p[i]);
    printf("\n");
    for(i=0;i<len-1;++i)               //大方面的循环,次数结束一次得出一个最大值放在最后
        for(j=0;j<len-i-1;++j)         //在每趟中进行循环 要考虑到下面的j+1
    if(p[j]>p[j+1])                        //相邻两个数比较
    {
        t=p[j];p[j]=p[j+1];p[j+1]=t;
    }
    for(i=0;i<len;++i)               //对结果输出
    printf("%d ",p[i]);
    return 0;
}
/*结论非常重要
for (i=0;i<n-1;++i)
    for (j=0;j<n-1-i;++j)
    if (a[j]>a[j+1])
{
    t=a[j];a[j]=a[j+1];a[j+1]=t;
}
*/

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325497112&siteId=291194637