数组简单介绍

C语言中的数组详解
本文主要介绍了C语言中的数组,包括一维数组的定义、引用、初始化和应用,二维数组的定义、引用、初始化及程序实例,以及字符数组的定义、初始化、字符串处理及其在输入输出中的应用。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

—C语言提供构造类型的数据,它们有数组类型,结构体类型,共用体类型。
本文章仅介绍数组。数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来惟一地确定数组中的元素。

一、一维数组

一维数组的定义方式

类型说明符 数组名【常量表达式】;
例如:int a【10】;
它表示定义了一个整型数组,数组名为a,此数组有10个元素。(每个数组元素相当于一个整型变量)

一维数组元素的引用

数组名【下标】(下标可以是整型常量或整型表达式。)
数组必须先定义,再使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。(数组元素序号从0开始)
例如:
#include < stdio . h >
void main ()
{
int i , a [10]; /定义数组长度为10/
for ( i =0;i<=9; i 十十)
a [ i ]= i ;
for ( i =9; i >=0; i ーー)
printf ("% d “, a [ i ]);
printf (”\ n ");
}
运行结果如下:
9 8 7 6 5 4 3 2 1 0
程序使 a [ o ]~ a [9]的值为0~9,然后按逆序输出。

一维数组的初始化

(1)在定义数组时对数组元素赋予初值。
例如:int a[5]={0,1,2,3,4};
(2)可以只给一部分元素赋值。
例如:int a[5]={0,1,2};
表示只给前面的3个元素赋初值,后面的2个元素初值为0
(3)在对全部数组元素赋初值时,由于数组个数已经确定,可以不指定长度。
例如:
int a[5]={0,1,2,3,4};
可改成
int a[ ]= {0,1,2,3,4};

一维数组应用举例

起泡法对10个数排序
#include <stdio.h>
void main()
{
int a[10];
int i,j,t;
printf(“input 10 numbers :\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");
}
运行情况如下:
input 10 numbers:
1 0 4 8 12 65 -76 100 -45 123
the sorted numbers:
-76 -45 0 1 4 8 12 65 100 123

二、二维数组

二维数组的定义

类型说明符 数组名【常量表达式】【常量表达式】;
例如:float a[3][4]; (表示a为3*4的数组,即3行4列。)

C语言中,二维数组中元素排列的顺序是按行存放的。即内存中先存放第一行元素,再存放第二行元素。

二维数组的引用

数组名【下标】【下标】 (下标可以是整型常量或整型表达式。)
行序号和列序号均从0算起。

二维数组的初始化

(1)分行给二维数组赋初值。
例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)将所有数据写在一个花括号内,按数组排列顺序对各元素赋初值。
例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
效果与(1)相同,但(1)更加直观,不容易遗漏。
(3)可对部分元素赋初值。
例如:int a[3][4]={{1},{2},{3}};
此表示只给第一列元素赋初值,其余元素值为0.
(4)若对全部元素赋初值,则定义数组时对第一位长度可以不指定,但第二维长度不能省。

二维数组程序举例

(1)将二维数组行列互换,存到另一个二维数组中。
#include <stdio.h>
void 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][i]);
b[¡][i]=a[i][i];
}
printf("\n");
}
printf(“array b:\n”);
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf(”%5d",b[i][j]);
printf("\n”);
}
}
运行结果如下:
array a:
1 2 3
4 5 6
array b:
1 4
2 5
3 6
(2)一个3*4的矩阵,要求编程求出其中最大的那个元素的值,以及其所在的行号和列号。
#include<stdio.h>
void main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{一10,10,一5,2}};
max=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,row=%d,colum=%d\n”,max,row,colum);
}
输出结果为:
max=10,row=2,colum=1

三、字符数组

字符数组的定义

用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。
例如:char c[5];
c[0]=‘h’;c[1]=‘a’;c[2]=‘p’;c[3]=‘p’;c[4]=‘y’;

字符数组的初始化

字符初始化最易理解的方式是逐个字符赋给数组中的个元素。
如果提供的初值格式与预定的数组长度相同,在定义时可以省略数组长度。

(1)初值个数>数组元素,语法错。
(2) 初值个数<数组元素,未赋值默认‘\0’。

字符串和字符串结束标志

在C语言中,将字符串作为字符数组来处理的。将字符’ \0’作为字符串结束标志。
用字符串常量来使字符数组初始化
例如:char c[ ]={“I am happy”};

char c[ ]=“I am happy”; (字符串常量最后由系统自动加上一个‘ \0’,长度会加一)
为了使处理方法一致,便于测定字符串实际长度,以及在程序中作相应的处理,字符数组中也常常人为得加上一个’\0’。

字符数组的输入输出

输入输出方法
(1)逐个字符输入输出。(使用格式符“%c”)
(2)将整个字符串一次输入或输出。(使用格式符“%s”)
例如:char c[ ]={“luck”};
printf("%s",c); /‘c’为字符数组名/

(1)输出字符不包括结束符‘\0’。
(2)数组长度>实际长度,输出遇到’\0‘结束。(若其中包含一个以上“\0’,则遇到第一个时就结束。)
(3)可以使用scanf函数输入字符串。
例如:scanf("%s",c); /‘c’为字符数组名/
如果用scanf函数输入多个字符串,在输入时用空格分隔。
scanf函数输入项如果是字符数组名,不再加地址符&,因为C语言中数组名代表该数组的起始地址。

字符串处理函数

puts(字符数组) 输出
gets(字符数组) 输入
strcat(字符数组1,字符数组2) 将两个字符串连接
strcpy(字符数组1,字符串2) 将2复制到1
strncpy(字符数组1,字符串2,2) 将2中的前两个字符,取代1中的前两个字符。
strcmp(字符串1,字符串2) 比较1和2,从左至右,按ASCII码值大小比较。
strlen(字符数组) 测试字符串实际长度,不包括’\0’。
strlwr(字符串)将字符串中大写字母换成小写字母。
strupr(字符串) 将字符串中小写字母换成大写字母 。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值