zoukankan      html  css  js  c++  java
  • C语言 百炼成钢14

    //题目40:输入3个数a,b,c,按大小顺序输出。(使用指针完成)  
    
    #include<stdio.h>
    #include<stdlib.h>
    
    //分析:用指针完成,说明不可以改变a,b,c的值,只是输出的时候数据变化
    //简单的办法:比较好a,b,c大小,在赋值给对应指针,
    
    void main9(){
        int a = 8, b = 3, c = 6;
        int *pa = &a, *pb = &b, *pc = &c;
        if (a>b)
        {
            if (a>c)
            {
                //说明a最大
                pc = &a;
                if (b<c)
                {
                    pb = &c;
                    pa = &b;
                }
                else{
                    pa = &c;
                }
            }//else说明c最大
        }
        else{
            if (b>c)
            {
                //说明b最大
                pc = &b;
                if (a>c)
                {
                    pb = &a;
                    pa = &c;
                }
                else{
                    pb = &c;
                }
            }
        }
        printf("
    从大到小依次是%d<%d<%d
    ",*pa,*pb,*pc);
    
        system("pause");
    }

    //题目41:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    //分析:这一题并非一个简单的冒泡排序,他的要求是找到最大元素在数组的位置,并且和第一个元素交换,别的元素不改变
    //我们根据冒泡排序的思想,定义一个变量,用来存储下标,和数组每个元素比较,发现有元素比初始元素大,就修改下标的值
    
    void main(){
        //随机生成一个数组
        int a[10] = { 0 };
        //定义时间变量
        time_t ts;
        //定义随机数种子
        printf("原来的数组
    ");
        srand((unsigned int)time(&ts));
        for (int i = 0; i < 10; i++)
        {
            a[i] = rand() % 100;
            printf("%5d", a[i]);
        }
        printf("
    ");
        //方法1(不够简单,定义的变量太多,用指针会更简单)
        //int maxindex = 0, minindex = 0;
        ////temp存储最大值,temp1存储最小值
        //int temp = a[0],temp1 = a[0];
        //for (int i = 1; i < 10; i++)
        //{
        //    //假设a[0]最大同时假设他最小
        //    if (a[i]>temp)
        //    {
        //        temp = a[i];
        //        maxindex = i;
        //    }
        //    if (a[i]<temp1)
        //    {
        //        temp1 = a[i];
        //        minindex = i;
        //    }
        //}
        ////交换位置
        //int temp3 = 0;
        //temp3 = a[0];
        //a[0] = a[maxindex];
        //a[maxindex] = temp3;
    
        //temp3 = a[9];
        //a[9] = a[minindex];
        //a[minindex] = temp3;
    
        //方法2(指针方式)
        int *pmax=&a[0], *pmin=&a[0];
        for (int i = 0; i < 10; i++)
        {
            if (a[i]>*pmax)
            {
                pmax = &a[i];
            }
            if (a[i]<*pmin)
            {
                pmin = &a[i];
            }
        }
        //交换位置
        //临时变量存放最大值
        int temp4 = *pmax;
        //临时变量存放最小值
        int temp5 = *pmin;
        //将a[0]的值交给最大的那个元素
        *pmax = a[0];
        a[0] = temp4;
        //同理
        *pmin = a[9];
        a[9] = temp5;
    
        printf("新的数组
    ");
        for (int i = 0; i < 10; i++)
        {
            //a[i] = rand() % 100;
            printf("%5d", a[i]);
        }
        system("pause");
    }

    //题目42:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数(使用指针完成)
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    //分析:把最后的5个变量存储起来,再将原来的元素每个向后移动m位
    
    #define N 15
    
    void main(){
        //生成随即数组
        int a[N] = { 0 };
        //定义时间变量
        time_t ts;
        //定义随机数种子
        printf("原来的数组
    ");
        srand((unsigned int)time(&ts));
        for (int i = 0; i < N; i++)
        {
            a[i] = rand() % 100;
            printf("%5d", a[i]);
        }
        printf("
    ");
    
        int *p = a;
        int m=5;
        //定义一个动态数组,存储m之后的变量
        int *p1 =(int *)malloc(sizeof(int)*m);
        for (int i =0; i < m; i++)
        {
            *(p1 + i) = a[N - m+i];
        }
        //移动前面的元素向后
        //最后一个元素是a[N-1],a[0]向后移动1为是a[1],a[0]向后移动2位是a[0+2];
        //a[N]向前移动5位,就是a[N-5]
    
        //错误,不能从前向后赋值,从前向后会将后面有用的一部分数据覆盖了,必须从后往前赋值
        /*for (int i = 0; i < N - m - 1; i++)
        {
            a[m + i] = a[i];
        }*/
        for (int i = 0; i < N; i++)
        {
            a[N - 1 - i] = a[N - 1 - i - m];
        }
        for (int i = 0; i < m; i++)
        {
            a[i] = *(p1 + i);
        }
        free(p1);
        printf("新的数组
    ");
        for (int i = 0; i < N; i++)
        {
            printf("%5d", a[i]);
        }
        printf("
    ");
        system("pause");
    
    }

  • 相关阅读:
    各进制转换
    免root xshell连接termux
    sqlmap怎么拿shell
    SSRF漏洞
    国外安全网站、社区论坛、博客、公司、在线工具等整合收集
    渗透测试常用工具问题总结
    cdn绕过
    xss注入
    永恒之蓝(msf17010)kali复现
    文件上传漏洞和绕过
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5157470.html
Copyright © 2011-2022 走看看