《c程序设计授课》课件-第05章 数组_第1页
《c程序设计授课》课件-第05章 数组_第2页
《c程序设计授课》课件-第05章 数组_第3页
《c程序设计授课》课件-第05章 数组_第4页
《c程序设计授课》课件-第05章 数组_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章数组*重点与难点5.1概述5.2一维数值数组5.3二维数组5.4字符串与字符数组5.5程序举例*本章小结*作业重点与难点重点:数组的定义、初始化和元素的引用。难点:正确使用数组。5.1概述数组属于构造类型,即由基本类型构造出的新类型。数组:是连续存放的、具有相同类型的、并且具有相同的变量名,通过下标来引用每个元素(也称下标变量)。数组的维数:一维数组、二维数组、多维数组5.2一维数值数组5.2.1一维数值数组的定义5.2.2一维数值数组的初始化5.2.3一维数值数组的引用5.2.4一维数值数组程序举例5.2.1一维数值数组的定义一般定义形式:

类型说明符数组名[常量表达式];举例:

1)inta[10];2)floatscore[40];3)#defineN5intb[N];4)inta=4;intb[a];(错误)5.2.2一维数值数组的初始化数组定义后系统并不会自动初始化。初始化方法1)inta[5]={1,2,3,4,5};2)intb[5]={0};3)intc[10]={1,2,3,,4};4)intd[]={0,1,2,3};其他初始化方法5)inta[5];a[0]=1;a[1]=3;a[2]=7;a[3]=9;a[4]=10;6)intb[10];for(i=0;i<10;i++)scanf("%d",&a[i]);初始化常见错误超出数组范围:下标从0开始数组名不能被赋值:因为数组名代表数组的首地址,是常量。5.2.3一维数值数组的引用引用形式:数组名[下标]*下标表示元素在数组中的顺序号!可以是任何表达式,系统会自动取整。引用是对数组元素,不能对数组整体引用。引用越界,系统不会给出错误提示!定义与引用int[10];

10表示数组的长度或称元素个数a[5]

5表示第6个元素5.2.4一维数值数组程序举例例5.1键盘输入给数组赋值,并且逆序输出。例5.2利用数组计算斐波拉契数列前十项。例5.3“冒泡”排序例5.1键盘输入给数组赋值,并且逆序输出。main(){inta[10],i;printf("Pleaseinput10number:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("Theresult:");for(i=9;i>=0;i--)printf("%d",a[i]);}例5.2利用数组计算斐波拉契数列前十项。main(){intf[10]={1,1},i;for(i=2;i<10;i++)

f[i]=f[i-2]+f[i-1];for(i=0;i<10;i++){

if(i%5==0)printf("\n");printf("%12d",f[i]);}}例5.3“冒泡”排序(10个数)988888895555559444444922222290000009排好的数据程序说明inta[11];/*a[1]~a[10]存放10个数*/for(j=1;j<10;j++)/*10-1趟*/for(i=1;i<=10-j;i++)/*比较次数10-j*/if(a[i]>a[i+1])/*交换,保证从小到大*/{t=a[i];a[i]=a[i+1];

a[i+1]=t;}

5.3二维数组5.3.1二维数组的定义与初始化5.3.2二维数值数组程序举例5.3.1二维数组的定义与初始化1、二维数组的定义2、二维数组的初始化1、二维数组的定义一般形式

类型说明符数组名[常量表达式2][常量表达式1]举例:

inta[2][3];

第0行:a[0][0]、a[0][1]、a[0][2]

第1行:a[1][0]、a[1][1]、a[1][2]2、二维数组的初始化1)intt[2][3]={{1,2,3},{4,5,6}};intt[2][3]={1,2,3,4,5,6};2)赋值语句或键盘输入初始化3)intx[][3]={{1,2,3},{4,,6},{7}};inty[3][]={1,2,3,4,5};(错误)

{{1,2},{3,4},{5}}

{{1,2,3},{4,5}}5.3.2二维数值数组程序举例例5.4在矩阵a中选出各行最大元素组成一维数组b。例5.5有5人3门课成绩,编程求各科平均分、总平均成绩。例5.4在矩阵a中选出各行最大元素组成一维数组b。inta[3][4],b[3];for(i=0;i<3;i++){

m=a[i][0];for(j=1;j<4;j++)if(a[i][j]>m)m=a[i][j];b[i]=m;}例5.5有5人3门课成绩,编程求各科平均分、总平均成绩。1)请注意:书上的程序是按课程输入每个人的成绩。即按列输入!2)ave[i]=s/5;/*各科平均分*/3)total=(ave[0]+ave[1]+ave[2])/3;思考题有5人3门课程的成绩,编程求出每个人的平均分,每门课程的平均成绩。要求逐个人输入,即先输入第一个人三门课成绩,再输入第2个人的3门课成绩,以此类推。5.4字符串与字符数组5.4.1字符串和字符串结束标志5.4.2字符串和字符数组5.4.3字符串处理函数5.4.1字符串和字符串结束标志字符串:"abc"字符串结束标志:'\0'注意:C语言中没有字符串变量,字符串是通过字符数组来存放的。5.4.2字符串和字符数组1、字符数组的定义2、字符数组的初始化3、字符数组的输入/输出1、字符数组的定义chars[12];2、字符数组的初始化1)为数组中各元素逐个指定初值。

chars[6]={'b','o','y','\0'};chart[]={'c','a','t'};2)用字符串进行初始化。

charstr1[5]={"boy"};charstr2[5]="cat";

charstr3[][6]={"Tom","Mary","Peter"};3、字符数组的输入/输出1、逐个字符输入/输出:%cscanf("%c",&str[i]);2、字符串形式输入/输出:%sscanf("%s",str);/*str代表数组首地址*/举例main(){charstr[20];for(i=0;i<19;i++)scanf("%c",&str[i]);str[i]='\0';printf("%s",str);scanf("%s",str);printf("%s",str);}运行情况Iamaboy.Iamaboy.Itisadog.It遇到空格、回车和Tab键结束。5.4.3字符串处理函数函数功能puts(字符数组)将一个字符串输出到终端gets(字符数组)从终端输入一个字符串到字符数组strcat(字符数组1,字符数组2)把字符串2连接到字符串1的后面,结果放在字符数组1中strcpy(字符数组1,字符串2)将字符串2复制到字符数组1中。(字符串赋值不能使用“=”)strcmp(字符串1,字符串2)比较字符串1和字符串2。strlen(字符数组)测试字符串的实际长度,不含'\0'在内。strlwr(字符串),strupr(字符串)转换成小写转换成大写puts()/gets()举例#include<stdio.h>main(){charstr[20];puts("Inputastring:");gets(str);puts(str);}程序运行:Inputastring:Iamateacher.Iamateacher.-(光标当前位置)综合应用字符串处理函数举例#include<string.h>main(){charstr1[40];str2[40],temp[40];

gets(str1);gets(str2);

strlwr(str1);if(strcmp(str1,str2)<0){

strcpy(temp,str1);strcpy(str1,str2);strcpy(str2,temp);}

strcat(str1,str2);

strupr(str1);printf("len=%d",strlen(str1));}5.5程序举例例5.13输出3个字符串中最大的串。例5.14统计3行文字中各类字符的个数。例5.15选择排序,在排序的结果中插入一个数,保证插入后仍然有序。

例5.13输出3个字符串中最大的串。main(){charmaxstr[10],str[3][10],i;for(i=0;i<3;i++)gets(str[i]);

strcpy(maxstr,str[0]);if(strcmp(maxstr,str[1])<0)strcpy(maxstr,str[1]);if(strcmp(maxstr,str[2])<0)strcpy(maxstr,str[2]);puts("thelargeststring:");puts(maxstr);}例5.14统计3行文字中各类字符的个数。3个字符串合并:strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);for(i=0;str0[i]!='\0';i++)......书上使用的是ASCII码值,也可以使用字符形式。例5.15选择排序,在排序的结果中插入一个数,保证插入后仍然有序。本程序包括:1)先选择法排序。2)插入一个数,并且保证仍然有序。选择排序图示a[0]a[1]a[2]a[3]a[4]3619416394136941349613469起初a[0]、a[2]对调后选择法排序(程序)for(i=0;i<10;i++){p=i;q=a[i];for(j=i+1;j<10;j++)if(q<a[j]){p=j;q=a[j];}if(p!=i){s=a[i];a[i]=a[p];a[p]=s;}}插入n的操作(仍然保持降序)for(i=0;i<10;i++){if(n>a[i]){for(s=9;s>=i;s--)a[s+1]=a[s];/*移位*/break;}a[i]=n;}分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论