C 程序设计教程(18)—— 数组和指针(一):数组

C 程序设计教程(18)—— 数组和指针(一):数组

在这里插入图片描述

该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。

一、一维数组

数组是一个由若干同类型变量组成的集合。数组由连续的存储单元组成,最低地址对应数组的第一个元素,最高地址对应数组的最后一个元素,数组可以是一维数组,也可以是多维数组。

1、一维数组的定义

在 C 语言中,数组必须显示定义,以便编译程序为它们分配存储空间。一维数组的定义形式如下:

类型 name[size];

说明:类型说明指明数组的类型,也就是数组中每一个元素的数据类型。

数组元素是组成数组的基本单元。数组元素也是一种变量,数组元素的一般形式如下:

数据名[下标]

其中:下标只能为整型常量或整型表达式,下标表示元素在数组中的序号。例如:

int i=1,j=1;
int a[10];
a[5]=10;
a[i+j]=8;
a[i++]=6;

数组元素也称为下标变量。

例如:输入 5 个数,求其平局值。程序如下:

#include<stdio.h>
int main() 
{
    
    
	int i;
	float a[5],sum=0;
	for(i=0;i<5;i++){
    
    
		printf("请输入第%d个数值:",i+1);
		scanf("%f",&a[i]);
		sum+=a[i];
	}
	printf("五个数的平均值为:%f",sum/5);
}

以上程序的运行结果如下:

在这里插入图片描述

说明:

(1)对变量的任何操作都适合于数组元素,因为数据元素本身等价于同一数据类型的变量。

(2)在定义数组时,下标不能使用变量,但在引用数组元素时下标可以使用变量。

(3)引用数组元素时下标不能超出范围。

2、一维数组的初始化

数组的初始化是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的,可以减少运行时间,提高效率。数组初始化的一般形式为:

类型说明符 数组名[常量表达式]={
    
    1,2, ..., 值n};

数组初始化可以采用以下几种形式:

(1)对所有数组元素赋值

例如:

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

(2)给部分数组元素赋值

例如:

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

给前 4 个数组元素赋值,后 6 个数组元素的值为 0。

(3)如果使一个数组全部的数组元素值为 0,可以使用如下格式:

int a[10]={
    
    0};

如果定义一个全局数组或静态数组,并且没有进行初始化,系统自动将所有数组元素赋值为 0。

(4)在对全部数组元素赋值时,可以不指定数组的长度,系统会自动计算长度。

例如:

int a[]={
    
    1,2,3,4,5};
//等价于
int a[5]={
    
    1,2,3,4,5};

3、一维数组的应用举例

(1)输出斐波那契(Fibonacci)数列的前 20 项

斐波那契数列有如下规律:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)。

程序如下:

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

以上程序的运行结果如下:

在这里插入图片描述

(2)输入10 个整数存入数组,求最大值

程序如下:

#include<stdio.h>
int main() 
{
    
    
	int a[10],i,max;
	for(i=0;i<10;i++){
    
    
		printf("请输入第%d个整数:",i+1);
		scanf("%d",&a[i]);
	}
	max=a[0];
	for(i=1;i<10;i++){
    
    
		if (max<a[i]){
    
    
			max=a[i];
		}
	}
	printf("10个整数中的最大值为:%d",max);
}

以上程序的运行结果如下:

在这里插入图片描述

二、二维数组

1、二维数组的定义

二维数组是以一维数组为元素构成的数组,定义形式如下:

类型 数组名[size1][size2];

二维数组在逻辑上是二维的,即下标在两个方向上变化,数组元素在数组中的位置也处于一个平面之中。但是,实际的硬件存储器确实连续输入的,也就是说存储单元是按一维(线性)排列的。

二维数组在内存中的存储方式有两种:一种是按行排列,即放完一行之后顺次放入第二行;另一种是按列排列,即放完一列之后再顺次放入第二列。在 C 语言中,二维数组是按行排列的。

二维数组可以看成一个一维数组,其中的每一个元素又是一个一维数组。例如:数据 a[3][4] 可以看成一个一维数组,它有 3 个元素:a[0]、a[1]、a[2],每个元素又是一个包含 4 个元素的一维数组。例如元素 a[0] 有 4 个元素:a[0][0]、a[0][1]、a[0][2]、a[0][3]。

2、二维数组的初始化

二维数组的初始化也是在数组定义时给各数组元素赋予初值。二维数组的初始化有以下几种形式:

(1)按行分段赋值

int a[3][5]={
    
    {
    
    33,44,55,66,77},{
    
    12,13,14,15,16},{
    
    101,102,103,104,105}};

(2)按行连续赋值

#include<stdio.h>
int main() 
{
    
    
	int a[3][5]={
    
    33,44,55,66,77,12,13,14,15,16,101,102,103,104,105};
	int i,j;
	for(i=0;i<3;i++){
    
    
		for(j=0;j<5;j++){
    
    
			printf("%8d",a[i][j]);
		}
		printf("\n");
	}
}

以上程序的运行结果如下:

在这里插入图片描述

(3)可以只对部分元素赋初值,为赋值的元素自动取值为 0

例如:

int a[3][3]={
    
    {
    
    1},{
    
    2},{
    
    3}};
//对每一行的第一个元素赋值,赋值的结果为
1  0  0
2  0  0
3  0  0

(4)如对全部元素赋初值,则第一维的长度可以不给出

例如:

int a[3][3]={
    
    1,2,3,4,5,6,7,8,9};
//可以写成以下格式
int a[][3]={
    
    1,2,3,4,5,6,7,8,9};

3、二维数组的应用举例

(1)一个学习小组有 5 位同学,每人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。成绩如下:

平均成绩
数学 80 61 59 85 76 72
C 语言 75 65 63 87 77 73
数据库 92 71 70 90 85 82

程序如下:

#include<stdio.h>
int main() 
{
    
    
	int a[3][5]={
    
    {
    
    80,61,59,85,76},{
    
    75,65,63,87,77},{
    
    92,71,70,90,85}};
	float v1[3]={
    
    0},avg=0;
	int i,j;
	for(i=0;i<3;i++){
    
    
		for(j=0;j<5;j++){
    
    
			v1[i]+=a[i][j];
		}
		v1[i]/=5;
	}
	printf("数学平均分为:%f\n",v1[0]);
	printf("C语言平均分为:%f\n",v1[1]);
	printf("数据库平均分为:%f\n",v1[2]);
	printf("各科总平均分为:%f\n",(v1[0]+v1[1]+v1[2])/3);
}

以上程序的运行结果如下:

在这里插入图片描述

(2)有一个矩阵,编写程序求出其中元素的最大值,以及其所在的行号和列号。

程序如下:

#include<stdio.h>
int main() 
{
    
    
	int a[3][4]={
    
    {
    
    1,2,3,4},{
    
    9,8,7,6},{
    
    -10,10,-5,2}};
	int i,j,max=a[0][0],row=0,col=0;
	for(i=0;i<3;i++){
    
    
		for(j=0;j<4;j++){
    
    
			if (max<a[i][j]){
    
    
				max=a[i][j];
				row=i;
				col=j;
			}
		}
	}
	printf("元素的最大值为:%d\n",max);
	printf("该元素位于第%d行第%d列。",row,col);
}

以上程序的运行结果如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/128770720