1、第6章 数组,主要内容,一、一维数组二、二维数组三、字符数组,一、一维数组,一组编了号的变量。1、定义 格式: 类型名 数组名常量表达式; int a5; float b3*2;,a,一、一维数组,2、数组元素的引用 格式: 数组名下标 下标:从0开始 如:a1,一、一维数组,3、数组元素的赋值(1)定义时赋值 int a3=1,2,3,b4=0,c=1,2,3,4; (2)程序运行中赋值 a0=1; for(i=0;i=2;i+) scanf(%d, /从键盘上输入3个数,一、一维数组,4、实例例1 从十个数中查找最大数。,a,一、一维数组,max=a0;if (maxa1) max=a1;
2、if (maxa2) max=a2;if (maxa3) max=a3; if (maxa4) max=a4;if (maxa5) max=a5; if (maxa6) max=a6;if (maxa7) max=a7;if (maxa8) max=a8;if (maxa9) max=a9;,a,max=a0;for(i=1;i=9;i+) if (maxai) max=ai;,一、一维数组,#include void main() int i, max,a10; for(i=0;ia1) a0a1 ;if (a1a2) a1a2 ;if (a2a3) a2a3 ;if (a3a4) a3a4
3、 ;if (a4a5) a4a5 ;,for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; ,一、一维数组,for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t;,for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t;,for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t;,for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t;,for(i=0; iaj+1) t=aj; aj=aj+1; aj+1=t;,一、一维数组,#include void main() int i, max,a10;
4、for(i=0;iaj+1) t=aj; aj=aj+1; aj+1=t; printf(“the sorted numbers:n”); for(i=0;i=9;i+) printf(“%d ”, ai);,一、一维数组,例3 在n个数中查找是否存在一个数 x 。折半查找法: x=45,a,i,j,mid,x=amid?,一、一维数组,思路:,给数组a15赋值 ;,读入x的值;,while (iamid) i=mid+1;,else j=mid-1;,if (ij) printf(无此元素);,i=0; j=14;,一、一维数组,#include void main() int a15=1,
5、2,3,4,5,6,7,8,9,10,11,12,13,14,15; int i,j,x,mid; scanf(%d, ,二、二维数组,1、定义格式: 类型 数组名常量表达式常量表达式; int a33;,二、二维数组,2、数组元素的引用 int a32; a01=8;,a00,a01,a10,a11,a20,a21,二、二维数组,3、赋值 int a22=1,2,3,4; a00=1; for(i=0;i=1;i+) for(j=0;j=1;j+) aij=i+j;,二、二维数组,4、实例例4 查找矩阵中的最大数。,max=-1,r=0,c=0,if (maxa00) max=a00;,if
6、 (maxa01) max=a01;,if (maxa02) max=a02;,if (maxa22) max=a22;,for(j=0;j=2;j+) if (maxa0j) max=a0j; r=0; c=j; ,.,for(i=0;i=2;i+),for(j=0;j=2;j+) if (maxaij) max=aij; r=i; c=j; ,二、二维数组,例5 矩阵的加法。,for(i=0;i=2;i+) for(j=0;j=2;j+) aij+=bij;,二、二维数组,练习: 矩阵的各元素之和。,for(i=0;i=2;i+) for(j=0;j=2;j+) ?,三、字符数组,1、定义
7、 char c15; int c25; c10=a; c20=a;,三、字符数组,2、字符数组的初始化 char c10=I,a,m,a,b,o,y; for(i=0;i=9;i+) scanf(%c,三、字符数组,3、字符串和字符串结束标志 字符串用字符数组来表示,字符串标志为0,char c10=I am a boy;,等价于,char c10=I,a,m,a,b,o,y,0;,三、字符数组,4、字符数组的输入和输出 char c10; scanf(%s,c); printf(%s,c);,三、字符数组,5、字符串处理函数(1) puts(str) :输出字符串(2) gets(str)
8、: 输入字符串(3) strcat(str1,str2) : 连接字符串(4) strcpy(str1,str2)、strncpy(str1,str2) : 字符串复制(5) strcmp(str1,str2) : 比较字符串(6) strlen(str) : 测字符串长度(7) strlwr(str) : 转换为小写(8) strupr(str) : 转换为大写,三、字符数组,6、实例例6 输入一行字符,统计其中有多少个单词,单词间用空格相隔。,word: 0-未出现新词,1-新词开始,word=0,word=1num+;,word=0,直到遇到0结束,三、字符数组,#include voi
9、d main() char string81,c; int i,num,word=0; gets(string); for(i=0;(c=stringi)!=0;i+) if (c= ) word=0; else if (word=0) word=1; num+; printf(单词总数为%d,num); ,三、字符数组,例7 从键盘上输入身份证号,截取出生年月并输出。,三、字符数组,#include void main() char string25; int i; gets(string); for(i=6;i=13;i+) ci-6=stringi; c8=0; printf(出生年月为
10、%s,c); ,四、综合实例,习题1 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。,x=87,95,98,90,89,a10=a9,a,a9=a8,a8=a7,a7=a6,a6=x,ai+1=ai,i: 69,a6=x,习题2 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。 a33: 8 1 6 3 5 7 4 9 2,四、综合实例,对第一行:k=0,h=0,if akha01 h=1;,if akha02 h=2;,k=0,h=0,for(j=1;j3;j+) if (akha0h break;,if akha1h brea
11、k;,if akha2h break;,j=0;while (akh3) akh是鞍点;,for(i=0;i3;i+),for(j=1;j3;j+) if (akh3 & j3) 没有鞍点;,四、综合实例,习题3 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。,lsff UYIJ n IUJ ;k;sdf,ABCFD fgthhy uh8ghj* 9,dffd56678 768 ,;.k,a380:,gets(a0);,for(i=0;(c=a0i)!=0;i+);, if c是大写字母 个数+1;,if c是小写字母 个数+1;,if c是.; ,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。