ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:73.55KB ,
资源ID:21584589      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21584589.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计教程第五章数组Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计教程第五章数组Word文档格式.docx

1、因为,在编译时,C编译器根据已知数组大小分配内存。在定义数组时对各元素指定初始值,称为数组的初始化。1、 一般初始化用花括号把要赋给各元素的初始值括起来,数据间用逗号分隔。static int a9 = 1,2,3,4,5,6,7,8,9; a0=1,a1=2,a2=3, a8=92、 部分元素初始化static int a10 = 1,2,3,4,5; 只对前5个元素赋初值,后5个元素未指定初值,系统默认为0。3、 全部元素均初始化为0,不允许简写。static int a10 = 0,0,0,0,0,0,0,0,0,0; 不能简写为:static int a10 = 0*10;当程序不给数

2、组指定初始值时,编译器作如下处理:(1)编译器自动把静态数组的各元素初始化为0或空字符。(2)编译器不为动态数组自动指定初始值,其初值不可预料。4、 如果全部元素均指定初值,定义中可以省略元素的个数。static int a5 = 1,2,3,4,5;可写成:static int a = 1,2,3,4,5;C语言规定,不能引用整个数组,只能逐个引用元素。引用形式:数组名下标使数组元素a0a9的值为09,然后逆序输出。main() int i,a10;for (i=0;i=0; i-)printf(%d ,ai);运行输出:9 8 7 6 5 4 3 2 1 0下标可用整常数或整型表达式,其起

3、始值为0。在引用时应注意下标的值不要超过数组的范围。C编译不检查下标是否超界,即不指出“下标超界”的错误。1、数组元素用作函数实参,其用法与普通变量完全相同:在发生函数调用时,把数组元素的值传送给形参,实现单向值传送。 写一函数,统计字符串中字母的个数。/*功能:数组元素作为函数实参*/int isalp(char c) if (c=a&cAZ) return(1); else return(0); int i,num=0; char str255; printf(Input a string: ); gets(str); /*从标准设备读入字符串,并放入str指向的数组*/ for(i=0;

4、stri!0; if (isalp(stri) num+; puts(str); /*把str指向的字符串输出到标准设备*/num=%dn,num); getch(); /*从标准输入设备读入下一个字符*/ 说明:用数组元素作实参时,只要数组类型和函数的形参类型一致即可,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。2、数组名作函数参数时,既可以作形参,也可以作实参。数组名作函数参数时,要求形参和相对应的实参都必须是类型相同的数组(或指向数组的指针变量),都必须有明确的数组说明 已知某个学生5门课程的成绩,求平均成绩。float aver(float a ) /

5、*求平均值函数*/ int i; float av,s=a0; for(i=1;5;i+) s += ai; av=s/5; return av; float sco5,av; int i;ninput 5 scores:n); for(i=0;i+) scanf(%fscoi); av=aver(sco); /*调用函数,实参为数组名*/average score is %5.2fn,av);组名作函数参数,应该在调用函数和被调用函数中分别定义数组,且数据类型必须一致,否则结果将出错。C编译系统对形参数组长度不作检查,所以形参数组可以不指定长度。例如,本例中的形参数组a 。如果指定形参数组的

6、长度,则实参数组的长度必须大于等于形参数组,否则因形参数组的部分元素没有确定值而导致计算结果错误。以数组名作参数时,采取的不是“值传送”方式,而是“地址传送”方式,即把实参数组的起始地址传给形参数组,这样形参数组就和实参数组共占一段内存单元。如上例可表示为:a0a1a2a3a478Sco0Sco1Sco2Sco3Sco475869568输入10个数,用“起泡法”对10个数排序(由小到大)。“起泡法”算法:以六个数9、8、5、4、2、0为例。第1趟比较第2趟比较算法过程:第1趟比较后,剩5个数未排好序;两两比较5次第2趟比较后,剩4个数未排好序;两两比较4次第3趟比较后,剩3个数未排好序;两两比

7、较3次第4趟比较后,剩2个数未排好序;两两比较2次第5趟比较后,全部排好序;两两比较1次算法结论:对于n个数的排序,需进行n-1趟比较,第j趟比较需进行n-j次两两比较。程序流程图:(用两层嵌套循环实现)程序:设需排序的数有10个,定义数组大小为11,使用a1a10存放10个数,a0不用。int a11; /* 用a1a10, a0不用 */int i,j,t; /* i,j作循环变量,t作两两比较的临时变量 */input 10 numbers:for(i=1;11; scanf(ai); /* 输入10个整数 */for(j=1;j ai+1) /*交换大小*/ t = ai; ai =

8、ai+1; ai+1 = t;the sorted numbers: 如果一维数组的每一个元素是类型相同的一维数组时,就形成了二维数组。二维数组是有二个下标变量的数组。第一个下标称为行下标,第二个下标称为列下标,因此,二维数组可看成是一个二维表。二维数组的一般定义形式为:类型标识符 数组名常量表达式1常量表达式2二维数组的理解:a34二维数组a34理解为:有三个元素a0、a1、a2,每一个元素是一个包含4个元素的数组。二维数组的元素在内存中的存放循序:按行存放。即:先顺序存放第一行的元素,再存放第二行的元素。二维数组的元素aij在数组中的位置计算公式:设有一个mn的二维数组,元素aij在数组中

9、的位置计算公式为:in+j+1多维数组是有多个下标变量的数组。多维数组的一般定义形式为:类型标识符 数组名常量表达式1常量表达式2常量表达式n三维数组:float a234在内存中的存放顺序:a000a001a002a003a010a011a012a013a020a021a022a023a100a101a102a103a110a111a112a113a120a121a122a123二维数组元素的引用形式为: 数组名下标1下标2 float a23;有6个元素,按如下方式引用各元素:a00、a01、a02、a10、a11、a12数组float a23中无元素a23。(下标从0始)二维数组的初始化

10、1、分行对各元素赋值,如:static int a34 = 1,2,3,4,5,6,7,8,9,10,11,12;2、全部数据写在一个花括号内,如:static int a34 = 1,2,3,4,5,6,7,8,9,10,11,12;3、只对部分元素赋值。static int a34 = 1,5,9;仅对a00、a10、a20赋值,其余元素未赋值(对于静态数组,未赋值元素指定初值0;对于动态数组,未赋值元素的初值是随机的)。4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。static int a34=1,2,3,4,5,6,7,8,9,10,11,12;与下面定义

11、等价:static int a 4=1,2,3,4,5,6,7,8,9,10,11,12;多维数组的初始化与二维数的初始化相似。【例1】:将一个二维数组行和列交换,存到另一个二维数组中。算法: bji = aij static int a23 = 1,2,3,4,5,6;static int b32, i,j;array a:for(i=0;=1;i+) /* 01行 */ for(j=0;=2;j+) /* 02列 */ printf(%5d,aij); bji = aij; /* 行、列交换 */ /*输出一行后换行 */array b:for(j=0;j+),bij);【例2】:有一个3

12、4的矩阵,编程序求出其中值最大的那个元素的值及其所在的行号和列号。把第一个元素a00作为临时最大值max;把临时最大值max与每一个元素aij进行比较,若aijmax,把aij作为新的临时最大值,并记录下其下标i和j。当全部元素比较完后,max是整个矩阵全部元素的最大值。流程:int i,j,row=0,colum=0,max;static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max = a00; i i+) /* 用两重循环遍历全部元素 */ j max ) max = aij; row = i; colum = j;max=%d, row=%d, col

13、um=%dn,max,row,colum);本例中得到的行列值从0始。字符数组:存放字符数据的数组。每一个元素数组存放一个字符。字符串是指若干有效字符(指系统允许使用的字符)的序列。C语言允许的字符串可包括字母、数字、专用字符、转字符等。它用双引号括起来。C语言中没有字符串变量。字符串存放在一个字符型数组中。将字符串“computer”存入字符数组str中。定义字符数组:Char str8;采用赋值运算,将字符一个一个地赋给字符数组各元素:Str0=c;Str1=o;Str2=m;. Str7=r;str8=0;存储字符串示意图:Str0 Str1 Str2 Str7 Str8computeR

14、0C语言规定:以“0”字符作为字符串结束标志。“0”是指ASCII为0的字符,它不是一个普通的可显示字符,而是一个“空操作”字符,它不进行任何操作,只是作为一个标志。1、 逐个为数组元素指定初值static char c10 = I, m,hp, y;2、 初始化数据少于数组长度,多余元素自动为“空”。crog3、 指定初值时,若未指定数组长度,则长度等于初值个数。static char c = 4、 对字符数组指定一个字符串初值 如:static char c =“I am happy”字符数组的元素个数应该足够大,能容纳所存的字符和“0”。5.3.3 字符数组的引用引用一个元素,得到一个字

15、符。 输出一个字符串。static char c10=bint i;10;%c,ci);输出结果:I am a boy5.3.4 字符串的输入输出两种方法:1、用“%c”格式符逐个输入输出。2、用“%s”格式符按字符串输入输出。static char c6;%s,c);(1)输入时,遇回车键结束,但获得的字符中不包含回车键本身,而是在字符串末尾添。因此,定义的字符数组必须有足够的长度,以容纳所输入的字符。(如,输入5个字符,定义的字符数组至少应有6个元素)。(2)一个scanf函数输入多个字符串,输入时以“空格”键作为字符串间的分隔。static char str15,str25,str35;

16、%s%s%s,str1,str2,str3);输入数据:How are you?str1、str2、str3获得的数据见下图:static char str13;,str);输入:结果:仅“How”被输入数组str如要想str获得全部输入(包含空格及其以后的字符),程序应设计为:static char c13;13;i+) ci = getchar();(3)C语言中,数组名代表该数组的起始地址,因此,scanf()函数中不需要地址运算符&(在Turbo C中,加上&运算符也可以)。str); /* 错误 */(4)gets()函数:输入字符串到数组。static char str12;get

17、s(str);gets()一次只能输入一个字符串。而scanf()可以输入几个字符串。(5)输出时,遇结束,且输出字符中不包含(6)“%s”格式输出字符串时,printf()函数的输出项是字符数组名,而不是数组元素名。 【例】:static char c6 = China,c0);(7)“%s”格式输出时,即使数组长度大于字符串长度,遇也结束。static char c10 = /*只输出5个字符 */(8)“%s”格式输出时,若数组中包含一个以上,遇第一个时结束。(9)puts()函数:输出字符串(以结尾)。puts()一次只能输出一个字符串。而printf()可以输入输出几个字符串。sta

18、tic char c6= /*printf、puts均以结尾*/%sn/*printf需要格式控制符%s*/puts(c);/*puts不需要格式控制符,且自动换行*/5.3.5 字符串运算函数 1、strcat():连接字符串。格式:strcat(字符串1,字符串2);把“字符串2”连接到“字符串1”的后面。2、strcpy():字符串拷贝。strcpy(字符串1,字符串2);把“字符串2”的值拷贝到“字符串1”中。3、strcmp():字符串比较。int strcmp(字符串1,字符串2);比较规则:逐个字符比较ASCII码,直到遇到不同字符或,比较结果是该函数的返回值。strcmp()返

19、回值字符串1 字符串2长度不同的字符串也可以进行比较,比较结果当然是“不同”。字符串只能用strcmp函数比较,不能用关系运算符“=”比较。if (strcmp(str1,str2) = 0) printf(yesif (!strcmp(str1,str2) printf(equalif (str1 = str2) printf(4、 trlen():测试字符串长度函数strlen(字符串);strlen(“computer”) 结果:85、strlwr():将字符串中的大写字母转换为小写字母(lwr:lowercase小写)。6、strupr():将字符串中的小写字母转换为大写字母(upr:

20、uppercase大写)。以上函数均是库函数,使用时必须用#include语句包含头文件。二维数组可认为是由若干个一维数组所组成的,也知道一个一维数组可存放一个字符串,因此,一个NM的二维数组可存放N个最大长度为M-1的字符串。其中要留一个位置存放“0”。static char str36=“China”,“Japan”,“Korea”存放在str中的字符串示意图:ChInaJKr Str0 Str1 Str2二维字符数组元素的引用与二维数组的引用相同。一个班级中有若干名学生。今输入一个学生名,要求查询该学生是否属于该班,输出相应的信息。程序:#define MAX 3#define LEN 10 int I,flag=0; char nameLEN; static char listMAXLEN=“Zhang”,“Wang”,“Li”; printf(“Enter your name:”); gets(name); for (I=0,IMAX;I+)if (strcmp(listI,name)=0) flag=1; if (flag=1)printf(“%s is in our class n”,name); elseprintf(“%s is not in our class

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

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