04-数组

 数组:相同数据类型的成员组成的一组数据

  数组是一种构造类型,相同数据类型组成的新数据类型。

  数组的每一个成员成为一个数组元素。

 

// 一维数组的定义

// 数组类型 数组名[常量表达式] = {1,值2...};

// 例如:

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

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

int c[5] = {0};

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


float e[] = {2.123, 4.432, 6.34};

char f[] = {'i', 'P', 'h', 'o', 'n', 'e'};

char g[] = "iPad";


// 注意这里!!!!!!!

int aa = 10;

int bb[aa]; // 定义数组的时候,中括号内部的数字可以是常量,可以是宏定义,但是不可以是变量,是变量不报错可能是XCode的原因。要注意这一点



// 数组元素的访问

// 通过 '数组名+下标' 的方式

// 数组下标:数组元素在数组中的序号。从0开始,到数组总个数-1


// 数组注意事项

// 注意区别 定义数组 和 数组元素 的区别

int h[10];

h[9];

// 二者区别:定义数组,数组名前有类型修饰符。数组元素,不带类型修饰符。



// 练习1

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

int array1[20] = {0};

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

    int random = arc4random() % (70 - 30 + 1) + 30;

    array1[i] = random;

    // printf("%d ", array1[i]);

}

int sum = 0;

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

    sum += array1[i];

}

// printf("sum = %d", sum);



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

int array2[5] = {10, 24, 32, 5, 23};

int array3[5] = {0};

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

    array3[i] = array2[i];

}

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

    // printf("%d ", array3[i]);

}



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

int array4[10] = {0};

int array5[10] = {0};

int array6[10] = {0};

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

    int random1 = arc4random() % (40 - 20 + 1) + 20;

    array4[i] = random1;

    int random2 = arc4random() % (40 - 20 + 1) + 20;

    array5[i] = random2;

}


// 把前两个

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

    array6[i] = array5[i] + array4[i];

}

// 打印结果

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

    // printf("%d + %d = %d\n", array4[i], array5[i], array6[i]);

}




  注意事项:

  系统不会检测数组元素的下标是否越界,编程时,必须保证数组下标不能越界。

  数组是一个整体,不能直接参加运算,只能对单个元素进行处理,通常用到数组的地方都会用到循环。

 





// 数组排序

// 排序种类:冒泡排序、选择排序、插入排序、归并排序等等

// 我们下面只说一种冒泡排序,感兴趣的同学自己去研究其他的排序方法

// 冒泡排序涉及到双循环,外层循环控制趟数,内层循环控制比较次数


// 练习2

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

int arr[10] = {0};

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

    int random = arc4random() % (40 - 20 + 1) + 20;

    arr[i] = random;

}

// 排序前打印

printf("排序前:\n");

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

    // printf("%d ", arr[i]);

}

// 排序

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

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

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

            int temp = arr[j];

            arr[j] = arr[j + 1];

            arr[j + 1] = temp;

        }

    }

}

// 排序后

printf("\n排序后:\n");

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

    // printf("%d ", arr[i]);

}





// 字符数组

// 用于存放字符变量的数组称为字符数组

// 字符数组属于一维数组,定义方式与普通一维数组相似,只是类型是char

char iphone1[] = {'i', 'P', 'h', 'o', 'n', 'e', '\0'};

// 或者

char iphone2[] = "iPad";

// 打印字符数组,也就是字符串

printf("%s\n", iphone1);

printf("%s\n", iphone2);



// 系统给我们提供了很多处理字符串的函数

// 1. 计算字符串的长度

unsigned long length = strlen(iphone1);

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

// 2. 字符串拷贝

char iphone3[10];

strcpy(iphone3, iphone1);

printf("iphone3 = %s\n", iphone3);

// 3. 字符串拼接

strcat(iphone3, iphone2);

printf("iphone3 = %s\n", iphone3);

// 4. 字符串比较

int result =  strcmp(iphone1, iphone3);

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




// 练习4 查找空格个数

// 使用for循环解决问题

int count = 0;

char str[] = "I love iOS, i want an iPhone5s";

for (int i = 0; i < strlen(str); i++) {

    if (str[i] == ' ') {

        count++;

    }

}

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


// 使用while循环解决问题

int i = 0, num = 0;

while (str[i] != '\0') {

    if (str[i] == ' ') {

        num++;

    }

    i++;

}

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




// 练习5: 将字符串倒转:

char name[] = "1234";

// printf("倒转之前:%s\n", name);

unsigned long nameLength = strlen(name);

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

    char temp = 0;

    temp = name[i];

    name[i] = name[nameLength - i - 1];

    name[nameLength - i - 1] = temp;

}

// printf("倒转之后:%s\n", name);


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值