第七章 数组_ppt.txt

大学二级C语言程序设计及同步训练-涂玉芬-课件PPT

收藏

资源目录
跳过导航链接。
大学二级C语言程序设计及同步训练-涂玉芬-课件PPT.zip
二级C语言程序设计及同步训练-涂玉芬-PPT演示文稿
教案资料.ppt---(点击预览)
二级C语言程序设计及同步训练-涂玉芬-PPT课件文件
文稿ppt_ppt.txt---(点击预览)
文稿ppt_ppt.jpg---(点击预览)
文稿ppt.ppt---(点击预览)
二级C语言程序设计及同步训练-涂玉芬-大学教学资料
压缩包内文档预览:
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836173    类型:共享资源    大小:11.93MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 二级 语言程序设计 同步 训练 涂玉芬 课件 ppt
资源描述:
大学二级C语言程序设计及同步训练-涂玉芬-课件PPT,大学,二级,语言程序设计,同步,训练,涂玉芬,课件,ppt
内容简介:
第七章 数 组 数组是内存中的一种数据集合,用于存贮较大量的相同类型的数据元素,在程序中数组有一个名字,并通过下标访问数组的某个元素。7.1 一维数组一、一维数组的定义语法格式:元素类型名 数组名元素个数;如:int a5,b8;double y15,c20;#define N 10long posN;int cN+1;/*正确*/例如:int n=10,an;/*错误*/只能是整型常量表达式二、一维数组元素的引用语法格式:数组名下标表达式如:若有定义 int a4;则元素a0,a1,a2,a3是数组的有效元素。a4并非有效元素,属于下标超范围。下标超范围会引起死机或程序错误,但C语言不自动检查下标是否超范围,故必须在设计阶段从程序逻辑上保证下标不超范围。必须是整型表达式数组下标固定从0开始编号7.1 一维数组一维数组的元素在内存中是连续存放的。例如:若有int a10;,则a数组中包含的10个元素在内存中的存储情况如下:三、一维数组存贮空间分析:如: double a5;该数组共5个元素,存贮5个double型实数,共占用40字节存贮空间。7.1 一维数组四、一维数组的初始化在定义数组时,允许对静态(数组定义前加有static保留字)数组、外部数组(定义于所有函数以及复合语句之外)及main()定义的auto型数组进行初始化。7.1 一维数组初始化格式:static 类型说明符 数组名=常量列表;例: static int a4=1,2,3,4;(1)static与外部数组不初始化,初值自动为0(2)初始化时,可以不指定元素个数 static int a=1,2,3,4; 则数组a自动为4个元素, 与上面的定义形式完全等价。(3)可以只对前部分元素进行初始化,余下的元素初值自动为0。(main()中的auto型也是这样)如: static int a5=1,2,3;则 a3与a4自动为0。说明:四、一维数组的初始化例7.1 将数值5,3,4,5,3,6,6,4,3,2,9赋予数组a并求其和。程序: #includeint a=5,3,4,5,3,6,6,4,3,2,9;main() int sum,i; sum=0; for (i=0;i=10;i+) sum+=ai; printf(sum=%dn,sum); 7.1.3 一维数组应用举例例7.2 编写一程序,求全班40个学生计算机的平均成绩。其算法可用如图7.1所示的流程图表示。程序:(要求学生自己写出)7.1.3 一维数组应用举例基本思想:每一趟在n-i+1(i=1,2,.,n-1)个记录中(第i趟)选取关键字最小的记录作为有序序列中第i个记录。方法:n个数,比较n-1趟 第i趟(i=1,2,.,n-1) 比较n-i次,选择一个最小的记录交换一次。选择排序总共要进行(n-1)+(n-2)+1=n(n-1)/2比较,最多n-1次交换。例7.3 使用选择法对输入的10个整型数据进行从小到大排序。选择排序法for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(ajak) k=j; if(k!=i) t=ai;ai=ak;ak=t; 要求学生写出完整程序语言描述:/*k指示当前比较的最小值下标*/练习:写出该程序选择排序法一、二维数组的定义语法格式:元素类型名 数组名下标1维数下标2维数;如:int a58; /*5行8列整型数组*/又如:#define N 6long mNN; /*N行N列长整型数组*/行数列数7.2 二维数组二、二维数组元素的引用语法格式:数组名行下标列下标其中,下标表达式必须是整型表达式;下标固定从0开始编号。如: 若有定义int a34; 则左上角元素下标为a00, 右下角元素下标为a23。C语言不自动检查下标是否超范围,故必须在设计阶段从程序逻辑上保证下标不超范围。例如,若有int a23;,则a数组中包含的二行三列共6个元素在内存中的存储情况如下:三、二维数组存贮空间分析:也只能对static或外部数组、main()中的auto型数组进行初始化。初始化方法:标准形式 static int a23=1,2,3,4,5,6;注意:用内层表示行,每行可视作一个一维数组,并按行初始化。2.对所有元素初始化可以缺省行数和内层如:上述初始化可写为static int a3=1,2,3,4,5,6或static int a3=1,2,3,4,5,6; 或static int a23=1,2,3,4,5,6;7.2.2、二维数组的初始化(3)static与外部数组不初始化,初值自动为0(4)每行可以只对前几列元素进行初始化,余下的元素初值自动为0。如: static int a3=1,2,3;则 矩阵元素初值如下:(5)指定行数时,可以只初始化前面几行,余下各行元素初值自动为0.如: static int a43=1,2,3,4,5,6;则矩阵初值如下:1 0 02 3 01 0 02 3 4 5 6 00 0 07.2.2、二维数组的初始化例7.4 将下表存入数组a,按行求元素之和并显示。25 13 3210 54 537.2.3 应用举例程序:#includemain() int a24,i; a00=25;a01=13;a02=32; a10=10;a11=54;a12=53; for (i=0;i=1;i+) ai3=ai0+ai1+ai2; for (i=0;i=1;i+) printf(%d %d %d %d n,ai0,ai1,ai2,ai3);例7.5:输入一个三行四列的矩阵A,计算其转置矩阵B,输出矩阵B。bji=aij7.2.3 应用举例7.2.3 应用举例#includemain() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); printf(array b:n); for (i=0;i=2;i+) for (j=0;j=1;j+) printf(%5d,bij); printf(n); 程序:例7.6 编写一程序,求全班40个学生每个学生三门功课的平均成绩。 1.定义数据结构40个学生3门功课的存放:int a4030;每个学生三门功课的平均成绩存放:int v40;2.输入学生成绩3.求每个学生平均成绩: vi= (ai0+ai1+ai2)/3,4.输出结果.分析:7.2.3 应用举例程序:#includemain() int a403,s,i,j,v40; for(i=0;i40;i+) for(j=0;j3;j+) scanf(%d,&aij); for(i=0;i40;i+) s=0; for(j=0;j3;j+) s=s+aij; vi=s/3; for(i=0;i40;i+) printf(%d %dn,i,vi); 例7.7 在N行M列的二维数组x中,找出数组的最大值以及此最大值所在的行、列下标。 分析:1.定义二维数组:int xNM; 定义变量 max:存放最大值 line:存放最大值行号 col:存放最大值列号 2.找最大值:max初始值= x00, line及col的初始值为0, 再将二维数组x中的元素逐个与max进行比较,确定新的max和line及col的值,直到二维数组x中的元素全部处理完。3.输出数据7.2.3 应用举例程序运行结果如下:input array numbers:12 31 4020 67 80max=80line=1col=2程序:#define N 2#define M 3#include stdio.hmain() int i,j,xNM,max,line,col; printf(input array numbers:n); for(i=0;iN;i+) for(j=0;jM;j+) scanf(%d,&xij); max=x00; line=col=0; for(i=0;iN;i+) for(j=0;jM;j+) if(maxxij) max=xij; line=i; col=j; printf(nmax=%dtline=%dtcol=%dn,max,line,col);7.3.1 字符数组的定义、引用与初始化1字符数组的定义一维字符数组的定义形式如下: char 数组名常量表达式;例如: char a10;二维字符数组的定义形式如下:char 数组名常量表达式1常量表达式2;例如: char a34;7.3 字符数组7.3 字符数组2字符数组元素的引用一维字符数组元素的引用形式如下: 数组名下标 例如: a2 a1+1二维字符数组的元素的引用形式如下: 数组名行下标列下标例如: a10 a03-27.3 字符数组3字符数组的初始化一维字符数组的初始化形式如下: static 类型说明符 数组名=字符常量列表; 例如: char a10=H,e,l,l,o,!二维字符数组的初始化形式如下:static 类型说明符 数组名=字符常量列表,; 例如:char a23=A,B,C,D7.3 字符数组说明:(1)如果花括号中提供的字符个数大于数组长度,则作语法错误处理。(2)如果花括号中提供的字符个数小于数组长度,则只将这些字符赋给数组中的前面那些元素,其余元素自动定为空字符(即0)。(3)如果花括号中提供的字符个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。 7.3.2 字符串与字符数组1字符串和字符串结束标志C语言约定用0作为字符串的结束标志,它占内存空间,但不计入串的长度。0的代码值为0。字符型一维数组来存储一个字符串,用字符型二维数组来存储多个字符串。7.3.2 字符串与字符数组2用字符串常量给数组赋初值(初始化)。 例如,如果有:char c6=“china”;或char c6= “china”;或char c = “china”; 则数组c在内存中的存储情况如下:3字符数组与字符串的输入输出(1)用格式符“%c”逐个字符输入输出:7.3.2 字符串与字符数组#includemain() char a10; int i; for(i=0;i10;i+) scanf(%c,&ai); printf(n); for(i=0;i10;i+) printf(%c,ai); (2)用格式符“%s”整个字符串输入输出:#includemain() char a10; scanf(%s,a); printf(n); printf(%s,a);7.3.2 字符串与字符数组注意:(1)用%s格式输出字符数组时,遇0结束输出,且输出字符中不包含0。(2)若数组中包含一个以上的0,则遇第一个0时结束输出。(3)用%s格式输入或输出字符数组时,函数scanf的地址项、函数printf的输出项都是字符数组名。这时数组名前不能再加&符号,因为数组名就是数组的起始地址。(4)用语句“scanf(%s,s);”为字符数组s输入数据时,遇空格键或回车键时结束输入,但所读入的字符串中不包含空格键或回车键,而是在字符串末尾添加0。(5)用一个scanf函数输入多个字符串,输入时应以空格键或回车键作为字符串间的分隔。7.3.2 字符串与字符数组使用字符串函数时应在程序前包含头文件:#include (1)puts(字符串):字符串输出函数。功能:将一个字符串输出到终端。输出的字符串包含转义字符。示例:char str =chinanbeijing; puts(str); 输出:chinabeijing7.3.3 字符串函数7.3.3 字符串函数(2)gets(字符数组):字符串数组输入函数。功能:从终端输入一个字符串到字符数组,该函数返回值是字符数组的起始地址。示例:char str10 ;gets(str);如果键盘输入:China则数组str在内存中的存储情况如下:注意:用puts和gets函数只能输入或输出一个字符串。7.3.3 字符串函数(3)strcat(字符数组1,字符数组2):连接两个字符串函数。功能:连接两个字符串中的字符,把字符串2接到字符串1的后面,结果放在字符串1中,函数调用后得到一个函数值字符串1的地址。示例:如果有:char str110 =Ch; char str2 =ina; strcat(str1,str2);则:字符数组str1中存储的字符串为“Ch ina”。说明:(1)字符数组1必须足够大,以便能容纳连接后的新字符串。(2)连接前两个字符串后面都有一个0,连接时将字符串1后面的0取消,只在新串的最后保留一个0。7.3.3 字符串函数(4)strcpy(字符数组,字符串):字符串复制函数。功能:将字符串拷贝到字符数组中去。示例:如果有:char str110,str2 = china; strcpy (str1,str2); 则:字符数组str1中存储的字符串为“Ch ina”。示例:下面的用法是不合法的:str1=china;str1=str2;如果用赋值语句,则只能将字符逐个赋给一字符数组元素。示例:char a6; a0=c;a1=h;a2=i;a3=n;a4=a;a5= 07.3.3 字符串函数(5)strcmp(字符串1,字符串2):字符串比较函数。功能:按ASCII码值大小比较,将两个字符串自左至右逐个字符相比较,直到出现不同的字符或到0为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。比较的结果由函数值带回。(1)字符串1=字符串2,函数值为0。(2)字符串1字符串2,函数值为正整数。(3)字符串1字符串2,函数值为负整数。7.3.3 字符串函数示例:如果有:char str110 =Chinese, str2 =China; int a; a=strcmp(str1,str2);则:a的值为一正整数。注意:对两个字符比较,不能用以下形式:if(str1= =str2)printf(yes);而只能用:if(strcmp(str1,str2)= =0)printf(yes); 。7.3.3 字符串函数(6)strlen(字符数组):求字符串长度函数。功能:求字符串长度。函数值为字符串的实际长度,不包括0在内。示例:如果有:char str10=china; printf(%d,strlen(str); 则输出结果为:57.3.3 字符串函数(7)strlwr(字符串):字符串小写函数。功能:将字符串中的大写字母转换成小写字母。(8)strupr(字符串):字符串大写函数。功能:将字符串中的小写字母转换成大写字母。7.3.3 字符串函数例7.8 用户从键盘输入一个字符串(字符串中不包含空格),当输入回车时认为输入结束,统计输入字符串中的小写英文字母、大写英文字母、数字字符、其他字符的个数。分析: 字符串放在字符数组s用普通的整型变量m,n,x,y分别存储统计得到的输入字符串中的小写英文字母、大写英文字母、数字字符、其他字符的个数。用一个单循环控制,对字符数组s中的元素逐个进行判断,根据不同情况(元素值是否为小写英文字母、大写英文字母、数字字符、其他字符)对相应计数变量计数。循环控制条件是当前所处理的字符串中的字符不是字符串结束标志0,即一个字符串的所有字符还没有处理完毕。程序:#include main() int i,m,n,x,y; char s80; printf(input a string:n); scanf(%s,s); m=n=x=y=0; i=0; while(si!=0) if(si=a&si=A&si=0&si=9) x+; else y+; i+; printf(az:%dnAZ:%dn09:%dnothers:%dn,m,n,x,y);7.3.3 字符串函数例7.9 将字符串s1从第m个字符开始剩余的所有字符送入字符数组s2中。分析:该程序用一个单循环控制,将字符数组s1中的元素从第m个字符开始剩余的所有字符依次逐个送入字符数组s2中。程序中用两个整型变量i、j分别标识元素在原字符数组s1中的下标和在目标数组s2中的下标,每循环一次,即传送一个字符后,i、j的值增1。循环控制条件是当前所处理的原字符数组s1中的元素不是字符串结束标志0,即原字符数组s1中从第m个字符开始剩余的所有字符还没有处理完毕。程序:#include main() int i,j,m; char s180,s280; printf(input a string:n); gets(s1); printf(input start point:n); scanf(%d,&m); i=m-1; j=0; while(s1i!=0) s2j=s1i; i+; j+; s2j=0; puts(s2);7.4 本章考点一维数组的定义、引用及初始化。二维数组的定义、引用及初始化。字符串和字符数组。字符串处理函数。7.5 典型试题详解1以下能正确定义一维数组的选项是_。A)int num; B)#define N 100; int numN; C)int num0100 D)int N=100; int numN;正确答案:B(知识点:一维数组的定义)7.5 典型试题详解2假设int类型变量占用两个字节,其有定义:int x10=0,2,4;,则数组x在内存中所占的字节数是_。A)3B)6C)10D)20正确答案:D(知识点:一维数组的定义)7.5 典型试题详解3以下程序运行后的输出结果是_。main() int i,n=0,0,0,0,0; for(i=1;i=4;i+) ni=ni-1*2+1; printf(%d ,ni);正确答案:1 3 7 15(知识点:一维数组的定义与引用)7.5 典型试题详解4以下数组定义中不正确的是_。A)int a23; B)int b3=0,1,2,3; C)int c100100=0; D)int3= 1,2,1,2,3,1,2,3,4;正确答案:D(知识点:二维数组的初始化)试题分析:二维数组初始化时,对数组第一维的长度可以不指定,但第二维的长度不能省略。7.5 典型试题详解5有以下程序:main () int aa44= 1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6;int i,s=0;for(i=0;i4;i+)s+=aailprintf(%dn,s)执行后的输出结果是_。A)11B)19 C)13D)20正确答案:B(知识点:二维数组的定义、引用及初始化)试题分析:该程序是求aa0l、aa1l、aa2l、aa3l之和并输出。7.5 典型试题详解6以下不能正确进行字符串赋初值的语句是_。A)char str5=good!; B)char str =good!; C)char str6=good!; D)char str5=g, o,o,d;正确答案:A(知识点:字符数组的初始化)试题分析:每个字符串末尾都有一个结束0,因此,字符串 good!在内存中占6个字符型存储单元,在初始化时,可以不指定数组的大小,或指定一个大于或等于6的值。选项D中给出的初值个数小于数组的大小5,则将初值赋给数组前面的元素,其后的元素值为0。7.5 典型试题详解7以下程序的输出结果是_。main() char ch35= AAAA, BBB, CC; printf(%sn,ch1);A)AAAAB)BBBC)BBBCCD)CC正确答案:B(知识点:字符数组的初始化)试题分析:程序中定义ch是一个字符型的二维数组,由于二维数组可以看做是由一维数组构成的一维数组,ch35是由ch0、ch1、ch2构成的,而ch0、ch1、ch2又都是由5个字符型元素构成的一维数组,因此ch1即是二维数组ch35的第二行的字符串BBB所在一维数组的名字,因为其元素是字符类型,可以用数组的名字(即数组的首地址)来表示所存储的字符串BBB,输出时去掉字符串定界符“”。 7.5 典型试题详解8有下列程序:main() char s = n123 printf(%d,%dn,strlen(s),sizeof(s);程序运行后的输出结果是_。A)赋初值的字符串有错B)6,7C)5,6 D)6,6正确答案:C(知识点:字符串处理函数、转义字符)试题分析:程序的输出结果是strlen(s)和sizeof(s)两个函数的值。函数strlen(s)是求字符串s(用
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学二级C语言程序设计及同步训练-涂玉芬-课件PPT
链接地址:https://www.renrendoc.com/p-21836173.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!