您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第06章C语言程序设计教程电子教案
为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型──数组。6.11维数组的定义和引用6.22维数组的定义和引用6.3字符数组与字符串[Return]第6章数组6.11维数组的定义和引用6.1.11维数组的定义6.1.21维数组元素的引用6.1.31维数组元素的初始化6.1.41维数组应用举例[Return]6.1.1维数组的定义一维数组的定义inta[5];|||连续的单元个数数组名(要满足变量的定义)/*ex58_1.c一维数组的定义和赋值。main(){inti;inta[10];for(i=0;i10;i++)a[i]=i;for(i=0;i10;i++)printf(%2d,i);getch();}运行结果:0123456789演示//ex59.c一维数组各元素赋值,输出。main(){inta[10],i;for(i=0;i10;i++)a[i]=i+1;/*给各元素赋值*/for(i=0;i10;i++)a[i]*=10;/*给各元素赋值*/for(i=0;i10;i++)printf(a[%d]=%d\n,i,a[i]);/*输出各元素的值*/getchar();}运行结果:a[0]=10a[1]=20a[2]=30a[3]=40a[4]=50a[5]=60a[6]=70a[7]=80a[8]=90a[9]=100演示//ex60.c键盘输入(给数组赋值).main(){inta[10],i;printf(“input10number:);for(i=0;i10;i++)scanf(%d,&a[i]);for(i=0;i10;i++)printf(a[%d]=%d\n,i,a[i]);getchar();getchar();}演示/*运行结果:Input10number:2(ENTER)3(ENTER)4(ENTER)5(ENTER)6(ENTER)7(ENTER)8(ENTER)9(ENTER)10(ENTER)a[0]=1a[1]=2a[2]=3a[3]=4a[4]=5a[5]=6a[6]=7a[7]=8a[8]=9a[9]=10数组同变量一样,也必须先定义、后使用。1维数组是只有1个下标的数组,定义形式如下:数据类型数组名[常量表达式][,数组名2[常量表达式2]……];(1)“数据类型”是指数组元素的数据类型。(2)数组名,与变量名一样,必须遵循标识符命名规则。(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。注意:C语言中不允许动态定义数组。特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项的描述符号!(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。[Return]6.1.2数组元素的引用引用数组中的任意一个元素的形式:数组名[下标表达式]1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1)。特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。[Return]6.1.31维数组元素的初始化初始化格式:数据类型数组名[常量表达式]={初值表}(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。[Return]6.22维数组的定义和引用6.2.12维数组的定义6.2.22维数组元素的引用6.2.32维数组元素的初始化6.2.42维数组应用举例[Return]inta[2][3];||||||-----列数||||--------行数||------------数组名(要满足变量的定义)|----------|----------|----------|第0行-|a[0][0]|a[0][1]|a[0][2]||----------|----------|----------|第1行-|a[1][0]|a[1][1]|a[1][2]||----------|----------|----------|示意图|a[0][0]||a[0][1]||a[0][2]||----------||a[1][0]||a[1][1]||a[1][2]|内存存放格式(按行存放)6.2.12维数组的定义/*ex60_3.cmain(){inti,j;staticinta[2][3]={{1,2,3},{4,5,6}};//定义并赋值for(i=0;i2;i++){for(j=0;j3;j++)printf(%2d,a[i][j]);printf(\n);}getch();}运行结果:123456演示2维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。[Return]矩阵加法:|12||78||00|a|34|+b|910|=c|00||56||1112||00|main()//ex60_4.c{staticinta[3][2]={{1,2},{3,4},{5,6}};staticintb[3][2]={{7,8},{9,10},{11,12}};staticintc[3][2]={0};inti,j,k;for(i=0;i3;i++)for(j=0;j2;j++)c[i][j]+=a[i][j]+b[i][j];for(i=0;i3;i++){for(j=0;j2;j++)printf(%5d,c[i][j]);printf(\n);}getchar();}81012141618演示6.2.22维数组元素的引用引用2维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的2维数组元素。[Return]6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按2维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。[Return]6.3字符数组与字符串6.3.1字符数组的逐个字符操作6.3.2字符数组的整体操作6.3.3常用的字符串处理函数[Return]1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i10;i++){scanf(%c,&str[i]);fflush(stdin);/*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]=clanguage;……for(i=0;i10;i++)printf(%c,str[i]);printf(\n);……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[Return]输出菱形图:*************************6.3.1字符数组的逐个字符操作/*ex60_8.cmain(){inti,j;staticchara[7][7]={{'','','','*','','',''},{'','','*','*','*','',''},{'','*','*','*','*','*',''},{'*','*','*','*','*','*','*'},{'','*','*','*','*','*',''},{'','','*','*','*','',''},{'','','','*','','',''}};for(i=0;i7;i++){for(j=0;j7;j++)printf(%c,a[i][j]);printf(\n);}getch();}演示6.3.2字符数组的整体操作[案例6.6]字符数组的整体输入与输出。/*文件名:eex10.c*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={张三山,李四季,王五魁,刘六顺,赵七巧};for(i=0;i5;i++)printf(\n%s\t,name[i]);/*name[i]代表该行数组元素的首地址*/getch();}1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。演示注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[Return]6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包
本文标题:第06章C语言程序设计教程电子教案
链接地址:https://www.777doc.com/doc-2241154 .html