c语言指针经典问题(交换两个数字)

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;
}
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值