第六章 利用数组处理批量数据

  1. 数组是一组有序数组的集合。
  2. 用一个数组名和下标来唯一地确定数组中的元素,如s[15]。
  3. 数组中的每一个元素都属于同一个数据类型。

6.1 怎样定义和引用一维数组

怎样定义一维数组

定义一维数组的一般形式为
类型说明符 数组名[常量表达式];

说明:
数组名的命名规则和变量名相同, 遵循标识符命名规则。
⑵在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。下标是从0开始的。 指定a[10],不存在数组元素a[10]。
⑶常量表达式中可以包括常量和符号常量,如"int a[3+5];"是合法的。不能包含变量,如"int a[n];"是不合法的。

怎样引用一维数组元素
只能引用数组元素而不能一次整体调用整个数组全部元素的值。只能一个个调用数组元素。

对10个数组元素依次赋值为0,1, 2, 3, 4, 5, 6, 7 ,8, 9,要求按逆序输出。

#include <stdio.h>
int main()
{
int i,a[10];
for(i=0;i<=9;i++)
  a[i]=i;
for(i=9;i>=0;i--)
  printf("%d",a[i]);
printf("\n");
return 0;
}

一维数组的初始化

  1. 在定义数组时对全部数组元素赋予初值。
int a[10]={0,1,2,3,4,5,6,7,8,9};
  1. 可以只给数组中的一部分元素赋值。
int a[10]={0,1,2,3,4};
/*这表示只给前面5个元素赋初值,
系统自动给后5个元素赋初值为0。*/
  1. 如果想使一个数组中全部元素值为0
int a[10]={0,0,0,0,0,0,0,0,0,0};
//或
int a[10]={0}; 
//未赋值的部分元素自动设定为0
  1. 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
int a[5]={1,2,3,4,5};
//可以写成
int a[]={1,2,3,4,5};

说明:
如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被"初始化列表"指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初始化为’\0’,如果是指针型数组,则初始化为NULL,即空指针。

起泡法排序
有10个地区的面积,要求对它们按由小到大的顺序排列。

#include <stdio.h>
int main()
{
int a[10];
int i,j,t;
printf("input 10numbers:\n");
for(i=0;i<10;i++)
  scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
  for(i=0;i<9-j;i++)
    if(a[i]>a[i+1])
    {t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
  printf("%d",a[i]);
printf("\n");
return 0;
}

怎样定义和引用二维数组

怎样定义二维数组

二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];

float a[3][4]; //定义a为3×4(3行4列)的数组
//也可以理解为三个一维数组
float a[0],a[1],a[2];

C语言中,二维数组中元素排列的顺序是按行存放的。在内存中,各元素是连续存放的,不是二维的,是线性的。

怎样引用二维数组的元素

二维数组元素的表现形式为
数组名[行下标][列下标]
下标应是整型表达式,且在已定义的数组大小的范围内。

二维数组的初始化

  1. 分行给二维数组赋初值。
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  1. 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  1. 可以对部分元素赋初值。
int a[3][4]={{1},{5},{9}};
//只对各行第1列元素赋初值,其余元素值自动为0。
1 0 0 0
5 0 0 0
9 0 0 0

int a[3][4]={{1},{0,6},{0,0,11}};
//对各行中的某一元素赋初值
1 0 0 0
0 6 0 0
0 0 11 0
/*这种方法对非零元素少时比较方便,
只需输入少量数据。*/

int a[3][4]={{1},{5,6}};
//也可以只对某几行元素赋初值
1 0 0 0
5 6 0 0
0 0 0 0
//第3行不赋初值
//也可以对第2行不赋初值
int a[3][4]={{1},{},{9}};
  1. 如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一1维的长度可以不指定,但第2维的长度不能省。
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维的长度,但应分行赋初值。

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

将一个二维数组行和列的元素互换,存到另一个二维数组中。

#include <stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{
  for(j=0;j<=2;j++)
  {
  printf("%5d",a[i][j]);
  b[j][i]=a[i][j];
  }
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{
  for(j=0;j<=1;j++)
    printf("%5d\n",b[i][j]);
  printf("\n");
}
return 0;
}
//运行结果:
array a:
    1    2    3 
    4    5    6
array b:
    1    4
    2    5
    3    6

打擂台算法
有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

#include <stdio.h>
int main()
{
int i,j,row,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};  //定义数组并赋初值
max=a[0][0];  //先认为a[0][0]最大
for(i=0;i<=2;i++)  
  for(j=0;j<=3;j++)    
    if(a[i][j]>max)    
    {    
      max=a[i][j];    
      row=i;    
      colum=j;    
     } 
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);    
return 0;
}
//运行结果:
max=10
row=2
colum=1

6.3 字符数组

C语言中没有字符串类型,也没有字符串变量,字符串是从存放在字符型数组中的。

怎样定义字符数组

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

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

int c[10];
c[0]='a';  //合法,但浪费存储空间

字符数组的初始化

  1. “初始化列表”,把各个字符依次赋给数组中各元素。
char c[10]={'I','','a','m','','h','a','p','p','y'};

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的字符个数大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即’\0’)。

  1. 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。用这种方式可以不必人工去数字符的个数,尤其在赋初值的字符个数较多时,比较方便。

  2. 也可以定义和初始化一个二维字符数组。

怎样引用字符数组中的元素

输出一个已知的字符串

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

在这里插入图片描述
字符串和字符串结束标志
在遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串。它本身不算有效字符。

注意:
C系统占用字符数组存储字符串常量时会自动加一个’\0’作为结束符。例如"C program"共有9个字符。字符串是存放在一维数组中的,在数组中它占10个字节,最后一个字节’\0’是由系统自动加上的。

用字符串常量来使字符数组初始化

char c[]={"I am happy"};
//也可以省略花括号,直接写成
char c[]="I am happy";
//此时数组c的长度不是10,而是11。

字符数组的输入输出
⑴逐个字符输入输出。用格式符"%c"输入或输出一个字符。
⑵将整个字符串一次输入输出。用"%s"格式符。

char c[]={"China"};
printf("%s\n",c);
//在内存中数组c的存储情况为China\0
//输出时遇到'\0'停止输出,结果是China

说明:
⑴输出的字符中不包括结束符’\0’。
⑵用"%s"格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
⑶如果数组长度大于字符串的实际长度,也只输出到遇’\0’结束。

char c[10]={"China"};
//字符串长度为5,连'\0'共占6个字节。
printf("%s\n",c);

⑷如果一个字符数组中包含一个以上’\0’,则遇第一个’\0’时输出就结束。
⑸可以用scanf函数输入一个字符串。输入的字符串应短于已定义的字符数组的长度。

char c;
//从键盘输入:
China
//系统会自动在China后面加一个'0'结束符。

如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔。

char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
//输入数据:
How are you?

在这里插入图片描述
使用字符串处理函数

  1. puts和gets函数只能输出和输入一个字符串。
  2. strcat函数——字符串连接函数
    在这里插入图片描述
  3. strcpy和strncpy函数——字符串复制函数
    在这里插入图片描述
    在这里插入图片描述
  4. strcmp函数——字符串比较函数
    在这里插入图片描述
    在这里插入图片描述
  5. strlen函数——测字符串长度的函数
    在这里插入图片描述
  6. strupr函数——转换为大写的函数

注意:在使用字符串处理函数时,应在程序文件的开头用#include <string.h>把string.h文件包含到本文件中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值