[理学]C第六章数组.ppt_第1页
[理学]C第六章数组.ppt_第2页
[理学]C第六章数组.ppt_第3页
[理学]C第六章数组.ppt_第4页
[理学]C第六章数组.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计,第6章 数组,问题:给一组数排序,这组数该如何存放?,? 这些数据如何存放才便于排序,1,8,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,C语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。,一个班学生的学习成绩 一行文字 一个矩阵 这些数据的特点是: 1.具有相同的数据类型 2.使用过程中需要保留原始数据,一组固定数量的同类型相关数据的集合。是一种用户自定义的构造型数据类型。 数组是一组具有相同名字, 不同下标的下标变量。数组中各元素在内存中占据连续的存储单元。 数组必须定义后使用。 数组名即为该数组的地址。,数组,本章要点,掌握一维、二维数组的定义和引用方法 掌握一维、二维数组的存储结构以及初始化方法。 掌握字符数组、字符串以及字符串数组的特点。 掌握有关一维数组的有关算法。,一维数组,二维数组,第6章 数组,6.1 一维数组,一维数组的定义 一维数组元素的引用 一维数组的初始化 一维数组程序举例,1.一维数组的定义,定义格式: 数据类型 数组名常量表达式; 如: int a10;,1) 定义一个数组,名为a, 有十个元素,元素名为 a0、 a1 . a9, 且都是整型量。 2) 数组名 a 表示该数组中第一个元素 a0 的地址。数组名是地址常量。 3) 经过定义的数组,编译后,会分配到一段连续的内存单元。其首地址即数组名 a。 4) 数组定义后,编译时无越界保护。,5) 数组定义中的常量表达式不能是变量。 int n; scanf (“%d”,2.一维数组元素的引用,数组不能以整体形式参加数据处理,参加数据处理的只能是数组元素。 引用数组元素的方法:下标法,即用数组名及其下标表示数组元素。,void main ( ) char a20; int i; for (i=0; i=14; i+) scanf (“%c”, ,运行结果: I am a student. I am a student.,void main ( ) float sum = 0, aver; float a5; int i; for (i = 0; i 5; i+ +) scanf (“%f ”, ,3.一维数组的初始化,在定义数组时对数组元素赋予初值。,例:int a10=2, 4, 6, 8, 10, 12, 14, 16, 18, 20; char a5=C,h,i,n,a;,char c6=“China”; 或char c6=“China”;,也可 int a =2, 4, 6, 8, 10, 12, 14, 16, 18, 20; char c = “China”;,通过赋初值定义数组的大小,int a10=1; int b2=1,2,3;,不够,其它自动赋为0,多余则出错,4. 程序举例,例:输入10个数,求出其中最大值 例:将数组的各个元素倒过来存储。 例: 用数组计算输出前40项Fibonacci序列,#include void main( ) int i,max,a10; printf(“input 10 numbers:n“); for(i=0;i10;i+) scanf(“%d“,max=a0; for(i=1;imax) max=ai; printf(“maximum=%dn“ ,max); ,例: 输入10个数,求出其中最大值,如何求出最大值的下标?,例: 将数组的各个元素倒过来存储。,#include void main( ) int i,t, a11; printf(“input 10 numbers:n“); for(i=1;i11;i+) scanf(“%d“,for(i=1;i6;i+) t=ai; ai=a11-i; a11-i=t; for(i=1;i11;i+) printf(“%d “,ai); ,例: 用数组计算输出前40项Fibonacci序列,void main() double a40; int k; a0=1; a1=1; for ( k=2; k40; k+) ak=ak-1+ak-2; for (k=0; k40; k+) if (k%5=0) printf(“n”); printf(“%10.0f”,ak); ,6.2 二维数组的定义和引用,二维数组的定义 二维数组的引用 二维数组的初始化 二维数组程序举例,1. 二维数组定义,定义 数据类型 数组名常量表达式 常量表达式; 如: int a34; 三行四列, 各个元素皆是整型量. a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23,a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23,在内存中按行顺序存放,二维数组由若干个一维数组组成 二维数组名也是一个地址常量 二维数组元素的地址,二维数组a被看作数组名 分别为a0,a1,a2三 个一维数组元素组成,二维数组名a是一个地址 常量,int a23;,下标法: 数组名下标表达式1下标表达式2,例如:double w42; w01 wij wi+jj+k,每个下标都不要超越数组的上下界,2. 二维数组元素的引用,3. 二维数组的初始化,(1) 所赋初值个数与数组元素的个数相同,int a43=1,2,3,4,5,6,7,8,9,10,11,12;,(2) 每行所赋初值个数与数组元素的个数不同,int a43=1,2,4,5,7,10;,(3) 所赋初值行数少于数组行数,int a43=1,2,4,5;,(4) 赋初值时省略行花括号对,int a43=1,2,4,5;,通过赋初值定义二维数组的大小,int a3= 1,2,3,4,5,6,8;,int a43= 1,2,3,4,5,6,8;,int c3=1,2,3,4,5;,int c23=1,2,3,4,5,(1)第二维的体积不可省略; (2)初值个数能被第二维的值除尽时,商即为第一维的大小;否则商数加1是第一维的大小。,4.二维数组举例,例:通过键盘给23的二维数组输入数据,然后输出。 例:一个学习小组有5个人,每个人有3门课的考试成绩。求全组各科的平均成绩和各科总平均成绩。 例:找出矩阵中的最大元素及其位置。 例 :求一个矩阵的转置矩阵,例:通过键盘给23的二维数组输入数据,然后输出。,void main() int a23,i,j; printf(“Enter data by line:n”); for(i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”, ,2 3 10 20 30,思考: for(i=0;i3;i+) for(j=0;j2;j+) scanf(“%d”,按列输入,例: 一个学习小组有5个人,每个人有3门课的考试成绩。求全组各科的平均成绩和各科总平均成绩。,#include void main( ) int i,j,s,l,v3,a53; printf(“input scoren“);,for(i=0;i3;i+) s=0; for(j=0;j5;j+) scanf(“%d“, ,例:找出矩阵中的最大元素及其位置。,#include #include #include void main( ) int i,j,m,n,row,col,d101101; m=6; n=10; srand(unsigned) time(NULL); for(i=1;im+1;i+) for(j=1;jn+1;j+) dij=rand() 100+1; printf(“%4d “,dij); printf(“n”); ,row=1; col=1; for(i=1;idrowcol) row=i;col=j; printf(“n(%d,%d): %d“,row,col,drowcol); ,int maxnum=10; int result; srand( (unsigned) time(NULL); result= rand()%maxnum; /产生0 maxnum-1之间的随机数,例 :求一个矩阵的转置矩阵,#define M 3 #define N 4 void main() int aMN, bNM, k, j; for (i=0; iM; i+) for (j=0; jN; j+) scanf (“%d”, ,3 5 6 7 6 8 2 9 2 4 5 6,2 4 5 6 6 8 2 9 3 5 6 7,练习1:将一个n阶方阵转置。 练习2:求一个方阵对角线元素之和。 练习3:计算两个矩阵的乘积。 练习4:有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。,6.3 字符数组,字符数组与字符串 字符串数组 程序举例,1.字符数组与字符串,用来存放字符量的数组称为字符数组。 字符数组的初始化。 C语言允许用字符串的方式对数组作初始化赋值。,char c=C, ,p,r,o,g,r,a,m; char b=“C program”; char c=“C program”;,不同之处?,字符数组的输入输出,可用scanf函数和printf函数一次性输入输出一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。,void main() char c=“Im a computer teacher.”; printf(“ %s n”, c); ,void main() char c30; printf(“Please input a string:n”); scanf(“%s”,c); printf(“%sn”,c); ,有空格和无空格的字符串?,常用字符数组(字符串)函数,strcpy char*strcpy(char dest,char scr) strcat char*strcat(char dest,char scr) atoi int atoi(char s) itoa char* itoa(int n,char s,int radix) strcmp int strcmp(char s1,char s2) strlen int strlen(char s) strupr /strlwr char* strupr(char s) gets char* gets(char s) puts int puts(char s),接受空格,2.字符串数组,即存放字符串的数组。 二维数组由若干个一维数组组成。 二维字符数组可以看成以字符串为元素的一维数组,称为字符串数组。 用二维字符数组实现: char name1080; 用一维数组来理解:name共有10个元素,每个元素可以存放80个字符(字符串的有效字符为79)。,在定义时赋初值 char ca36=“A”,”BBB”,”CCCCC” char ca6=“A”, “BBB”, “CCCCC”;,举例:,char a34=“A”, “BB”, “CCC”;,0,A,0,B,B,0,C,C,C,gets(a2); /*重新赋值*/,3.程序举例,大小写字母转换 回文 字符串比较大小 二维字符数组,例: 输入字符串,将其中所有大写英文字母变换为小写字母。,#include #include void main( ) char str255; int len,i; scanf(“%s“,str); len=strlen(str); /* 求字符串的长度 */ for(i=0;i=A ,例: 去掉字符串中的所有数字字符。,#include #include void main( ) char s41; int i,n; gets(s); i=0; n=0;,while(si) if (si=0 ,例:判断字符串是否为回文,#include #include void main() char s41; int i,j,length; gets(s); length=strlen(s);,for(i=0,j=length-1;ij;i+,j-) if (sj!=si) break; if (ij) printf(“No“); else printf(“Yes“); ,#include #include void main( ) char str10, t10, k; gets(str); for (k=1; k0) strcpy( str, t); puts(str); ,输入: China

温馨提示

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

评论

0/150

提交评论