C_Language_05

C_Language_05

一维数组:
            1.数组属于构造类型
            2.具有相同数据类型的成员组成的一组数据
            3.存储不同类型数据的数组有对应的名称,整型数组:数组中成员变量都是整型的;浮点型数组:数组中成员变量都是浮点型的
            4.数组是由多个成员组成,每个成员被称为数组元素
定义数组:
            类型修饰符 数组名[常量表达式] = {值1,值2,值3...};
            1.类型修饰符:指定数组中元素的类型
            2.[]中设定数组元素的个数,即数组的存储空间。只能是常量表达式,不能是变量表达式
            3.初始值之间用,隔开
            定义一个整型数组,存放3个数组元素 2,3,4
            int a[3] = {2, 3, 4};
            float a[3] = {2, 3, 4};
            printf("%lu\n",sizeof(a));
定义方式:
            定义数组的方式1:没有赋初始值单独元素,自动设置初值为0;
            int b[5] = {3,4,5};
            printf("%lu\n",sizeof(b));
            定义数组的方式2:
            int c[5] = {0};
            定义数组方式3:根据初始化设置,判断数组元素个数
            int d[] = {3,4,5,6};
            printf("%lu\n",sizeof(d));
错误方式:
            定义数组 错误 方式1:指定的数组元素个数 < 设定初值的数量
            int e[2] = {3,4,5,6};
            printf("%lu\n",sizeof(e));
            定义数组 错误 的方式2:既没有指定元素个数,也没有赋初始值
            int f[] ={0};//不是给第一个元素赋值0 ?
            printf("%lu\n",sizeof(f));
定义数组后,数组的存储空间是连续的
数组的存储空间 = 数组元素的个数 * 元素占的字节
访问数组元素:        
            1.不能一次整体调用整个数组的全部元素的值,基本数据类型变量只存储一个数据。
              数据中存储多个数据,不能通过数组变量调用所有的元素。
            2.访问数组元素 使用下标实现 数组名[下标]
            3.下标:数组元素在数组中的序号,数组中的元素是有序的,每个元素都有序号,
              序号从0开始递增,最后一个元素的序号是n-1,n表示数组元素的个数
            4.下标的范围:0~n-1
            5.下标可以用整型常量或变量表示
遍历数组:
            1,按照顺序:从数组的第一个元素开始,访问数组的最后一个元素结束
            2,使用for循环实现的数组遍历
            3,循环和数组关系密切
示例:
            int age[5] = {18,15,33,19,25};
            printf("%d\n",age[0]);
          // 用for遍历
            for (int i = 0; i < 5; i ++)
            {
                printf("age[%d] = %d\n",i,age[i]);
            }
         // 反向遍历
            for (int i = 4; i >= 0; i --)
            {
                printf("age[%d] = %d\n",i,age[i]);
            }
修改数组元素:根据数组下标确定需要修改的数组元素
            int aa[] = {1,2,3,4,5};
            //遍历数组
            for(int i = 0; i < 5;i ++)
            {
                printf("aa[%d] =%d \n",i,aa[i]);
            }
            printf("========\n");
          //修改数组元素
            aa[1] = 22;
            aa[4] = 44;
         // 再遍历
            for(int i = 0;i < 5;i ++)
            {
                printf("aa[%d] = %d \n",i,aa[i]);
            }
通过循环方式给数组元素赋值:
            1,定义一个数组,必须设置数组元素数量,数组元素初值为0
            2,通过循环给元素赋值
示例:
            int num[5] = {0};
            //在0~10之间取随机数,分别赋给每个元素
            for (int i = 0; i < 5; i ++)
            {
                num[i] = arc4random()%(10 - 0 + 1) + 0;
                printf("%d ",num[i]);
            }
示例:定义一个具有10个元素的数组,每个元素的值在30~80之间取随机数
            int number[10] = {0};
            for (int i = 0; i < 10; i ++)
            {
                number[i] = arc4random()%(80 - 30 + 1) + 30;
                printf("number[%d] = %d\n",i,number[i]);
            }
            printf("\n");
示例:定义一个具有20个元素的整型数组,每个元素的取值都是30~70.并求数组元素的和
            int number[20] = {0},sum = 0;
            for (int i = 0; i < 20; i ++)
            {
                number[i] = arc4random()%(70 - 30 + 1) + 30;
                printf("number[%d] = %d\n",i,number[i]);
                sum += number[i];
            }
            printf("20个数的和是%d\n",sum);
越界:使用数组下标时超出数组范围,即访问了不属于数组的存储空间,编译器不会检测数组下标是否越界,因此操作数组时必须保证没有越界
            int Crazy[4] = {2,3,4,5};
            printf("%d",Crazy[4]);
注意事项:
            定义数组:类型 数组名[元素个数]
            数组元素:数组名 [数组下标]
            数组作为一个整体不能直接参与运算
示例:把数组a中的元素赋值给数组b中
            int a[5] = {1,2,3,4,5};
            int b[5] = {0};
            for (int i = 0; i < 5; i++)
            {
                b[i] = a[i];
                printf("b[%d] = %d\n",i,b[i]);
            }
            printf("反向遍历\n");
            for (int i =4; i >= 0 ; i--)
            {
                b[i] = a[i];
                printf("b[%d] = %d\n",i,b[i]);
            }
        
示例:生成两个数组每个数组都有10元素,元素取值范围在20~40之间,数组对应元素相加,放到另外一个数组中
            int a[10] = {0},b[10] = {0},c[10] = {0};
            for (int i = 0; i < 10; i ++)
            {
                a[i] = arc4random()%(40 - 20 + 1) + 20;
                printf("a[%d] = %d ",i,a[i]);
            }
            printf("\n");
            for (int i = 0;i < 10; i ++)
            {
                b[i] = arc4random()%(40 - 20 + 1) + 20;
                printf("b[%d] = %d ",i,b[i]);
            }
            printf("\n");
            for (int i = 0; i < 10; i ++)
            {
                c[i] = a[i] + b[i];
                printf("c[%d] = %d ",i,c[i]);
            }
            printf("\n");
        
数组排序:
            1.常见的排序方法:冒泡排序、选择排序、插入排序等
            2.排序的规则有两种:升序、降序
            3.重点:冒泡排序
            4.冒泡排序的思路:每次将相邻的两个数进行比较,按照升序或降序进行交换,直到所有数字的顺序正确为止。
示例:
            int a[5] ={5,4,3,2,1};
        //    外循环,控制循环的排序趟数,趟数:4
            for (int i = 0; i < 5-1; i++) {
        //        内循环,控制比较次数
        //        5 4 3 2 1
        //        4 3 2 1 5
        //        3 2 1 4 5
        //        2 1 3 4 5
        //        1 2 3 4 5
        //        1 2 3 4 5
                for (int j = 0; j < 5 - i - 1; j++) {
                    if (a[j] > a[j + 1]) {
                        int temp = a[j];
                        a[j] =a[j+1];
                        a[j+1] = temp;
                    }
                }
                for (int i = 0; i < 5; i++) {
                    printf("%d ",a[i]);
                }printf("\n");
            }
        
字符数组:
            1.数组元素存储的时字符
            定义字符数组
            char a[5] = {'h','e','l','l','o'};
            char b[] = {'h','e','l','l','o'};
            char c[10] = {'h','e','l','l','o'};
            a[3] = 't';//修改
            printf("%c\n",a[3]);//访问
            printf("%c\n",b[3]);
            printf("%c\n",c[3]);
字符串:
            char a2[] = "hello";
            printf("%s\n",a2);
            char a3[] = {'h','e','l','l','o','\0'};
            printf("%s\n",a3);
            1.字符串常量“hello”
            2.使用字符数组存储字符串
            3.使用%s,输出字符串
定义字符数组存储字符串:
            1.char a2[] = "hello";
            系统如何识别字符串:'\0'。数据存储在内存中,系统如何识别哪些字符属于一个完整的字符串, '\0'是字符结束的标志,在字符串的最后一位,由系统默认添加,不会显示
            “hello”存储时,实际上是:'h','e','l','l','o','\0'
            有效字符:在字符串中,’\0‘之前的字符
            字符数组a2中存储字符串:数组元素为'h','e','l','l','o','\0'
            存储字符串的字符数组元素个数:有效字符个数 +1
            输出字符串:printf("%s",a2);
字符串和字符数组的关系:
            1.字符串是一个字符数组
            char p[] = "hello";
            char  q[6] = {'h','e','l','l','o'};
            char q[] = "hello";
            printf("%s\n",q);
            p、q都是数组
            两个数组存储的内容都是  字符串hello
            都可以访问\修改数组元素,遍历
            for (int i = 0; i < sizeof(p)/sizeof(char); i++) {
                printf("%c",p[i]);
            }
            2.字符数组不一定是字符串,但是字符串一定是字符数组
            3.存储字符串的数组,可以输出单个字符,也可以使用%s输出完整字符串,使用%s输出时,遇到'\0'时结束
            char a3[] = {'w','o','r','d','\0'};
            printf("%s",a3);
            4.字符数组只是存储字符的数组,只能输出单个字符
            char a4[] = {'w','o','r','d','\0'};
            for (int i = 0; i < sizeof(a4)/sizeof(char); i++) {
                printf("+++++%c",a4[i]);
            }
            printf("\n");
            printf("-----%s",a4);//输出结果可能出问题,因为不知什么时候才能读到‘\0’
            printf("\n");
        
字符串操作函数:
            1.strlen 测量字符串的长度,不包含'\0'。
            // strlen(name)+1=sizeof(name)/sizeof(char)
            char name[] = "yujingnian";
            printf("%s的长度:%lu\n",name,strlen(name));
            2.strcpy 字符串拷贝
            字符串2可以是常量、字符数组名
            字符数组1的存储空间 >= 字符数组2  注意'\0'
            ***牢记:把一个字符数组的值给另外一个字符数组,只能用strcpy函数,不能直接对一个字符数组赋值
            char a12[4] = {0};//    ?
            char b12[] = "lanou";
            strcpy(a12, b12);//将b12复制到a12
            printf("%s\n",a12);
            printf("%s\n",b12);
            3.strcat 字符串拼接
            字符串2拼接到字符串1后,结果保留在字符串1中
            字符数组2可以是常量
            字符数组1的空间必须足够大
            拼接之后,字符串1后面的'\0'取消,只在新的字符后面保留'\0'
            char a10[] = "fan",a11[] = "douhong";
            strcat(a10, a11);
            printf("%s\n",a10);
            4.strcmp 字符串比较
            char a10[] = "fan",a11[] = "douhong";
        //    将两个字符串自左向右比较(按ASCLL码大小比较),直到出现不同的字符或是遇到'\0'为止
        //    字符串1的字符 - 字符串2的字符
        //    字符串1 = 字符串2,则函数结果为0
        //    字符串1 > 字符串2,则函数结果为正整数
        //    字符串1 < 字符串2,则函数结果为负整数
            printf("%d\n",strcmp(a10, a11));
示例:
            查找字符串中的空格:例如:“I love ios,i want iphone6sp”
            char str[] = "I love ios,i want iphone6sp";
            int nn = 0;
            int count = 0;
            while (str[nn] != '\0') {
                if (str[nn] == ' ') {
                    count++;
                }
                nn++;
            }
            printf("空格数有%d个\n",count);
一维数组:
            char a[3] = {"one"};
            for (int i = 0; i < 3; i++) {
                printf("%c",a[i]);
                printf("\n");
            }
        
二维数组:
            char a[3][5] = {"one","tow","three"};
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 5; j++) {
                    printf("%c",a[i][j]);
                }
                printf("\n");
            }

posted @ 2015-11-24 23:04  DH_Fantasy  阅读(98)  评论(0)    收藏  举报