2022.1.18 C语言设计(第四版)谭浩强 第六章 利用数组处理批量数据

目录

一、数组

二、一维数组

1、一般形式

 2、引用

(1)表示形式

(2)引用区别(形式与含义)

 (3)一维数组初始化

三、二维数组/矩阵

1、一般形式

 2、引用

3、二维数组的初始化——初始化列表

四、字符数组

1、定义

2、字符数组的初始化

(1)初始化列表

(2)用字符常量来使字符数组初始化

3、引用字符数组中的元素

4、字符数组的输入输出

(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符;

(2)将整个字符串一次输入或输出。

(3)用printf函数输出字符串

(4)用scanf函数输入字符串。

 5、使用字符串处理函数

(1)puts函数——输出字符串的函数

(2)gets函数——输入字符串的函数

(3)strcat函数——字符串连接函数

(4)strcpy函数——字符串复制函数

(5)strncpy函数——字符串复制函数

(6)strcmp函数——字符串比较函数

(7)strlen函数——测字符串长度的函数

(8)strlwr函数——转换为小写的函数

(9)strupr函数+转换为大写的函数


一、数组

(1)数组是一组有序数据的集合。数组中个数据的排列是有一定规律的,下标代表数据在数组中的序号

(2)用一个数组名(如s)和下标(如15)来唯一确定数组中的元素

(3)数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中

二、一维数组

1、一般形式

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

(1)数组名的命名规则和变量名相同,遵循标识符命名规则。

(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素。注意,下标是从0开始的,这10个元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。

 (3)常量表达式中可以包括常量和符号常量,如“int a[3+5];”是合法的。不能包含变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

 2、引用

(1)表示形式

数组名[下标]

①a[0]就是数组a中序号为0的元素,他和一个简单变量的地位和作用相似

②下标可以是整型常量或整型表达式,如:a[o]=a[5]+a[7]-a[2 * 3]  (每一个数组元素都代表一个整数值)

(2)引用区别(形式与含义)

 (3)一维数组初始化

①定义

为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。

②方法——初始化列表

a、在定义数组时对全部数组元素赋予初值

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

🐖:将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表”。

b、可以只给数组中的一部分元素赋值

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

 🐖:花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0

c、如果想使一个数组中全部元素值为0,可以写成

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

int a[10]={0} ;

d、在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度

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

可以写成

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

🐖:若数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略

三、二维数组/矩阵

1、一般形式

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

①例如,float a[3][4],b[5][10];  定义a为3行4列的数组,b为5行10列的数组

②二维数组可以看作是一种特殊的一维数组,他的元素又是一个一维数组  

 ③二维数组元素排列顺序时按行存放,即在内存中先顺序存放第一行的元素,接着再存放第2行的元素。

 2、引用

二维数组元素的表示形式

数组名 [下标][下标]

① a[2][3] 表示a数组中序号为2的行中序号为3大的列的元素。下标应为整型表达式

②数组元素可以出现在表达式中,也可以被赋值,如  b[1][2]= a[2][3]/2

③在引用数组元素时,下标值应在已定义的数值大小范围内

    

      数组a可用“行下标”的范围为0~2,“列下标”的范围为0~3. 

3、二维数组的初始化——初始化列表

(1)分行给二维数组赋初值

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

🐖:这种赋初值方法比较直观,把第1个花括号内的数据给第1行的元素,第⒉个花括号内的数据赋给第2行的元素……即按行赋初值。

(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。

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

🐖:效果与前相同。但以第(1)种方法为好,一行对一行,界限清楚。用第(2)种方法如果数据多,则会写成一大片,容易遗漏,也不易检查。

(3)可以对部分元素赋初值。

①对各行第一列的元素赋初值

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

🐖:它的作用是只对各行第1列(即序号为0的列)的元素赋初值,其余元素值自动为0。

         赋初值后数组各元素为:

 ②对各行中的某一元素赋初值——适用于非0元素比较少的情况

int a[3][4]={{1},{0,6},{0,0,11}};

      赋初值后数组各元素为:

 ③只对某几行元素赋初值 

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

      赋初值后数组各元素为:

④只对部分元素赋初值而省略第1维的长度

int a[][4]一{{o,0,3},{ },{0,10}};

这样的写法,能通知编译系统;数组共有3行。数组各元素为

🐖:要分行赋初值。

 (4)对全部元素都赋初值

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};

🐖:定义数组时对第1维的长度可以不指定,但第2维的长度不能省。

系统会根据数据总个数和第⒉维的长度算出第1维的长度。数组一共有12个元素,每行4列,显然可以确定行数为3。

四、字符数组

1、定义

用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。

定义字符数组的方法与定义数值型数组的方法类似。例如:

char c[10];
c[0]='I'; c[1]=' '; c[2]='a'; c[3]='m'; c[4]=' ';c[5]='h'; c[6]='a'; c[7]='p'; c[8]='p';c[9]='y';

以上定义了c为字符数组,包含10个元素。赋值以后数组的状态如下图所示:

由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组它存放字符数据。

2、字符数组的初始化

(1)初始化列表

char c[10]={'I','’ ,'a' ,' m',' ','W','a','p','p,'y'};

把10个字符依次分别赋给c[0]~c[9]这10个元素。

①如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。

②如果花括号中提供的初值个数(即字符个数)大于数组长度﹐则出现语法错误。

③如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即\0')。

(2)用字符常量来使字符数组初始化

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

char c[]="I am happy";

等价于

char c[]={‘I’,‘ ’,‘a’,‘m’,‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’,‘.’,‘\0’};

字符串结束标志:在向内存中存储时,系统自动在最后一个字符'\n'的后面加了一个 '\0'  作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看下一个字符是否'\0',遇'\0'就停止输出。

字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’。是否需要加'\0',完全根据需要决定。由于系统在处理字符串常量存储时会自动加一个‘\0',因此,为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中也常常人为地加上一个'\0'。例如:
 

3、引用字符数组中的元素

#include <stdio.h>
int main()
{
    char c[15]={'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};
    int i;
    for(i=0;i<15;i十十)
    printf("%c" ,c[i);
    printf("\n");
    return 0;
}

4、字符数组的输入输出

(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符;

      例如:

                     
  (2)将整个字符串一次输入或输出。

      例如:

🐖:①用“%s"格式符,意思是对字符串(string)的输入输出。

         ②输出的字符串中不包括结束符'\0'

(3)用printf函数输出字符串

printf(“%s\n”,c);

        执行方式:按字符数组名c找到其数组起始地址,然后逐个输出其中的字符,直到遇'\0'为止。

              ①printf函数中的输出项是字符数组名,而不是数组元素名。

              ②如果数组长度大于字符串的实际长度,也只输出到遇'\0'结束

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

(4)用scanf函数输入字符串。

scanf("%s",c)

🐖:scanf函数中的输入项如果是字符数组名,就不需要加地址符&,因为在C中,数组名代表该数组的起始地址。

 5、使用字符串处理函数

⭐在使用字符串处理函数时,应当在程序开头用   #include<string.h>⭐

(1)puts函数——输出字符串的函数

(2)gets函数——输入字符串的函数

(3)strcat函数——字符串连接函数

(4)strcpy函数——字符串复制函数

(5)strncpy函数——字符串复制函数

(6)strcmp函数——字符串比较函数

       

 🐖说明:字符串比较的规则是:将两个字符串自左至右逐个字符相比(按 ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。
      (1)如全部字符相同,则认为两个字符串相等;
      (2)若出现不相同的字符,则以第1对不相同的字符的比较结果为准。

例如:
          "A”<"B",        "a">"A" ,              " computer">" compare" ,               " these">" that" ,

     "1A">" $ 20" ,         "CHINA">"CANADA",          "DOG"<"cat",            "Tsinghua">"TSINGHUA"
      如果参加比较的两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”。例如computer在字典中的位置在compare之后,所以" computer">"compare”。但应注意小写字母比大写字母“大”,所以"DOG"<"cat"。

比较的结果由函数值带回。
           (1)如果字符串1=字符串2,则函数值为0。

           (2〉如果字符串1>字符串2,则函数值为一个正整数。

           (3)如果字符串1<字符串2,则函数值为一个负整数。

(7)strlen函数——测字符串长度的函数

(8)strlwr函数——转换为小写的函数

(9)strupr函数+转换为大写的函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值