【笔记】第六章 利用数组处理批量数据

主要内容

掌握一维、二维数组的定义和引用方法、存储结构和初始化方法

掌握有关一维数组的有关算法。

掌握数组的运算。

6.1 一维数组的定义和引用

 

6.2 二维数组的定义和引用

6.3 字符数组

 

6.1 一维数组的定义和引用

1、数组:

  是一组具有相同数据类型的数据的有序集合。

1、定义格式:

  类型说明符 数组名[常量表达式];

  类型说明符 数组名[常量表达式][常量表达式];

  常量表达式中可以包括常量符号常量,但不能包含变量。(没有vector!

 

2、一维数组在内存中的存放

(1)数组是一种引用数据类型。

  数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。

    数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。

    与所有引用变量相同的是,引用变量是访问真实对象的根本方式。也就是说,如果我们希望在程序中访问数组,则只能通过这个数组的引用变量来访问它。

    实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中。

(2)一维数组在内存中的存储示意图:

图4.2 数组在内存中的存储示意图

(3)二维数组中的元素在内存中的存放

  排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素…

 

4、引用方式:

  数组名[下标]

  数组名[下标][下标] 

    下标可以是整型常量或整型表达式。

 

5、一维数组 元素初始化 实现方法:

(1)在定义数组时对数组元素赋以初值。

  int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。

  int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)可以只给一部分元素赋值。

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

  int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

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

(3)全部元素值为0

  int a[10]={0,0,0,0,0,0,0,0, 0,0};    或  int a[10]={0};

(4)一维数组

  在对全部数组元素赋初值时,可以不指定数组长度。

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

(5)二维数组  

  如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

  int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

  int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

(6)字符数组

  除了以上方法外,还有“用字符串常量来使字符数组初始化”

    char c[]={″I  am  happy″};

    char c[]=“I am happy″; 它与下面的数组初始化等价

  若未进行初始化,则各元素的值不可预料。

  系统也可以按照初始化个数,确定数组长度(末尾无空字符)

 

6、字符数组

(1)字符串结束标志

  以字符′\0′作为字符串结束标志。′\0′代表ASCII码为0的字符,不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。

  用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

  如果有一个字符串,前面9个字符都不是空字符(即′\0′) ,而第10个字符是′\0′,则此字符串的有效字符为9个。

  系统对字符串常量也自动加一个′\0′作为结束符。

(2)若初始个数小于长度,则其余元素自动定为'\0'

  字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′。

(3)想用一个新的字符串代替原有的字符串,需要添加′\0′

(4)输入输出:

  ①逐个字符输入输出。用格式符“%c”输入或输出一个字符。

  ②将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。 

  如果一个字符数组中包含一个以上′\0′,则遇第一个′\0′时输出就结束。

(5)scanf:遇到空格或者换行暂停输入

  不用加地址符&,因为在C语言中数组名代表该数组的起始地址

  正确写法:scanf(″%s″,str);

(6)printf(″%d″,c); 输出数组c的起始地址

 

7、字符串处理函数

#include <string.h>

puts(str)---输出字符串 //与 printf("%s",str); 作用相同 
gets(str)---输入字符串
strlen(p) -取字符串长度

strcpy(p, p1)-复制字符串 
strncpy(p, p1, n)-复制指定长度字符串  
strcat(p, p1)-附加字符串 
strncat(p, p1, n)-附加指定长度字符串 
//“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是一个字符串常量。如strcpy(str1,″China″); 
//不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:
//str1=″China″;
//str1=str2;    

strcmp(p, p1)-比较字符串 
//如果字符串1=字符串2,函数值为0。
//如果字符串1>字符串2,函数值为一正整数。

strlwr(str)----转换为小写
strupr(str)----转换为大写

 

 

 其他知识点总结:

(1)

  %5d 表示所有数据右对齐,不足五位则空格补全

  %-5d 表示右对齐

 (2)四大排序

  1.冒泡排序

    for(j=0;j<n;j++)
        for(i=0;i<n-j;i++)
            if (a[i]>a[i+1]) swap(a[i],a[i+1]);

几种常见的排序方法 - 一y样 - 博客园 (cnblogs.com)

posted @ 2022-04-07 17:07  心若笺诗  阅读(162)  评论(0编辑  收藏  举报