快捷搜索:

您的位置:澳门新葡4473网站 > 新闻社区 > 数组a中的n个元素已按升序排

数组a中的n个元素已按升序排

发布时间:2020-01-24 18:28编辑:新闻社区浏览(70)

    若数组a中的n个元素已按升序排列,现将一个新数x插入到数组a中,插入后数组a的元素仍然保持升序。使用的插入排序算法是:从数组a的最后个元素开始,依次向前扫描数组元素,若a[i]大于x,则将a[i]放入a[i+1](后移一个位置),并继续向前扫描,直到找到某个a[i]小于或等于x,将x赋值到a[i+1]元素中,此时完成插入排序工作。编写程序时,要考虑初始时数组是空数组(即数组中没有元素),插入第一个元素时,要作特殊处理。试建立一个类InsSort,完成插入排序工作。
    具体要求如下:
    (1)私有数据成员。
    ●int n:数组实际元素的个数。
    ●int a[100]:存放排好序的整型序列。
    (2)公有成员函数。
    ●InsSort(int b[ ], int size):构造函数,用参数b初始化a数组,用参数size初始化n,缺省值是0。
    ●void insert( int x):将x插入到数组a中。
    ●void show(fstream &):输出数组元素个数及数组中各元素值。
    (3)在主程序中完成对该类进行测试。定义数组int b[100],其输入的初值是{1, 3, 5}。定义一个InsSort类的对象arr,用数组b及其元素个数初始化该对象。定义数组int c[100],其输入的初值是{0, 1, 2, 3, 5, 8, 10}。然后循环将数组c中的所有元素依次插入到对象arr的成员数组a中。最后输出对象arr中的全体数据成员。程序正确运行后,应输出:
    number = 10  
    0, 1, 1, 2, 3, 3, 5, 5, 8, 10

    作业讲解:阶乘:5!=5x4x3x2x1

                #include<stdio.h>
                int main()
                {
                   //阶乘:5!=5*4*3*2*1
                   //0!=1!=1;这是规定
                   int num=0,sum=1;
                   printf("input num:");
                   scanf("%d",&num);
                   int i;
                   for(i=1;i<=num;i++)
                   {
                      sum*=i;
    
                   }
                   printf("%d %dn",num,sum);
                }
    

     

    作业讲解: 注意这题的区别 程序1、2中有注意点

    $
    $$
    $$$
    $$$$
    $$$$$
           (1)  #include<stdio.h>
                int main()
                {
                   int row=0;
                   int col=0;
                   int num;
                   printf("input num:");
                   scanf("%d",&num);
                   for(;row<=num;row++)
                   {     //注意省略和不省略col=1;的结果
                        for(;col<=row;col++)
                        printf("$");
                        printf("n");
                   }
                   return 0;
                }
    
            (2) #include<stdio.h>
                int main()
                {
                   int row=0;
                   int col=0;
                   int num;
                   printf("input num:");
                   scanf("%d",&num);
                   for(row=0;row<=num;row++)
                   {
                        //注意省略和不省略col=1;的结果
                        for(col=0;col<=row;col++)
                        printf("$");
                        printf("n");
                   }
                   return 0;
                }
    

    #include<iostream>
    using namespace std;
    class InsSort{
    public:

    for(表达式1;表达式2;表达式3)

    执行顺序:
    A.表达式1
    B.表达式2,若表达式2成立,则执行(C);不成立,执行(E)
    c.执行循环体即{}里的内容;
    D.表达式3,执行(B)
    E.结束循环

        InsSort(int b[],int size);
        ~InsSort();
        void insert(int x);
        void show();
    private:
        int n;
        int a[100];
    };
    InsSort::InsSort(int b[],int size){

    作业字母金字塔:

            讲解:     A
                     BBB
                    CCCCC
    

    #######include<stdio.h>
    int main()
    {
    char ch='a';
    char chb=65;
    int num=97;
    //字符变量的十进制ascii码值问题
    printf("char: ch='%c' ; ch=%dn",ch,ch);
    printf("char: chb='%c' ; chb=%dn",chb,chb);
    printf("int : num=%d ; num='%c'n",num,num);
    }

    #######include<stdio.h>
    int main()
    {
    int row=0;
    int col=0;
    char ch='A';
    for(row=1;row<=26;row++)
    {
    for(col=0;col<26-row;col++)
    printf(" ");
    for(col=1;col<=2*row-1;col++)
    printf("%c",ch);
    ch++;
    printf("n");
    }
    return 0;
    }

        //memcpy( a, b, size);
        for(int i=0;i<size;i++){
        a[i]=*(b+i);
            }
        n=size;

    时钟问题:

    原版
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int i,j,b;
    for(b=0;b<24;b++)
    {
    for(j=0;j<60;j++)
    {
    for(i=0;i<60;i++)
    {
    system("clear");
    printf("时钟:%d:%d:%dn",b,j,i);

                   sleep(1);
               }
    
                  system("clear");
                  printf("时钟:%d:%d:%dn",b,j,i);
    
                  sleep(1);
    
           }
    
                   system("clear");
                   printf("时钟:%d:%d:%dn",b,j,i);
    
                   sleep(1);
    
       }
    }
    

    改进版
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int i,j,b;
    printf("输入时间:");
    scanf("%d %d %d",&b,&j,&i);
    for(;;)
    {
    for(;b<=24;b++)
    {
    for(;j<3;j++)
    {
    for(;i<3;i++)
    {
    system("clear");
    printf("时钟:%02d:%02d:%02dn",b,j,i);

                       sleep(1);
    
                   }
                      i=0;
                      system("clear");
                printf("时钟:%02d:%02d:%02dn",b,j,i);
                              //%02d:代表输出的宽度
                      sleep(1);
    
               }
                      j=0;
                       system("clear");
                printf("时钟:%02d:%02d:%02dn",b,j,i);
    
                       sleep(1);
    
           }
           b=0;
         }  
    
    }
    

    }
    InsSort::~InsSort(){

    百钱买百鸡问题:

            #include<stdio.h>
    
            int main()
            {
               int i,j,k;
               for(i=1;i<=20;i++)
                 for(j=1;j<=33;j++)
                   for(k=1;k<=100;k++)
              if(i+j+k==100&&i*5+j*3+k*1/3==100&&k%3==0)
                   {
                        printf("%d %d %dn",i,j,k);
                   }   
    
            }
    

    }
    void InsSort::insert(int x){
        printf("wuyun.........x=%dn",x);

    一.数组: 如果要定义太多的数字,如果一个一个去定义那时没有必要的

    所以数组的意义就在这里
    (1) 数组的定义:
    DataType ArrayName[size];
    DataType:数据类型,int,float,double,char,等等
    ArrayName:数组名
    size: 数组的大小或数组下标,必须是常量表达式
    [ ]: 下标运算符 从0下标开始到size-1
    例:
    定义一个数组大小为5,其中每个元素都是int类型
    int arr[5];
    arr:数组名
    5 :数组大小即数组元素的个数
    int :数组元素的类型

    for(int i=n-1;i>=0;i--){
        
        if(a[i]>x){
        a[i+1]=a[i];
        }
        else{
        a[i+1]=x;
        break;
        }
        if(i==0){if(a[i]>x)a[i]=x;}
    }
    ++n;
    show();

    (2) 数组的初始化

    int arr[3]={1,2,3}; 完全初始化
    int arr1[3]={1,3}; 缺省初始化 其他默认为0
    int arr2[3]={1};
    int arr3[3]={[2]=3}; 不建议 这么写 有些c标准支持这种写法 这是给某个元素赋初值
    int arr4[]={1,2,3,4};

    int arr5[]={}; // error

    int arr[5];
    arr[5]={1,2,3,4,5}; //这样的赋值方式 error
    注:数组若要初始化,必须在定义的同时初始化,
    不能先定义,后初始化;

    //以下方法不可以,编译器会报错:
    /*
    int n = 6;
    int arr[n];

    int m;
    scanf("%d",&m);
    int buf[m];
    */

    简单介绍宏定义
    #######define M 5 后面不能跟分号!!!
    意思是:用M代替5;

    }
    void InsSort::show(){

    (3) 数组元素的访问

    使用下标形式:从0下标开始到size-1
    int arr[5];
    arr[1]:访问第二个元素
    arr[4]:访问第五个元素

           #include<stdio.h>
            int main()
            {
              //数组元素初始化
              int arr[5]={1,2,3,4,5};
              //访问数组第三个元素下标从0开始为2
              printf("%dn",arr[2]);
              //数组元素之前的值
              printf("before:%dn",arr[3]);
              //数组元素的操作
              arr[3]*=5;
              printf("after:%dn",arr[3]);
            }
    

    #include<stdio.h>
    int main()
    {
    //数组元素未初始化输出的随机值 情况
    int arr[5];
    printf("arr[0] = %dn",arr[0]);
    printf("arr[1] = %dn",arr[1]);
    printf("arr[2] = %dn",arr[2]);
    printf("arr[3] = %dn",arr[3]);
    printf("arr[4] = %dn",arr[4]);
    }

    for(int i=0;i<n;i++){
        printf("wuyun.........a[%d]=%dn",i,a[i]);

    (4) 遍历数组:逐个访问

            #include<stdio.h>
            int main()
            {
    
              int arr[5]={1,2,3};
              int i;
              for(i=0;i<5;i++)
              //第一个%d:对应数组的下标
              //第二个%d:对应数组元素的值
              printf("arr[%d] = %dn",i,arr[i]);
              return 0;
            }
    

    cout<<a[i]<<endl;
    }
    }
    int main(){
        
        int b[100]={1,3,5};
        InsSort arr(b,3);

    (5) 数组的存储

             数组也是一种数据结构,数组中的元素顺序存储
             数组中每个元素的类型都相同;
                #include<stdio.h>
                int main()
                {
                  int arr[5] = {1,2,3,4,5};
                  int i = 0;
                  for(i=0;i<5;++i)
                  {
                     //地址占位符:%p或者%x,(正规用法是%p)
                                   //这里的&是取地址符
               printf("&arr[%d] = %pn",i,&arr[i]);
                  }
                }
                结果:
                    &arr[0] = 0x7ffcd4f0c670
                    &arr[1] = 0x7ffcd4f0c674
                    &arr[2] = 0x7ffcd4f0c678
                    &arr[3] = 0x7ffcd4f0c67c
                    &arr[4] = 0x7ffcd4f0c680
    
    
                    #include<stdio.h>
                    int main()
                    {
                      int arr[5] = {1,2,3,4,5};
                      int i = 0;
                      for(i=0;i<5;++i)
                      {
                   //地址占位符:%p或者%x,(正规用法是%p)
                  printf("&arr[%d] = %pn",i,&arr[i]);
    
                      }
        printf("sizeof(arr)=%ldn",sizeof(arr));=20
                  内存中的所占的字节
                    }
    

        int c[100]={0,1,2,3,5,8,10};
        for(int i=0;i<7;i++)
        {
            arr.insert(c[i]);
            
        }
        arr.show();
        return 0;
    }

    (6) 数组地址问题

    int arr[5]:
    arr:0x000000 数组名,也代表数组元素的首地址,即第一个元素的地址
    &arr[0]:0x000000 数组元素的首地址,即第一个元素的地址
    &arr:0x000000 数组的首地址
    arr+1:0x000004
    &arr[0]+1:0x000004
    &arr+1:0x000014 偏移量为sizeof(arr)
    arr+1和&arr[0]+1:表达的意思一样,
    地址偏移sizeof(arr[0])个字节

                    #include<stdio.h>
                    int main()
                    {
                       int arr[5]={1,2,3,4,5};
                       //数组元素的地址问题
                      // printf("arr[0] = %dn",arr[0]);
                      //printf("arr[1] = %dn",arr[1]);
                       printf("arr = %pn",arr);
                       printf("arr+0=%pn",arr+0);
                       printf("arr+1=%pn",arr+1);
                       printf("arr+2=%pn",arr+2);
                       printf("arr+3=%pn",arr+3);
                       printf("arr+4=%pn",arr+4);
    
                    }
             结果:
                       arr = 0x7ffe0fce0e60// 这里首地址一样
                        arr+0=0x7ffe0fce0e60//
                        arr+1=0x7ffe0fce0e64
                        arr+2=0x7ffe0fce0e68
                        arr+3=0x7ffe0fce0e6c
                        arr+4=0x7ffe0fce0e70
    

    (7) 数组元素的赋值

                 **熟练数组元素的赋值和遍历输出
    
                    #include<stdio.h>
                    int main()
                    {
                       int arr[5];
                       int i = 0;
                       //给数组元素赋值
                       printf("input 5 num:n");
                       for(i=0;i<5;i++)
                       {
                          //arr[i]=2*i;
                          scanf("%d",&arr[i]); //注意格式
    
                       }
                       //遍历输出
                       for(i=0;i<5;i++)
                       printf("arr[%d]=%dn",i,arr[i]);
    
                    }
    
                求数组和与平均值:
                        #include<stdio.h>
                        int main()
                        {
                           int arr[5]={1,2,3,4,5};
                           int i=0;
                           int sum=0;
                           float aegv=0;
                           for(i=0;i<5;i++)
                           {
                              sum+=arr[i];
                           }
                             aegv=(float)sum/5;
                   printf("和:%5d 平均值:%fn",sum,aegv);
    

    (8)字符串数组

               初始化定义
               char  arr[10]={"hello"};
               char  arr[10]={'h','e','l','l','o'};
    
    
               输出占位符为%s
    
                    #include<stdio.h>
                    int main()
                    {
                       char arr[16]={"hEllo world"};
               //将小写字母转成大写字母;大写字母转成小写字母
                       int i,ch;
                       for(i=0;i<16;i++)
                       {
                           if(arr[i]>='a'&& arr[i]<='z')
                               arr[i]-=32;
                        else if(arr[i]>='A'&& arr[i]<='Z')
                               arr[i]+=32;
    
                        }   
                       printf("%sn",arr);   
    
                    }                            
    

    二、二维数组(基于矩阵)

         DataType ArrayName[行下标][列下标];
         初始化:int arr[3][3]={1,2,3,4,5,6,7,8,9};
                 int arr[ ][3]={1,2,3,4,5,6,7,8,9}; 
                 行下标是可以省略的 但列下标不能省  
                 一列可以是多个数 所以不能反过来  
                 int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};  
                 这种表示可以视为三个一维数组
                 在内存中是一行一行的存 
    

    三、注释

      (1) //.........;
            单行注释,可以独占一行,也可以跟在执行语句之后
            但"//"之后的内容,不能编译执行
            规定:
                 注释内容放在被注释的上一行
                或者行末(如 上图程序注释部分所示) 
    
      (2) /*...........*/:
            多行注释  注释大段代码也就是注释代码块
    

    本文由澳门新葡4473网站发布于新闻社区,转载请注明出处:数组a中的n个元素已按升序排

    关键词: