版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章C语言程序设计花骚珊稀寇茁纵笆辽圣岭锄蜕靴界稳爸雹谩晤眺舟啪募雅兄舟啃邹匠铃塑C语言程序设计基础7C语言程序设计基础71第七章C语言程序设计花骚珊稀寇茁纵笆辽圣岭锄蜕靴界稳爸雹谩晤本章要点1.建立数组的概念;2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法;3.掌握一维字符数组的输入输出;4.掌握字符串处理函数的使用;5.掌握用数组进行编程的技术。抑酒升稚损窖刑廊杂根詹屡酚彪收傀估吸斋蜀僚蝇霍艘祸祸逆提待躬职维C语言程序设计基础7C语言程序设计基础72本章要点抑酒升稚损窖刑廊杂根詹屡酚彪收傀估吸斋蜀僚蝇霍艘祸祸7.1数组的概念如何处理一个班学生的学习成绩?一行文字怎样存储?一个矩阵怎样存储?......
问题的提出:
一组具有相同数据类型的数据的
有序集合
这些数据的特点:1.具有相同的数据类型2.使用过程中需要保留原始数据
C语言为这些数据提供了一种构造数据类型:数组。吕何淌秒勇脑焕臣倚蔫和滦骚寅诱院乳竖却酗料卑拱筷御顾省隐议逸且钥C语言程序设计基础7C语言程序设计基础737.1数组的概念如何处理一个班学生的学习成绩?问题的提出
数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。侄臭朽游狐鼻宋吓待新瞳刮容颊哀镀叭踌峰僻裂访尊英尽裳讣雕柏函究鲁C语言程序设计基础7C语言程序设计基础74数组是一组有序的、类型相同的数据的集合,这些7.2一维数组7.2.1一维数组的定义和引用1.一维数组的定义
类型说明符数组名[正整型常量表达式];说明:类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。例如:
floatmark[100];charstr[200];inta[10];硅剿码囚吴忌随并蚌沏亨惨钾完淡涝牢屑斟盯炙撮足号们犁旅秸隧雕岔哇C语言程序设计基础7C语言程序设计基础757.2一维数组7.2.1一维数组的定义和引用说明:硅剿其中:mark、str、a是数组名。
方括号内是数组的长度。下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。数组的成员称为数组元素。数组元素的类型称为该数组的基类型。数组mark的基类型是float,数组str的基类型是char。例如:存储学生成绩用实型数组mark[100],存储一行文字用字符数组str[200],存储一个4*6的矩阵用二维整型数组a[4][6]。匹证嘛瓶梢胸肖觅渊伤昌彭射秸绥谱镊轨倘羞肋沪惫嚷途八剑甲卯跨蘑审C语言程序设计基础7C语言程序设计基础76其中:mark、str、a是数组名。例如:存储学生成绩用实说明:(1)数组名后是用方括号而不是圆括号。
(2)数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。如:inta[0],d(6);/*错误*/intb[-8];/*错误*/intc[2+3];/*正确*/(3)
C语言中不允许对数组的大小作动态定义。数组的说明语句必须在可执行语句之前。#defineN5inta[N];
intn;scanf(“%d”,&n);{inta[n];……}intn=10,a[n];洲淫携相忘淡痴哲闲锥邢八停号痊潦歧砰幕郡妓砾姑伺鸟淖逆赐善冯优操C语言程序设计基础7C语言程序设计基础77说明:(2)数组定义中的常量表达式表示数组元素个数。必须2.一维数组的引用
C语言规定,只能引用单个数组元素,不能一次引用整个数组。数组元素的引用形式:数组名[下标]如a[3]下标可以是整型常量、整型变量或整型表达式。如:a[3]=a[0]+a[i+1];下标的值是数组元素的序号,且从0开始,直到a[10],说明数组a一共有10个元素,起始值是0。数组a的10个元素分别是:a[0]、a[1]、…、a[9]。注意区分数组的定义和数组元素的引用。数组的输入输出应采用循环的方法.
inta[10];for(i=0;i<10;i++)
scanf(”%d”,&a[i]);
下标指出在数组中第几个元素勤敞欣呀载控拾邻旱鹰虾射求砰珠魄略件瘤气檀霄染昭盘砾槽士琢螟惜江C语言程序设计基础7C语言程序设计基础782.一维数组的引用下标指出在数组中第几个元素勤敞欣呀载控数组中的每个元素在功能上等价于一个一般的变量。例如:输入100个学生成绩,并求出总成绩。引用数组元素的注意事项:floatm[100],sum=0;for(i=0;i<100;i++){scanf(”%f”,&m[i]);
sum+=
m[i];
}数组方式floatx,sum=0;for(i=0;i<100;i++){scanf(”%f”,&x);sum+=x;}简单变量
x
sum85
m[0]m[1]m[2]
m[99]
sum82856378906385
851488279501482263167950优点:数据重用数据有序露砸虱瘦肃借两禾帅产妓融脏仇颈滚氢獭柜磋嘿锡霜耪呐盅蔓啊冉绳鳖恍C语言程序设计基础7C语言程序设计基础79数组中的每个元素在功能上等价于一个一般的变量。引用数组元素mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.02000H2004H2008H200CH。。。218CH引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的内容进行操作。如引用mark[2]:(1)计算
2000+2*4=2008(2)取出2008的内容下标与地址的关系[]为下标运算符,数组名、数组元素是两种不同性质的数据。数组名是数组的首地址,是一个地址常量。数组元素则是数值。廊舵枪割纸算塑侦涤近稿淋算岿宫淌脊乒侦指董漂痪箭绢倚每会仔掺壹穷C语言程序设计基础7C语言程序设计基础710mark[0]86.52000H引用数组元素时,根据首地址和7.2.2一维数组的初始化和输入输出
在数组定义时为数组元素赋初值称为数组初始化.方法:将初值依次写在花括号{}内。如:inta[5]={2,4,6,8,10};存储形式:存储单元弦酶封开爹持敏友涧规蜒桩瘁忌沈尊纹响姨苏豁舰森才目兰泥一爬敌葵潞C语言程序设计基础7C语言程序设计基础7117.2.2一维数组的初始化和输入输出在数组定义时为数
(1)给数组中部分元素赋初值,其他元素按零值处理。如:inta[9]={1,2};则a[0]=1,a[1]=2,a[2]~a[8]值全为0。(2)对数组元素全部赋值可以不指定长度。
inta[]={0,1,2,3,5};等价于:inta[5]={0,1,2,3,5};
(4)初值的个数不能超过数组总元素的个数。inta[3]={1,2,3,4};语法错!说明:(3)对数组中间元素赋值必须指明位置。inta[5]={,,2,3,4};/*对第3-5个元素赋初值*/昏暗臻不握戊平浦铰兼踢偿蹈犬燃之涛玫亭落江昨扔酌赫拟宁在它侧而怂C语言程序设计基础7C语言程序设计基础712(1)给数组中部分元素赋初值,其他元素按零值处理。(2)数组元素在程序中赋值⑵为个别元素赋值main(){charas[26];as[0]='a';…...}⑴利用循环为全部元素赋值main(){charas[26],ch;for(ch='A';ch<='Z';ch++)as[ch-'A']=ch;…...}殖些揣属酷粒尔琵撒钥玲咯判阂奖犊鲸彩烬凰视皂癸醋携游箔泻箱瀑协瞥C语言程序设计基础7C语言程序设计基础713数组元素在程序中赋值⑵为个别元素赋值⑴利用循环为全部元素赋值数组元素的输入输出⑵数组元素输出main(){charas[26];inti;for(i=0;i<26;i++)printf("%c",&as[i]);…...}⑴数组元素输入main(){charas[26];inti;for(i=0;i<26;i++)scanf("%c",&as[i]);…...}毫个盂醇赛柳塔膘腥三顿庇痒突鹏彝械鲸堵擞影鸿初凸绵含租亨秽颤语捂C语言程序设计基础7C语言程序设计基础714数组元素的输入输出⑵数组元素输出⑴数组元素输入毫个盂醇赛柳7.2.3一维数组应用举例[例1]从键盘上输入10个实型数存入数组,然后按输入顺序的逆序输出这10个数。#include<stdio,h>main(){floata[10];inti;for(i=0;i<10;i++)scanf("%f",&a[i]);for(i=9;i>=0;i--)printf("%10.2f",a[i]);}数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。努拴萤受人述巫意苦瘫秽旱宏哨玲捎奏华叮隋煤亿闽牡荫腑琅择宜勋沥幅C语言程序设计基础7C语言程序设计基础7157.2.3一维数组应用举例[例1]从键盘上输入10个[例2]从键盘上输入10个数,求出其中最大值并输出。#include<stdio.h>main(){inta[10],i,max;for(i=0;i<10;i++)scanf("%d",&a[i]);
max=a[0];for(i=1;i<10;i++)if(a[i]>max)max=a[i];printf("max=%d\n",max);}算法分析:采用打擂台的方法,先把10个数存在数组中,任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主变量中一定是最大的数。指定第1个元素为擂主拉脾乔虾月减呜蠢伺茄氖盒酸缸蚕雪局蕉搁肢襟赞湛西轴藻海键姚锦复干C语言程序设计基础7C语言程序设计基础716[例2]从键盘上输入10个数,求出其中最大值并输出。#in[例3]从键盘上输入6个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。#include<stdio.h>main(){inta[6],i,j,k,t;for(i=0;i<6;i++)scanf("%d",&a[i]);k=6/2-1;for(i=0;i<=k;i++){
j=6-i-1;t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<6;i++)printf("%3d",a[i]);}算法分析:采用循环设计。逆序操作可总结为:a[i]与a[j]进行交换,其中i=0,1,…n/2-1,j=n-i-1程序运行演示341562a[0]a[1]a[2]a[3]a[4]a[5]
牡挪后调撂粉馁屏曰让仟芽郝井力原饰靛县施掐浑燕潞凝昨丘讶康增琵媚C语言程序设计基础7C语言程序设计基础717[例3]从键盘上输入6个数存入数组中,再按输入顺序的逆序存放[例4]利用数组计算斐波那契数列的前20个数,并以每行5个输出。#include<stdio.h>intmain(){inti,f[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){ if(i%5==0) printf("\n"); printf("%6d",f[i]);}printf("\n");return0;}说明:斐波那契数列的前两个数是1,从第3个数开始,每个数是前两个数之和。即1,1,2,3,5,8,13……,满足关系式:f[0]=f[1]=1,f[n]=f[n-1]+f[n-2],2n19运行结果:贷刺牲适挺场交蛮肺旭如莽粥衔讳圣酪尸魏刃邦盔筛健脯吓滨绰忙柠繁丁C语言程序设计基础7C语言程序设计基础718[例4]利用数组计算斐波那契数列的前20个数,并以每行5个[例5]用冒泡法对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。9888885555
444
22
0
895555
8444
522
40
2559444
4822
250
04
4444922
2280
00
5555222290
0008
8888880000099999999999由以上可推知:6个数要比较5趟第一趟中要进行两两比较5次第二趟中比较4次······若有n个数,则要进行n-1趟比较第i趟比较中要进行n-i次两两比较。休亢葵该伶斩则匿图发垒蜂桓胸屡双猖评密汕泻程觉窄吃括邓伟锣汁囤预C语言程序设计基础7C语言程序设计基础719[例5]用冒泡法对数据进行由小到大排序。由以上可推知:6#include<stdio.h>#defineN6main(){inta[N],i,j,t;for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N-1;i++)for(j=1;j<N-i;j++)
if(a[j-1]>a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;}printf("Thesortednumbers:\n");for(i=0;i<N;i++)printf("%d",a[i]);}n个数比较n-1趟第i趟比较n-i次程序运行演示饼惮咽堵竖阶娩春眨剐沮绢隐皑儡递肄役讽拴沪华哗压旱族扬仙冉吼扩闸C语言程序设计基础7C语言程序设计基础720#include<stdio.h>n个数比较n-1趟第i趟冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。[例6]选择法排序。选择排序法的基本思想:以冒泡排序法为基础,在两两比较后并不马上进行交换,而是在找到最小的数之后,记住最小数的位置(数组中的下标),待一轮比较完毕后,再将最小的数一次交换到位。贴粕叹廖聂落鹤瞄截袱器读侗窝菱凰稚手嫂烛孩诊甜瘁锗翼辉侦洗涸砒表C语言程序设计基础7C语言程序设计基础721冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低3619416394136941349613469选择法排序算法问题
将3、6、1、9、4从小到大排列。若有N个数,则需要进行N-1轮排序处理。
第1轮排序从1~N个数中找出最小的数,然后将它与第1个数交换。第1个数则是最小的数。
第2轮排序从2~N个数中找出最小的数,然后将它与第2个数交换。第2个数则是次小的数。经过N-1轮处理,完成全部N个数排序。编程时使用二重循环。外循环控制进行N-1轮排序,内循环找出第i轮的最小值。表恩急斧赎腐棋九歼啮鬃鬃蛊禹氏共睛猎廷仰郊懒观儒甲严础踩颜琐黄掳C语言程序设计基础7C语言程序设计基础72236194选择法排序算法问题将3#include<stdio.h>#defineN5main(){inta[N],i,j,k,t;printf("Inputnumbers:\n");for(i=0;i<N;i++)/*输入数组元素*/scanf("%d",&a[i]);for(i=0;i<N-1;i++)/*排序*/{k=i;
for(j=i+1;j<N;j++)if(a[k]>a[j])k=j;
if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}printf("Thesortednumbers:\n");for(i=0;i<N;i++)/*输出数组元素*/printf("%d",a[i]);}程序运行演示餐爽熔强墓稗惶庚务鹊篓瘸伞芥著细咋减塑纂玉茅酿启欠统疵绳倚泌伙阶C语言程序设计基础7C语言程序设计基础723#include<stdio.h>程序运行演示餐爽熔强墓稗定义二维数组的一般方式:类型说明符数组名[常量表达式1][常量表达式2];[例如]
inta[3][3]存储形式:二维数组在内存中按行的顺序存放,即先存放第一行的元素,再存放第二行的元素。[例如]floata[3][4];
7.3二维数组7.3.1二维数组的定义第一个下标可能取值的个数第二个下标可能取值的个数蝎咋昏琶坐刷修土蝗巫眯簇鲜广纷凰缠厦咨摘拣瞪条贝涛眩悔陆拙厚念啡C语言程序设计基础7C语言程序设计基础724定义二维数组的一般方式:类型说明符数组名[常量表达式1]说明:二维数组除了维数比一维数组多一维外,其它性质与一维数组全部类似。下面写法是否正确?
①inta[0][3];
用于定义数组长度的常量表达式的值必须是大于0的正整数。
②inti=3,j=4;
inta[i][j];
定义数组元素的个数必须使用常量表达式,而不能使用变量。痰蒸颐撅眠很踞吁浚走透诽孪枯法窍输臀织玖逮炮绢战谅孪淹侍蔽烂租汕C语言程序设计基础7C语言程序设计基础725说明:二维数组除了维数比一维数组多一维外,其它性质与一维数7.3.2二维数组的引用二维数组的引用与引用一维数组元素一样,也用下标法引用二维数组元素。二维数组元素表示形式:数组名[下标1][下标2]
下标1和下标2是整型常量、整型变量或整型表达式。其编号是从0开始的。
例如:若有inta[2*5][3*4],i=15;
则使用a[3*3][0],a[1][i-5]都是合法的。说明:数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元素a[0][0]的地址。数组名是常量,不可对它赋值。下标不要越界嗅填盐超疆附脊抨惰谐擅校邮绑骑食春悔竣篱刁棱赏绰瓮诉荤舅意制么蒲C语言程序设计基础7C语言程序设计基础7267.3.2二维数组的引用例如:若有inta[2*5一、二维数组的初始化1.分行给二维数组赋初值。如:inta[2][3]={{2,3,1},{1,2,3}};2.将所有数据写在一个{}内,按顺序赋值。
即按数组元素在内存中排列的顺序赋初值。inta[2][3]={2,3,1,1,2,3};7.3.3二维数组的初始化和输入输出抽州制辗兽晴陶摧屁佛扫食埠廖妄九经抛一渐赖斜喻挝捐婿烹稀撮氢痔冕C语言程序设计基础7C语言程序设计基础727一、二维数组的初始化2.将所有数据写在一个{}内,按顺序3.对部分元素赋值如:inta[3][3]={{1},{0,1},{0,0,1}};相当矩阵:4.如果对数组全部元素赋初值,第一个下标可省略,但第二个下标不可省略。如:a[3][4]={{0,1,3,1},{2,1,0,2},{1,1,2,0}};可写成a[][4]={0,1,3,1,2,1,0,2,1,1,2,0};
inta[3][3]={{1},{},{0,0,1}};相当矩阵:inta[2][3]={{5,6},{7,8}};inta[2][3]={5,6,7,8};[例]得到的数组为:560780得到的数组为:567800垄伐昨拉茎查斋科睫穿怠章灶歪病击荐岗骇抉舱级速蔫辉差程就筹蛋蜂擦C语言程序设计基础7C语言程序设计基础7283.对部分元素赋值4.如果对数组全部元素赋初值,第一1.二维数组的输入inta[2][3],i,j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);2.二维数组的输出inta[2][3],i,j;for(i=0;i<2;i++)for(j=0;j<3;j++)printf("%5d",a[i][j]);二、二维数组的输入、输出陪橇隘聪代章敞改襟予锐枕骚但迟钓快烙侠柯停抡戌恐讽立幕纵舞贴薄酪C语言程序设计基础7C语言程序设计基础7291.二维数组的输入2.二维数组的输出二、二维数组的输入7.3.4二维数组程序举例[例1]将一个矩阵a2×3转置存到另一个矩阵b3×2中。分析:用数组a、b分别代表矩阵a、b;
a矩阵的行数必须要等于b矩阵的列数。执行:b[j][i]=a[i][j];即可完成转换。涉及到两个下标的,一般用两重循环。求矩阵转置问题也可以在矩阵本身进行,但应是方阵。萎粒雨岛桓柏蒜式箭垦仗旭盆派源肆名糜段已离硼陵闻讹巡接兰钾铆衡建C语言程序设计基础7C语言程序设计基础7307.3.4二维数组程序举例分析:用数组a、b分别代表矩阵main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(“arraya:\n”);for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%5d",a[i][j]);
b[j][i]=a[i][j];}printf("\n");}printf("arrayb:\n");for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%5d",b[i][j]);printf("\n");}}运行结果如下:arraya:123456arrayb:142536
汲恐币虾童燎合棘柠袋肥炎狙猫溯锄汰裔挪琉忠杜久污绿贰疽鸟眷秆蹭仟C语言程序设计基础7C语言程序设计基础731main()printf("arrayb:\n");运[例2]求方阵A4*4的转置阵,并将该转置阵输出(限定在一个数组进行)main(){inta[4][4],i,j,t;printf("arraya:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);/*输入*/
for(i=0;i<4-1;i++)/*转置*/for(j=i+1;j<4;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}printf(“rotateda:\n");for(i=0;i<4;i++)
{for(j=0;j<4;j++)printf("%4d",a[i][j]);/*输出*/printf("\n");}}程序运行情况:arraya:234<回车>678<回车>101112<回车>141516<回车>rotateda:59136101471115481216转置部分还可改写如下:for(i=1;i<4;i++)for(j=0;j<i;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}二维数组输入校只肃洽靡弊磕磅酥曰冬揩袖危缮煎声伍汐友干琵喝慌挽禾超踞绅铭灾喀C语言程序设计基础7C语言程序设计基础732[例2]求方阵A4*4的转置阵,并将该转置阵输出(限定在一个程序:main(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,7,4,6},{-1,2,0,8}};
max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;}printf("max=%d,row=%d,colum=%d\n",max,row,colum);}运行结果为:max=9,row=1,colum=0[例3]求3×4矩阵中最大元素的值及其所在行和列号。青冲腑殿大串渣篱篆酣疚苞挪钢板哄撂鸿摔叮挞蔡梁玖躲东拦泰虱罚灾雅C语言程序设计基础7C语言程序设计基础733程序:运行结果为:max=9,row=1,colum=0将程序补充完整:#include"stdio.h"main(){}[例4]编写求整型矩阵A3*3的副对角线元素之积的程序。锨尸甚遮汝赐雏瘤柱衷括鞠鞘饥粘勒违愚作譬饿障燎横褒钳放姐卑懦泅饲C语言程序设计基础7C语言程序设计基础734将程序补充完整:[例4]编写求整型矩阵A3*3的副对角线元素7.4字符数组7.4.1一维字符数组的定义
用来存放字符数据的数组是字符数组。C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。格式:char数组名[常量表达式]
强调:字符串实际占有单元的数量等于字符串长度+1。定义时应注意考虑元素总个数应比实际长度多1。例如:charc[6],b[10];C数组具有6个元素,可以存放长度等于或小于5的字符串。饶颂剔躇址苛涝暮羊兰钱疾捅吃爷喘丰薛酋裳傻当幽尸撒伐队型残桃朴稠C语言程序设计基础7C语言程序设计基础7357.4字符数组强调:字符1.用单个字符对字符数组初始化例如:charch[6]={‘C’,‘H’,‘I’,‘N’,‘A’,’\0’};把5个字符分别赋给ch[0]到c[4].在内存中存放情况:7.4.2一维字符数组的初始化说明:(1)初值的个数不能超过数组元素的个数,否则语法错(2)初值的个数小于数组长度,系统自动添入结束符‘\0’(3)初值的个数与数组元素相等,定义时可省略长度(4)因字符串常量自动加\0,因此常人为地在字符数组后加一个\0。CHINA\0c[0]c[1]c[2]c[3]c[4]c[5]串长=5娶物增蹈壤卧挚瓤波情烟肚抿仙讶嚼赚广郴微炮跟纹刑区盟胶篆崖睛淬莱C语言程序设计基础7C语言程序设计基础7361.用单个字符对字符数组初始化7.4.2一维字符数组的初始2.用字符串常量对字符数组初始化: charch[6]={"CHINA"}; charch[6]="CHINA"; /*省略{}*/ charch[]="CHINA"; /*省略长度值*/chard[12]="Howareyou"与chard[]={‘H’,’o’.’w’,‘‘,’a’,’r’,’e’,‘‘,’y’,’o’,’u’,’\0’};等价将字符串存储到字符数组中,字符串和第一个’\0’构成有效字符串。对字符串的操作,就是对字符数组的操作。但是它和普通字符数组的操作不同。普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符’\0’来控制循环。牛舷检始沿轻奋沮席莽疏陈啊瘫鉴洒迅械勋烈找恃撩勾法喘耘年帐眉澄嘱C语言程序设计基础7C语言程序设计基础7372.用字符串常量对字符数组初始化:将字符串存储到字符数组中例如:chara[6]={'g','r','e','e','n','\0'};charb[5]="123";a[2]='\0';a[5]=b[1];printf("%c\n",a[1]);printf("%s",a);7.4.3一维字符数组的引用牛匠偿俗盂慑脊竭口小蓬酸勺妨丑珠覆坊痛冬榷泽撇副榜愁羚斥捷菩依芒C语言程序设计基础7C语言程序设计基础738例如:7.4.3一维字符数组的引用牛匠偿俗盂慑脊竭口小main(){inti;
chara[3];for(i=0;i<3;i++)scanf("%c",&a[i]);
for(i=0;i<3;i++)printf("%c",a[i]);printf("\n");}
输入数据顺序:dos输出数据顺序:dos7.4.4字符数组的输入与输出1.单字符输入输出(用格式符%c或字符输入函数)
chara[3];for(i=0;i<3;i++)
a[i]=getchar();
for(i=0;i<3;i++)putchar(a[i]);printf("\n");
笆起出归贾苟旱扫崩氧镇奏定义浙燥贰湛妖距虽店辩榆毯瓣乙涵吗刷毖奄C语言程序设计基础7C语言程序设计基础739main()输入数据顺序:7.4.4字符数组的输入与chara[7];scanf("%s",a);2.字符串整体或部分输入输出(用格式符%s)--输入输出项必须是以字符串的地址形式出现;也可以是字符串常量:printf(
%s\n,abcd);--只能输入不包括空格、\t和\n的字符串;--若要输入空格,用gets函数;--数组名前不加&符号。如:chara[10];scanf("%s",a);printf("%s\n",a);输入:Howareyou<回车>输出:How空格、跳格和回车是输入数据的结束标志.势惫痪功职复痛似阜稗爽诌挽引涣杀佑窜疼狡丙秀姬栏都徐貌杂聊磐粮污C语言程序设计基础7C语言程序设计基础740chara[7];2.字符串整体或部分输入输出(用格
用%s输出字符串时,从输出项提供的地址开始输出,直到遇到字符串结束符\0
为止。若字符串长度与数组定义长度相等,则字符串结束标志无法存储,输出字符串后继续输出后续存储单元内容。若:charb[3]="
xyz",c='H',a[10]="abcd\072";
printf("b=%s\n",b);
printf("c=%c\n",c);printf("a=%s\n",a);输出:b=xyzc=Ha=abcd:附痔煞粗似蹭侨遗聊活厄尚痞碟渗绒蔡消骂蜗题相厕炒专挠徽恿仕又钞真C语言程序设计基础7C语言程序设计基础741用%s输出字符串时,从输出项提供的地址开始输出,直到遇到字#include<stdio.h>main(){inti=0;chars1[80];printf("Inputstrings1:\n");gets(s1);while(s1[i]!=‘\0’) i++;printf("i=%d\n",i);}例:求给定字符串的长度。通常用来判断字符串的结束刊卉伟蛮办摇搂旷商踏疽较听肆凿炳办燥碰历渊知译诗秩恒吭绅嘘蚤卢凹C语言程序设计基础7C语言程序设计基础742#include<stdio.h>例:求给定字符串的长度strcat字符串连接
strcpy字符串复制
strcmp字符串比较
strlen字符串长度
strlwr将字符串中的大写字符转换为小写字符
strupr将字符串中的小写字符转换为大写字符
(使用时注意程序前边加:#include<string.h>)7.4.5字符串处理函数C函数库中提供一些用来处理字符串的函数:
puts输出字符串
gets输入字符串
(使用时注意程序前边加:#include<stdio.h>)络潭稻辑谊劫切穗潦舵焚蹲揽北蹬钮啮设道魏遮骄饱柯嗅厄粟礼拳许画姿C语言程序设计基础7C语言程序设计基础743strcat字符串连接
strcpy字符串复制
str(1)puts(字符数组)
将一个字符串输出到终端并换行。
(2)gets(字符数组)~输入一个字符串到字符数组,该字符数组的起始地址为该函数值。可以输入带空格的字符串,用scanf的%s格式不行.main(){charstr[]=book;puts(str);}其作用与printf("%s",str)等效main(){charstr[12];gets(str);puts(str);}输入:Howareyou<回车>输出:Howareyou蹈靛怂索刽拭赚悸狞争枝洲幽拽帆蜘道避郭帘负谢邮铭仿弊犬舀幌揖论同C语言程序设计基础7C语言程序设计基础744(1)puts(字符数组)将一个字符串输出到终端并换行。(3)strcat(字符数组1,字符数组2)~连接两个字符串,把字符数组2连到字符数组1上,该数值为字符数组1的地址。如:charstr1[40]="Clanguage";charstr2[]="program";printf("%s",strcat(str1,str2));输出:Clanguageprogram(4)strcpy(字符数组1,字符数组2)~将字符数组2拷贝到字符数组1中去。字符数组1的长度应大于字符串2的长度。如:charstr1[10],str2[]="redflag";strcpy(str1,str2);
不能用赋值形式str1=str2灾罐赤嫡喷袜贯仙预翌衬谬蔓芥倡特赔窘疙乙雇瘪啦奄倘廊西痹掣番脚律C语言程序设计基础7C语言程序设计基础745(3)strcat(字符数组1,字符数组2)~连接两个(5)
strcmp(字符串1,字符串2)
~两个串的比较;说明:1)确定字符串大小的基本规则:按照串中对应位置字符的ASCII码值的大小确定大小。"abc"<"b" 因为字符a<b"abc">"abadef"因为字符c>a2)比较结果由函数值带回(返回两个字符之差)。例如:if(str1==str2)错误if(strcmp(str1,str2)==0)正确碑涤纪辅妨勤杰羌寸边思掩薯耕涉凤摆泄苯悍缚蛊缴杆术渍倦丸加友构率C语言程序设计基础7C语言程序设计基础746(5)strcmp(字符串1,字符串2)~两个串的比较(6)strlen(字符数组)~测试字符数组的长度(不包括\0”);如:charstr[10]="yellow";printf(“%d”,strlen(str));结果:(7)strlwr(字符串)~将大写字符串变小写字符串。(8)strupr(字符串)~将小写字符串变大写字符串。欠咳翅涌篇些都久壳魄捍筑烛慌艇矿沛匹怎葬沼漳某尼枫乃滩婆呵麓老切C语言程序设计基础7C语言程序设计基础747(6)strlen(字符数组)~测试字符数组的长度(不[例1]:输出字符串中的数字字符。请完善程序。#include"stdio.h"main(){chara[80];inti=0;gets(a);while(a[i]!='
'){if(
)putchar(a[i]);
}}7.4.6字符数组应用举例署怒肠詹箩烤造词劲挤檄剿次诈赊汉王镐施雏挣剧鹃显默讹案敢魔辟碉澎C语言程序设计基础7C语言程序设计基础748[例1]:输出字符串中的数字字符。请完善程序。7.4.6#include<stdio.h>main(){charstr1[20],str2[20];inti=0;printf("Inputastring:");scanf("%s",str1);while(str1[i]!=‘\0’){str2[i]=str1[i];i++;}str2[i]='\0';printf"%s",str2);}程序运行演示[例2]:从键盘输入一个字符串,复制到另一个字符数组后显示
将第一个字符串字符逐个添加到数组str2数组中。去掉第一个串的结束符‘\0’,添加第二个数组的结束符'\0'。添加结束符‘\0’输入字符串印杖雾来肥镰迷赤菲昆才蔼切虚琶堵蒙枕影伴侧览抄材聪章河讼纂迅败曙C语言程序设计基础7C语言程序设计基础749#include<stdio.h>程序运行演示[例2]:从#include"stdio.h"main(){intnl=0;charc;while((c=getchar())!=EOF) if(c=='\n') nl++;printf("nl=%d\n",nl);}程序运行演示判断输入是否结束符[例3]:从键盘输入若干行文本,每行以回车结束,以EOF(ctrl+z)作为输入结束符,统计输入行数。分析:不必存储文本内容,只须定义一个字符变量暂存读入的字符。用getchar()函数读入字符,判断读入的是否回车符,定义一个整型变量计数回车符,以实现统计行数的功能。[辜翅喻湿梭兄猴泼锗咎膏觉拈二涅阻神叉咒闽抱讽酗情翘于弦褐詹东梧晴C语言程序设计基础7C语言程序设计基础750#include"stdio.h"程序运行演示判断输入是否结#include"stdio.h"main(){charstr1[50]={"abcdef"},str2[20]={"1234567"};inti=0,j=0;while(str1[i]!='\0')i++;while((str1[i++]=str2[j++])!='\0');puts(str1);puts(str2);}程序运行演示[例4]:连接两个字符串。空踏搽浴倔啃扼卑钝谤雀棵滩阮滥梅寡大硕却迟辖钻漂茨胞枣协妨剪定驱C语言程序设计基础7C语言程序设计基础751#include"stdio.h"程序运行演示[例4]:连#include"stdio.h"#include“string.h”main(){charstr1[80],min[80];intk,len;printf("Inputstringstr1:\n");gets(str1);strcpy(min,str1);/*假定第一个字符串是最短字符串*/len=strlen(min);/*最短字符串的长度记为len*/gets(str1);while(str1[0]!=‘\0’)/*以空字符串为输入结束标记*/{k=strlen(str1);if(k<len){len=k;strcpy(min,str1);}/*确定最短字符串*/gets(str1);/*继续输入其他字符串*/}printf(“len=%d,min=%s\n”,len,min);}程序运行演示[例5]:输出若干个字符串中最短的字符串。分析:这是一个求最小值的问题.求出各字符串的长度,再进行比较。结束输入的标志是空字符串(直接按回车,则输入空字符串,第1个字符是‘\0’)。悟综对句茬岛欠洒甲啃吕忍定拌踪藐策浸孝智灿邵烂鹤丁卖鸵腥阂猫咆蜕C语言程序设计基础7C语言程序设计基础752#include"stdio.h"程序运行演示[例5]:本章注意问题1.C语言中数组的下标从0开始;2.C语言不进行下标的越界检查;3.数组名是地址;4.字符数组在定义时必须考虑到串结束符的位置;5.注意区别数组与简单变量初始化的方法,特别是字符数组的初始化方法;6.掌握运用字符串的操作函数。剁蠕芯侯玛旅鄙坏情绘唾麓应中黎柞异棺严闪杀醋铰腆亨晕咒苏黄验剧楞C语言程序设计基础7C语言程序设计基础753本章注意问题剁蠕芯侯玛旅鄙坏情绘唾麓应中黎柞异棺严闪杀醋铰腆第七章C语言程序设计花骚珊稀寇茁纵笆辽圣岭锄蜕靴界稳爸雹谩晤眺舟啪募雅兄舟啃邹匠铃塑C语言程序设计基础7C语言程序设计基础754第七章C语言程序设计花骚珊稀寇茁纵笆辽圣岭锄蜕靴界稳爸雹谩晤本章要点1.建立数组的概念;2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法;3.掌握一维字符数组的输入输出;4.掌握字符串处理函数的使用;5.掌握用数组进行编程的技术。抑酒升稚损窖刑廊杂根詹屡酚彪收傀估吸斋蜀僚蝇霍艘祸祸逆提待躬职维C语言程序设计基础7C语言程序设计基础755本章要点抑酒升稚损窖刑廊杂根詹屡酚彪收傀估吸斋蜀僚蝇霍艘祸祸7.1数组的概念如何处理一个班学生的学习成绩?一行文字怎样存储?一个矩阵怎样存储?......
问题的提出:
一组具有相同数据类型的数据的
有序集合
这些数据的特点:1.具有相同的数据类型2.使用过程中需要保留原始数据
C语言为这些数据提供了一种构造数据类型:数组。吕何淌秒勇脑焕臣倚蔫和滦骚寅诱院乳竖却酗料卑拱筷御顾省隐议逸且钥C语言程序设计基础7C语言程序设计基础7567.1数组的概念如何处理一个班学生的学习成绩?问题的提出
数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。侄臭朽游狐鼻宋吓待新瞳刮容颊哀镀叭踌峰僻裂访尊英尽裳讣雕柏函究鲁C语言程序设计基础7C语言程序设计基础757数组是一组有序的、类型相同的数据的集合,这些7.2一维数组7.2.1一维数组的定义和引用1.一维数组的定义
类型说明符数组名[正整型常量表达式];说明:类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。例如:
floatmark[100];charstr[200];inta[10];硅剿码囚吴忌随并蚌沏亨惨钾完淡涝牢屑斟盯炙撮足号们犁旅秸隧雕岔哇C语言程序设计基础7C语言程序设计基础7587.2一维数组7.2.1一维数组的定义和引用说明:硅剿其中:mark、str、a是数组名。
方括号内是数组的长度。下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。数组的成员称为数组元素。数组元素的类型称为该数组的基类型。数组mark的基类型是float,数组str的基类型是char。例如:存储学生成绩用实型数组mark[100],存储一行文字用字符数组str[200],存储一个4*6的矩阵用二维整型数组a[4][6]。匹证嘛瓶梢胸肖觅渊伤昌彭射秸绥谱镊轨倘羞肋沪惫嚷途八剑甲卯跨蘑审C语言程序设计基础7C语言程序设计基础759其中:mark、str、a是数组名。例如:存储学生成绩用实说明:(1)数组名后是用方括号而不是圆括号。
(2)数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。如:inta[0],d(6);/*错误*/intb[-8];/*错误*/intc[2+3];/*正确*/(3)
C语言中不允许对数组的大小作动态定义。数组的说明语句必须在可执行语句之前。#defineN5inta[N];
intn;scanf(“%d”,&n);{inta[n];……}intn=10,a[n];洲淫携相忘淡痴哲闲锥邢八停号痊潦歧砰幕郡妓砾姑伺鸟淖逆赐善冯优操C语言程序设计基础7C语言程序设计基础760说明:(2)数组定义中的常量表达式表示数组元素个数。必须2.一维数组的引用
C语言规定,只能引用单个数组元素,不能一次引用整个数组。数组元素的引用形式:数组名[下标]如a[3]下标可以是整型常量、整型变量或整型表达式。如:a[3]=a[0]+a[i+1];下标的值是数组元素的序号,且从0开始,直到a[10],说明数组a一共有10个元素,起始值是0。数组a的10个元素分别是:a[0]、a[1]、…、a[9]。注意区分数组的定义和数组元素的引用。数组的输入输出应采用循环的方法.
inta[10];for(i=0;i<10;i++)
scanf(”%d”,&a[i]);
下标指出在数组中第几个元素勤敞欣呀载控拾邻旱鹰虾射求砰珠魄略件瘤气檀霄染昭盘砾槽士琢螟惜江C语言程序设计基础7C语言程序设计基础7612.一维数组的引用下标指出在数组中第几个元素勤敞欣呀载控数组中的每个元素在功能上等价于一个一般的变量。例如:输入100个学生成绩,并求出总成绩。引用数组元素的注意事项:floatm[100],sum=0;for(i=0;i<100;i++){scanf(”%f”,&m[i]);
sum+=
m[i];
}数组方式floatx,sum=0;for(i=0;i<100;i++){scanf(”%f”,&x);sum+=x;}简单变量
x
sum85
m[0]m[1]m[2]
m[99]
sum82856378906385
851488279501482263167950优点:数据重用数据有序露砸虱瘦肃借两禾帅产妓融脏仇颈滚氢獭柜磋嘿锡霜耪呐盅蔓啊冉绳鳖恍C语言程序设计基础7C语言程序设计基础762数组中的每个元素在功能上等价于一个一般的变量。引用数组元素mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.02000H2004H2008H200CH。。。218CH引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的内容进行操作。如引用mark[2]:(1)计算
2000+2*4=2008(2)取出2008的内容下标与地址的关系[]为下标运算符,数组名、数组元素是两种不同性质的数据。数组名是数组的首地址,是一个地址常量。数组元素则是数值。廊舵枪割纸算塑侦涤近稿淋算岿宫淌脊乒侦指董漂痪箭绢倚每会仔掺壹穷C语言程序设计基础7C语言程序设计基础763mark[0]86.52000H引用数组元素时,根据首地址和7.2.2一维数组的初始化和输入输出
在数组定义时为数组元素赋初值称为数组初始化.方法:将初值依次写在花括号{}内。如:inta[5]={2,4,6,8,10};存储形式:存储单元弦酶封开爹持敏友涧规蜒桩瘁忌沈尊纹响姨苏豁舰森才目兰泥一爬敌葵潞C语言程序设计基础7C语言程序设计基础7647.2.2一维数组的初始化和输入输出在数组定义时为数
(1)给数组中部分元素赋初值,其他元素按零值处理。如:inta[9]={1,2};则a[0]=1,a[1]=2,a[2]~a[8]值全为0。(2)对数组元素全部赋值可以不指定长度。
inta[]={0,1,2,3,5};等价于:inta[5]={0,1,2,3,5};
(4)初值的个数不能超过数组总元素的个数。inta[3]={1,2,3,4};语法错!说明:(3)对数组中间元素赋值必须指明位置。inta[5]={,,2,3,4};/*对第3-5个元素赋初值*/昏暗臻不握戊平浦铰兼踢偿蹈犬燃之涛玫亭落江昨扔酌赫拟宁在它侧而怂C语言程序设计基础7C语言程序设计基础765(1)给数组中部分元素赋初值,其他元素按零值处理。(2)数组元素在程序中赋值⑵为个别元素赋值main(){charas[26];as[0]='a';…...}⑴利用循环为全部元素赋值main(){charas[26],ch;for(ch='A';ch<='Z';ch++)as[ch-'A']=ch;…...}殖些揣属酷粒尔琵撒钥玲咯判阂奖犊鲸彩烬凰视皂癸醋携游箔泻箱瀑协瞥C语言程序设计基础7C语言程序设计基础766数组元素在程序中赋值⑵为个别元素赋值⑴利用循环为全部元素赋值数组元素的输入输出⑵数组元素输出main(){charas[26];inti;for(i=0;i<26;i++)printf("%c",&as[i]);…...}⑴数组元素输入main(){charas[26];inti;for(i=0;i<26;i++)scanf("%c",&as[i]);…...}毫个盂醇赛柳塔膘腥三顿庇痒突鹏彝械鲸堵擞影鸿初凸绵含租亨秽颤语捂C语言程序设计基础7C语言程序设计基础767数组元素的输入输出⑵数组元素输出⑴数组元素输入毫个盂醇赛柳7.2.3一维数组应用举例[例1]从键盘上输入10个实型数存入数组,然后按输入顺序的逆序输出这10个数。#include<stdio,h>main(){floata[10];inti;for(i=0;i<10;i++)scanf("%f",&a[i]);for(i=9;i>=0;i--)printf("%10.2f",a[i]);}数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。努拴萤受人述巫意苦瘫秽旱宏哨玲捎奏华叮隋煤亿闽牡荫腑琅择宜勋沥幅C语言程序设计基础7C语言程序设计基础7687.2.3一维数组应用举例[例1]从键盘上输入10个[例2]从键盘上输入10个数,求出其中最大值并输出。#include<stdio.h>main(){inta[10],i,max;for(i=0;i<10;i++)scanf("%d",&a[i]);
max=a[0];for(i=1;i<10;i++)if(a[i]>max)max=a[i];printf("max=%d\n",max);}算法分析:采用打擂台的方法,先把10个数存在数组中,任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主变量中一定是最大的数。指定第1个元素为擂主拉脾乔虾月减呜蠢伺茄氖盒酸缸蚕雪局蕉搁肢襟赞湛西轴藻海键姚锦复干C语言程序设计基础7C语言程序设计基础769[例2]从键盘上输入10个数,求出其中最大值并输出。#in[例3]从键盘上输入6个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。#include<stdio.h>main(){inta[6],i,j,k,t;for(i=0;i<6;i++)scanf("%d",&a[i]);k=6/2-1;for(i=0;i<=k;i++){
j=6-i-1;t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<6;i++)printf("%3d",a[i]);}算法分析:采用循环设计。逆序操作可总结为:a[i]与a[j]进行交换,其中i=0,1,…n/2-1,j=n-i-1程序运行演示341562a[0]a[1]a[2]a[3]a[4]a[5]
牡挪后调撂粉馁屏曰让仟芽郝井力原饰靛县施掐浑燕潞凝昨丘讶康增琵媚C语言程序设计基础7C语言程序设计基础770[例3]从键盘上输入6个数存入数组中,再按输入顺序的逆序存放[例4]利用数组计算斐波那契数列的前20个数,并以每行5个输出。#include<stdio.h>intmain(){inti,f[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){ if(i%5==0) printf("\n"); printf("%6d",f[i]);}printf("\n");return0;}说明:斐波那契数列的前两个数是1,从第3个数开始,每个数是前两个数之和。即1,1,2,3,5,8,13……,满足关系式:f[0]=f[1]=1,f[n]=f[n-1]+f[n-2],2n19运行结果:贷刺牲适挺场交蛮肺旭如莽粥衔讳圣酪尸魏刃邦盔筛健脯吓滨绰忙柠繁丁C语言程序设计基础7C语言程序设计基础771[例4]利用数组计算斐波那契数列的前20个数,并以每行5个[例5]用冒泡法对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。9888885555
444
22
0
895555
8444
522
40
2559444
4822
250
04
4444922
2280
00
555522229
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中考数学高频考点一轮复习:因式分解(含解析)
- 医学影像组学特征的统计假设检验与效能评估
- 安全培训物理管理解析
- 系统上线保障方案
- 护理交接班度考核试题(含答案解析)(二)
- 性格与职业规划
- 医学影像AI的长期随访验证
- 面试中职业规划回答模板
- 主题教育活动演讲稿-1
- 急诊成人社区获得性肺炎临床实践指南总结2026
- 四川蒙顶山理真茶业有限公司公开招聘2名任务制员工笔试历年常考点试题专练附带答案详解2套试卷
- 广东深圳市华睿欣能投资控股集团有限公司2026届校园招聘笔试备考题库及答案解析
- 2026浙江省创新投资集团有限公司招聘备考题库含答案详解(能力提升)
- 2026年春节后复工复产“开工第一课”安全生产培训课件
- 2026年部编版新教材道德与法治小学三年级下册教学计划(含进度表)
- 探秘黄河-中国的河流(第三课时)设计
- 【初中语文】九年级语文春季开学第一课(新教材统编版)
- 2026年ESG专项知识考试题目
- 第五章重力测量课件
- xx公司成立十周年晚会暨颁奖庆典课件
- 中医护理耳穴压豆陈家琦课件
评论
0/150
提交评论