C语言_数组

本文介绍了数组的基础定义、初始化及常见操作,如遍历、排序和数组间元素复制。此外,还详细讲解了字符串的基本使用,包括输出、长度计算、拷贝、拼接和比较等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

一.数组的定义

    1.定义数组

      数据类型 变量名 = 初值

      类型修饰符 数组名 = {初始值1,初始值2,初始值3,...};

    

 定义了一个int类型,元素个数为5,数组名为array的数组

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

    数组下标(索引)的取值范围是0~元素个数-1

    printf("%d\n", array[0]);

    赋值

    array[3] =6;


    观察下面的一个数组,没有必要 ,因为这个数组只含有一个元素,可以直接定义一个变量

   int array1[] = {0};

    定义一个字符型数组,存储iPhone

    char string[] = {'i','P','h','o','n','e'};
     用来定义一个比较长的字符型数组

    char string1[] ="Program ended with exit code:";

    定义一个整型数组

    int array[5] = {1,3,5,7, 9};

    手动打印数组全部元素

    printf("%d ", array[0]);
    printf("%d ", array[1]);
    printf("%d ", array[2]);
    printf("%d ", array[3]);
    printf("%d ", array[4]);

    当想要赋值粘贴的时候,要马上想到使用循环

    遍历数组

   for (int i =0; i <5; i++) {
        printf("%d ", array[i]);
    }

   定义数组,长度不能是变量,只能是常量或者是常量表达式


例一:求数组元素的和 

    int a[20], b[20];
    // 定义一个累加器
    int sum = 0;
    // 为数组a元素赋值
    for (int i =0; i <20; i++) {
        a[i] = arc4random() % (70 - 30 + 1) + 30;
        printf("%d ", a[i]);
        // 计算i个元素的和
        sum = sum + a[i];
    }
    printf("数组a元素的和:%d\n", sum);


例二:将数组a的元素复制到数组b

    for (int i =0; i <20; i++) {
        b[i] = a[i];
        printf("%d ", b[i]);
    }

例三:将两个数组对应的元素和存储到另一个数组中

    // 定义两个数据源数组,一个目标数组
   int srcOne[10],srcTwo[10],dest[10];
    // 给三个数组赋值
   for (int i =0; i <10; i++) {
        // 元素取值范围20~4O之间
        srcOne[i] = arc4random() % (40 -20 +1) +20;
        //如果同时为两个元素个数相同的数组赋值,可以写在一个循环中
        srcTwo[i] = arc4random() % (40 -20 +1) +20;
        //将对应元素相加,存放在目标数组中
        dest[i] = srcOne[i] + srcTwo[i];
    }
    // 输出源数组srcOne
   for (int i =0; i <10; i++) {
        printf("%d ", srcOne[i]);
    }
    printf("\n");
    // 输出源数组srcTwo
   for (int i =0; i <10; i++) {
        printf("%d ", srcTwo[i]);
    }
    printf("\n");
    // 输出目标数组dest
   for (int i =0; i <10; i++) {
        printf("%d ", dest[i]);
    }
    printf("\n");


二.冒泡排序  

   int array[10] = {0};
    printf("排序前:");
   for (int i =0; i <10; i++) {
        // 给数组一个随机值, 取值范围是0-20
        array[i] = arc4random() % (20 -0 +1) +0;
        printf("%d ", array[i]);
    }
    printf("\n");
    //通常情况下,排序默认按照升序排列
    // 整个过程需要9次
   for (int i =0; i <10 -1; i++) {
        //将最大值推到数组的最后一个位置,比较次数为元素个数-1次
        //优化之路开始:将比较次数减少,减少的次数由 i决定
       for (int j =0; j <10 - i -1; j++) {
            // 需要判断, 前面的是否大于后面
           if (array[j] > array[j +1]) {
                // 如果前面大于后面的元素, 则交换位置
               int temp = array[j];
                array[j] = array[j +1];
                array[j +1] = temp;
            }
        }
    }
    printf("排序后:");
   for (int k =0; k <10; k++) {
        printf("%d ", array[k]);
    }

三. 字符串的基本使用

    char string[] ="iPhone4";

    1.对于字符串,有一个快捷的输出方式,就是以%s为转义字符进行输出

    2.需要注意的是,输出字符串时,表达式写数组名(就是字符数组的名字,并且不加方括号)

    3.%s后面的表达式需要给地址,&符号取出元素在内存当中的地址

    4. 数组名代表的就是首元素的地址, 可以近似的理解为string &string[0]恒等

    5.字符数组的两种创建方式最大的不同就是用双引号创建的字符数组后面自带一个'\0'


  sizeof计算的是所占空间大小

<p style="margin-top: 0px; margin-bottom: 0px; font-size: 18px; font-family: Menlo;"></p><pre name="code" class="objc">    printf("%lu\n",sizeof(string));// %lu代表的是无符号的长整形
    printf("%s\n", string);

    printf("%s\n", &string[2]);

 
  

  输出字符串 

   for (int i =0; i <7; i++) {
        printf("%c", string[i]);
    }

    printf("%s\n", &string[0]);


例一:测试求字符串长度的函数(系统自带)

    printf("字符串长度测试函数");
    // strlen的参数需要写地址(1.可以直接写数组名 2.写&string[0])
    // strlen的返回结果为字符串的长度,类型为unsigned long
    unsigned long length = strlen(&string[0]);
    printf("length = %lu\n", length);


例二:字符串拷贝    

    printf("字符串拷贝函数测试:\n");
    // strcpy(dest, src) 从src拷贝到dest
    // 需要注意的地方目标数组的容量一定要大于等于数组原数组的长度
    //两个参数都需要写地址
   char dest[7] = {0};
    strcpy(dest, string);
    printf("%s\n", dest);

    

例三:字符串的拼接   

    printf("字符串拼接函数测试:\n");
    // strcat(dest, src)
    //需要注意的地方:注意目的数组的空间一定要大于等于两个数组之和
   char apple[12] ="Apple";
    strcat(apple, string);
    printf("%s\n", apple);

  

例四:字符串的比较   

    printf("字符串比较函数测试:\n");
    // strcmp()
    // 'A' 65,  'a' 97, '0' 48
    printf("%d\n", strcmp("iPhone","iPhone"));

    

例五:将一个字符数组反向转换   

    // 定义一个char类型的数组
   char a[]="abcdef";
    //获取字符串的长度
   unsignedlong length = strlen(a);
    // 循环 将第i个字符与第length - i - 1个字符交换
   for (int i =0; i < length - i -1; i++) {
        // 如果i小于length - 1 - 1, 就交换
       char temp = a[i];
        a[i] = a[length - i -1];
        a[length - i -1] = temp;
    }
      // 打印字符串
        printf("%s",a);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值