为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

《C语言》PPT课件

2021-02-19 49页 ppt 281KB 26阅读

用户头像 机构认证

爱赢

公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)

举报
《C语言》PPT课件为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型──数组。6.11维数组的定义和引用6.22维数组的定义和引用6.3字符数组与字符串[Return]第6章数组6.11维数组的定义和引用6.1.11维数组的定义6.1.21维数组元素的引用6.1.31维数组元素的初始化6.1.41维数组应用举例[Return]数组的概念数组由若干个相同类型的相关数据项按顺序存储在一起,构成数组(array);数组实际上是同种类型、有序的数据的集合。数组名如果用一个统一的名字标识这组数据,那么这个名字就称为数组名。数组元素构成数组的...
《C语言》PPT课件
为了解决比较复杂的问,本章介绍C语言提供的一种最简单的构造类型──数组。6.11维数组的定义和引用6.22维数组的定义和引用6.3字符数组与字符串[Return]第6章数组6.11维数组的定义和引用6.1.11维数组的定义6.1.21维数组元素的引用6.1.31维数组元素的初始化6.1.41维数组应用举例[Return]数组的概念数组由若干个相同类型的相关数据项按顺序存储在一起,构成数组(array);数组实际上是同种类型、有序的数据的集合。数组名如果用一个统一的名字标识这组数据,那么这个名字就称为数组名。数组元素构成数组的每一个数据项称为数组的元素(element)。说明同一数组中的元素必须具有相同的数据类型,而且这组数据在内存中将占据一段连续的存储单元。数组定义的通用格式格式类型数组名[下标1][下标2]……[下标n];其中:类型为数组元素的基类型,即每个元素的类型。下标值n示为所在维的数组元素个数,该维的数组下标的上界是n-1;C语言中数组下标下界始终为0。维数是下标的个数。数组分类一维数组二维数组与多维数组一维数组的定义一维数组的初始化一维数组的引用二维数组的定义二维数组的初始化二维数组的引用定义、初始化、引用一维数组的定义格式类型数组名[常数表达式];举例inta[10];//各元素都为整形。定义一个包括10个整形元素的一维数组。元素为:a[0]、a[1]、a[2]……a[9]   注明⒈数组名定名规则和变量名相同,遵循标识符定名规则。⒉数组名后使用方括号括起来的常数表达式,不能用圆括号。  inta(10);×⒊常数表达式表示元素的个数,即数组长度,而不是数组的上界。上例不能使用a[10]——越界错误!⒋常数表达式中可以包括常量和符号常量,不能包括变量。如变长数组:设n为整形。——动态数据结构scanf("%d",&n);inta[n];×⒌数组必须先定义,然后使用。⒍一维数组元素在内存中的排列顺序是线性排列即连续存储的。数组同变量一样,也必须先定义、后使用。1维数组是只有1个下标的数组,定义形式如下:数据类型数组名[常量表达式][,数组名2[常量表达式2]……];(1)“数据类型”是指数组元素的数据类型。(2)数组名,与变量名一样,必须遵循标识符命名规则。(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。注意:C语言中不允许动态定义数组。特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项的描述符号!(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。[Return]6.1.2数组元素的引用引用数组中的任意一个元素的形式:数组名[下标表达式]1.“下标表达式”可以是任何非负整型数据,取值范围是0~n-1(元素个数n)。特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。[Return]使用说明C规定只能逐个引用数组元素,而不能一次引用整个数组。引用形式数组名[下标]其中:下标可为整形常量或整形表   达式。举例a[0]=a[5]+a[n+3]-a[2*3]使用循环语句完成数组的赋值与输出。main(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%3d",a[i]);}注明在数组的引用中,其下标值必须要落在0与n-1之间——越界错误!下标越界也不自动监测。一个数组元素实质上就是一个变量名,数组元素和变量一样使用。数组元素下标的括号必须是方括号。6.1.31维数组元素的初始化初始化格式:数据类型数组名[常量表达式]={初值表}(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。[Return]一维数组的初始化⒈在定义数组时,对数组元素赋初值。inta[10]={0,1,2,3,4,5,6,7,8,9}a[0]=0;a[1]=1;a[2]=2;……a[9]=9⒉可以只给一部分元素赋初值。inta[10]={0,1,2,3,4}a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4初值只赋前5个元素。⒊如想使一个数组全部为值n,可为:inta[10]={0,0,0,0,0,0,0,0,0,0}或inta[10]={0}与fortran语言不同,不能为:inta[10]={0*10}⒋在对全部数组元素赋初值时,可以不指定数组长度,例如:inta[5]={1,2,3,4,5}可以写成:inta[]={1,2,3,4,5}当数组被说明为静态(static)存储类型或外部存储类型(即在所有函数外部定义)时,则在不显式给出初值的情况下,数组元素将在程序编译阶段自动初始化为0。staticinta[4]等价于staticinta[4]={0,0,0,0}6.1.41维数组应用举例用数组来处理求Fibonacci数列问题main(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}}6.1.41维数组应用举例[案例6.2]已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf("输入第%2d个学生的成绩\n",i++);printf("平时实习测验期末成绩\n");score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j<4;j++){scanf("%f",&score[j]);score[4]+=score[j]*ratio[j];}printf("总评成绩为:%6.1f\n",score[4]);printf("\n按空格键继续,其它键退出");con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}[程序演示][Return][案例6.1]从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。排序的有很多,本题采用冒泡法。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。(2)然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束。冒泡法排序用冒泡法对10个数排序(由小到大)。482759248579245879245789245789245789482759482759482579482579428579冒泡程序t=a[j];a[j]=a[j-1];a[j-1]=t注:可以使用a[0]/*案例代码文件名:AL6_1.C*//*功能:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。*/#include"stdio.h"#defineNUM10/*定义符号常量(数据个数N)*/main(){intdata[NUM];/*定义1个1维整型数组data*/inti,j,temp;/*定义循环变量和临时变量*/clrscr();/*库函数clrscr():清屏*/printf("Pleaseinput10numbers:\n");for(i=0;ii;j--)/*内循环:进行每趟比较*/if(data[j]max){max=a[i][j];row=i;colum=j;}printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);}6.3字符数组与字符串6.3.1字符数组的逐个字符操作6.3.2字符数组的整体操作6.3.3常用的字符串处理函数[Return]6.3.1字符数组的逐个字符操作[案例6.5]从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。/*案例代码文件名:AL6_5.C*/main(){inti;staticcharstr[80];clrscr();for(i=0;i<80;i++){str[i]=getch();/*逐次给数组元素str[i]赋值,但不回显在屏幕上*/printf("*");/*以星号代替输入字符的个数*/if(str[i]=='\x0d')break;/*若输入回车则终止循环*/}i=0;while(str[i]!='\x0d')printf("%c",str[i++]);/*逐次输出字符数组的各个元素*/printf("\n");getch();/*程序暂停*/}[程序演示]1.字符数组的定义1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2.字符数组的初始化字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3.字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:charstr[10];……for(i=0;i<10;i++){scanf("%c",&str[i]);}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:charstr[10]="clanguage";……for(i=0;i<10;i++)printf("%c",str[i]);printf("\n");……注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符──单引号;输出时,系统也不输出字符的定界符。[Return]6.3.2字符数组的整体操作[案例6.6]字符数组的整体输入与输出。/*案例代码文件名:AL6_6.C*//*功能:将2维字符数组进行初始化,并在屏幕上输出*/main(){inti;charname[5][9]={"张三山","李四季","王五魁","刘六顺","赵七巧"};for(i=0;i<5;i++)printf("\n%s\t",name[i]);/*name[i]代表该行数组元素的首地址*/getch();}[程序演示]1.字符串及其结束标志所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。C语言规定:以‘\0’作为字符串结束标志(‘\0’代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了──字符数组的整体操作。注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2.字符数组的整体初始化字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3.字符数组的整体引用(1)字符串的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。(2)字符串的输出printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。[Return]6.3.3常用的字符串处理函数字符串标准函数的原型在头文件string.h中。1.输入字符串──gets()函数(1)调用方式:gets(字符数组)(2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。(3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。2.输出字符串──puts()函数(1)调用方式:puts(字符数组)(2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。(3)使用说明1)字符串中允许包含转义字符,输出时产生一个控制操作。2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。3.字符串比较──strcmp()函数(1)调用方式:strcmp(字符串1,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。(2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1<字符串2,函数返回值负整数;字符串1>字符串2,函数返回值正整数。(3)使用说明1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。2)不能使用关系运算符“==”来比较两个字符串,只能用strcmp()函数来处理。[案例6.7]gets函数和strcmp函数的应用。/*案例代码文件名:AL6_7.C*//*功能:简单密码检测程序*/#include"stdio.h"main(){charpass_str[80];/*定义字符数组passstr*/inti=0;/*检验密码*/while(1){clrscr();printf("请输入密码\n");gets(pass_str);/*输入密码*/if(strcmp(pass_str,“password”)!=0)/*口令错*/printf("口令错误,按任意键继续");elsebreak;/*输入正确的密码,中止循环*/getch();i++;if(i==3)exit(0);/*输入三次错误的密码,退出程序*/}/*输入正确密码所进入的程序段*/}[程序演示]4.拷贝字符串──strcpy()函数(1)调用方式:strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。(2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。(3)使用说明1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。2)不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。5.连接字符串──strcat()函数(1)调用方式:strcat(字符数组,字符串)(2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。(3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。6.求字符串长度──strlen()函数(len是length的缩写)(1)调用方式:strlen(字符串)(2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。7.将字符串中大写字母转换成小写──strlwr()函数(1)调用方式:strlwr(字符串)(2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。8.将字符串中小写字母转换成大写──strupr()函数(1)调用方式:strupr(字符串)(2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。[Return]
/
本文档为【《C语言》PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索