数组C语言编程入门

上传人:cn****1 文档编号:498680061 上传时间:2023-12-05 格式:DOC 页数:5 大小:23.01KB
返回 下载 相关 举报
数组C语言编程入门_第1页
第1页 / 共5页
数组C语言编程入门_第2页
第2页 / 共5页
数组C语言编程入门_第3页
第3页 / 共5页
数组C语言编程入门_第4页
第4页 / 共5页
数组C语言编程入门_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《数组C语言编程入门》由会员分享,可在线阅读,更多相关《数组C语言编程入门(5页珍藏版)》请在金锄头文库上搜索。

1、数组 C语言编程入门前面使用字符型、整型的、浮点型的数据都是属于基本数据类型。C语言还提供了一些扩展的数据类型,这类数据是基本数据类型的扩展。它们也被称做聚集类型,或复合类型,或构造数据类型。这些按一定规则构成的数据类型有:数组、结构、指针、联合、位域等。数组是按序排列的相同类型的变量的集合。换言之,数组数据是用同一个名字的不同下标访问的,数组的下标是放在方括号中,从零开始的有序下标,它们是0、1、2、3。数组有一维、二维、三维、多维数组,常用的有一维、二维和字符串数组。1.一维数组(1) 定义形式类型说明符 数组合 整型表达式;例如:char ch 10;定义了ch一维数组,它有10个元素,

2、每个元素都是字符型的。数组的读法是:先读数组名,再读它方括号内元素的个数,最后读它里面元素的数据类型。数组中,每个元素是利用不同下标来表示的。比如:ch数组中的10个元素分别是:ch 0、ch 1、ch 2 一直到ch 9 。代表第一个元素,ch 9代表第十个元素。(2) 数组的初始化数组中的值,可以在程序运行期间用赋值语句或键盘输入语句来赋值,而一般是用一个循环语句来赋值。所谓数组初始化就是在定义说明数组的同时给数组赋新值。这项工作是在程序编译中完成的。C中规定 (比如UNIX C和Microsotf C中只有在静态存储static数组和外部存储(extern)数组才可以初始化。比如要给一个

3、局部数组初始化,要指定存储类别为static才成,否则编译不能通过。而在ANSI C中无此规定。例如:static int n 3 =23,26,15 ;如果对数组中全部元素赋初值,可不指定数组长度。等同如下定义:static int n =23,26,15 ;例: 产 生 前 15 个 裴 波 纳 契 (Fibonacci) 数,裴波纳契数列的开头两项为0和1,以后的每项是前两项的和 (an=a (n-2) +a (n-1) )。f8_1.Cmain ( )int f 15 , i;f0 =0;f1 =1;for (i=2; i15; +i)/*产生Fibonacci数列 */f i =f

4、i-2 +f i-1 ;for (i=0;i15; +i)/*显示Fibonacci数列 */printf ( %-8dm , f i ) ;/* -8为八位左对齐 */程序执行后屏幕显示:01123581 32 13 45 58 91 4 42 3 33 7 72.二维数组定义形式如下:类型说明符 数组名 整型 表 达 式 整型表达式 ;例如:int n 3 6 ;定义了二维数组n, 它有三行六列共18个整型元素。二维数组的存取顺序是:按行存取,先存取第一行元素的0列、1列、2列一直到最一列,然后返回到第二行的开始,再存取第二行元素的0列、1列、2列一直到最后一列。按这样的顺序再存取第三行、

5、第四行一直到最后一行的最后一列元素。这个顺序与内存中存储顺序是一致的。例1.初始化一个整型二维数组static int n 3 6 = 15, 20, 32, 44, 56, 67, 77, 87, 93, 100, 102,120, 130, 14, 15, 16, 17, 18 ;二维数组n在内存中是按行、列矩阵存放数据的。数组n初始化后可用一个二维表来说明,二维数组n有三行六列共18个元素。见下面二维表:03L14500.GIF;图1表中顶行的0、1、2、3、4、5表示数组有6列;竖直方向的0、1、2表示数组有3行。二维数组的行、列均是从零开始顺序排列,是先存放0行的六列。从数组内取数也

6、是这个顺序。例2.初始化一个字符型二维数组03L14501.GIF;图2static char ch 3 5 = a , b , c , d , e , f, g , h , i , j , k , l , m , n , o , ;在初始化时,数组中表示行的方括号可为空,但表示列的方括号内必须有数字。例如:static int n 4 = 10, 2, 30, 4, 55, 6, 7, 8, 9, 10, 11, 12 ; 与下面写法同:static int n 3 4 = 10, 2, 30, 4, 55, 6, 7, 8, 9, 10, 11, 12 ;例:打印一个二维表f8-2.cma

7、in ()int t, i, mum 3 4 ;for (t,=0; t3; +t)/*向二维数组num中装数 */for (i=0; i4; +i)num t i =t*4+i+1;for (t=0; t3; +t)/*在屏幕显示num数组中数据 */ for (i=0; i4; +i)printf ( %d , num t i ) ;printf ( m ) ;程序执行后显示结果如下:1 2 3 45 6 7 89 10 11 123.字符串数组用双引号( )括起来的一串字符,称为字符串常量。比如hello 。C编译器会自动的在字符末尾加上结束符 0(NULL) 。用单引号 ( )括起来的

8、字符为字符的ASCII码值,而不是串。比如: a 表示a的值 (为97) ,而 a 表示一个字符串,它是两个字符 (a和 0 ) 。一个字符串可以用一维数组来装入,但元素一定要比字符多一个。比如: hello 字符串的装入可这样定义数组:static char w = h, e, l, l, o ;或static char w 6 = h , e, l, l, o ;一批 (组) 字符串,可用二维字符数组来装入,又称字符串数组,数组的第一个下标是字符串的个数,第二个下标是定义每个字符串的长度,该长度应当比这批字符串中最长的串多一个字符,用于装字符串的结束符o。比如: char ch 100 8

9、1 ;定义的字符串数组,可容纳100个字符串,每串最长可达80个字符。例:输入字符串,并在屏幕上显示:f8-3.c#include #define MAX 100 /* 符号常量定义 */#define LEN 81char textMAXLEN ;main ()/* register 为存储类型说明符 */ register int t, i, j; /* 寄存器变量定义 */printf ( 输入字符串并回车 (空行则退出) n ) ;for (t =0; t printf ( % d: ,t) ;gets (text t ) ; /*接收字符串 */if (! *text t ) bre

10、ek; /* 字符串的值为零退出 */printf (字符串显示如下: n ) ;for(i =0; i for (j=0; text i j ;j+)putchar (text i j ) ;putchar ( n ) ;程序执行后显示如下:输入字符串并回车 (空行则退出)1: enter 回车 (键盘输入enter串)2: line 回车 (键盘输入line串)3: 回车 (键盘不输入)字符串显示如下:enrerline程序中的gest () 为字符串输入函数。4.多维数组C允许超过二维数组的使用,允许使用数组的维数由不同的C编译器决定。多维数组定义形式:类型说明符 数组名 整型表达式 整

11、型表达式 整型表达式 例如:int n 3 4 6 5 ;多维数组在函数传递时,形参说明中第一维可不指定长度,但第二、三、四维必须指定其长度。例:int n 3 4 6 5 ;main ()fu (n) ; /*实参给出四维数组名n ,它代表数组的首地址。 */fu (nn)int nn 4 6 5 ; /*形参说明第一维可空但第二、三、四维要说明长度, */ 在程序中,调用函数 fu (n) ; 给出了一个实参n它是四维数组的名字,C定义数组名就是数组的首地址。在函数传递中,不允许将整个数组作为实参传过去,否则对计算机内存浪费太大,通常的做法是将数组的地址传递过去。在函数定义中,形参的说明要

12、与实参对应起来,以达到数组在函数间的传递。关于数组的地址概念,在指针一讲中详细说明。1 数组和常量字符串是两种概念,数组指的是一段连续的内存空间。空间的大小由数组类型和数组元素个数决定。常量字符串则是一种常量,是由数个非零char型变量组成的末尾为0(而非 0 )的不可写资源。你可以试试 char *str= 012345678 ; 然后str1= 0 ; 会得到一个错误。 2 常量字符串永远是只读的(因为是常量),并且字符串的使用只能通过两种方式:作为初始化参数传给一个比字符串的长度大的char型数组,或者作为一个指向该字符串的地址的指针赋给一个char型指针变量。 3 常量字符串的长度和大

13、小是两个量,strlen( 123 )的值是3,而sizeof( 123 )的值是4。容纳常量字符串的数组必须比常量字符串的长度大,或者大于等于常量字符串的大小。 4 数组是可读可写的(除非显式声明为const常量数组),数组是内存中的一段可读可写的空间。一个字符数组(即char型数组)通常被称为一个字符串(而非常量字符串),字符串长度和数组大小是两个 截然不同 的量。两者之间的唯一联系是字符串长度必定小于数组大小(否则访问时会出错,你不能保证数组外的空间也是可读可写的) 综上所述,常量字符串,数组和字符串是三种内存模型。内存分为只读内存,只写内存,可读可写内存和代码执行内存。对于某些内存还是

14、不可读不可写的。常量字符串是只读内存。数组和字符串是可读可写内存。将大小为10的(这时长度为9)的常量字符串赋给大小为9的字符串数组时,有一个元素要放在未定义的内存中(即不知道读写状态)所以会出错。相反,你定义了个长度为100的字符数组,就算只用 123 赋值也是可以的。因为这时在数组的范围内,读写的权限是已知的。 另外,楼上兄弟说的关于 123 后加0, 123 不加0的说法ANSI C是不支持的。但我试验过了,在VC下,如果单引号内的字符少于4个的话,长度固定为4,私下以为是将其转化为一个32位的int常量。但是当单引号内的字符多于四个时,会引发一个“C2015: 常量中的字符太多”错误。这种方法对编译器有很强的依赖性,最好不要在单引号内放入多于一个字符。 最后,当要用一个常量字符串给一个字符数组赋值时,最好不要指定数组的大小,系统会自动调整数组大小已容下所有的元素。这里

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 汽车技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号