• 指针练习


    /*
        输入3个数,从小大排列
    */
    #include<stdio.h>
    #include<stdlib.h>

    int main(void)
    {
        void daxiao(int *p,int n);

        printf("请输入3个数字:");
        int a[3];
        for(int i = 0; i < 3; i++)
        {
            scanf("%d",&a[i]);
            getchar();
        }
        
        daxiao(a,3);
        printf("从小到大排列:");
        for(int i = 0; i < 3; i++)
        {
            printf("%d ",a[i]);
        }

        return 0;
    }

    void daxiao(int *p,int n)
    {
        int temp;
        for(int i = 0; i < (n-1); i++)
        {
            for(int j = i+1; j < n; j++)
            {
                if(p[i] > p[j])
                {
                    temp = p[i];
                    p[i] = p[j];
                    p[j] = temp;
                }
            }
        }
    }
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
        输入3个字符串,从小大排列,和数字有很大区别
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    int main(void)
    {
        void daxiao(char *x,char *y);

        char a[10],b[10],c[10];

        gets(a);
        gets(b);
        gets(c);

        if(strcmp(a,b) > 0)  daxiao(a,b);
        if(strcmp(b,c) > 0)  daxiao(b,c);
        if(strcmp(a,c) > 0)  daxiao(a,c);

        printf("%s %s %s",a,b,c);

    }

    void daxiao(char *x,char *y)
    {
        char z[10];
        strcpy(z , x);
        strcpy(x , y);
        strcpy(y , z);
    }
    --------------------------------------------------------------------------------------------------------------------------------
    /*
        输入10个数字
        把最小的跟第一个互换,最大的跟最后一个互换
        打印数字
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    int main(void)
    {
        void shuru(int *p);
        void shuchu(int *p);
        void caozuo(int *p);

        int *p;
        int num[10];
        p = num;
        shuru(p);
        caozuo(p);
        shuchu(p);
        
        return 0;
    }

    void shuru(int *p)
    {

        for(int i = 0; i < 10; i++)
        {
            scanf("%d",&p[i]);
            getchar();
        }
        
    }

    void shuchu(int *p)
    {
        for(int i = 0; i < 10; i++)
        {
            printf("%d,",p[i]);
        }
        
    }

    void caozuo(int *p)
    {
        int *max = p;
        int *min = p;
        int temp;
        for(int i = 1; i < 10; i++)
        {
            if(*max < p[i]) max = &p[i];    
        }
        for(int i = 1; i < 10; i++)
        {
            if(*min > p[i]) min = &p[i];    
        }
        temp = p[0];
        p[0] = *min;
        *min = temp;

        temp = p[9];
        p[9] = *max;
        *max = temp;

    }
    ------------------------------------------------------------------------------------------------------------------------
    /*
        有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成前面的m个数,
        写一函数实现以上功能,在主函数中输入n个整数和输出调正后的n个数
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    int main(void)
    {
        void tiaozheng(int *p,int *p1,int n,int m);
        int n,m;
        int *p,*p1;

        printf("请输入你要输入的数字的个数:");
        scanf("%d",&n);
        getchar();

        printf("请输入要调整的数字的个数:");
        scanf("%d",&m);
        getchar();

        p = (int *)malloc(sizeof(int) * n);
        p1 = (int *)malloc(sizeof(int) * n);

        for(int i = 0; i < n; i++)
        {
            scanf("%d",&p[i]);
            getchar();
        }

        tiaozheng(p,p1,n,m);

        for(int i = 0; i < n; i++)
        {
            printf("%d ",p1[i]);
        }

        free(p);
        free(p1);
        return 0;
    }

    void tiaozheng(int *p,int *p1,int n,int m)
    {
        for(int i = 0;i < n; i++)
        {
            if(i < m)
                p1[i] = p[n-m+i];
            else
                p1[i] = p[i-m];
        }
    }
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /*
        有n个人围城一圈,顺序排号,从第一个人开始报数,从1到3报数,
        凡报到3的人出局,问最后剩下的是原来的第几号
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    int main(void)
    {
        int *jiajia(int *p,int *p_end,int n);       //声明函数

        int n;
        printf("有几个人参加游戏:");
        scanf("%d",&n);                     //参加游戏的人数
        getchar();

        int a[n];
        for(int i = 1; i<=n; i++)          //从1开始排列游戏人数
            a[i-1] = i;

        int *p = a;
        int count = n;                  //计数器
        int *p_end;                     //最后一个元素的地址
        p_end = p + n - 1;

        while(count > 1)
        {
            p = jiajia(p,p_end,n);          //开始数
            p = jiajia(p,p_end,n);
            p = jiajia(p,p_end,n);

            while (*p == 0)                 //当碰到已经出局的人,往下移一位
            {
                p = jiajia(p,p_end,n);
            }
         
            *p = 0;                         //点到的人出局
            count -= 1;                     //出局一人计数器减一
            
            for(int i = 0; i < n; i++)      //这三行是用来核对答案用的
                printf("%d",a[i]);
            printf(" ");
        }
        for(int i = 0; i < n; i++)
        {
             if(a[i]!= 0)
                 printf("最后留下的时原来的%d号",a[i]);
            //printf("%d ",a[i]);
        }
           
        return 0;
    }

    int *jiajia(int *p,int *p_end,int n)        //移动指针用的函数
    {
        if (p == p_end)             //当指针指到最后一位,就从第一位开始
        {
            p = p - (n-1);
        }    
        else
        {
            p++;                    //不是最后一位就往后移
        }
        return p;
    }

    --------------------------------------------------------------------------------------------------------------
     
    /*
        写一个函数,求字符串长度
    */
    #include<stdio.h>

    int stringlen(char *p)
    {
        int count = 0;
        while (*p != '')
        {
            p++;
            count += 1;
        }
        return count;
    }

    int main(void)
    {
        printf("请输入一个字符串: ");
        char s[20];          //字符数组,都可以表示字符串,但是还是有很多区别
        //char *s;          //字符指针变量,不能用scanf赋值,因为他是指向字符串的首字符
       
        /* 这样也就可以使用scanf输入,字符串指针变量指向字符串的首字母地址
        char *a;
        a = s;
        scanf("%s",a);
        */

        scanf("%s",s);
        getchar();
        printf("%s",s);

        printf("字符串长度是:%d",stringlen(s));

        return 0;
    }
     
    --------------------------------------------------------------------------------------------------------
     
     
     
  • 相关阅读:
    HDU1443_Joseph_约瑟环
    HDU1568_求fibonacci的前四位
    HDU3368_翻转棋
    HDU1134_catalan_大数运算
    HDU1032_The 3n+1_数学题
    HDU2674_N!模2009
    HDU2067_小兔的棋盘_catalan_递推
    文件读写操作inputStream转为byte[] , 将InputStream写入本地文件
    JVM堆内存调优
    Java使用 POI 操作Excel
  • 原文地址:https://www.cnblogs.com/hemage/p/13262704.html
Copyright © 2020-2023  润新知