zoukankan      html  css  js  c++  java
  • iOS 阶段学习第六天笔记(数组)

                                                                                                  iOS学习(C语言)知识点整理

    一、整型数组

     1)概念:一组类型相同,空间连续分布的数据。

     2)int a[10] int 型里面有10个元素,数组的名字叫a, a还是数组的首地址 。

     3)引用数组中的元素 a[i]:数组名+下标,下标从0开始 。

     4)数组元素个数刚好与数组长度相当叫完全初始化。

     5)数组的遍历即访问数组里面的所有元素。

     6)元素的地址 &a[0] 取地址符+数组名+下标

     7)遍历输入,访问不能越界,越界编译器检查不了,有较大的安全风险

     8)int 数组的sizeof等于数组长度乘4

     9)部分初始化后面省略部分全部赋值为0.

    10)int a[5]={0} ;int a[5]={}; 部分初始化,全零补齐数组

    11)数组的最大下标为数组的长度减一  例如:int a[]={1,2,3,4,5}  len=sizeof(a)/sizeof(int); 最大下标为 len-1。

    12)数组长度[ ]里面只能是常量,符号常量

    13)数组的初始化

        ①. Int list[5]={2,13,58,55,19};//一般写法

        ②. Int list[5]={6,17};//只对前两个元素赋值

        ③. Int list[5]={[3]=25,[4]=51};//对指定的元素赋值,这里为第三个和第四个

        ④. Int list[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。

        ⑤. Int list[];//错误,编译器无法知道应该分配多少的存储空间

        ⑥. Int list[5]; list ={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化

        ⑦. Int list[‘A’]={1,2,3};//正确,相当于是ages[65]

        ⑧. Int count=5;int list[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,

             list[0]=1; list[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。 

        ⑨. 而int count=5;int list[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为

             常量或者不写,不能是一个变量

          

    14)斐波拉契数列  1,1 ,2 ,3 ,5 ,8 ,13 ,21 ,34...

    实现代码:

     1 int main(){
     2    int arr[20]={};
     3     for (int i=0; i<20; i++) {
     4         if(i<=1)
     5             arr[i]=1;
     6          else
     7           arr[i]=arr[i-1]+arr[i-2];
     8     }
     9     for (int i=0; i<20; i++) {
    10         printf("%d ",arr[i]);
    11     }
    12     return 0;
    13  }

    二、排序

    1)选择排序:每次从无序数列选择一个最小的,放在有序队列的后面

          例如:int a[]={12,3,556,0,9,78};

          1. 0]3,556,12,9,78

          2. 0,3],556,12,9,78

          3. 0,3,9]12,556,78

          4. 0,3,9,12]556,78

          5. 0,3,9,12,78]556

    实现代码:

     1  int main(){
     2     int a[]={12,3,556,0,9,78};
     3     int len = sizeof(a)/sizeof(int);
     4     int k;//纪录最小数的下标
     5     int temp;
     6     //一共要排len-1次
     7     for(int i=0;i<len-1;i++){
     8         //从a[i]~a[len-1]里面找出最小的值,放到a[i]的位置
     9         k=i;
    10         for(int j=i+1;j<len;j++){
    11             if(a[j]<a[k]){
    12                 k=j;
    13             }
    14         }
    15 
    16         //a[k]和a[i]做一次交换
    17         if(k!=i){
    18             temp = a[k];
    19             a[k] = a[i];
    20             a[i] = temp;
    21         }
    22     }
    23 
    24     for(int i=0;i<len;i++){
    25         printf("%d ",a[i]);
    26     }
    27       return 0;
    28    }

     2)冒泡排序:大数往下沉,小数往上浮

      比较相邻的元素。如果第一个比第二个大,就交换他们两个。

      int a[]={12,3,556,0,9,78};

     一轮比较,需要5次

     1.1  [3,12],556,0,9,78

     1.2  3,[12,556],0,9,78

     1.3  3,12,[0,556],9,78

     1.4  3,12,0,[9,556],78

     1.5  3,12,0,9,[78,556]->一轮结束,最大的一个数沉入底部排序

     实现代码:

     1 int main()
     2 {
     3     int a[]={12,3,556,0,9,78};
     4     int temp;
     5     int len = sizeof(a)/sizeof(int);
     6     //排len-1次
     7     for(int i=0;i<len-1;i++){
     8         //无序的数列:a[0]~a[len-1-i],逐对比较
     9         //前面>后面,就交换
    10         //i=0,最后一对: a[len-2],a[len-1]
    11         for(int j=0;j<len-1-i;j++){
    12             if(a[j]>a[j+1]){
    13                 temp = a[j];
    14                 a[j] = a[j+1];
    15                 a[j+1] = temp;
    16             }
    17         }
    18     }
    19 
    20     for(int i=0;i<len;i++){
    21         printf("%d ",a[i]);
    22     }
    23     return 0;
    24 }

    3)插入排序

     int a[]={12,3,556,0,9,78};

     初始化 12[3,556,0,9,78]

     1. 3,12[556,0,9,78]

     2. 3,12,556[0,9,78]

     3. 0,3,12,556[9,78]

     4. 0,3,9,12,556,[78]

     5. 0,3,9,12,78,556

     {12,33,556,0,9,78}

     实现代码:

     1  int main()
     2  {
     3     int a[]={12,3,556,0,9,78};
     4     int len =  sizeof(a)/sizeof(int);
     5     int insert = 0;
     6     //一共要比较len-1次
     7     for(int i=0;i<len-1;i++){
     8         //把a[i+1] 插入到 前面有序数列a[0]~a[i]
     9         insert = a[i+1];
    10         for(int j=0;j<=i;j++){
    11             if(a[j]>insert){
    12                 //插入a[j]这个位置
    13                 //后移a[j]~a[i]后移一个
    14                 printf("insert %d,pos = %d
    ",insert,j);
    15                 for(int k=i;k>=j;k--){
    16                     a[k+1]=a[k];
    17                 }
    18                 //插入位置填入insert
    19                 a[j]= insert;
    20                 break;
    21             }
    22         }
    23 
    24         for(int ii=0;ii<len;ii++){
    25             printf("%d ",a[ii]);
    26         }
    27         printf("
    ");
    28     }
    29 
    30     for(int ii=0;ii<len;ii++){
    31         printf("%d ",a[ii]);
    32     }
    33     return 0;
    34 }

    三、字符数组

     1)计算字符数组的有效长度用strlen(数组名)

    2)实例:

      小写转大写 实现代码:

     1 int main(){
     2   char str[10]={'h','e','l','l','o'};
     3   int len = (int)strlen(str);
     4    //小写转大写
     5      for(int i=0;i<len;i++){
     6          if(str[i]>='a'&&str[i]<='z'){
     7              str[i] = str[i]- ('a'-'A');
     8          }
     9      }
    10   printf("%s",str);
    11  
    12   return 0;
    13 }

    四、二维数组

     1)实例:

    利用二维数组打印杨辉三角

     1

     1  1

     1  2  1

     1  3  3  1

     1  4  6  4  1

     1  5  10 10 5 1

     实现代码:

     1  int main(){
     2     int a[10][10];
     3     for(int i=0;i<10;i++){
     4         for(int j=0;j<=i;j++){
     5             if(j==0||i==j)
     6                a[i][j]=1;
     7              else
     8                 a[i][j]=a[i-1][j]+a[i-1][j-1];
     9         }
    10     }
    11 
    12     for(int i=0;i<10;i++){
    13         for(int j=0;j<=i;j++){
    14             printf("%5d",a[i][j]);
    15         }
    16         printf("
    ");
    17     }
    18     return 0;
    19 }

    五、不使用第三方变量实现数据交换

    实现代码:

    1 int main(){
    2   int a=20,b=30;
    3   a=a+b;
    4   b=a-b;
    5   a=a-b;
    6   printf("a=%d;b=%d",a,b);
    7 
    8   return 0;
    9 }
  • 相关阅读:
    python每日活力练习Day29
    python活力练习Day28
    python活力练习Day27
    pyhton 活力练习Day26
    排序算法之归并排序
    排序算法之快速排序
    Python 多线程
    排序算法之希尔排序
    排序算法之插入排序
    ELK(elasticsearch+kibana+logstash)搜索引擎(一): 环境搭建
  • 原文地址:https://www.cnblogs.com/ChinaKingKong/p/4596792.html
Copyright © 2011-2022 走看看