高级语言程序设计教学课件数组3_第1页
高级语言程序设计教学课件数组3_第2页
高级语言程序设计教学课件数组3_第3页
高级语言程序设计教学课件数组3_第4页
高级语言程序设计教学课件数组3_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、1一维数组元素的输入 int i , a6;for(i= 0; i6; i+ +) scanf(“%d”, &ai);for(i= 0; i6; i+ +) printf(“%5d”, ai);一维数组元素的输出 牛牛文库文档分享2【例6-3】从键盘输入10个互不相同的整数并存放在一维数组中,找出值最大的数组元素,并输出最大值所在的元素下标0 1234567898-93043879823796228kk k=0; for(i=1; i10; i+) if ( akai ) k = i; 牛牛文库文档分享找最大值,这两个程序的区别? max=0; for(i=1; i10; i+) if ( a

2、maxai ) max = i; printf(“max=a%d=%dn,max,amax); max=a0; for(i=1; i10; i+) if ( max ai ) max = ai; printf(“max=%dn,max); 牛牛文库文档分享4【例6-5】从键盘上输入一个数x,在给定的数组a中查找x。如果找到了,输出相应的下标,否则,输出“Not Found”。40 1234567892219368098122055-8165555555555555555 flag = 0; for(i=0; i10; i+) if(ai=x) printf(Index is %dn,i); f

3、lag = 1; break; if( flag=0 ) printf(“Not Foundn”); 牛牛文库文档分享二分查找(折半查找,对有序表的查找)1、思想: 表头为left,表尾为right,k为要查找的关键字计算中间数据的序号mid=(left+right)/2;若 k=amid,成功;否则:若 kamid,则 left=mid+1;重复1 当 leftright时,不成功。 牛牛文库文档分享折半查找过程0123456789101101234567891011X=20 牛牛文库文档分享rightleft,查找失败012345678910110123456789101101234567

4、89101101234567891011X=7 牛牛文库文档分享8【例】 读入10个整数,将数组中的元素逆序存放分析当程序中读入任意10个数:8、-9、30、43、87、98、23、79、62、28时0 1234567898-930438798237962282862792398874330-98 for(i=0; i5; i+) t = ai; ai = a9-i; a9-i = t; 牛牛文库文档分享9 for(i=0,j=9; ij ; i+,j-) t=ai; ai=aj; aj= t;ij 牛牛文库文档分享10【例】已知十个整数升序排列,现输入整数x, 要求将x插入到合适的位置,使得

5、数列依然升序分析1. 找到插入位置p (默认插最后,设x为18)2. 将插入位置p之后的元素后移;3. 将x插入位置p0 12345678910147912151720213018p1818181818181830212018for(i=0,p=10; i10; i+) if(x=p+1; i-) ai=ai-1; ap=x; 牛牛文库文档分享查找并删除ai=ai+1/*找到后前移,且数组元素个数减少*/if( flag ) for( i=p; in-1; i+ ) ai=ai+1; n=n-1; 牛牛文库文档分享12【例6-6】输入一个正整数n(1n10),再输入n个整数,用选择法将它们从小

6、到大排序后输出 for(k=0; kn-1; k+) min=k; for(i=k+1; in; i+) if(aiamin) min=i; temp=amin; amin=ak; ak=temp; 牛牛文库文档分享13排序问题(冒泡排序法及改进) for(i=0; in-1; i+) for(j=0; jaj+1) temp=aj; aj=aj+1; aj+1=temp; for(i=0; in-1; i+) flag=0; /无交换0 for(j=0; jaj+1) temp=aj; aj=aj+1; aj+1=temp; flag=1; if(!flag) break; /无交换,排序完

7、成 牛牛文库文档分享14思考问题:在数学中我们常常会用到矩阵 ,它的结构如下:怎样用一种数据结构来表示矩阵呢? 牛牛文库文档分享156.3二维数组及多维数组1、二维数组的定义2、二维数组理解3、二维数组元素的引用4、二维数组元素的初始化5、二维数组的应用 牛牛文库文档分享161、二维数组的定义定义方式:数据类型数组名常量表达式1常量表达式2;数组元素的存放顺序原因:内存是一维的二维数组:按行序优先例 int a34; float b25; int a3,4; 行数下标从0开始列数下标从0开始元素个数=行数*列数int a32543210a21a20a11a10a01a00 牛牛文库文档分享17

8、例 int a34;每个元素ai是由包含4个元素的一维数组组成2、二维数组的理解0a001a012a023a034a105a116a127a138a209a2110a2211a23a0a1a2a00a01a02a03a10a11a12a13a20a21a22a23a00a01a02a03a10a11a12a13a20a21a22a23把二维数组a理解成由3个元素组成的一维数组a2a1a0 牛牛文库文档分享183、二维数组元素的引用数组名下标1下标24、二维数组元素的初始化分行初始化按元素排列顺序初始化例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全

9、部初始化例 int a3=1,4,5;a00a01a02a10a11a12100450第一维长度省略初始化例 int a23=1,2,4;a00a01a02a10a11a12120400部分初始化例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化例 int a23=1,2,4;a00a01a02a10a11a12124000部分初始化例 int a3=1,2,3,4,5;a00a01a02a10a11a12123450第一维长度省略初始化 牛牛文库文档分享19int a34; for(i=0; i3; i+) for(j=0; j4; j+)

10、 scanf(%d, &aij);二维数组元素的输入输出for(i=0; i3; i+) for(j=0; j arowcol,令row = i; col = j 3. 输出:row、col和arowcol 牛牛文库文档分享22【例6-10】在一个二维数组中,找出最大的元素值以及最大元素的行下标和列下标,并输出该数组#inlcude main() int row, col, i, j; int a32; /*输入3 x 2的数组 */ for(i=0; i3; i+) for(j=0; j2; j+) scanf(“%d”, &aij); 牛牛文库文档分享23 row = 0; col = 0

11、; for(i=0; i3; i+) for(j=0; j2; j+) if (arowcolaij) row = i; col = j; 牛牛文库文档分享24 printf(“max a%d%d=%dn”, row, col, arowcol); 牛牛文库文档分享25【例6-11】 输入一个正整数n(1n6),根据下式生成1个nn的方阵,转置(行列互换)后输出分析:1. 输入:方阵的行数 n2. 处理:(a) 循环计算出nn方阵每个元素的值;(b) 将nn方阵转置;3. 输出:循环输出转置前和转置后的方阵。 牛牛文库文档分享26例如:n=3 转置前 转置后for(i=0; in; i+) f

12、or(j=0; ji; j+) temp = aij; aij = aji; aji = temp; 牛牛文库文档分享271、先输入n的值#include main() int i, j, k, n, temp; int a66=0; printf(Enter N:); scanf(%d, &n); 牛牛文库文档分享282、计算并打印出原始矩阵 for(i=0; in; i+) for(j=0; jn; j+) aij = i*n + j + 1; printf(%4d, aij); printf(“n”); 牛牛文库文档分享293、将矩阵转置 for(i=0; in; i+) for(j=0

13、; ji; j+) temp = aij; aij = aji; aji = temp; 牛牛文库文档分享304、打印出转置后的矩阵 printf(“转置矩阵:n); for(i=0; in; i+) for(j=0; jn; j+) printf(%4d, aij); printf(n); 牛牛文库文档分享31【例6-12】求NN阶二维数组的主对角线元素之和 sum=0; for(i=0; in; i+) sum = sum + aii; 牛牛文库文档分享32【例】求NN阶二维数组每一行元素之和数组 a数组 bb0b1b2 牛牛文库文档分享33【例】求NN阶二维数组每一行元素之和 int b

14、3=0 ; for(i=0; i3; i+) for(j=0; j4; j+) bi+=aij; for(i=0; i3; i+) printf(%5d, bi); b0b1b2 牛牛文库文档分享34main()int a66=0,i,j;for(i=0;i6;i+) /主对角线和第0列赋1 ai0=1; aii=1;for(i=2;i6;i+) /其他元素 ai,j = ai-1,j-1 + ai-1,j for(j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;i6;i+) for(j=0;j=i;j+) printf(%4d,aij); printf(n); 【

15、例】 杨辉三角形11110110011000110000111112113311464115101051 牛牛文库文档分享35在程序中使数组元素获得值的方法说明数组的同时进行初始化缺点:数据相对固定用scanf语句由用户输入缺点:当数组规模较大时,需要读入的数据会很多利用循环变量为数组赋值int a23; for(i=0;i2;i+) for (j=0;j3;j+) scanf(“%d”,&aij);k=1;for(i=0; i4; i+) for(j=0; j4; j+) aij= k+; 牛牛文库文档分享3636术语含义下标规律主对角线从矩阵的左上角至右下角的连线i=j上三角主对角线以上的

16、部分ij下三角主对角线以下的部分ij副对角线从矩阵的右上角至左下角的连线i+j=N-1矩阵的术语与二维数组下标的对应关系 牛牛文库文档分享37例 在程序中使数组元素获得值的方法初始化,缺点是数据相对固定利用scanf当数组元素有规律时,利用循环变量为数组赋值k=1;for(i=0; i4; i+) for(j=0; j4; j+) aij = k+;for(i=0; i2; i+) for(j=0; j3; j+) scanf(%d, &aij); 牛牛文库文档分享38多 维 数 组int c100100100int b2340b0001b0012b0023b0034b0105b0116b01

17、27b013b020b021b022b023b100b101b102b103b110b111b112b11320b12021b12122b12223b123 牛牛文库文档分享396.5字符数组和字符串1、使用字符数组存储字符序列定义定义格式与一维数组相同字符数组的引用逐个字符引用,与一维数组相同 牛牛文库文档分享40逐个数组元素输入输出char c15 ;for( i = 0 ; i 15 ; i + ) scanf(“%c”, &ci); /* ci=getchar(); */ for( i = 0 ; i 15 ; i + ) printf(“%c”, ci); /* putchar(ci

18、);*/ 字符数组的输入输出 牛牛文库文档分享41main() char c10 =I, ,a,m, ,a, , b, o, y; int i; for(i=0; i10; i+) printf(%c, ci); printf(n);例 逐个输出字符序列0I12a3m45a67b8o9y 牛牛文库文档分享42注意上述字符数组c中存放的不是字符串说明处理连续多个字符时要知道它的长度连续读入和输出字符时要一个一个字符进行 牛牛文库文档分享432、C语言的字符串特点C语言没有字符串变量,用字符数组代替。所有的字符串均以串尾标志0结束该字符也可以使用NULL表示,ASCII码值为0要存储一个长度为n的

19、字符串,需要n+1个字符空间使用字符数组来处理字符串时,数组元素的个数也需要多1个例如:char str8 = program;program0str0str1str2str3str4str5str6str7 牛牛文库文档分享44【例6-14】 输入一个以回车结束的字符串(至少10个字符),它由数字字符组成,将该字符串转换成整数后输出#include void main(void) int i,n; char s10; printf(Enter a string:); i=0; while( (si=getchar() !=n) i+; si=0; 牛牛文库文档分享45 n=0; for(i=

20、0; si!=0; i+) if( si=0 & si=9 ) n = n*10+(si-0); else break; printf(digit=%dn,n);将字符串转换为整数 牛牛文库文档分享463、字符串存储的初始化逐个字符赋初值注意如果在中的初始字符长度大于数组定义长度,语法出错如果在中的初始字符长度小于数组定义长度,缺省的数据自动置NULL字符00ch4ch3ch2ch1ch0olleH例 char ch6=H,e,l,l,o,0;ch5 牛牛文库文档分享47 char str8 = “China” ;Chin a0Chin a00 0 字符串方式初始化char str6 = “C

21、hina” ; char str6 = “China” ;char str = “China” ;若字符串长度字符数组长度,其余元素自动赋0 牛牛文库文档分享484、多个字符串的存储要存储1个字符串,需要一个一维字符数组,那么,如果有多个字符串,怎样存储呢?char911=Load, Pick, New, Save, Write to, Directory, Change dir, OS shell, Quit;使用二维字符数组 牛牛文库文档分享495、常用的字符串处理函数字符串的输入输出使用格式输入/输出函数 %s例 用%s main() char str6; scanf(%s, str);

22、 printf(%s, str);难点:用字符数组名,而不是元素输入串长度数组元素个数遇空格、Tab键或回车结束自动加0 牛牛文库文档分享50main() char a=h,e,l,l,0,o,!,0; printf(%s, a);问题: 下面的程序输出的结果是多少?输出:hell数组中有多个0时,遇第一个结束Hell0o!0 牛牛文库文档分享51main() int i; char a=h,e,l,l,0,o,!,0; for( i = 0 ; i 8 ; i + ) printf( “%c”, ai );问题: 下面的程序输出的结果是多少?输出: hell o!Hell0o!0 牛牛文库文

23、档分享52main() char a15, b5, c5; scanf(%s%s%s, a, b, c); printf(a=%snb=%snc=%sn, a, b, c);运行情况:输入:How are you?输出:a=How b=are c=you?例 逐个输入字符串0woH0era0?uoyscanf中%s格式符,遇空格、Tab或回车结束 牛牛文库文档分享53格式:puts(字符数组)功能:向显示器输出字符串(并且输出后换行)说明:字符数组必须以0结束专门的字符串输入输出函数字符串输出字符串函数main() char str1=China; char str2=Bei jing; pu

24、ts(str1); puts(str2); 牛牛文库文档分享54格式:gets(字符数组)功能:从键盘输入一个以回车结束的字符串放入字符 数组中,并自动加0说明:输入串长度应小于字符数组维数字符串输入函数gets 牛牛文库文档分享55#include main( ) char string80; printf(Input a string:); gets(string); puts(string);Input a string:How are you?How are you? 牛牛文库文档分享56【例6-16】编写程序,从键盘上输入一个字符串,统计字母、数字和其它字符的个数#include v

25、oid main() char str80; int i, m=0, n=0, k=0; gets(str); for(i=0; stri!=0; i+) if (stri=a&stri=A&stri=0 & stri=9) n+; else k+; 牛牛文库文档分享57【例6-17】已知两个字符串,要求将第二个字符串连接到第一个字符串后面。#include stdio.hmain( ) char s180,s280; int i=0, j=0; gets(s1); gets(s2); while(s1i!=0) /* 定位结束标志*/ i+; while(s2j!=0) /*将s2接到s1后*/ s1i=s2j; i+; j+; s1i=0; puts(s1); 0DCBA0GFEs1s20GFEDCBAs1 牛牛文库文档分享58字符串连接函数strcat(String Catenate)格式:strcat(字符数组1, 字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明: 字符数组1必须足够大 连接前,两串均以0结束; 连接后,串1的0取消,新串最后加0 牛牛文库文档分享59m

温馨提示

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

评论

0/150

提交评论