C语言课件第07章

上传人:cl****1 文档编号:583969529 上传时间:2024-08-30 格式:PPT 页数:41 大小:4.91MB
返回 下载 相关 举报
C语言课件第07章_第1页
第1页 / 共41页
C语言课件第07章_第2页
第2页 / 共41页
C语言课件第07章_第3页
第3页 / 共41页
C语言课件第07章_第4页
第4页 / 共41页
C语言课件第07章_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《C语言课件第07章》由会员分享,可在线阅读,更多相关《C语言课件第07章(41页珍藏版)》请在金锄头文库上搜索。

1、为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型数组。7.1 1维数组的定义和引用维数组的定义和引用7.2 2维数组的定义和引用维数组的定义和引用7.3 字符数组与字符串字符数组与字符串Return第第7章章 数数 组组7.1 1维数组的定义和引用维数组的定义和引用7.1.1 1维数组的定义维数组的定义7.1.2 1维数组元素的引用维数组元素的引用7.1.3 1维数组元素的初始化维数组元素的初始化7.1.4 1 1维数组应用举例维数组应用举例 Return7.1.1 1维数组的定义维数组的定义案案例例7.1 从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。 排

2、序的方法有很多,本题采用冒泡法。冒冒泡泡法法的的基基本本思思想想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。由AnA1组成的n个数据,进行冒泡排序的过程可以描述为:(1)首先将相邻的An与An-1进行比较,如果An的值小于An-1的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较An-1与An-2,同样使小的上浮,大的下沉。依此类推,直到比较完A2和A1后,A1为具有最小排序码(数值)的元素,称第一趟排序结束。(2)然后在AnA2区间内,进行第二趟排序,使剩余元素中排序码最小的元

3、素上浮到A2;重复进行n-1趟后,整个排序过程结束。/*案例代码文件名:7-1.C*/*功能:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。*/#include stdio.h#define NUM 10/*定义符号常量(数据个数N)*/void main() int dataNUM;/*定义1个1维整型数组data*/ int i,j,temp;/*定义循环变量和临时变量*/ clrscr();/*库函数clrscr():清屏*/ printf(Please input 10 numbers:n); for(i=0; iNUM; i+) scanf(%d, &dat

4、ai); /*冒泡法排序*/ for(i=0; ii; j-) /*内循环:进行每趟比较*/ if(datajdataj-1) /*如果dataj大于dataj-1,交换两者的位置*/ temp=dataj; dataj=dataj-1; dataj-1=temp; ; /*输出排序后的数据*/ printf(nthe result of sort:n); for(i=0; iNUM; i+) printf(%d ,datai); 程序演示程序演示数组同变量一样,也必须先定义、后使用。1维数组是只有1个下标的数组,定义形式如下:数据类型数据类型 数组名数组名常量表达式常量表达式, 数组名数组名

5、2常量表达式常量表达式2;注: 是是C语言语法规则所要求语言语法规则所要求,不是本书所约定的不是本书所约定的可选项的描述符号!可选项的描述符号!(1)“数据类型”是指数组元素的数据类型,数组中的每一个元素都属于同一个数据类型。(2)数组名,与变量名一样,必须遵循标识符命名规则。数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。例:int a5;a1000 1002 1004 1006 1008(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数

6、组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。例:int a5; a数组有5个元素a0,a1,a2,a3,a4无a5 a数组的长度为5.注意注意:C语言中不允许动态定义数组语言中不允许动态定义数组。int b; float ab; Return 7.1.2 数组元素的引用数组元素的引用 引用数组中的任意一个元素的形式: 数组名数组名下标表达式下标表达式 1 “下标表达式”可以是任何非负整型数据,取值范围是0(元素个数-1)或整形表达式。 例: a0=a1+a2+a2*3 特特别别强强调调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,

7、保证数组下标不越界是十分重要的。 21个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。 3在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。 7.1.3 1维数组元素的初始化维数组元素的初始化 初始化格式:数据类型数据类型 数组名数组名常量表达式常量表达式初值表初值表4. 根据存储类型的不同,数组有静态数组(根据存储类型的不同,数组有静态数组(static)和动态数)和动态数组(组(auto)之分;根据定义的位置不同,数组有内部数组(在函)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函

8、数外部定义的数组)之数内部定义的数组)和外部数组(在函数外部定义的数组)之分。分。7.1.4 1维数组应用举例维数组应用举例 案例案例7.2 已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10、20、20、50。/*案例代码文件名:7-2.C*/*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10,20,20,50的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include “stdio.h”void main() int i=1,j; char con_key= ; float score5,rat

9、io4=0.1,0.2,0.2,0.5; /*定义成绩、比例系数数组*/ while(con_key= ) while(con_key= ) clrscr(); printf(输入第%2d个学生的成绩n, i+); printf(平时 实习 测验 期末成绩n); score4=0;/* score4:存储总评成绩*/ for(j=0; j4; j+) scanf(%f,&scorej); score4 += scorej * ratioj; printf(总评成绩为:%6.1fn, score4); printf(n按空格键继续,其它键退出); con_key=getch(); /*getch

10、()函数等待从键盘上输入一个字符*/ 程序演示程序演示Return7.2 2维数组的定义和引用维数组的定义和引用7.2.1 2维数组的定义维数组的定义7.2.2 2维数组元素的引用维数组元素的引用7.2.3 2维数组元素的初始化维数组元素的初始化Return案例案例7.3 给一个23的2维数组各元素赋值,并输出全部元素的值。 /*案例代码文件名:7-3.C*/*功能:从键盘上给23数组赋值,并在屏幕上显示出来。*/#define Row 2#define Col 3#include stdio.hvoid main() int i, j, arrayRowCol;/*定义1个2行3列的2维数组

11、array*/ for(i=0; iRow; i+)/*外循环:控制2维数组的行*/ for(j=0; jCol; j+)/*内循环:控制2维数组的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,&arrayij); /*从键盘输入aij的值*/ printf(n); /*输出2维数组array*/ for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%dt,arrayij); /*将aij的值显示在屏幕上*/ printf(n); getch(); /*程序调试运行结束后等待编程者按下键盘才返回编辑界面 *

12、/ 7.2.1 2维数组的定义维数组的定义2维数组的定义方式如下: 数据类型数据类型 数组名数组名行常量表达式行常量表达式列常量表达式列常量表达式, 数组名数组名2行常量表达式行常量表达式2列常量表达式列常量表达式2;例例: int a26; int a2,6;1数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2. 设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意注意:行号、列号均从0开始计数)。 3可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。例如,对a34,可以把a看作是一个1维数组,它有3

13、个元素:a0、a1、a2,每个元素又是一个包含4个元素的1维数组,如图7-4所示。即把a0、a1、a2看作是3个1维数组的名字。 Return7.2.2 2维数组元素的引用维数组元素的引用引用2维数组元素的形式为:数组名数组名行下标行下标列下标列下标1“行下标”和“列下标”,都应是整型表达式或符号常量。2“行下标”和“列下标”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。Return7.2.3 2维数组元素的初始化维数组元素的初始化1按行赋初值例 : int x23=1,2,3,4,5,6 按行对部分元素赋初值:例: int x23=1,2,

14、42将所有数据写在一个花括号内,按数组排列顺序对各元素赋初值例 : int x23=1,2,3,4,5,6Return对部分元素赋初值:例: int x23=1,2,43、如果对全部元素都赋初值,则“行数”可以省略。 注意注意:只能省略“行数”。例 : int x3=1,2,3,4,5,6,77.3 字符数组与字符串字符数组与字符串 C语言中没有专门的字符串变量,而是使用一维字符数组来存放字符串,每个数组元素存放一个字符。 字符型与整型是互相通用的,因此也可定义一个整形数组来存放字符数据。 例7-4-1#includevoid main() char a7=a,p,p,l,e; char b7

15、=apple; char c7; static char x7; int i; for(i=0;i=6;i+) printf(%6d%6d%6d%6dn,ai,bi,ci,xi)例7-4-2#includevoid main()char a6=a,p,p,l,e,0; char b6=apple; char c5=a,p,p,l,e; char x5=apple; int i; clrscr(); for(i=0;i=5;i+) printf(%6c%6cn,ai,bi); for(i=0;i=4;i+) printf(%6c%6cn,ci,xi); scanf(%s,a); for(i=0;

16、i=5;i+)printf(%6cn,ai); printf(%s,a);数组名数组名首地址首地址行首地址行首地址7.4 常用的字符串处理函数常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1输入字符串输入字符串gets()函数函数(1)调用方式:gets(字符数组名)(2)函数功能:从标准输入设备(stdin)键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去,以回车结束。(3)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2输

17、出字符串输出字符串puts()函数函数(1)调用方式:puts(字符数组名)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用n取代字符串的结束标志0。所以用puts()函数输出字符串时,不要求另加换行符。( 3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。void3字符串比较字符串比较strcmp()函数函数(1)调用方式:strcmp(字符串1 ,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串字

18、符串1=字符串字符串2,函数返回值等于0; 字符串字符串1字符串字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“”来比较两个字符串,只能用strcmp() 函数来处理。/*案例案例7.5 gets函数和strcmp函数的应用。 */*案例代码文件名:7-5.C*/*功能:简单密码检测程序*/#include stdio.hvoid main() char pass_str80; /*定义字符数组passstr*/ int i=0; /*检验密码*/ while(1) clrscr(); printf(请输入密码n);

19、 gets(pass_str); /*输入密码*/ if(strcmp(pass_str,“password”)!=0) /*口令错*/ printf(口令错误,按任意键继续); else break; /*输入正确的密码,中止循环*/ getch(); i+; if(i=3) exit(0); /*输入三次错误的密码,退出程序*/ /*输入正确密码所进入的程序段*/程序演示4拷贝字符串拷贝字符串strcpy()函数函数(1)调用方式:strcpy(字符数组, 字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖

20、。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志0一起复制。2)不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。 5连接字符串连接字符串strcat()函数函数(1)调用方式:strcat(字符数组1, 字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明 1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够

21、而产生问题。 2)连接前两个字符串都有结束标志0,连接后“字符数组”中存储的字符串的结束标志0被舍弃,只在目标串的最后保留一个0。void6求字符串长度求字符串长度strlen()函数(函数(len是是length的缩写)的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7将字符串中大写字母转换成小写将字符串中大写字母转换成小写strlwr()函数函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8将字符串中小写字母转换成大写将字符串中小写字母转换成大写strupr()函数函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。Return

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号