C语言程序设计 课件 单元5 数组-同类型数据处理便捷方式_第1页
C语言程序设计 课件 单元5 数组-同类型数据处理便捷方式_第2页
C语言程序设计 课件 单元5 数组-同类型数据处理便捷方式_第3页
C语言程序设计 课件 单元5 数组-同类型数据处理便捷方式_第4页
C语言程序设计 课件 单元5 数组-同类型数据处理便捷方式_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

单元五

数组—同类型数据处理便捷方式导学【问题】什么是数组?

在前面所学的章节中,定义的变量都属于基本数据类型,每个变量都是单一的存储空间,当数据比较多的时候,基本的数据类型就不能满足数据存储,为此,C语言还提供了数组类型,本章将带领大家一起学习数组的相关内容。一维数组2二维数组3字符数组4数组综合运用目录1一维数组——数组相关概念数组:是用一个名字表示的一组相同类型的数据的集合,这个名字就称为数组名。

如定义:floata[10];a是数组名。一维数组——数组相关概念下标变量(或数组元素):数组中的数据分别存储在用下标区分的变量中,这些变量称为下标变量或数组元素。如:a[0]、a[1]…a[i]。每个下标变量相当于一个简单变量,数组的类型也就是该数组的下标变量的数据类型。一维数组——定义

一维数组是一组用来存放多个相同类型数据的集合,该集合中的成员称为元素,每个数组元素都由数组名和一个下标来唯一确定。

一维数组的定义方式为:类型说明符

数组名[常量表达式];一维数组——定义(1)类型说明符可以是任意基本数据类型或构造数据类型(2)数组名是用户定义的数组标识符,即数组元素共同的名字(3)方括号中的常量表达式表示数组元素的个数,数组元素的个数也称为数组长度。一维数组——定义以下数组定义是正确的:#defineN10……floatscore1[N],score2[N];intnum[10+N];charc[26];以下数组定义是不正确的:intn;floatscore[n];charstr[];

一维数组——数组元素引用数组元素引用:定义数组后,就可以通过引用数组元素的方式使用该数组中的元素,一维数组的引用格式为:数组名[下标表达式]例如:输入学生成绩for(i=0;i<5;i++)scanf("%f",&score[i]);例如:n=3;fib[n]=fib[n-1]+fib[n-2];一维数组——数组初始化数组初始化:在定义数组时给数组元素赋初值。数组初始化是在编译阶段进行的,这样能减少运行时间,提高效率。初始化赋值有以下几种形式:(1)在定义数组时,对全部数组元素赋初值例如:inta[5]={0,1,2,3,4};此时可以省略数组长度,例如:inta[]={0,1,2,3,4};

(2)在定义数组时,对部分数组元素赋初值

例如:inta[5]={1,2,3};系统为其余元素赋0。

(3)当初值的个数多于数组元素的个数时,编译出错

例如:inta[5]={0,1,2,3,4,5};/*编译出错*/一维数组——例题【例5-1】从键盘输入10个数据,并输出。一维数组——例题#include<stdio.h>intmain(){inta[10],i;printf("请输入数组元素的值:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("输出数组元素的值:\n");for(i=0;i<10;i++)printf("%3d",a[i]);return0;}#include<stdio.h>intmain(){inta[10],i;printf("请输入数组元素的值:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("输出数组元素的值:\n");for(i=0;i<10;i++)printf("%3d",a[i]);return0;}一维数组——例题【例5-2】某演讲比赛有10位评委,输入评委的打分结果,根据给分情况,找出该选手的最高分和最低分。一维数组——例题#include<stdio.h>intmain(){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);//输出最高分和最低分return0;}#include<stdio.h>intmain(){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);//输出最高分和最低分return0;}一维数组2二维数组3字符数组4数组综合运用目录1二维数组——定义1.二维数组的定义二维数组的定义与一维数组相似,其一般形式为:类型说明符

数组名[常量表达式1][常量表达式2];其中,常量表达式1表示行数,常量表达式2表示列数,数组元素个数为常量表达式1*常量表达式2,下标值从0开始。例如:inta[3][4]说明a是一个三行四列的整型数组,该数组的下标变量共有3*4个,即a[0][0]a[0][1]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]二维数组在概念上是二维的,但在存储器中是按一维线性排列的,即是按行排列的。例如上面提到的数组a[3][4],先放第一行,a[0][0]、a[0][1]、a[0][2]、a[0][3];再放第2行,a[1][0]、a[1][1]、a[1][2]、a[1][3];再放第3行,a[2][0],a[2][1],a[2][2],a[2][3]。二维数组——引用2.二维数组的引用二维数组的引用格式为:数组名[行下标][列下标]例如,b[2][3]表示数组b第3行第4列的元素二维数组——初始化3.二维数组的初始化(1)按行赋初值。例:intb[2][3]={{3,4,5},{6,7,8}}初始化后结果:345

678

(2)按数组元素在内存中排列的顺序对各元素赋初值。例:inta[2][3]={1,2,3,4,5,6}二维数组——初始化(3)给部分元素赋初值。例:inta[2][3]={{1},{4}};

初始化后结果:100

400

未赋值元素初值默认为0。

(4)数组初始化时,行长度可省略,列长度不能省略。

例如:inta[][3]={1,2,3,4,5,6,7};

intb[][4]={{1},{4,5}};二维数组——例题【例5-3】从键盘输入3行4列的数组,并输出。【源代码】#include<stdio.h>main(){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");}//每输出一行后换行二维数组——例题【例5-4】将一个3*3的矩阵存入二维数组中,找出其中的最大值以及对应的行下标和列下标。二维数组——例题#include<stdio.h>intmain(){inta[3][3],i,j;intmax,row=0,colum=0;printf("请输入二维数组的值:\n");for(i=0;i<3;i++)//二维数组的输入for(j=0;j<3;j++)scanf("%d",&a[i][j]);max=a[0][0];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);return0;}一维数组2二维数组3字符数组4数组综合运用目录1字符数组——定义1.字符数组的定义定义字符数组的方法与定义数值型数组的方法类似,只是字符数组的数据类型为char型。例如:charb[5],定义了一维字符数组bchara[3][4],定义了二维字符数组a字符数组——引用2.字符数组的引用字符数组与数值型数组的引用方式一样,可以使用下标的形式,例如,为上面定义的数组a和数组b中的第1个元素赋值,方法如下:b[0]=’a’;a[0][0]=’b’字符数组——初始化字符数组允许在定义时进行赋值,例如:chara[6]={‘M’,’o’,’n’,’d’,’a’,’y’}初始化后各元素的值为:a[0]=‘M’、a[1]=‘o’、a[2]=‘n’、a[3]=‘d’、a[4]=‘a’、a[5]=‘y’。字符数组——初始化字符数组初始化时,如果字符数组提供的数据个数小于数组元素的个数,那么多余的数组元素初始化为空字符’\0’。例如:charh[5]=[‘p’,’e’,’n’];初始化后各元素的值为:h[0]=’p’、h[1]=’e’、h[2]=’n’、h[3]=’\0’、h[4]=’\0’字符数组——字符串在c语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。在引用或处理字符串前,须首先定义和初始化字符串。字符串初始化有两种方法,一种是用字符常量初始化数组,另一种是用字符串常量初始化数组。例如:charstring1[7]={‘p’,’e’,’n’,’c’,’i’,’l’};charstring2[7]={“pencil”};charstring3[7]=”pencil”;字符串总是以‘\0’作为串的结束符,用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放这个字符结束标志‘\0’

字符数组——字符串输入输出函数1.字符串输入输出函数字符串输入输出函数包括字符串输入函数gets()和字符串输出函数puts(),其调用格式和功能如下表所示:函数调用格式功能gets(字符串名)字符串输入puts(字符串名)字符串输出

字符数组——字符串处理函数

常见的字符串处理函数包括字符串长度函数strlen()、字符串连接函数strcat()、字符串拷贝函数strcpy()等,其调用和功能如下表所示。

函数调用格式功能strlen(字符串)检测字符串的实际长度strcat(字符串1,字符串2)将字符串2连接到字符串1的后面strcpy(字符串1,字符串2)将字符串2复制给字符串1strlwr(字符串)将字符串中的字母转换成小写字母strupr(字符串)将字符串中的字母转换成大写字母strcmp(字符串1,字符串2)将两个字符串从左到右逐个比较字符ASCII码的大小字符数组——字符串【例5-5】阅读下列程序,写出程序运行后的输出结果。#include<string.h>#include<stdio.h>main(){chars[3][20]={"2345","123456","2347"};inti,k;for(k=0,i=1;i<3;i++)if(strcmp(s[k],s[i])<0)k=i;puts(s[k]);}字符数组——字符串【例5-6】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。【源代码】#include<stdio.h>main(){charstring[81];inti,num=0;intword=0;charc;gets(string);for(i=0;(c=string[i])!='\0';i++)if(c=='')word=0;elseif(word==0){word=1;num++;}printf("thereare%dwordsintheline.\n",num);}字符数组——字符串一维数组2二维数组3字符数组4数组综合运用目录1数组综合运用【例5-7】从键盘输入10个学生的成绩,要求从小到大显示这些成绩数组综合运用#include<stdio.h>intmain(){inti,j;floatt,a[10];printf("请输入学生的成绩:\n");for(i=0;i<10;i++)scanf("%f",&a[i]);for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("\n排序结果:\n");for(i=0;i<10;i++)printf("%6.1f",a[i]);printf("\n");return0;}数组综合运用【例5-8】已知某数组中有9个元素,按降序排列,再从终端输入第10个数,要求将它插入数组,仍按降序排列。数组综合运用#include<stdio.h>main(){inti,j,p,n,s,a[10]={27,6,3,28,60,87,105,54,162};for(i=0;i<9;i++){for(j=i+1;j<9;j++)if(a[i]<=a[j])p=a[i],a[i]=a[j],a[j]=p;}printf("输入参与排序的数字:");scanf("%d",&n);a[9]=n;for(i=0;i<10;i++)if(a[9]>a[i])p=a[i],a[i]=a[9],a[9]=p;for(i=0;i<10;i++)printf("%d",a[i]);}【例5-9】现有一个3行3列的数组,求二维数组中最大元素值及行列号数组综合运用数组综合运用#include<stdio.h>intmain(){inti,j,x,y,a[3][3];intmax;printf("请输入9个数:");f

温馨提示

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

最新文档

评论

0/150

提交评论