C语言程序设计第6章-数组的使用_第1页
C语言程序设计第6章-数组的使用_第2页
C语言程序设计第6章-数组的使用_第3页
C语言程序设计第6章-数组的使用_第4页
C语言程序设计第6章-数组的使用_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

<<C语言程序设计>>课程第6章数组的使用C语言程序设计第6章-数组的使用全文共40页,当前为第1页。主要内容1、一维数组2、一维数组3、字符数组与字符串4、综合应用案例C语言程序设计第6章-数组的使用全文共40页,当前为第2页。问题引入程序太繁琐声明40个变量输入时要书写40个变量计算时要书写40个变量编程:求40名学生的C语言成绩求平均分。C语言程序设计第6章-数组的使用全文共40页,当前为第3页。问题引入数组C语言提供了“数组”这一构造类型来表示一批具有相同属性的数据。同时将数组与循环结合起来,快速地处理大批量的数据,极大地提高了工作效率。

C语言程序设计第6章-数组的使用全文共40页,当前为第4页。6.1一维数组概念:一组用来存放多个相同类型的数据集合,该集合中的每一个成员称为元素,每个数组元素通过数组名和一个下标就能唯一确定,所以称之为一维数组。C语言程序设计第6章-数组的使用全文共40页,当前为第5页。6.1一维数组定义格式:类型标识符数组名[整型常量表达式];例如:inta[10];意义:数组名为a,含有10个数组元素,下标从0~9,分别是a[0]a[1]…a[9]C语言程序设计第6章-数组的使用全文共40页,当前为第6页。6.1一维数组inta[10];说明:(1)“整型常量表达式”表示数组长度(数组元素个数),数组元素下标从0开始;(2)C编译系统为数组分配连续的存储空间,数组名代表数组在内存中存放的首地址(即数组第一个元素在内存中的存储地址)。intn=20;intarray[n];

C语言程序设计第6章-数组的使用全文共40页,当前为第7页。6.1一维数组初始化:如果数组元素的值是已知的,在定义数组的同时可以给各个数组元素赋值,称为数组的初始化。(1)完全初始化:

intb[5]={1,2,3,4,5};intb[]={1,2,3,4,5};(2)部分初始化:只给一部分元素赋值。例如inta[10]={0,1,2,3,4};

部分初始化时,编译器会为没有初始化的元素补0(数值型变量)或‘\0’(字符型变量)C语言程序设计第6章-数组的使用全文共40页,当前为第8页。6.1一维数组数组元素引用:例如:inta[10];a[0]=0;//引用a[0]元素,为其赋值为0scanf(“%d”,&a[1]);//引用a[1]元素,为其输入值printf(“%d”,a[0]+a[1]);//引用a[0]、a[1]元素,数组名[下标]注意:合法数组元素的范围是a[0]~a[数组长度-1]C语言程序设计第6章-数组的使用全文共40页,当前为第9页。6.1一维数组使用数组关键是使用数组元素,由于数组元素的名称是由数组名和下标组成,下标是一系列相邻的整数值,所以数组的输入和输出一般是利用for循环完成。【例6-7】使用一维数组输入10个数据,并输出。C语言程序设计第6章-数组的使用全文共40页,当前为第10页。6.1一维数组#include<stdio.h>voidmain(){inta[10],i;for(i=0;i<10;i++)//为十个数组元素输入值

scanf("%d",&a[i]);for(i=0;i<10;i++)//输出十个数组元素值

printf("%d",a[i]);}参考代码C语言程序设计第6章-数组的使用全文共40页,当前为第11页。6.1一维数组数组定义:inta[10];以下表达是错误的:(1)认为a[1]是数组的第一个元素,a[10]是数组的最后一个元素。(2)认为通过a[10]可以引用数组所有元素。a[10]={0,1,2,3,4,5,6,7,8,9};//为元素a[0]到a[9]赋值a[10]=0;//想为数组元素a[0]到a[9]都赋值0scanf(“%d”,a[10]);//想为数组各元素输入值printf(“%d”,a[10]);//想输出数组各元素值C语言程序设计第6章-数组的使用全文共40页,当前为第12页。6.1一维数组【例6-7】十个评委进行评分,编程找出最高分和最低分。maxminC语言程序设计第6章-数组的使用全文共40页,当前为第13页。6.1一维数组#include<stdio.h>voidmain(){inta[10],i;intmax,min;//max最高分,min最低分

printf("请输入十个评委打分:");for(i=0;i<10;i++)//输入评委打分

scanf("%d",&a[i]);max=min=a[0];//假设最高分和最低分均为a[0]for(i=1;i<10;i++)//依次和各个元素比较

{if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}printf("最高分为:%d,最低分为:%d.",max,min);}参考代码C语言程序设计第6章-数组的使用全文共40页,当前为第14页。6.1一维数组【随堂练习6-2】输入五个整数,并按逆序输出。#include<stdio.h>voidmain(){inta[5],i;printf("pleaseinput5number");for(i=0;i<=4;i++)scanf("%d",&a[i]);for(i=4;i>=0;i--)printf("%d",a[i]);}C语言程序设计第6章-数组的使用全文共40页,当前为第15页。6.2二维数组一维数组是线性结构,但有时数据逻辑上是一种二维表结构,用一维数组处理就不够方便。C中提供二维数组来存储和处理类似的二维表结构C语言程序设计第6章-数组的使用全文共40页,当前为第16页。6.2二维数组类型标识符数组名[行数][列数];例如:inta[3][4];整型二维数组名字为aa[0][0]

a[0][1]二数组的定义3行4列共12个元素

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]第0行第1行第2行第0列第1列第2列第3列C语言程序设计第6章-数组的使用全文共40页,当前为第17页。6.2二维数组二数组的存储按行存储:先存放a[0]行,再存放a[1]行,依次类推。inta[3][4];C语言程序设计第6章-数组的使用全文共40页,当前为第18页。6.2二维数组二数组的初始化inta[3][4];例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化C语言程序设计第6章-数组的使用全文共40页,当前为第19页。6.2二维数组二数组的元素的引用数组名[下标1][下标2]二维数组元素的访问涉及第一维和第二维两个下标,所以对二维数组的操作通常和二重循环相结合。【例6-14】二维数组数据的输入和输出。C语言程序设计第6章-数组的使用全文共40页,当前为第20页。6.2二维数组#include<stdio.h>voidmain(){inta[3][4],i,j;for(i=0;i<3;i++)//二维数组的输入

for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)//二维数组的输出

{for(j=0;j<4;j++)printf("%d",a[i][j]);printf("\n");//每输出一行后换行

}}参考代码C语言程序设计第6章-数组的使用全文共40页,当前为第21页。6.2二维数组【例6-14】将一个3*3的矩阵存入二维数组中,找出其中的最大值以及对应的行下标和列下标。C语言程序设计第6章-数组的使用全文共40页,当前为第22页。6.2二维数组#include<stdio.h>voidmain(){inta[3][3],i,j;intmax,row=0,colum=0;for(i=0;i<3;i++)//输入矩阵

for(j=0;j<3;j++)scanf("%d",&a[i][j]);max=a[0][0];参考代码C语言程序设计第6章-数组的使用全文共40页,当前为第23页。6.2二维数组for(i=0;i<3;i++)for(j=0;j<3;j++)if(max<a[i][j]) {max=a[i][j]; row=i;//记录行下标和列下标

colum=j; }printf("最大值是%d,行下标为%d,列下标为%d.\n",max,row,colum);}C语言程序设计第6章-数组的使用全文共40页,当前为第24页。6.3字符数组与字符串字符串常量“8”“Boy”“”字符序列

字符串与字符的区别“8”‘8’“thankyou!”例从下面的数据中分别找出字符串常量与字符常数。‘123’1字符常量用单引号括起来2字符常量是单个字符

字符串常量用双引号括起来字符串常量可有若干个字符3字符串常量有结束符“A”‘A’A\0字符串结束标志A字符串字符字符串如何处理字符串没有字符串变量用字符数组存储字符串C语言程序设计第6章-数组的使用全文共40页,当前为第25页。6.3字符数组与字符串char数组名[常量];字符数组定义方式例:charc[10];……c[0]c[1]c[9]每个数组元素占一个字节初始化1逐个数组元素赋初值charc[6]={‘P’,’a’,’r’,’t’,’y’,’\0’};Party\02应用字符串常量赋初值charc[6]={“party”};charc[6]=“party”;等价于C语言程序设计第6章-数组的使用全文共40页,当前为第26页。字符数组的输入和输出main(){charstr[20];scanf("%s",str);printf("%s",str);}beifang输入遇到空格或回车就结束自动加‘\0’输出遇到‘\0’就结束输出str[0]str[19]…bei\01、以scanf、printf的形式输入输出,输入字符串中不能有空格。注意:格式说明符%s,输入位置只写数组名,无&。C语言程序设计第6章-数组的使用全文共40页,当前为第27页。6.3字符数组与字符串字符串处理函数str[0]str[19]…gets、puts函数输入:gets函数输出:puts函数gets(数组名)puts(数组名)例beifangbeibeifang

gets:自动添加‘\0’puts:自动输出‘\n’fang\0

main(){charstr[20];gets(str);puts(str);}C语言程序设计第6章-数组的使用全文共40页,当前为第28页。区别#include"stdio.h"voidmain(){charstr[10];gets(str);puts(str);}#include"stdio.h"voidmain(){charstr[10];scanf("%s",str);printf("%s",str);}输入遇到空格、回车就结束,空格不作为字符写入字符串遇到回车输入结束,空格作为字符写入字符串C语言程序设计第6章-数组的使用全文共40页,当前为第29页。6.3字符数组与字符串3、字符串长度求取函数strlen(str);求str所代表的字符串的长度,不包括字符串结束标志’\0’。

intlen;charstr[20]="China";len=strlen(str);//len的值为5C语言程序设计第6章-数组的使用全文共40页,当前为第30页。6.3字符数组与字符串4、字符串复制函数strcpy()函数调用格式:strcpy(str1,str2);函数功能:将字符串str2复制到str1对应的字符数组或存储区域中。charstr1[20],str2[20]="China";strcpy(str1,str2);puts(str1);//输出字符串str1,即China说明:str1的存储空间不能小于str2的存储空间。C语言程序设计第6章-数组的使用全文共40页,当前为第31页。6.3字符数组与字符串5、字符串连接函数strcat()

函数调用格式:strcat(str1,str2);函数功能:去掉str1后的’\0’,将字符串str2连接到str1的有效字符之后。charstr1[20]="Hello!",str2[20]="China.";strcat(str1,str2);puts(str1);//输出字符串str1,即Hello!China.说明:str1的存储空间要能容得下连接后的字符串。C语言程序设计第6章-数组的使用全文共40页,当前为第32页。6.3字符数组与字符串6、字符串比较函数strcmp()

函数调用格式:strcmp(str1,str2);函数功能:按字典序比较字符串str1和str2的大小。比较规则:将两个字符串自左至右逐个字符按ASCII值大小比较,直到出现不同的字符或遇’\0’为止。若全部字符相同,则认为两个字符串相等,返回0值;否则,计算第一对不同字符的ASCII值之差,若为正整数,则str1>str2,返回值为1;若为负整数,则str1<str2,返回值为-1。C语言程序设计第6章-数组的使用全文共40页,当前为第33页。6.3字符数组与字符串charstr1[20]="Chinese",str2[20]="China";if(strcmp(str1,str2)>0)//比较大小,输出较大者puts(str1);elseputs(str2);【例6-22】注意:字符串的比较,不能用str1>str2的形式来实现。

C语言程序设计第6章-数组的使用全文共40页,当前为第34页。6.4综合应用案例例6-23采用冒泡法对一维数组中的十个整数排序

分析设一维数组a有N个元素,要求从小到大排序。冒法排序的过程描述如下:(1)每次从首元素开始两两比较,即a[j]和a[j+1]比较,若a[j]>a[j+1]则两元素交换,否则不交换。(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。每对元素比较后都可得到“小数在先,大数在后”的结果,这样进行一轮以后,数组最大值就排在了数组最后一个位置。(3)针对所有的元素(除最后一个元素)重复以上的步骤,数组次大值就再倒数第二的位置。(4)依此类推,经过N-1轮比较后完成排序。C语言程序设计第6章-数组的使用全文共40页,当前为第35页。6.4综合应用案例54091284509128450918245098124509812最大值一轮排序4509128C语言程序设计第6章-数组的使用全文共40页,当前为第36页。#include<stdio.h>#defineN10voidmain(){inti,j,k,t,a[N];printf("请输入%d个整数:\n",N);//输入待排序的N个整数

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

温馨提示

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

评论

0/150

提交评论