C语言中的数组1

一 一维数组

a 格式 类型修饰符 变量名 =  初始值

数组为构造类型

格式 类型修饰符 变量名[数组元素个数] = {值1,值2,值3,};

数组作用: 存储同一类型的数据

b  定义数组的方式有四种:

定义数组方式1  有元素个数 初始值全
       int a[5] = {1,2,3,4,5};   

定义数组方式2  无元素个数 初始值全  
    int b[] = {1,2,3,4,5};

 定义数组方式3 有元素个数初始值不全 (不够补0)
    int c[5] = {1,2,3};    

定义数组4 有元素个数 初始值空 (全是0)   
   int d[5] = {0};
   
定义数组方式错误1 指定元素个数 < 初始值个数   

    int e[5] = {1,2,3,4,5,6};   

定义数组方式错误2 元素个数为空,初始值为空

c    访问数组元素
     1 不能一次整体调用整个数组全部元素的值,基本数据类型变量中储存的是一个数据
     数据中存储的是多个数据,不能通过数组变变量,调用所有数组元素

     2 下标 数组元素在数组中的符号,数组中的元素是有序的,每个元素都有序号,序号从0开始,最有一个元素的序号是n - 1,n表示数组元素个数   

     3 访问数组元素: 使用下标实现,数组名[下标];

     4 下标范围: 0~n-1

举例 int arr[5] = {10,20,30,40};
      printf("%d",arr[0]);
d 修改数组元素
    举例 arr[0] = 4;

     printf("%d",arr[0]);输出结果为 arr[0] = 4;

    修改数组元素 根据数组下标来修个数组元素的值

e 遍历数组 使用for循环

    int a[] = {1,2,3,4,5};
    // 遍历打印
    for (int i = 0; i < 5; i++) {
       printf("%d ",a[i]);
    }
f   通过循环方式给数组元素赋值
    1 定义数组,必须设置元素的个数,数组元素的初始值位0
     2 通过循环给数组元素赋值
    
   举例 定义一个具有5个元素的整型数组,取值范围(1~13),遍历打印所有数
    int a[5] = {0};   
    for (int i = 0; i < 5; i++) {

        a[i] = arc4random() % (13 - 1 + 1) + 1;
       printf("%d ",a[i]);       
    }

注意事项:
     越界: 超出数组元素个数
     越界出现的情况: 会打印出内存其他区域所存储的数据

g 冒泡排序:

冒泡排序的基本思想: 每次将相邻的两个数进行比较,按照升序或降序的顺序进行交换,直到所有数字的顺序全部正确
 
   举例:随机产生 10个[20,40]数 ,并对10个数实现降序排序。
   int a[10] = {0};

   printf("请输入十个随机数:\n");

    求取随机数:
    for (int i = 0; i < 10; i++) {
        a[i] = arc4random() % (40 - 20 + 1) + 20;
        printf("%d ",a[i]);
    }

  冒泡排序:

      控制比较趟数:

     for (int i = 0; i < 10 - 1; i++) {

       控制比较次数:
       for (int j = 0; j < 10 - i - 1; j++) {
            if (a[j] < a[j + 1]) {
               int temp = a[j];
                a[j] = a[j + 1];    相邻两值进行交换
                a[j + 1] = temp;
            }
        }

    }
    printf("\n");
    printf("冒泡排序后:\n");

   遍历打印
    for (int i = 0; i <= 9; i++) {
        printf("%d ",a[i]);
   }

字符数组以及字符串数组

a 字符数组:
     1 数组元素存储的字符
     2 定义字符数组 类型修饰符 数组名(元素个数) = {'字符1','字符2','字符3'};
     3 如果元素个数不够,后面补'\0','\0'控制作符,不能显示

b 侧数组的字节数

使用函数sizeof() 转化符是%luchar b[10] = {'l','a','n','s','e'};
 printf("%lu\n",sizeof(b));  输出结果为5个字节
访问修改
b[0] = 'L'

遍历打印

for (int i = 0; i < 10; i++) {
        printf("%c ",b[i]);
    }   输出 Lanse

 
c  字符串
   1 字符串常量"hello world"
   2 使用字符串数组存储字符串
   3 使用%s ,输出字符串

  4 定义字符数组,存储字符串, 类型修饰符 数组名[] = {元素};

举例: char a = "hello world"  // 最后有一个元素为\0,而不是d

 系统如何识别字符串的'\0',数据存储在内存中,当读取字符串时,遇到'\0'就会停止读取,字符串中的'\0'是系统默认的.
  有效字符: 第一个'\0'前的所有字符.

d 字符串和字符数组的关系

 1 字符串一定是字符数组,但字符数组不一定是字符串

举例: char a = {'s','h','e','n'};

        char b = "shen";

      a,b打印结果一样,但a是字符数组,但b是字符串也是字符数组

 查找字符串中的空格数 例如: "I love ios, I want an iphone6"
    
   char a[] = "I love ios, I want an iphone6";
    int lenth = (int)strlen(a);
    int count = 0;
    for (int i =0; i < lenth ; i++) {
        if (a[i] == ' ') {
            count++;
        }

    }

   printf("空格数为:%d\n",count);
e 与字符串有关的三个函数

     (1)  strlen 字符串长度
     测量的是字符串的实际长度,不包含'\0'
    
    char name[] = "zhangpengandxinzhiqiang";
    strlen(name);
    printf("%s的长度是:%lu",name,strlen(name));
    
    (2) strcpy 字符串拷贝
    char a[5] = {0};
    char b[] = "lanse";
    
    //strcpy(字符串1,字符串2): 将字符串2的数据复制到字符串1中
    strcpy(a, b);
    printf("a = %s b = %s\n",a,b);
    
     字符串2可以是常量,字符数组名strcpy(a,"张三");
    
    strcpy(a, "张三");// 字s符串2的位置,输入什么就拷贝什么
    printf("%s",a);
    
     字符数组1的存储空间 >= 字符数组2 注意: '\0'
     牢记: 给一个字符数组赋值,只能使用strcpy函数,不能直接对一个字符组赋值
     a = b; 错误的赋值方法
    (2) ctrcat 字符串拼接
    
    char r[] = "hello";
    char b[] = "world";
    
    strcat(字符串1,字符串2);
     字符串1的空间要足够大,这样才能装下字符串2,拼接时,字符串1的后面'\0'自动取消,字符串2的数据写入后面
    strcat(r,b); // 可以指直接添加需要的字符串
    printf("%s\n",r);
    
    (3) strcmp 字符串比较
    
    char a[] = "apple";
    char b[] = "google";
    
    // 将两个字符串自左向右进行比较 (按照ACCII码值进行比较),直到出现不同的字符串或者'\0'结束
    // 字符串1 > 字符串2 输出的结果大于0
    // 字符串1 < 字符串2 输出的结果小于0
    // 字符串1 = 字符串2 输出的结果等于0
    
    printf("%d\n",strcmp(a, b));
    printf("%d\n",strcmp(b, a));
    printf("%d\n",strcmp(a, "apple"));
    
    
    char a[] = "afjnpue";
     把a[] 转变成字符串"eupnjfa";
    int lenth = (int)strlen(a);

    for (int i = 0; i < lenth / 2; i++) {
        char temp = a[i];
        a[i] = a[lenth-1-i];
        a[lenth-1-i] = temp;
    }
    
    printf("%s",a);

 

posted @ 2015-09-21 13:44  hahasunshine  阅读(413)  评论(0编辑  收藏  举报