湖北工业大学C语言.ppt

上传人:赵** 文档编号:68606927 上传时间:2022-12-29 格式:PPT 页数:38 大小:778KB
返回 下载 相关 举报
湖北工业大学C语言.ppt_第1页
第1页 / 共38页
湖北工业大学C语言.ppt_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《湖北工业大学C语言.ppt》由会员分享,可在线阅读,更多相关《湖北工业大学C语言.ppt(38页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第五章 数组构造数据类型之一数组:有序数据的集合,用数组名标识元素:属同一数据类型,用数组名和下标确定5.1 一维数组一维数组的定义v定义方式:数据类型 数组名常量表达式;合法标识符表示元素个数下标从0开始 :数组运算符单目运算符优先级(1)左结合不能用()例 int a6;a00145a1a2a3a4a523a编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型)数组名表示内存首地址,是地址常量一维数组的引用v数组必须先定义,后使用v只能逐个引用数组元素,不能一次引用整个数组v数组元素表示形式:数组名下标其中:下标可以是常量或整型表达式例 int i=15;int datai;

2、(不能用变量定义数组维数)例 int a10;printf(“%d”,a);()必须 for(j=0;j10;j+)printf(“%dt”,aj);()例 int data5;data5=10;/C语言对数组不作越界检查,使用时要 注意一维数组的初始化v初始化方式 在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;v说明:l数组不初始化,其元素值为随机数l对static数组元素不赋初值,系统会自动赋以0值l当全部数组元素赋初值时,可不指定数组长度如 int a5=6,2,3;等价于:a0=6;a

3、1=2;a2=3;a3=0;a4=0;如 int a3=6,2,3,5,1;()static int a5;等价于:a0=0;a1=0;a2=0;a3=0;a4=0;l只给部分数组元素赋初值 int a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数程序举例例 读10个整数存入数组,找出其中最大值和最小值步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较(循环)若maxxi,令min=xi3.输出:max和min#include#define SIZE 10main()int xSIZE,i,max,min;print

4、f(Enter 10 integers:n);for(i=0;iSIZE;i+)printf(%d:,i+1);scanf(%d,&xi);max=min=x0;for(i=1;iSIZE;i+)if(maxxi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value is%dn,min);例 用数组求Fibonacci数列前20个数f0f1f2f3f4f5f19.11f1901452319235#include main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0

5、;ia1,则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束例38 49 65 76 13 27 30 97第一趟38 49 65 13 27 30 76第二趟38 49 13 27 30 65第三趟38 13 27 30 49第四趟13 27 30 38第五趟13 27 30第六趟49 38 65 97 76 13 27 30初始关键字n=838497697139727

6、97309713767676273013652765306513134949304927382738303813 27第七趟输入n 个数给a1 到 anfor j=0 to n-1for i=0 to n-jaiai+1真假aiai+1输出a1 到 an#include main()int a10,i,j,t;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i=9;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;printf(The sorted numbers:n);

7、for(i=0;i10;i+)printf(%d,ai);例 用简单选择法对10个数排序排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数 交换第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束例初始:49 38 65 97 76 13 27 kji=11349一趟:13 38 65 97 76 49 27 i=22738二趟:13 27 65 97 76 49 38 三趟:13 27 38 97 76 49 65 四趟

8、:13 27 38 49 76 97 65 五趟:13 27 38 49 65 97 76 六趟:13 27 38 49 65 76 97 kkkkjjjjjjjjjjCh5_201.c输入n 个数给a1 到 anfor i=1 to n-1for j=i+1 to najak真假k=j输出a1 到 ank=iaiaki!=k真假#include main()int a11,i,j,k,x;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(i=1;i10;i+)k=i;for(j=i+1;j=10;j+)

9、if(ajak)k=j;if(i!=k)x=ai;ai=ak;ak=x;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);#define N 6main()int aN,bB-60,c=1,2,3,4,5,6,i;for(i=0;iN;i+)scanf(“%d%d”,&ai,&bi);for(i=0;iN;i+)printf(“%d ”,ai);printf(“n”);for(i=0;iN;i+)printf(“%d ”,bi);printf(“n”);for(i=0;iN;i+)ci=ai+bN-i-1;for(i=0;iN;

10、i+)printf(“%d ”,ci);数组定义:必须用常量表达式数组元素引用Ch6_001.c5.2 二维数组及多维数组二维数组的定义v定义方式:数据类型数组名常量表达式常量表达式;v数组元素的存放顺序l原因:内存是一维的l二维数组:按行序优先l多维数组:最右下标变化最快例 int a34;float b25;int c234;int a3,4;()行数列数元素个数=行数*列数int a32a01a10a11a20a21014523a00a00 a01a10 a11a20 a21int c23401234567.20212223c000c001c002c003c010c011c012c013

11、c020c021c022c023c100c101c102c103c110c111c112c113c120c121c122c123v二维数组理解例 int a34;20161720181920202120222320089201011201213201415200012002320045200067a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23每个元素ai由包含4个元素的一维数组组成二维数组a是由3个元素组成a0a1a2行名014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2二维数组元素的引用

12、形式:数组名下标下标二维数组元素的初始化l分行初始化:例 int a23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456全部初始化l按元素排列顺序初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12120400部分初始化 例 int a3=1,4,5;a00 a01 a02 a10 a11 a12100450第一维长度省略初始化 例 int a23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456全部初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12124

13、000部分初始化 例 int a3=1,2,3,4,5;a00 a01 a02 a10 a11 a12123450第一维长度省略初始化程序举例例 将二维数组行列元素互换,存到另一个数组中a=1 2 34 5 6b=1 42 53 6#include main()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;jmax真假max=aijr

14、ow=icolum=j输出:max和row,colum#include main()int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,colum=0,max;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);例 读入下表中值到数组,分别求各行、各列及表中所有数之和12 4 615 7 9 8 23 3 2 5 1712 4 6 2215 7 9 31 8 23 3 34 2 5 17 24

15、37 39 35 111#include main()int x54,i,j;for(i=0;i4;i+)for(j=0;j3;j+)scanf(%d,&xij);for(i=0;i3;i+)x4i=0;for(j=0;j5;j+)xj3=0;for(i=0;i4;i+)for(j=0;j3;j+)xi3+=xij;x4j+=xij;x43+=xij;for(i=0;i5;i+)for(j=0;j4;j+)printf(%5dt,xij);printf(n);5.3 字符数组和字符串字符数组v定义 v字符数组的初始化l逐个字符赋值l用字符串常量v字符数组的引用例 char c10,ch34;例

16、 char ch5=H,e,l,l,o;ch0Hello逐个字符赋值ch1ch2ch3ch4有问题!例 char ch5=H,e,l,l,o;ch0Hello逐个字符赋值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐个字符赋值ch1ch2ch3ch4 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4 例 char ch6=“Hello”;char ch6=“Hello”;char ch=“Hello”;用字符串常量ch0Helloch1ch2ch3ch40ch5 例 char diamond5=.,.,*,.,*,.,*,*

17、,.,.,.,*,.,*,.,*,.,.,*;二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“Apple”,”Orange”,”Grape”,”Pear”,”Peach”;二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 输出一个字符串#include main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(%c,

18、ci);printf(n);Iamaboy0123456789字符串v字符串及其结束标志l无字符串变量,用字符数组处理字符串l字符串结束标志:0例 “hello”共5个字符,在内存占6个字节 字符串长度5 h e l l o 0104 101 108 108 111 0内存存放字符ASCII码v字符串的输入输出l逐个字符I/O:%cl整个字符串I/O:%s例 用%c main()char str5;int i;for(i=0;i5;i+)scanf(“%c”,&stri);for(i=0;i5;i+)printf(“%c”,stri);例 用%s main()char str5;scanf(“

19、%s”,str);printf(“%s”,str);用字符数组名,不要加&输入串长度数组维数遇空格或回车结束自动加0用字符数组名,遇0结束例 main()char a5=H,e,l,l,o;printf(“%s”,a);例 main()char a=“Hello”;printf(“%s”,a);结果:Hello#-=*h e l l o02314结果:Hello用“%s”输出时,遇0结束main()char a=h,e,l,0,l,o,0;printf(%s,a);例输出:hel h e l 0 l o 0数组中有多个0时,遇第一个结束main()int i;char a5;scanf(%s,

20、a);for(i=0;i5;i+)printf(%d,ai);运行情况:(1)若输入 hel,正常(2)若输入 hell,正常(3)若输入 hello,用%s 输出时,会出现问题 h e l 0 h e l l 0 h e l l o输入字符串长度数组维数例 字符串输入举例 H o w 0 a r e 0 y o u?0#include main()char a15,b5,c5;scanf(%s%s%s,a,b,c);printf(a=%snb=%snc=%sn,a,b,c);scanf(%s,a);printf(a=%sn,a);运行情况:输入:How are you?输出:a=How b=

21、are c=you?输入:How are you?输出:a=Howscanf中%s输入时,遇空格或回车结束运行情况:输入:How are you?例 若准备将字符串“This is a string.”记录下来,错误的输入语句为:(A)scanf(“%20s”,s);(B)for(k=0;k17;k+)sk=getchar();(C)while(c=getchar()!=n)sk+=c;v常用的字符串处理函数包含在头文件 string.hu字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束u字符串输入函数gets格式:gets(字

22、符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组维数例#include main()char string80;printf(“Input a string:”);gets(string);puts(string);输入:How are you?输出:How are you?u字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消,新串最后加0u字符串拷贝函数strcpy格式:strcpy(字

23、符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值例 char str120,str220;str1=“Hello!”;()str2=str1;()例 strcpy与strcat举例#include#include void main()char destination25;char blank=,c=C+,turbo=Turbo;strcpy(destination,turbo);strcat(destination,blank);strcat(destination,c);p

24、rintf(%sn,destination);Turbo C+TrboC+0123456789u024.Trbo0123456789u024.Trbo00123456789u24.u字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或0为止返值:返回int型整数,a.若字符串1 字符串2,返回正整数 c.若字符串1=字符串2,返回零说明:字符串比较不能用“=”,必须用strcmpu字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0

25、在内例 对于以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s=“tv0willn”;(3)char s=“x69082n”;答案:1 3 1#include#include main()char str1=”Hello!,str2=”How are you?”,str20;int len1,len2,len3;len1=strlen(str1);len2=strlen(str2);if(strcmp(str1,str2)0)strcpy(str,str1);strcat(str,str2);else if(strcmp(str1,str2

26、)0)strcpy(str,str2);strcat(str,str1);else strcpy(str,str1);len3=strlen(str);puts(str);printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);例 strcmp与strlen举例How are you?Hello!Len1=6,Len2=12,Len3=18Ch6_23.c应用举例例 输入一行字符,统计其中有多少个单词输入一字符串给 string i=0 num=0 word=0当(c=stringi)!=0)c=空格真真假假word=0word=1num=num+1

27、i=i+1输出:numword=0#include 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 linen,num);当前字符=空格是否未出现新单词,使word=0,num不累加前一字符为空格(word=0),新单词出现,word=1,num加1前一字符为非空格(word=1),未出现新单词,num不变否0是11是1未01否0是

28、12否1未12是1未02否0是13是1未03否0是14否1未14否1未14否1未14例 输入:I am a boy.当前字符是否空格word原值新单词开始否word新值num值Iamaboy.例 有三个字符串,找出其中最大者 H o w 0 H e l l o 0 H i g h 0 str0str1str2#include#include main()char string20,str320;int i;for(i=0;i0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,s

29、tr2);printf(nThe largest string is:n%sn,string);例例 有十个学生的成绩,求平均分有十个学生的成绩,求平均分92 85 68 75 54 88 98 45 61 7992856854889845756179a0a1a2a3a4a5a6a7a8a9a#include main()int k,a10;for(k=0;k10;k+)scanf(“%d”,&ak);for(k=0;k10;k+)sum+=ak;printf(“Average is%dn”,sum/10);例例 有三个学生四门课成绩有三个学生四门课成绩92 85 68 75 54 88 98 45 61 79 81 40张三李四王二数学化学英语物理二维数组例 比较 int a23=5,6,7,8;与 int a23=5,6,7,8;5 6 07 8 05 6 78 0 0例 int a10;float f2=1.2,2.2;例 int a5;a=2,4,6,8,10;例 int a10;float i=3;ai=10;例 char name0;float weight10.3;int array-100;例 char str=“Hello”;char str=H,e,l,l,o;h e l l o02314 h e l l o 0023145

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com