c语言 数组(一维、字符)

//  main.m

//  1-16课堂笔记

//讲师:小辉

//笔者:王学文

//  Created by lanouhn on 15/1/16.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//数组(一维、字符)

 

#import <Foundation/Foundation.h>

 

int main(int argc, const char * argv[]) {

    //数组:用于存储 相同数据类型 的有序队列

    

    //数组定义的格式

    //数据类型 变量名[元素个数] = {数值1,数值2,数值3,…}

    

    //整型数组

//    int array[5] = {1, 2, 3, 4, 5};

//    

//    //浮点型数组

//    float array1[5] = {1.0, 2.0, 3.0, 4.0, 5.0};

//    

//    //数组越界,很危险

//    int a[2] = {1, 2, 3};

//    

//    //数组定义的方式

//    int b[4] = {1, 2, 3};//1, 2, 3, 0

//    

//    int c[4] = {1};//1, 0, 0, 0

//    

//    int d[4] = {0};//全为0

//    

//    //数组元素个数省略,但是必须赋初值,否则没办法决定元素的个数

//    int e[] = {1, 2, 3, 4};//有四个元素

//    

//    int g[] = {0};//有一个元素

//    

//    int h[] = {};//0个元素,无意义

//    

    

    //sizeof(); 计算 数据类型 或者 变量 所占的字节数

   /*

    //计算数据类型所占字节数

    unsigned long length = sizeof(short);

    printf("short:%lu\n", length);

    

    // 计算变量所占的字节数

    int i = 0;

    printf("int:%lu\n", sizeof(i));

    

    printf("short:%lu\n", sizeof(short));//取值范围:-2^15到2^15-1

    printf("int:%lu\n", sizeof(int));//取值范围:-2^31到2^31-1

    printf("char:%lu\n", sizeof(char)); //取值范围:-2^7到2^7-1

    printf("long:%lu\n", sizeof(long));//取值范围:-2^63到2^63-1

    printf("float:%lu\n", sizeof(float));//取值范围:-2^31到2^31-1

    printf("double:%lu\n", sizeof(double));//取值范围:-2^63到2^63-1

    

    //数组所占的字节数 = 数据类型所占的字节数 + 数组元素个数

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

    printf("%lu\n", sizeof(a));

    

    

    

    //数组的使用

    

    int k = 2, j = 3;

    //k + j ;

    

    //数组不能够直接参与运算,数组中得元素可以参与运算

    int arr1[2] = {1, 2};

    int arr2[2] = {4, 5};

    //arr1 + arr2

    

    //获取数组中的元素

    //格式:数组名[元素下标]

    //(*)元素下标从零开始

    //原酸下标的范围{0, 数组元素个数-1}

    

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

    printf("%d\n", a[0]);//数组的第一个元素

    

    //数组越界

    //a[5]

    

    //定义数组 和 取数组元素 的区别

    //1. 定义数组必须有数据类型

    //2.定义数组时,元素个数可以省略;取数组元素时,元素下标不能够省略

    

    //遍历数组中每个元素,并打印

    

    for (int i = 0; i <= 4; i++) {

        printf("a[%d] = %d\n", i, a[i]);

    }

    

    //对数组中得摸个元素赋值

    a[2] = 6;

    

    //定义一个具有20个元素 的 整型数组,每个元素的 取值范围是30-70之间

    int a[20] = {0};

    int sum = 0;

    for (int i = 0; i < 20; i++) {

        int temp = arc4random() % 41 + 30;

        //int n = 0;

        //if (n < 20) {

          //  a[n] = temp;

            //n++;

        //}

        a[i] = temp;

        sum =sum + temp;

        printf("a[%d] = %d\n", i, a[i]);

    }

    printf("sum = %d\n", sum);

    

    //复制一个数组,即两个数组容量一样,把其中一个数组的元素复制到另一个数组中

    int b[20] = {0};

    for (int i = 0; i < 20; i++) {

        b[i] = a[i];

        printf("b[%d] = %d\n", i, b[i]);

    }

    

    //生成2个数组,每个数组都有10个元素,元素取值范围20-40之间,数组对应元素相加,放到另外一个数组中

//    int a[10] ={0};

//    int b[10] = {0};

//    int c[10] = {0};

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

//        a[i] = arc4random() % 21 + 20;

//        b[i] = arc4random() % 21 + 20;

//        c[i] = a[i] + b[i];

//        printf("a[%d] = %d b[%d] = %d c[%d] = %d\n", i, a[i], i, b[i], i, c[i]);

//    }

    

    //冒泡排序

    int a[5] = {10, 2, 6, 8, 4};

    //外层循环控制比较的趟数(数组元素个数-1)

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

        //内层循环控制每趟比较的次数,两两比较

        for (int j = 0; j < 5 - 1 - i; 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("a[%d] = %d\n", i, a[i]);

    }

   

    //随机产生10个[20,40]的数,并对10个数从小到大排序

    

    int a[10] = {0};

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

        int temp = arc4random() % 21 + 20;

        a[i] = temp;

        printf("a[%d] = %d ", i, a[i]);

        }

    printf("\n");

    for (int i = 0; i < 9; i++) {

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

            if (a[j] > a[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

        }

    }

    printf("排序后\n");

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

        printf("a[%d] = %d ", i, a[i]);

    }

    printf("\n");

    

    

    //字符数组

    //写法一

    char string[6] = {‘i‘, ‘p‘ ,‘h‘ ,‘o‘ ,‘n‘ ,‘e‘};

    //写法二

    char string1[6] = "iphone";

    //住:两种写法是完全等价的

    

    //定义时没有赋值

    int a[5] = {1}; //整型默认是 0

    char s[5] = {‘i‘}; //字符型默认是‘\0’

    

    //字符数组的使用

    string[2] = ‘s‘;

    

    

    

    //遍历数组的每个元素,并打印

    char string[8] = {‘i‘, ‘p‘ ,‘h‘ ,‘o‘ ,‘n‘ ,‘e‘, ‘5‘, ‘s‘};

    for (int i = 0; i < 8; i++) {

        printf("string[%d] = %c\n", i, string[i]);

    }

    

    //%s打印字符数组(一般在数组末尾加上‘\0’)

    //string有6个元素,需要手动在数组最后加‘\0’

    //string1有7个元素,系统会自动在数组最后加上‘\0’

    

    //如果用%s打印string,由于没有‘\0‘,会造成数组越界

    char string[] = {‘i‘, ‘p‘ ,‘h‘ ,‘o‘ ,‘n‘ ,‘e‘};

    char string1[] = "1phone";

    

    char string3[6] = {‘i‘, ‘p‘ ,‘h‘ ,‘o‘ ,‘n‘ ,‘e‘};//有6个元素

    char string4[6] = "4phone";//有6个元素

    printf("string: %s\nstring1: %s\nstring3: %s\nstring4: %s\n", string, string1, string3, string4);

    

    //%s遇到‘\0’就停止

    string[2] = ‘\0‘;

    printf("string: %s\n", string);

    

    

    //strlen(const char *)

    //计算字符的长度函数

    //遇到‘\0‘就结束,并且‘\0‘不计入长度

    char string[10] = "I Love U";

    string[2] = ‘\0‘;

    unsigned long length = strlen(string);

    printf("length = %lu\n", length);

    

    

    //strcpy(字符串1, 字符串2)

    //字符串的拷贝

    //把字符串2中每一个元素依次拷贝到字符串1中,直到字符串2遇到‘\0‘结束

    //(*)字符串1要足够大,以防止越界

    char str1[10] = "I Love";

    char str2[10] = "you";

    strcpy(str1, str2);

    printf("str1:%s\n", str1);

    printf("str2:%s\n", str2);

    */

    //strcat(字符串1, 字符串2)

    

    //字符串拼接函数

    //从字符串1的第一个‘\0‘开始把字符串2的每个元素拼接到字符串1,直到字符串2遇到‘\0‘结束

    //注:字符串1的空间必须足够大,以防止越界

    

//    char str1[10] = "I Love";

//    str1[2] = ‘\0‘;

//    char str2[10] = "you";

//    strcat(str1, str2);

//    printf("str1:%s\n", str1);

//    printf("str2:%s\n", str2);

//    

    //strcmp(字符串1, 字符串2)

    //字符串比较函数

    //用字符串1中得每个元素 和 对应位置字符串2的元素 的ASCII值相减,如果为0,就继续比较;如果不为0,就停止比较,返回差值;当对应元素都是‘\0‘时,比较停止,返回结果0

//    char str1[10] = "ABC";

//    char str2[10] = "ABC";

//    int result = strcmp(str1, str2);

//    printf("result = %d\n", result);

//    

    

    

    

    return 0;

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。