《C语言程序设计》 课件 蔡玲芳 第六章 数组_第1页
《C语言程序设计》 课件 蔡玲芳 第六章 数组_第2页
《C语言程序设计》 课件 蔡玲芳 第六章 数组_第3页
《C语言程序设计》 课件 蔡玲芳 第六章 数组_第4页
《C语言程序设计》 课件 蔡玲芳 第六章 数组_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一维数组的定义与初始化1.一维数组的定义类型说明符数组名[正整型常量表达式]

;类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。说明floatmark[100]; char str[200];int a[10];例如:1.一维数组的定义存储学生成绩用实型数组例如:mark[100],存储一行文字用字符数组str[200],存储一个4*6的矩阵用二维整型数组a[4][6]。其中mark、str、a是数组名。方括号内是数组的长度。下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。数组的成员称为数组元素。数组元素的类型称为该数组的基类型。数组mark的基类型是float,数组str的基类型是char。1.一维数组的定义说明:(1)数组名后是用方括号而不是圆括号。(2)数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。如:inta[0],d(6);/*错误*/intb[-8];/*错误*/intc[2+3];/*正确*/1.一维数组的定义(3)C语言中不允许使用变量对数组的大小进行定义。数组的说明语句必须在可执行语句之前。#define N 5int a[N];int n;scanf(“%d” , &n );{int

a[n];……}int

n=10,a[n];2.一维数组的初始化在数组定义时为数组元素赋初值称为数组初始化。(1)对全部元素初始化。方法:将初值依次写在花括号{}内。如:

inta[5]={2,4,6,

8,10

};存储形式:存储单元2.一维数组的初始化(2)给数组中部分元素赋初值,其他元素按零值处理。例int

a[9]={1,2};则a[0]=1, a[1]=2,a[2]~a[8]值全为0。(3)对数组元素全部赋值可以不指定长度。例int a[]={0,1,2,3,5};等价于:int

a[5]={0,1,2,3,5};(4)一维数组赋初值的个数不能超过数组总元素的个数。例int

a[3]={1,2,3,4};语法错!感谢观看一维数组的引用引用C语言规定,只能引用单个数组元素,不能一次引用整个数组。数组元素的引用形式: 数组名[下标] 如a[3]下标指出在数组中第几个元素下标可以是整型常量、整型变量或整型表达式。如:a[3]=a[0] +a[i+1];下标的值是数组元素的序号,且从0开始,直到n-1.int a[10], 说明数组a一共有10个元素,起始值是0。数组a的10个元素分别是:a[0]、a[1]、…、a[9]。注意区分数组的定义和数组元素的引用。一维数组的输入输出可以对数组中任何一个元素进行单独的输入输出,每个元素等同于一个普通变量。数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。(1)数组元素输入main(){ charas[26];inti

;for(i=0;i<26;i++)scanf("%c",&as[i]);…...}(2)⑵

数组元素输出main(){charas[26];inti

;for(i=0;i<26;

i++)printf("%c",as[i]);…...}控制下标是关键引用数组元素的注意事项:数组中的每个元素在功能上等价于一个一般的变量x。例如:输入100个学生成绩,并求出总成绩。float x, sum=0; 简单变量for (i=0; i<100; i++){ scanf(”%f”, &x);sum += x;}float m[100],sum=0;for ( i=0; i<100; i++ ){ scanf(”%f”, &m[i]);sum += m[i];}数组方式优点:数据重用数据有序856385148summ[0]m[1]m[2]m[99]82

85

63

78 9085148226316sum

7950827950下标与地址的关系[]为下标运算符,数组名、数组元素是两种不同性质的数据。数组名是数组的首地址,是一个地址常量。数组元素则是数值。引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的内容进行操作。如引用

mark[2]:(1)计算2000+2*4=2008(2)取出2008的内容2000H86.5mark[0]2004H92.0mark[1]2008H77.5mark[2]200CH52.0mark[3]218CH94.0mark[99]如何使两个数组的值相等解决方法:方法1:

逐个元素赋值b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];方法2:

通过循环赋值int i;for

(i=0;i<4;i++){b[i]=

a[i];}原因:数组名b表示数组的首地址,即b[0]的地址,其值不可改变,不能被赋值!main(){inta[4]={1,2,3,4},

b[4];b=

a;}如何使两个数组的值相等从键盘上输入10个实型数存入数组,然后按输入顺序的逆序输出这10个数。例#include

<stdio,h>main(){float

a[10];int

i;for(i=0;i<10;

i++)scanf("%f",&a[i]);for(i=9;i>=0;i--)printf("%10.2f",a[i]);}对数组元素赋值逆序输出数组元素[例] 从键盘上输入10个数,求出其中最大值并输出。算法分析:采用打擂台的方法,先把10个数存在数组中。任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主一定是最大的数。例:

#include<stdio.h

>main(){int

a[10],i,max;for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<10;i++)if(a[i]>max)

max=a[i];printf("max=%d\n",max);}指定第1个元素为擂主感谢观看二维数组的定义与初始化1.二维数组的定义定义二维数组的一般方式:类型说明符

数组名[常量表达式1][常量表达式2];第一个下标表示行数第二个下标表示列数Inta[3][3];例a

a00a01a02a10a11a12a20a21a221.二维数组的定义存储形式:二维数组在内存中按行的顺序存放,即先存放第一行的元素,再存放第二行的元素。

例:Floata[3][4];1.二维数组的定义

说明:二维数组除了维数比一维数组多一维外,其它性质与一维数组全部类似。二维数组定义中的常见错误①

int

a[0][3];用于定义数组长度的常量表达式的值必须是大于0的正整数。②

int i=3 , j=4 ;

int a[i][j];定义数组元素的个数必须使用常量表达式,而不能使用变量。2.二维数组的初始化分行给二维数组赋初值。(1)将所有数据写在一个{

}内,按顺序赋值。(2)如:int

a[2][3]={{2,3,1},{1,2,3}};

2

3

1

a

1 2 3即按数组元素在内存中排列的顺序赋初值。如:int

a[2][3]={2,3,1,1,2,3};2.二维数组的初始化对部分元素赋值(3)inta[3][3]={{1},{

},{0,0,1}};相当矩阵int

a[2][3]={{5,6},{7,8}};相当矩阵:

5 6 0

8

70

0

5 6 7

8 0

int

a[3][3]={{1},{0,1},{0,0,1}};相当矩阵:int

a[2][3]={5,6,7,8};相当矩阵:1000100011000000012.二维数组的初始化对数组全部元素赋初值(4)第一个下标可省略,但第二个下标不可省略。

例:a[3][4]={{0,1,3,1},{2,1,0,2},{1,1,2,0}};可写成a[][4]={0,1,3,1,2,1,0,2,1,1,2,0};感谢观看二维数组的引用

二维数组的引用与引用一维数组元素一样,也用下标法引用二维数组元素。

二维数组元素表示形式:数组名[下标1][下标2]下标1和下标2是整型常量、整型变量或整型表达式。其编号从0开始的。注意下标不要越界!276.3.2二维数组的引用例:若

inta[2*5][3*4],i=15;则使用

a[3*3][0],a[1][i-5]都是合法的。说明:数组名a代表的是数组a在内存中的首地址,可以用数组名a来代表数组元素a[0][0]的地址。数组名是常量,不可对它赋值。286.3.2二维数组的引用inta[2][3],i,j;for(i=0;i<2;i++)for(j=0;j<3;

j++)scanf("%d",

&a[i][j]);29inta[2][3],i,j;for(i=0;i<2;i++)for(j=0;j<3;

j++)printf("%5d",

a[i][j]);二维数组的输入和输出:采用两重循环方式进行。1. 二维数组的输入 2. 二维数组的输出6.3.2二维数组的引用感谢观看二维数组程序示例[例1]

将一个矩阵a

2×3转置存到另一个矩阵b

3×2中。

3 6

1 2 3

4 5 6

a

b

2

5

1 4

分析:用数组a、b分别代表矩阵a、b;a

数组的行数必须要等于b

数组的列数。执行:b[j][i]=a[i][j];

即可完成转换。涉及到两个下标的,一般用两重循环。6.3.3二维数组程序示例#include<stdio.h

>intmain(

){int

a[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(“arraya:\n”);for(i=0;i<2;

i++){ for(j=0;j<3;

j++){printf("%5d",

a[i][j]);b[j][i]=a[i][j];

}printf("\n");}printf("arrayb:

\n");for(i=0;i<3;

i++){ for(j=0;j<2;j++)printf("%5d",b[i][j]);printf("\n");

}return

0;}

运行结果如下:array

a:1 2 34 5 6array

b:1 42 53 633#include<stdio.h

>intmain(

){ inti,j,row=0,colum=0,

max;int

a[3][4]={{1,2,3,4},{9,7,4,6},{-1,2,0,8}};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);return0;}运行结果:

max=9,row=1,colum=0[例2] 求3×4矩阵中最大元素的值及其所在行和列号。

8

1 2

1 2 3 4

a

9 7 4 6

0[例3] 求方阵A4*4的转置阵,并将该转置阵输出array

a:1 2 3 45 6 7 89 10 11 1213 14 15 16rotated

a:1 5 9 132 6 10 143 7 11 154 8 12 16矩阵转置算法1:for(i=0;i<4-1;i++)for(j=i+1;j<4;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t; }矩阵转置算法2:for(i=1;i<4;i++)for(j=0;j<i;j++){ t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}程序运行演示感谢观看字符数组的定义用来存放字符数据的数组是字符数组。 C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。格式:char

数组名[常量表达式]例:char

c[6];C 数组具有6个元素,可以存放长度等于或小于5的字符串。6.4.1字符数组的定义CHINA\039强调:字符串实际占有单元的数量等于字符串长度+1。定义时应注意考虑元素总个数应比实际长度多1。字符串的存储例:char

c[6]=“CHINA”;该数组在计算机中存储的形式为串长=5c[0] c[1] c[2] c[3] c[4] c[5]感谢观看字符数组的初始化CHINA\042c[0]c[1]c[2]c[3]c[4]c[5]1.用单个字符对字符数组初始化例如:charc[6]={‘C’,‘H’,‘I’,‘N’,‘A’,’\0’};把5个字符分别赋给c[0]到c[4]。在内存中存放情况:串长=56.4.2字符数组的初始化说明:43(1)

初值的个数不能超过数组元素的个数,否则语法错初值的个数小于数组长度,系统自动添入结束符‘\0’

初值的个数与数组元素相等,定义时可省略长度

因字符串常量自动加\0,因此常人为地在字符数组后加一个‘\0’。2. 用字符串常量对字符数组初始化:[例]44(1)charch[6]={"CHINA"};(2)charch[6]="CHINA";/* 省略 { } */(3)charch[]

="CHINA";/*

省略长度值

*/(4)chard[12]="How are you"与 char

d[]={‘H’,’o’,’w’,‘

‘,’a’,’r’,’e’,‘

‘,’y’,’o’,’u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论