




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计06,1,C语言程序设计,第6章 利用数组处理批量数据,C语言程序设计06,2,第 5 章 内 容 回 顾,1. 循环结构是用来处理需要重复处理的操作的; 2.要构成一个有效的循环,应指定两个条件: (1)需要重复执行的操作,即循环体;(2)循环结束的条件 3.在c语言中可以用来实现循环结构的有三种语句: while语句;do-while语句;for语句。 4.如果循环体有多于一个的语句,应当用大括号把循环体中的多个语句括起来,形成复合语句,否则系统认为循环体只有一个简单的语句。,C语言程序设计06,3,第 5 章 内 容 回 顾,5.break语句和continue语句用来改变
2、循环状态的。 6.循环可以嵌套 7.有关循环的算法很丰富,学习了混还之后,可以写出复杂的和有趣的程序,大大拓宽编程的题材,提高编程的水平。,C语言程序设计06,4,第 5 章 内 容 回 顾,C语言程序设计06,5,第六章 利用数组处理批量数据,C语言程序设计06,6,主要内容、重点、难点,数组:有序数据的集合; 数组、数组元素; 二维数组的排列次序为“按行排列”; 字符数组; 数组名数组首元素的地址; 排序算法等算法设计问题。,主要内容,难点:一维数组、二维数组的定义和数组元素的引用; 字符串数组、字符数组的定义和数组元素的引用。,C语言程序设计06,7,为什么要用数组?,基本数据类型: i
3、nt, float/double, char 数据的处理: 根据问题需求,先作几个简单变量的定义,然后对这些变量赋值并作相应的运算即得结果; 各变量独立存储,之间没有任何关系,不需要也不可能保留变量的历史值。,例如:输入10个实数,求其平均值。 #include int main() int i; float num, sum=0; printf(input 10 numbers: n); for (i=1; i=10; i+) scanf(%f, ,C语言程序设计06,8,为什么要用数组?,问题:给一组数排序,这组 数该 如何存放呢,? 这些数据如何存放才便于排序,1,8,8,8,8,8,8
4、,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语言程序设计06,9,怎样定义和引用一维数组,6.2.1 怎样定义一维数组,数组是具有相同类型的数据的顺序集合 数组可以在内存中连续存储多个元素,0 1 2 3,下标标明了元素在数组中的位置 ,从0开始,数组元素,下标,Rate0 Rate1 Rate2 Rate3,C语言程序设计06,10,怎样定义和引用一维数组,6.2.1 怎样定义一维数组,例: int a10;,数组说明中其他常见的错误: float a0;/* 数组
5、大小为0没有意义 */ int b(2)(3); /* 不能使用圆括号 */ int k, ak; /* 不能用变量说明数组大小*/,定义一个整形数组, 数组名为a。 a0-a9,共10个元素, 此数组有10个元素,C语言程序设计06,11,怎样定义和引用一维数组,6.2.1 怎样定义一维数组,高地址,低地址,数组下标从0开始 数组元素在内存中按顺序连续存放 数组名代表数组的首地址,即score的值与score0的地址值相同,int score5;,C语言程序设计06,12,6.2.2 引用一维数组元素,怎样定义和引用一维数组,注意: 定义数组时用到的“数组名常量表达式” 和引用数组元素时用到
6、的“数组名下标” 是有区别的。,例如: a0=a5+a7-a2*3 *下标可以是整型常量或整型表达式*。,例 int a10; t=a6;,数组名下标表达式;,C语言程序设计06,13,怎样定义和引用一维数组,例6.1 引用数组元素。 1. 问题提出: 逆序输出 2. 解题思路: 循环赋值,数组逆序输出 3. 编写程序: 4. 运行结果: 5050 5. 程序分析: 数组大小用宏定义; 6. 程序改进:,#include #define N 10 void main() int i,aN; for (i=0; i=0; i-) printf(%d”,ai); printf(n); ,运行结果如
7、下: 9 8 7 6 5 4 3 2 1 0,C语言程序设计06,14,怎样定义和引用一维数组,1. 在定义数组时对数组元素赋以初值。 例如:int a10=0,1,2,3,4,5,6,7,8,9;,6.2.3 一维数组元素的初始化,2. 可以只给一部分元素赋值。 例如: int a10=0,1,2,3,4;,3. 如果想使一个数组中全部元素值为0,可以写成: int a10=0,0,0,0,0,0,0,0,0,0; 或 int a10=0;,C语言程序设计06,15,怎样定义和引用一维数组,4. 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。 例如:int a5=
8、1,2,3,4,5; 也可以写成 int a=1,2,3,4,5; int a10=1,2,3,4,5; 只初始化前5个元素,后5个元素为0。,6.2.3 一维数组元素的初始化,C语言程序设计06,16,怎样定义和引用一维数组,例6.2 Fibonacci数列 1. 问题提出: a1=a2=1 an=an-1+an-2 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: if : 每行输出5个数 6. 程序改进:,#include void main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i2
9、0;i+) if(i%5=0) printf(n); printf(%12d,fi) /*For循环结束*/ /*程序结束*/,运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,C语言程序设计06,17,怎样定义和引用一维数组,例6.3 按年龄排列 1. 问题提出: n个人, 由小到大 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: if : 每行输出5个数 6. 程序改进:,C语言程序设计06,18,怎样定义和引用一维数组,例6.3 按年龄排列 1. 问题提出: n个人
10、, 由小到大 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,#include void main() int a10; int i,j,t; printf(input 10 numbers :n); for (i=0;i10;i+) scanf(%d,,for(j=0;jai+1) t=ai;ai=ai+1; ai+1=t; printf(the sorted numbers :n); for(i=0;i10;i+) printf(%d ,ai); printf(n); /*程序结束*/,程序运行结果如下: input 10 numbers: 1 0
11、 4 8 12 65 -76 100 -45 123 the sorted numbers: -76 -45 0 1 4 8 12 65 100 123,C语言程序设计06,19,怎样定义和引用二维数组,6.3.1 怎样定义二维数组,int num42;,4 X 2 = 8,数据类型 数组名常量表达式1 常量表达式2;,错误的定义: int a3,4, b(3,4); int c , d(3)(4);,C语言程序设计06,20,怎样定义和引用二维数组,注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 例如:可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,
12、每个元素又是一个包含4个元素的一维数组。,6.3.1 怎样定义二维数组,C语言程序设计06,21,怎样定义和引用二维数组,int a23;,a10,a11,a12,a00,a01,a02,先按行存放,再按列存放,a00 a01 a02 a10 a11 a12,6.3.1 怎样定义二维数组,C语言程序设计06,22,怎样定义和引用二维数组,6.3.1 怎样定义二维数组,地址 值 数组元素,b00 b01 b02 b10 b11 b12 b20 b21 b22,3000H 3002H 3004H 3006H 3008H 300AH 300CH 300EH 3010H,例如:整型数组 b33= 1,
13、2,3, 4,5,6, 7,8,9 ;,1 2 3,4 5 6,789,C语言程序设计06,23,怎样定义和引用二维数组,6.3.2 怎样引用二维数组的元素,数组名行下标 列下标;,int a34; a00=3; a01=a00+10; a34=5; /*下标越界*/,C语言程序设计06,24,怎样定义和引用二维数组,6.3.3 二 维 数 组 的 初 始 化,按行赋初值: 例如: int a23=1, 2, 3, 4, 5, 6; int a23=1, 4, 5; 按数组元素存放顺序赋初值: 例如: int a23=1, 2, 3, 4, 5, 6; int a23=1, 2, 3; 省略行
14、数(根据初值个数和列声明自动确定行数) 例如: int a4=0,0,3,0,10; int c3=1, 2, 3;,4行,0 0 3 0 0 0 0 0 0 10 0 0,C语言程序设计06,25,怎样定义和引用二维数组,例6.4 矩阵转置 1. 问题提出: 双层循环 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,#include void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i2;i+) for (j=0;j3;j+) printf(%5d,ai
15、j); bji=aij; printf(n); ,C语言程序设计06,26,怎样定义和引用二维数组,例6.4 矩阵转置 1. 问题提出: 双层循环 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进: for (i=0;i=2;i+) ?,printf(array b:n); for (i=0;i3;i+) for(j=0;j2;j+) printf(%5d,bij); printf(n); return 0; ,运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,C语言程序设计06,27,怎样定义和引用二维数
16、组,例6.5 成绩统计分析 1. 问题提出: 平均成绩最高 学生的序号 2. 解题思路: 二维数组:306 平均成绩:最后一列 最高,学号 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,C语言程序设计06,28,怎样定义和引用二维数组,例6.5 成绩统计分析 1. 问题提出: 平均成绩最高 学生的序号 2. 解题思路: 二维数组:306 平均成绩:最后一列 最高,学号 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,C语言程序设计06,29,怎样定义和引用二维数组,例6.5 成绩统计分析 1. 问题提出: 平均成绩最高 学生的序号 2. 解题思
17、路: 二维数组:306 平均成绩:最后一列 最高,学号 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,C语言程序设计06,30,怎样定义和引用二维数组,例6.5 成绩统计分析 1. 问题提出: 平均成绩最高 学生的序号 2. 解题思路: 二维数组:306 平均成绩:最后一列 最高,学号 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,#include void main() int i,j,max_i; float sum,max=0; float a56=78,82,93,74,65,91,82,72,76,67, 100,90,85,72,
18、98, 67,89,90,65,78, 77,88,99,45,89 ; /5个学生5门课的成绩,平均成绩的初始值为0,for (i=0;i5;i+) sum=0; for (j=0;j5;j+) sum=sum+aij; /求出5门课的总成绩 ai5=sum/5; /求出平均成绩,存入数组每行的第5个元素 ,C语言程序设计06,31,怎样定义和引用二维数组,例6.5 成绩统计分析 1. 问题提出: 平均成绩最高 学生的序号 2. 解题思路: 二维数组:306 平均成绩:最后一列 最高,学号 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,for (i=0;imax)
19、max=ai5;max_i=i;,printf(“stu_order=%dn”,max_i); /输出最大值的序号 printf(“max=%7.2fn”,max); /输出最大值 return 0; ,for (i=0;i5;i+) sum=0; for (j=0;j5;j+) sum=sum+aij; /求出5门课的总成绩 ai5=sum/5; /求出平均成绩,存入数组每行的第5个元素 ,打擂台算法,找出最大值,C语言程序设计06,32,P179,习题4,有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。 分析:定义一个二维数组a44:,C语言程序设计06,3
20、3,字符数组,6.4.1 怎样定义字符数组及对其初始化,字符数组的初始化 逐个字符赋值 用字符串常量 字符数组的引用,定义,例 char c10, ch34;,C语言程序设计06,34,字符数组,6.4.1 怎样定义字符数组及对其初始化,C语言程序设计06,35,字符数组,例6.6 字符图案 1. 问题提出: 菱形 2. 解题思路: 二维数组:* 3. 编写程序: 4. 运行结果: 5. 程序分析: Diamond5 6. 程序改进:,#include void main() char diamond5= , ,*,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j;
21、 for (i=0;i5;i+) for (j=0;j5;j+) printf(%c,diamondij); printf(n); ,运行结果: * * * * * * * *,C语言程序设计06,36,字符数组,例 输出字符串 1. 问题提出: 2. 解题思路: 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,#include void main() char c11=I, ,a,m, ,a, , b,o,y,.; /*字符数组初始化*/ int i; for(i=0;i10;i+) printf(%c,ci); printf(n); ,运行结果:I am a boy
22、.,C语言程序设计06,37,字符数组,6.4.3 字符串和字符串结束标志,字符串 字符串及其结束标志 无字符串变量,用字符数组处理字符串 字符串结束标志:0,C语言程序设计06,38,字符数组,6.4.4 怎样进行字符数组的输入输出,字符串的输入输出 逐个字符I/O: %c 整个字符串I/O: %s,C语言程序设计06,39,字符数组,6.4.4 怎样进行字符数组的输入输出,说明: 1. 输出字符不包括结束符0。 2.用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。 3.如果数组长度大于字符串实际长度,也只输出到遇0结束。 4.如果一个字符数组中包含一
23、个以上0 ,则遇第一个0时输出就结束。 5.可以用scanf函数输入一个字符串。,C语言程序设计06,40,字符数组,6.4.4 怎样进行字符数组的输入输出,如果利用一个scanf函数输入多个字符串,则在输入时以空格分隔。 例如: char strl5,str25,str35; scanf(%s %s %s,str1,str2,str3); 输入数据: How are you? 数组中未被赋值的元素的值自动置0。,C语言程序设计06,41,字符数组,6.4.4 怎样进行字符数组的输入输出,scanf函数中的输入项如果字符数组名。不要再加地址符 printf(%s,c);,C语言程序设计06,4
24、2,字符数组,6.4.5 字 符 串 处 理 函 数,C语言程序设计06,43,字符数组,例6.7 字符串比较 1. 问题提出: 2. 解题思路: ASCII码比较 3. 编写程序: 4. 运行结果: 5. 程序分析: #include 6. 程序改进: HOLLAND,#include #include void main ( ) char string20; char str320; int i; for (i=0;i3;i+) gets (stri);,if (strcmp(str0,str1)0) strcpy(string,str0) else strcpy(string,str1)
25、; if (strcmp(str2,string)0) strcpy(string,str2); printf(nthe largest string is n%sn,string); ,运行结果如下: CHINA HOLLAND AMERICA the largest string is HOLLAND,C语言程序设计06,44,字符数组,例6.8 统计单词 1. 问题提出: 单词之间用空格分隔 2. 解题思路: 区分 新的单词 原有单词 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,C语言程序设计06,45,字符数组,例6.8 统计单词 1. 问题提出: 单词之间
26、用空格分隔 2. 解题思路: 区分 新的单词 原有单词 3. 编写程序: 4. 运行结果: 5. 程序分析: 6. 程序改进:,#include void main() char string81; int i,num=0,word=0; char c; gets(string); for (i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(There are %d words in the line.n,num); return 0; ,运行情况如下: I am a boy. There a
27、re 4 words in the line.,C语言程序设计06,46,提高部分,6.5.1 为什么在定义二维数组时采用两对双括号的形式,例 int a34; float b25; int c234; int a3,4; (),C语言程序设计06,47,提高部分,6.5.2 对C的字符串函数的详细说明,常用的字符串处理函数 包含在头文件 string.h,字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以0结束,字符串输入函数gets 格式:gets(字符数组) 功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0 说明:输入串长度应小于字符数组维数,C语言程序设计06,48,提高部分,6.5.2 对C的字符串函数的详细说明,字符串连接函数strcat 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消, 新串最后加0,C语言程序设计06,49,提高部分,6.5.2 对C的字符串函数的详细说明,字符串拷贝
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论