第七章 计算机.docx

上传人:b****3 文档编号:27427943 上传时间:2023-06-30 格式:DOCX 页数:11 大小:21.65KB
下载 相关 举报
第七章 计算机.docx_第1页
第1页 / 共11页
第七章 计算机.docx_第2页
第2页 / 共11页
第七章 计算机.docx_第3页
第3页 / 共11页
第七章 计算机.docx_第4页
第4页 / 共11页
第七章 计算机.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

第七章 计算机.docx

《第七章 计算机.docx》由会员分享,可在线阅读,更多相关《第七章 计算机.docx(11页珍藏版)》请在冰豆网上搜索。

第七章 计算机.docx

第七章计算机

第七章数组

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。

这些元素的集合称为数组。

数组属于构造数据类型,一个数组可分解为多个数组元素,这些数组元素可以是基本数据类型的,也可以是其他构造数据类型。

在C语言中必须先定义再使用数组。

7.1一维数组的定义和使用

定义的一般形式为:

类型说明符数组名[常量表达式];

inta[10];

说明:

1、类型说明符指出了数组元素的数据类型,对于同一个数组,其所有元素的数据类型都是相同的。

2、数组名与变量名一样,要遵守标识符的命名原则,并且同一程序中数组名与变量名不能重名。

3、“常量表达式”必须用方括号括起来,表示数组中元素的个数。

它是一个整型值,可以是常量,符号常量,在定义时不可以使用变量来动态定义数组。

 

intn;

n=5;

Inta[n];

#definen10

inta[n]

这种写法不合理,在其他程序中注意,变量声名需写在其他执行语句之前.

4、允许在同一类型说明中说明多个数组和变量。

Inta,b[5];

2.数组元素的引用

引用数组中元素的形式:

数组名[下标]

a=b[1]+6;

说明:

1、“下标”只能是常量或整型表达式,其取值范围为0~元素个数-1;但在编译c程序过程中系统不检查下标是否越界。

Inta[2];

a[3]=5;

Printf(“%d”,a[3]);

2、数组中的单个元素实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。

3、在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。

注意不要越界.

3.一维数组元素的初始化

初始化格式:

数据类型 数组名[常量表达式]={初值表}

说明:

1、把数组元素的初值依次放到花括号内就组成初值表。

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

2、如果对数组内全部元素赋以初值,定义时可以不指定数组长度,由系统根据初值个数自动确定。

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

3、如果被定义数组的长度与初值个数不同,则数组长度不能省略,数组中未赋值的元素值自动为0。

Inta[6]={1,2};

4、如果数组中有些元素的值相同,也要对各个元素分别初始化。

另外:

可以在程序执行过程中,对数组作动态赋值。

这时可用循环语句配合scanf函数逐个对数组元素赋值

例题1:

在一维数组中找出最大值

inta[5],max,i;

for(i=0;i<5;i++)

scanf("%d",&a[i]);

max=a[0];

for(i=1;i<5;i++)

{if(max

max=a[i];}

printf("%3d\n",max);

例题3:

选择排序法

for(i=0;i

{

for(j=i+1;j

if(a[i]>a[j])

{tem=a[i];

a[i]=a[j];

a[j]=tem;}}

例题4:

查找问题.(折半查找法)

例题5141-7.4

例题6:

围绕着山顶有10个洞,一只兔子和一只狐狸各住一个洞,狐狸总想吃掉兔子。

一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10。

你从第10号洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限。

若能找到我,你就可以饱餐一顿,在没找到我之前不能停止。

狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件。

结果就是没找着。

假定狐狸找了1000次.

0

1

2

3

4

5

6

7

8

9

1

1

1

1

1

1

1

1

1

1

7.2二维数组的定义和引用

1.二维数组的定义

形式如下:

   类型说明符 数组名[常量表达式1][常量表达式2]

Inta[3][4];

数组a中共有12个数组元素.

a|a00,a01,a02,a03|

|a10,a11,a12,a13|

|a20,a21,a22,a23|类似于线性代数中的矩阵.

说明:

1、其中常量表达式1是第一维下标的长度(行数),常量表达式2是第二维下标的长度(列数)。

2、数组元素在内存中是“按行存放”的,即先顺序存放第一行的元素,再存放第二行,以此类推,存放在内存中的一个连续的空间内。

a00a01a02a03a10…a23

3、可以把2维数组看作是一种特殊的1维数组:

它的元素又是一个1维数组。

如:

数组a可以看作3个一维数组

a[0]a00,a01,a02,a03

a[1]a10,a11,a12,a13

a[2]a20,a21,a22,a23

多维数组:

a[2][3][4]相当于在三维直角坐标系中的一组数.

2.二维数组元素的引用

一般形式:

数组名[行下标][列下标]

说明:

1、在引用数组元素时,它的行、列下标可以是常量,变量或表达式,其值只能是0~元素个数-1之间的整型值。

(同1维数组:

注意不要越界)

2、对基本数据类型的变量所做的操作,也都适用于同类型的二维数组元素。

 

3.二维数组元素的初始化

1、按行分段赋值

类型说明符数组名[常量表达式1][常量表达式2]={{第一行初值表},{第二行初值表},……}

inta[2][3]={{1,2,3},{4,5,6}};

即把每个初值表中的数据按顺序赋给各行的各个元素。

2、按行连续赋值

类型说明符数组名[…][…]={初值表}

即按各个元素在内存中的先后顺序赋值。

Inta[2][3]={1,2,3,4,5,6};

说明:

1、可以只对部分元素初始化,未赋值的元素值为0。

如:

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

2、如果对全部元素初始化,则可省略行数,但不能省略列数。

Inta[][3]={1,2,3,4,5,6};

Intb[][3]={1,2,3,4};则系统自动补足相应的0.例子b0.c

程序举例:

1.在二维数组a中选出各行最大的元素组成一个一维数组b。

a=31687654321110810251237b=(8710837)

h1.c

2.题目:

求一个3*3矩阵对角线元素之和

3.求2维数组中第2大的数组元素.

4.P153—7.7

7.3字符数组

1.字符数组的定义

一般形式为:

char数组名[常量表达式1][常量表达式2]……

一维字符数组---用来存放和处理一个字符串

二维字符数组---用来存放和处理多个字符串

2.字符数组的初始化

1、为每个元素指定初值,放入初值表中

chara[5]={‘h’,’e’,’l’,’l’,’o’};

说明:

√如果给全部元素赋初值,可以省略元素个数。

Chara[]={‘m’,‘o’,‘r’,‘n’,‘i’,‘n’,‘g’}

√如果给部分元素赋初值,则元素个数不能省略,未赋值的元素值为‘\0’。

2、使用字符串常量为字符数组初始化

charb[]={”hello”};(在内存中占6字节)

√{}可以省略。

√元素个数可以省略。

√用字符串方式赋值比用字符逐个赋值要多占一个字节,系统自动在字符串末尾加一个’\0’.

chara[]={‘h’,’e’,’l’,’l’,’o’};(在内存中占5字节)

★如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串。

3.字符数组的引用:

字符型1维数组可以整体引用,单独引用.

charc[]={“”};

printf(“%s”,c);

字符型2维数组可以看作由字符串组成的一维数组并引用.

chara[2][20]={“hello”,“china”};

Printf(“%s”,a[0]);ar.c

4.字符数组的输入输出

除了使用初始化给字符数组赋值外,还可以通过一些函数给它们赋值,也可以使用函数输出数组元素。

字符数组的输出:

printf()函数

1、用格式符号“%c”对数组中元素进行逐个输出。

2、用格式符号“%s”对数组(字符串)进行整体输出。

说明:

√输出的时候不输出’\0’。

√用“%s”格式符输出字符串时,printf函数输出项是字符一维数组名或者在2维数组虚拟的某个一维数组元素.

√输出时遇到第一个’\0’就结束。

Chara[]={‘a’,’\0’,’b’};

Printf(“%s”,a);

输出结果为a

Chara[]={‘a’,’b’,’c’};

Printf(“%s”,a);

输出结果不可以预料

字符数组的输入:

1、用格式符号“%c”输入一个字符。

Scac.c不可以用回车或者空格来分格字符.

2、用格式符号“%s”输入整个字符串。

说明:

√用scanf输入时,系统会自动加上’\0’,要注意数组的长度。

(数组名本身代表地址,所以不需要&).

√用一个scanf函数输入多个字符串时,每个字符串之间以空格分隔。

Sca.c

5.字符串处理函数

(1)字符串输出函数---puts

√格式:

puts(字符数组)

其中字符数组可以直接用字符串常量代替。

√功能:

把字符数组中所存放的字符串,输出到标准输出设备中去,输出时候用‘\n’取代字符串的结束标志‘\0’,即输出完换行.

√使用说明:

*字符串中允许包含转义字符。

*该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。

(2)字符串输入函数──gets()

√格式:

gets(字符数组)

√功能:

从键盘上读取1个字符串将其存储到字符数组中。

函数的返回值为该数组的首地址。

√使用说明:

*该函数不能输入转义字符,但允许输入空格,而scanf()函数都不允许。

 

(3)字符串连接函数---strcat

√格式:

strcat(字符数组1,字符数组2)

其中字符数组2也可以直接用字符串常量代替。

√功能:

把“字符数组2”连接到“字符数组1”后面,结果存放到“字符数组1”中。

√使用说明:

*“字符数组1”要足够大,以便容纳连接后的目标字符串。

*连接后“字符数组1”中的字符串的结束标志'\0'被“字符数组2”的第一个字符覆盖,只在新串的最后保留一个'\0'。

Chara[20]=”hello”,b[]=”China”;

Strcat(a,b);

a“helloChina”cat.c

(4)字符串拷贝函数---strcpy

√格式:

strcpy(字符数组,字符串)

其中“字符串”可以用字符数组代替。

√功能:

将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。

√使用说明:

*字符数组必须定义得足够大,以便容纳复制过来的字符串。

复制时,连同结束标志'\0'一起复制。

*除初始化时候之外不能用赋值运算符“=”将一个字符串或一个字符数组直接赋值给一个字符数组,只能用strcpy()函数来处理。

注意:

可以将字符串中前若干个字符复制到字符数组中,格式为strncpy(字符数组,字符串,n).strcpy.c

(5)字符串比较函数──strcmp()

√格式:

strcmp(字符数组1,字符数组2)

√功能:

比较两个字符串的大小。

字符串1=字符串2,函数值为0。

字符串1<字符串2,函数值为负整数。

字符串1>字符串2,函数值为正整数。

√使用说明:

*如果一个字符串是另一个字符串从头开始的子串,则母串为大。

computercompute>0

AfricaAsia<0

00707<0

0070070

*不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。

(6)求字符串长度──strlen

√格式:

strlen(字符数组)

√功能:

求字符串的实际长度,返回值就是字符串的长度(从开头到结束标志,但不包含结束标志)。

Charc[]=”hello”;

实际长度为6,strlen返回值为5

charc[]={‘a’,’\0’,’b’}

strlen==1;

strlen.c

(7)大写字母转换成小写字母──strlwr

√格式:

strlwr(字符串)

√功能:

将字符串中的大写字母转换成小写,其它字符不转变。

(8)小写字母转换成大写字母──strupr

√格式:

strupr(字符串)

√功能:

将字符串中小写字母转换成大写,其它字符不转变。

upr.c

 

程序举例:

1输入五个国家的名称按字母顺序排列输出。

2.p153-7.12

3.判断一个字符串是否是另外一个的子串zic.c

4.p130—14lx.c

5.编写一个程序:

将s所指的字符串中的ASCII值为偶数的字符删除,串中剩余的字符形成一个新串放在t所指的数组中。

如:

s中的内容是“ABCDEFG12345”,则删除后的结果是“ACEG135”

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1