自考计算机与程序设计9数组Word文件下载.docx

上传人:b****3 文档编号:15072602 上传时间:2022-10-27 格式:DOCX 页数:25 大小:26.48KB
下载 相关 举报
自考计算机与程序设计9数组Word文件下载.docx_第1页
第1页 / 共25页
自考计算机与程序设计9数组Word文件下载.docx_第2页
第2页 / 共25页
自考计算机与程序设计9数组Word文件下载.docx_第3页
第3页 / 共25页
自考计算机与程序设计9数组Word文件下载.docx_第4页
第4页 / 共25页
自考计算机与程序设计9数组Word文件下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

自考计算机与程序设计9数组Word文件下载.docx

《自考计算机与程序设计9数组Word文件下载.docx》由会员分享,可在线阅读,更多相关《自考计算机与程序设计9数组Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。

自考计算机与程序设计9数组Word文件下载.docx

如a[*]

注:

当同时定义多个数组时彼此之间用,号隔开

如doublew[22],v[100],u[5];

以上定义了三个数组。

需要注意的是,【】中的内容只能是整型常量或整型常量表达式。

如inta[11+22]也可以。

★一维数组元素的引用

数组[下标表达式]

其实x[0],x[j],x[i+k]都是对数组中元素的合法引用形式。

但是需要注意的是下标表达式的值必须大于或等于0,并且小于数组上界的数。

能过上面知识讲解,大家应该建立以下概念:

1:

一个数组元素实质上就是一个变量名,代表内存中一个存储单元。

一个数组占有一串连续的存储单元。

2:

在C语言中一个数组不能整体引用。

不能说用一个数组名就代表整个数组了。

这是错误的。

因为在C语言中规定数组名是一个地址常量,它代表整个数组的首地址。

int*p;

inta[10]p=a(p=&

a[0])a==&

a[0]a=10

3:

数组元素中下标表达式的值必须是整数。

在编写程序时保证数组下标不越界是十分重要的。

a[2.5]a[10]=123

★一维数组的初始化

一维数组的初始化,其实就是给数组元素赋值。

inta[8]={0,1,2,4,5,6,7}

所赋的值放在等号后的一对花括号中,数值类型必须必须与所说明的类型一致,所赋值之间用逗号隔开。

系统会按赋值顺序来自动分配。

当花括号中的值少于数组元素个数时,将自动给数组后面元素赋值0.如

inta[10]={1}这个时候除了a[0]=1外,其它的都是0;

对于字符数组也是一样;

chara[10]={‘!

’}

不够的也会赋值‘\0’

通过赋初值定义数组的大小

C语言中规定,可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小。

如inta[]={1,1,1,1,1,1,1,1,1,1}

这样相当于数组中有了10个元素

例题:

编写一个程序,通过键盘给数组a中的10个成员赋初值。

#include<

stdio.h>

main()

{

inta[10];

a是地址常量

inti,*p;

p=a;

for(i=0;

i<

10;

i++)

{scanf(“%d”,p);

printf(“a[i]=%d”,*p);

}

编写一个程序定义一个含有30个成员的数组。

并给其赋值,要求从1这样的奇数开始。

当赋值完毕后,按每行10个输出。

include<

#definem30

inta[m];

inti,k=1;

m;

{a[i]=k;

k+=2;

{printf(“a[%d]=%d”,i,a[i]);

if((i+1)%10==0)

printf(“\n”);

9.2一维数组和指针

★一维数组和数组元素的地址

前言:

定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址。

重要的是:

这个指针变量中的地址值不可改变,也就是说,不可以给数组重新赋值。

因此,也可以认为数组名是一个地址常量。

如:

 

floata[10],*p,x;

语句a=&

x或a++这样的语句都是非法的。

因为不能给a重新赋地址值。

一旦定义a永远指向a数组的首地址。

虽然不可以改变数组名a中的内容,但可以用对数组名加一个整数的办法,来依次表达该数组中不同元素的地址。

inta[10],*p;

p=a+4~~~~~~~~~~p=&

a[4]

再如:

for(k=0;

k<

k++)

p=a+k;

在循环中并没有改变数组名a中的内容,但通过表达式:

a+k逐一给出了a数组中每个元素的地址,使p依次指向a数组中和每一个元素。

如果要能过类似上面的语句给数组中的元素赋值,语句为:

for(k=0;

scanf(“%d”,a+k);

如有p=a或p=&

a[0]这两个表达式所要表达的意思是一样的。

都是指指针P指向了数组a的首地址。

所以当要依次访问数组中的每一个元素时可以用以下的两个形式;

p++;

或a+k(k的值是不断变化的如上面的for语句一样)

★通过数组的首地址引用数组元素

a是数组元素的首地址,a(即a+0)的值即等于&

a[0],则用a+1的值等于&

a[1].

在以前我们学过“间接访问运算符”----“*”来引用地址所在的存储单元。

因此对于数组a[0],可以用表达式*&

a[0]来引用也可以用*(a+0),还可以用a[0]来表示。

但需要注意的是对于*(p+k)这样的表达式不能这样写*p+k,这样写的话就错了。

代表指针取值后再加K的值了。

总结:

表示数组元素s[i]的表达式应当有

s[i]*(s+i)*(p+i)*p[i]

(但当p=s+2时,p=&

a[2].*p[0]就是a[2]的值了)

9.3函数之间对一维数组和数组元素的引用

数组元素作实参

每个数组元素实际上代表内存中的一个存储单元,故和普通变量一样,对应的形参必须是类型相同的变量。

数组元素的值可以传送给该变量,在函数中只能对该变量进行操作,而不能直接引用数组元素,更不能在函数中改变对应数组元素中的值。

数组名作实参

数组名也可以作为实参传送,但数组名是一个地址值,因此,对应的形参就应当是一个指针变量,此指针变量的基类型必须与数组的类型一致。

这样就可以通过指针变量来引用调用函数中对应的数组元素,从而达到对调用函数中对应的数组元素进行操作而改变其中的值。

例:

编写程序,通过一个函数给主函数中定义的数组输入若干大于或等于0的整数,用负数作为输入结束标志,调用另一个函数输出该数组中的数据。

#include<

#defineM100定义了一个符号常量宏定义M就是100

voidarrout(int*,int);

intarrin(int*);

ints[M],k;

k=arrin(s);

实参是一个数组名

arrout(s,k);

intarrin(int*a)对应的形参是一个指针接受s传递过来的值

inti,x;

i=0;

scanf(“%d”,&

x);

while(x>

=0)

*(a+i)=x;

给地址赋值输入的值

i++;

returni;

voidarrout(int*a,intn)

inti;

n;

printf(((i+1)%5==0)?

”%4d\n”;

”%4d”,*(a+i));

printf(“\n”);

当数组名作为实参时,对应的形参除了是指针外,还可以用另外两种形式。

在上面的题目中数组名作为实参时,函数的首部用的是指针arrin(int*a),还可以用以下的形式调用:

arrin(int*a)

arrin(inta[])

arrant(inta[M])

9.3.3数组元素地址作为实参

当用数组元素地址作为实参时,因为是地址值,所以对应的形参也应当是基类型相同的指针变量。

例:

编写函数,对具有10个元素的char类型数组,从下标为4的元素开始,全部设置星号“*”;

保持前4个元素中的内容不变。

假设数组是c[10]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’,‘I’,‘J’}

根据题意可以知道想要从E开始后面的全变成*

编写一个改变的函数,编写一个输出的函数。

#defineM10

#defineB4

voidsetstar(char*,int);

voidarrout(char*,int);

下面有函数调用,一开始是函数的声明

charc[M]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’,‘I’,‘J’};

setstar(&

c[4],M-B);

发生了函数调用,实参数组中第5个元素的地址值

arrout(c,M);

输出首地址,输出m个

voidsetstar(char*a,intn)

*(a+i)=’*’;

voidarrout(char*a,intn)

inti;

for(i=0;

printf(“%c”,a[i]);

输出数组中存储的数字

9.4一维数组应用举例

编写程序,定义一个含有15个元素的数组,并编写函数分别完成以下操作。

1,调用C库函数中的随机函数给所有元素赋以0-49的随机数;

2,输出数组元素中的值。

3,按顺序对每隔三个数求一个和数,并传回主函数。

4,最后输出所有求出的和的值。

#include“stdlib.h”

#defineSIZE15

#defineN3

voidgetrand(int*,int);

voidgetave(int*,int*,int);

voidpriarr(int*,int);

intx[SIZE],w[SIZE/N]={0};

getrand(x,SIZE);

printf(“output%drandomnumbers:

\n”,SIZE);

priarr(x,SIZE);

getave(x,w,SIZE);

printf(“Output5sumnumbers:

\n”);

priarr(w,SIZE/N);

voidgetrand(int*a,intn)

a[i]=rand()%50;

voidgetave(int*a,int*b,intn)

inti,j,sum;

for(sum=0,i=0,j=0;

=n;

sum+=a[i];

if((i+1)%3==0)

b[j]=sum;

sum=0

j++;

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

当前位置:首页 > PPT模板 > 国外设计风格

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

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