C语言数组教程_第1页
C语言数组教程_第2页
C语言数组教程_第3页
C语言数组教程_第4页
C语言数组教程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——C语言数组教程C语言数组教程

引导语;数组是将一致数据类型的元素按确定依次排列的集合,以下是我共享给大家的C语言数组教程,接待阅读!

一、数组的声明

声明数组的语法为在数组名后加上用方括号括起来的维数说明。本接仅介绍一维数组。下面是一个整型数组的例子:

intarray[10];

这条语句定义了一个具有10个整型元素的名为array的数组。这些整数在内存中是连续存储的。数组的大小等于每个元素的大小乘上数组元素的个数。方括号中的维数表达式可以包含运算符,但其计算结果务必是一个长整型值。这个数组是一维的。

下面这些声明是合法的:

intoffset[5+3];

floatcount[5*2+3];

下面是不合法的:

intn=10;

intoffset[n];/*在声明时,变量不能作为数组的维数*/

二、用下标访问数组元素

intoffset[10];

说明该数组是一维数组,里面有10个数,它们分别为offset[0],offset[1],offset[9];千万留神,数组的第一个元素下标从0开头。一些刚学编程的人员经常在这儿犯一些错误。

offset[3]=25;

上面的例子是把25赋值给整型数组offset的第四个元素。

在赋值的时候,可以使用变量作为数组下标。

main

inti,offset[10];

fori=0;i10;i++scanf%d,offset[i];

fori=9;i=0;i--printf%d,offset[i];

printf\n;

题目的意思是先输入10个整数,存入到数组中,然后反序输出。

三、数组的初始化

前面说了,变量可以在定义的时候初始化,数组也可以。

intarray[5]=1,2,3,4,5;

在定义数组时,可以用放在一对大括号中的初始化表对其举行初始化。初始化值的个数可以和数组元素个数一样多。

假设初始化的个数多于元素个数,将产生编译错误;假设少于元素个数,其余的元素被初始化为0。

假设维数表达式为空时,那么将用初始化值的个数来隐式地指定数组元素的个数,如下所式:

intarray[]=1,2,3,4,5;

这也说明数组array元素个数为5。

main

inti,array[]=1,3,5,7,9,11;

fori=0;i5;i++printf%d,array[i];

printf\n;

最终结果为13579

四、字符数组

整数和浮点数数组很好理解,在一维数组中,还有一类字符型数组。

chararray[5]=H,E,L,L,O;

对于单个字符,务必要用单引号括起来。又由于字符和整型是等价的,所以上面的字符型数组也可以这样表示:

chararray[5]=72,69,76,76,79;/*用对应的ASCII码*/

举一个例子:

main

inti;

chararray[5]=H,E,L,L,O;

fori=0;i5;i++printf%d,array[i];

printf\n;

最终的输出结果为7269767679

但是字符型数组和整型数组也有不同的地方,看下面的`:

chararray[]=HELLO;

假设我们能看到内部的话,实际上编译器是这样处理的:

chararray[]=H,E,L,L,O,\0;

看上面结果一个字符\0,它是一个字符常量,TurboC编译器总是给字符型数组的结果自动加上一个\0,这是字符的终止标志。所以虽然HELLO只有5个字符,但存入到数组的个数却是6个。但是,数组的长度依旧是5。

inti;

i=strlenarray;/*求字符串的长度,在string.h里面*/

可以看出i依旧是5,说明结果的\0没有算。

#includestring.h

main

inti,j;

chararray[]=094387fdhgkdladhladaskdh;

j=strlenarray;

fori=0;iprintf\n;

其实我们可以根据判断\0来输出字符串,看下面的:

C语言数组教程

main

inti;

chararray[]=094387fdhgkdladhladaskdh;

fori=0;array[i]!=\0;i++printf%c,array[i];

printf\n;

举几个例子:

1.输入10个整数存入数组中,然后把它们从小到大排列并放在同一数组中。思路:先找出最小的,放在第一个位置,为了防止把原先的数笼罩掉,可以把原先的第一个数和最小数的位置互换。

main

intarray[10];

inti,j,min,stmp;

fori=0;i10;i++scanf%d,array[i];

fori=0;i9;i++

min=array[i];

forj=i+1;j10;j++

ifminarray[j]/*里面的4行语句很重要*/

min=array[j];

stmp=array[i];

array[i]=array[j];

array[j]=stmp;

fori=0;i10;i++printf%d,array[i];

printf\n;

分析:先让第一个值作为基准,假设后面有比它小的,那么就把这两个数互换一下,同时把基准换成小的值。两个数互换理应这样stmp=a;a=b;b=stmp;,而不是a=b;b=a;,想想这是为什么?务必要用一个变量作为桥梁。这种一个一个的把最小的放在前面的排序方法,我们形象的叫做冒泡法。

2.输入一行字符存入数组,然后把他们反序存入到同一数组中。

#includestdio.h

main

charc,stmp,array[80];

inti=0,j;

whilec=getchar!=\n/*留神这儿的用法*/

array[i++]=c;

array[i]=\0;/*为什么要加\0?是否可以不加?*/

forj=i-1;j=i/2;j--

stmp=array[j];

array[j]=array[i-1-j];

array[i-1-j]=stmp;

fori=0;array[i]!=\0;i++printf%c,array[i];

printf\n;

3.一个已经排好序的数组,输入一个数,利用二分法把这个数从原数组中删除,数组依次保持不变。如原数组为1,3,5,7,9,11,13,15,17,19,待删除的数为13,那么输出为1,3,5,7,9,11,15,17,19。

二分法:每次都是判断中间的数是否得志要求,若得志那么删除,若不得志,那么把该数当作边界,然后再找中点。例如这一题,第一次的是10个数的中点,为11,察觉1113,那么找11-19的中点15,察觉1513,再找11-15的中点13,正好,那么删除。

main

intarray[10]=1,2,3,5,8,15,20,30,100,200;

intfirst=0,end=9,middle=first+end/2,num,i;

scanf%d,num;

whilearray[middle]!=num/*留神这里面的三行代码

温馨提示

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

评论

0/150

提交评论