C语言程序设计教程课件第5章_第1页
C语言程序设计教程课件第5章_第2页
C语言程序设计教程课件第5章_第3页
C语言程序设计教程课件第5章_第4页
C语言程序设计教程课件第5章_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1主要内容5.1一维数组5.2多维数组5.3字符数组与字符串2学习目标了解一维数组与多维数组的定义。掌握一维数组和二维数组的初始化及引用。了解字符串与字符数组的区别。掌握字符数组的使用。掌握常用的字符串处理函数。

35.1一维数组5.1.1一维数组的定义一维数组是数组名后只有一个下标的数组,其定义形式为:类型说明符数组名[数组长度];类型说明符规定了数组的存储类型和数据类型,数组名为用户选定的合法标识符,而数组长度既可以是整型常量又可以是整型表达式。数组定义的作用是定义一个指定长度的一维数组:它的元素为数组名[0]、数组名[1]、数组名[2]……数组名[数组长度-1]。45.1.2一维数组的存储形式一维数组在内存中存储时,按下标递增的次序连续存放。例如inta[5],数组名a或&a[0]是数组存储区域的首地址,a[0]就存放在这里,a[1]至a[4]在其后依次存放。因此数组名代表了数组的存放首地址,不能对其进行赋值和其他运算。如果知道数组a的首地址和数据类型,可以通过如下公式算出每个元素的地址:数组元素a[i]的地址=数组首地址+i*数组元素的数据类型对应的字节数了解了数组元素在内存中的存储形式,可以更好地掌握数组数据的存储规律,但在实际的程序设计中,程序设计人员是不知道数组的具体地址的。因此,C语言不允许使用正整数作为数组变量的地址。只能按照下述方法表示数组元素的地址:a[i]的地址可表示为:&a[i]或a+ia的首地址可表示为:a[0]或a55.1.3一维数组的初始化一维数组的初始化就是给一维数组赋初值,其实现形式是:数据类型数组名[数组长度]={值1,值2,值3……值n};(1)完全赋初值。例如:inta[5]={1,2,3,4,5};(2)部分赋初值。例如:inta[5]={1,2,3};数组a[5]只有前三个元素被赋予给定的初值,剩余的数组元素被初始化为0。(3)不指定数组长度赋初值。例如:inta[]={1,2,3,4,5,6,7,8,9,10};数组也可以不指定初值个数,本例中系统根据提供的初值个数自动将该数组长度取为10。(4)不赋初值。例如:staticinta[5];65.1.4一维数组元素的引用数组的引用形式为:数组名[下标]其中,下标可以是整型常量表达式或含有变量的整型表达式。一维数组元素的引用。输出数组每个元素的值。#include<stdio.h>main(){inti;inta[3]={1,2,3};for(i=0;i<3;i++)printf("%d",a[i]);}输出结果为:12375.1.5一维数组应用举例将数字从0到9装入一个整型数组。算法设计:利用一个整型变量使之从0到9变化,便将对应的值赋给对应的数组变量。源程序:#include<stdio.h>main(){intx[10];intt;for(t=0;t<10;++t)x[t]=t;}8显示输入的10个数据中的正数。算法设计:利用数组将输入数据存储起来,然后利用循环,使数组中的每一个元素与0比较,大于0显示;小于0继续进行循环。源程序:#include<stdio.h>main(){inti;floata[10];printf("pleaseinputthenumbers:");for(i=0;i<10;i++)scanf("%f",&a[i]);printf("\nthepositivenumbersare:\n");for(i=0;i<10;i++){if(a[i]>0.0)printf("%f",a[i]);}}9对输入的5个数进行排列。源程序:#include<stdio.h>main(){intnum[5];inti,j;inttemp;printf("pleaseinputthenumbers:");for(i=0;i<5;i++)scanf("%d",&num[i]);for(i=0;i<4;i++)for(j=i+1;j<5;j++){if(num[i]>num[j]){temp=num[i];num[i]=num[j];num[j]=temp;}}for(i=0;i<5;i++)printf("%d",num[i]);printf("ok\n");}105.2多维数组5.2.1多维数组的定义多维数组的一般说明形式为:数据类型数组名[a][b][c]…[z];多维数组的数组元素个数为:a*b*c…*z。115.2.2多维数组的存储形式125.2.3二维数组的定义二维数组定义的一般形式是:类型说明符数组名[数据长度1][数据长度2];它的形式与一维数组相比多了一个数据长度的限定,它的元素个数为数据长度1×数据长度2。它的元素表示是按行列的形式表示的。例如:a[2][3]它的数组元素依次为a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]。135.2.4二维数组的初始化(1)按行分段赋值。例如:a[2][3]={{1,2,3},{4,5,6}};可以把它看成具有两个元素的一维数组a[0]、a[1],而a[0]、a[1]又可以看成是两个分别由三个元素组成的一维数组。(2)连续赋值。例如:a[2][3]={1,2,3,4,5,6};这种复制方法是对数组中的元素顺序赋值。于是有:a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6。145.2.5二维数组元素的引用二维数组的引用形式为:数组名[行下标][列下标]其中,下标可以是整型常量表达式或含有变量的整型表达式。在引用数组元素时,要注意下标不能越界。二维数组的引用举例。输出指定数组元素的值。#include<stdio.h>main(){inti,j;inta[2][3]={1,2,3,4,5,6};printf("pleaseinputtheelementyouwanttoknow:");scanf("%d,%d",&i,&j);printf("thenumberis%d",a[i][j]);}假如输入0,1结果为“thenumberis2”。155.2.6二维数组应用举例把3×2的矩阵行和列元素互换,变成一个2×3的矩阵。源程序:#include<stdio.h>main(){inta[3][2],b[2][3];inti,j;for(i=0;i<3;i++){for(j=0;j<2;j++)scanf("%d",&a[i][j]);}for(i=0;i<3;i++){for(j=0;j<2;j++)b[j][i]=a[i][j];}printf("arrayais:\n");for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%-4d",a[i][j]);printf("\n");}("arraybis:\n");for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%-4d",b[i][j]);printf("\n");}}16一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。姓名 englishmath politics张 80 75 92王 61 65 71李 59 63 70赵 85 87 90周 76 77 85算法设计:可设一个二维数组a[5][3]存放5个人三门课的成绩。再设一个一维数组b[3]存放所求得各分科平均成绩,设变量c为全组各科总平均成绩。17#include<stdio.h>main(){inti,j,s=0,c,b[3],a[5][3];printf("inputscore\n");for(i=0;i<3;i++){for(j=0;j<5;j++){scanf("%d",&a[j][i]);s=s+a[j][i];}b[i]=s/5;s=0;}c=(b[0]+b[1]+b[2])/3;printf("english:%d\nmath:%d\npolitics:%d\n",b[0],b[1],b[2]);printf("total:%d\n",c);}185.3字符数组与字符串

5.3.1字符数组的定义用来存放字符量的数组称为字符数组。其定义的一般形式是:char数组名[数据长度]字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。字符数组类型说明的形式与前面介绍的数值数组相同。例如:chara[10];由于字符型和整型通用,也可以定义为:inta[10];但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如:charc[5][10];即为二维字符数组。195.3.2字符数组的初始化(1)用字符常量逐个初始化数组。例如:chara[8]={'i','l','o','v','e','y','o','u'};用逐个初始化的方法与数值型数组初始化本质上是一样的,同样也可以进行完全赋初值及不完全赋初值,但是不完全赋值时没有赋值的元素被赋为空格。当对全体元素赋初值时也可以省去长度说明。例如:charc[]={'c','','p','r','o','g','r','a','m'};这时C数组的长度自动定为9。(2)字符串常量初始化数组。例如:charc[]={'c','','p','r','o','g','r','a','m'};可写为:charc[]={"Cprogram"};或去掉{}写为:charc[]="Cprogram";205.3.3字符数组的引用可以通过引用字符数组中的一个元素,得到一个字符。数组的引用形式为:数组名[下标]输入“Ilikeplayingfootball”并显示出来。#include<stdio.h>main(){chara[23]="Ilikeplayingfootball";inti;for(i=0;i<23;i++)printf("%c",a[i]);}运行结果为:Ilikeplayingfootball215.3.4字符串和字符串结束的标志字符串是指若干有效字符的序列。C语言中只有字符串常量,没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符数组里。字符串作为一个整体,它是以“\0”作为结束标志的。“\0”是指ASCⅡ码为0的字符,这个字符不是普通的可显示的字符,而是一个空操作符,它不进行任何操作,只是作为一个标记。了解了字符串的含义,即可比较一下不同初始化方法下数据存放的区别。例如:charc[]={'C','','p','r','o','g','r','a','m'};charc[]="Cprogram";225.3.5字符数组的输入输出1.字符数组的输入(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:for(i=0;i<10;i++)a[i]=getchar();用scanf()赋值:for(i=0;i<10;i++)scanf("%c",&a[i]);(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:scanf("%s",a);或scanf("%s",&a[0]);输入“Cprogram”并回车时,a数组会自动包含一个以“\0”结尾的字符串“Cprogram”。232.字符数组的输出(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:for(i=0;i<10;i++)a[i]=putchar();用printf()赋值:for(i=0;i<10;i++)printf("%c",a[i]);(2)用printf()的‘%s’格式对数组赋值。还是对于数组a[10]:chara[10]="Cprogram";for(i=0;i<10;i++)printf("%c",a[i]);输出结果为:Cprogram245.3.6字符串处理函数1.字符串输出函数puts形式:puts(字符数组名)功能:把字符数组中的字符串输出到显示器。即在屏幕上显示该字符串。【例5-9】分两行显示MEN和WOMEN。#include<stdio.h>main(){staticcharc[]="MEN\nWOMEN";puts(c);}输出结果为:MEN WOMEN252.字符串输入函数gets格式:gets(字符数组名)功能:从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。【例5-10】输入一个字符串并显示。#include<stdio.h>main(){chara[15];printf("inputstring:\n");gets(a);puts(a);}假如输入:goodnight显示结果:goodnight263.字符串连接函数strcat格式:strcat(字符数组名1,字符数组名2)功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。【例5-11】利用strcat输出“mynameis……”。#include<stdio.h>#include<string.h>main(){charst1[30]="Mynameis";intst2[10];printf("inputyourname:\n");gets(st2);strcat(st1,st2);puts(st1);}假如输入:Jack显示结果:MynameisJack274.字符串拷贝函数strcpy格式:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数组2也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。【例5-12】将一个字符串拷贝到一个字符串数组里。#include<stdio.h>#include<string.h>main(){charst1[15],st2[]="Cprogram";strcpy(st1,st2);puts(st1);puts(st2);}输出结果为:CprogramCprogram285.字符串比较函数strcmp格式:strcmp(字符数组名1,字符数组名2)功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。【例5-13】比较输入的两个字符串是否一样。#include<stdio.h>#include<string.h>main(){intk;charst1[15],st2[15];printf("inputstring1:\n");gets(st1);printf("inputstring2:\n");gets(st2);k=strcmp(st1,st2);if(k==0)printf("st1=st2\n");if(k>0||k<0)printf("st1!=st2\n");}296.测字符串长度函数strlen格式:strlen(字符数组名)功能:测字符串的实际长度(不含字符串结束标志'\0')并作为函数返回值。【例5-14】测出输入字符串的实际长度。#include<stdio.h>#include<string.h>main(){intk;charst[20];gets(st);k=strlen(st);printf("Thelenthofthestringis%d\n",k);}输入字符串:ilikefootball输出:Thelenthofthestringis13305.3.7字符数组应用举例【例5-15】输入一个字符串

温馨提示

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

评论

0/150

提交评论