




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习目标了解符号常量的用法掌握一维数组的定义和使用掌握二维数组及字符数组的定义和使用掌握逻辑运算,学会编写复杂条件具备函数嵌套调用,及函数之间数据传输的能力学习路径任务一在屏幕上显示2019年1月的日历,每行一周符号常量的定义
符号常量在使用之前必须先定义,其一般格式为:
其中#define是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值(双引号括起的除外)
#define标识符(符号常量名)常量值逻辑运算
(2)逻辑运算符的优先级和结合性
三个逻辑运算符中,逻辑非“!”的优先级最高,具有右结合性,其次是逻辑与“&&”,最后是逻辑或“||”,逻辑与和逻辑或都具有左结合性。它们的优先级为:!>&&>||。当一个复杂的表达式中既有算术运算符、关系运算符,还有逻辑运算符时,它们之间的优先级如下:算术运算符>关系运算符>逻辑运算符。使用符号常量的原因对于一个成熟的程序员来说,在一个程序中,反复多次使用的常量,都定义为符号常量,这是为什么呢?这主要是因为在程序中使用符号常量有明显的好处。(1)见名知意,清晰明了。为了便于记忆,常常用一个能够表示意义的单词或字母组合来为符号常量命名,增强了程序的可读性。(2)避免反复书写,减少出错率。如果一个程序中多次使用一个常量,就要多次书写,而定义了符号常量,只需要书写一次数值,在使用的地方用符号替代就可以了,能够有效地减少出错概率。(3)一改全改,方便实用。当程序中多次出现同一个常量需要修改时,必须逐个修改,很可能出错。而用符号常量,在需要修改时,只需修改定义,就可以做到“一改全改”,非常方便。任务二并排显示2019年前3个月的日历,每行显示每个月的同一周为什么要用数组
C语言引入了数组的概念,是为了方便在计算机中描述事物的某些特征及这些特征之间的联系。数组相当于是由若干数据类型相同的变量组成的一个有序的集合,可以通过一个统一的数组名称和一个位置编号的方式来访问数组中的数据。下面通过介绍一个整型一维数组a,该数组中包含10个元素,用来表示10个学生成绩。
通过数组名及其后面方括号[]内的下标,就可以引用数组中该元素。数组中第一个元素是下标为0的元素。因此,数组a的第1个元素记为a[0],数组a的第2个元素记为a[1],依次类推,数组a的第10个元素记为a[9],一般来说,数组a的第n个元素记为a[n-1]
一维数组的引用
声明了数组以后,如何来使用数组中的元素呢?C语言规定只能逐个引用数组元素而不能一次引用整个数组,数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为在数组名后跟一个下标,下标表示了元素在数组中的顺序号。一维数组的引用格式如下:引用一维数组时应注意:(1)数组名是表示要引用哪一个数组中的元素,这个数组必须已经声明。(2)下标用一对中括号[]括起来,它表示要引用数组中的第几个元素,可以是变量表达式也可以是常量表达式。如为小数时,C编译将自动取整。举例如下代码所示:数组名[下标]num[3];num[i+j];num[i++];一维数组的引用
(3)C语言规定,数组下标从0开始。一个含有n个元素的数组,数组下标的取值范围为[0,n-1],举例如下代码所示:
其中,整型数组num的下标只能取0、1、2三个值,即可以引用数组元素num[0]、num[1]、num[2]。
如将上述程序段中第二行改为:num[3]=k;则错误,引用num[3]是超界的,它表示数组中的第四个元素。C语言编译时并不指出“下标超界”的错误,而是把num[2]下面一个单元的内容作为num[3]引用,从而引起程序潜在的错误。因此,引用数组元素时要特别小心。intnum[3],k=10;num[0]=k;一维数组的初始化
与使用变量一样,一维数组在使用之间必须进行声明。一维数组的声明格式如下:数据类型数组名[常量表达式];(1)数据类型用来声明数组中各个数据元素的类型,如int、float、char等。在任何一个数组中,数据元素的类型都是一致的。(2)数组名的命名规则与变量名的命名规则一样。(3)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,在内存单元中按其下标的顺序占用一段连续的存储单元。一维数组的逻辑结构与存储结构是相同的,数组a的存储结构为:(4)常量表达式的值表示数组元素的个数。常量表达式必须是整数或者整数表达式而不能有变量。常量表达式是放在一对中括号[]中。一维数组的初始化
数组声明后,必须对其元素进行初始化。数组初始化是指在数组声明时给数组元素赋予初值。可以在运行时显示地初始化数组,也可以像普通变量一样,在声明数组同时初始化数组元素。这种方法是在编译阶段进行的,可以减少运行时间,提高效率。一维数组的初始格式如下:数据类型数组名[常量表达式]={初值表}任务三显示2019年全年日历,每3个月一排,每行显示相邻3个月的同一周二维数组的声明
具有多个下标的数组称为多维数组,其中最常用的是二维数组,主要用来表示数值表格。二维数组的声明格式如下:
声明二维数组时应注意:(1)与一维声明基本相同,只多了一个常量表达式,表示二维。第一个常量表达式为行下标,声明了这个数组的行数,第二个常量表达式为列下标,声明了每行的列数。因此,元素个数=行数*列数。如上面二维数组a由3×4=12个元素组成。
数据类型数组名[常量表达式][常量表达式];二维数组的声明(2)C语言把二维数组看成是一维数组,基元素又是一个一维数组。例如,a有三个元素a[0],a[1]和a[2],它们各自又可以看作为一个包含5个元素的一维数组(3)二维数组的元素在内存中按线性方式存放,即按行存放,先存放第一行的元素,再存放第二行的元素。数组a的存放顺序为:
a[0][0]→a[0][1]→a[0][2]→a[0][3]→a[1][0]→a[1][1]→a[1][2]……→a[2][3]二维数组的引用
二维数组的引用格式如下:引用二维数组元素时,对数组下标的值要求与引用一维数组相同,即行或列下标表达式的值只能从0到数组所规定的下标上界之间的整数。数组名[下标]二维数组的初始化
在声明二维数组同时,可以用下列方法给数组元素初始化:(1)按存放顺序,举例如下:二维数组的初始化
(2)按行分段初始化,举例如下:结果与第一种方法相同,但更为直观。有几组用逗号分隔的大括号,就代表二维数组有几行,而每组大括号有几个用逗号分隔的数值,就代表该行有几列。最后将所有的初始化内容用一对大括号括起来。这种方法特别适用于对数组部分元素赋初值,系统自动将没有赋值的元素赋值成0,举例如下:二维数组的初始化
(3)声明同时对数组元素全部赋值,可省略第一维的长度,但必须指定其他维的长度,如下所示:根据初值的个数,编译系统会自动确定第一维的下标,如下所示:编译系统会根据初值数据的行数自动确定第一维下标的长度inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{1},{},{9,10}};/*数组a中各元素如图3-13(c)所示。*/字符数组与字符串的关系
用字符数组表示字符串时需注意:(1)'\0'代表字符串结束,处理字符数组时,一旦遇到该字符,剩下的字符就不再处理。(2)在进行字符串处理时,'\0'不作为字符串的有效字符进行处理,它只起到判别作用。(3)'\0'在字符数组中,仍占用一个单元,如字符串"program"的长度为7,但它却占用了字符数组8个的单元的大小。因此,大小为n的字符数组最多只能存放长度为n-1的字符串,需要预留出字符串结束符'\0'的位置。字符数组的声明
字符数组的声明与前面介绍的类似。例如charc[10];/*一维字符数组,每个元素占用1个字节内存单元*/charc[3][4];/*二维字符数组,每个元素占用1个字节内存单元*/字符数组初始化字符数组可以使用这两种方法来进行初始化。使用字符常量初始化数组,举例如下(2)使用字符串常量(字符串)初始化数组,举例如下:charc[10]={'C','','L','a','n','g','u','a','g','e'};/*声明同时对各个元素赋初值*/charc[]={"CLanguage"};/*此时数组c长度为11*/charc[]="CLanguage";/*大括号也可以省略*/输入输出字符串
在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是:puts():输出字符串并自动换行,该函数只能输出字符串。printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf()还能输出其他类型的数据。同样在C语言中,有两个函数可以让用户从键盘上输入字符串,它们分别是:scanf():通过格式控制符%s输入字符串。除了字符串,scanf()还能输入其他类型的数据。gets():直接输入字符串,并且只能输入字符串。输入输出字符串使用格式符“%c”,以单个字符形式输入输出①在用键盘输入字符串时,通常以回车符或空格符结束一个字符串的输入。如本例,当输入“abcdabcdabcd”时,实际存入字符数组c中的字符只有“abcd”,这一点请注意。②在未知字符串长度情况下,声明字符数组长度时应尽量长些,但这势必会造成资源浪费。我们可以用字符串初始化字符数组,就显得方便多了。输入输出字符串使用格式符“%s”,以字符串整体形式输入或输出(1)输出字符串时不包括'\0'。(2)用“%s”格式将字符串整体输出时,在printf函数中输出项应是字符数组名,而不是数组元素名。如printf("%s",c[i])是错误的。(3)如果数组长度字符串实际长度时,printf函数也只输出到第一个'\0'为止。(4)使用scanf输入整个字符串时,输入项是字符数组名,不要再加地址符&,并且它应该是已经被声明过。如:scanf("%s",c[i])或scanf("%s",&c[i])都是错误的。(5)利用scanf函数输入多个字符串以空格分隔。字符串处理函数gets()函数gets()函数使用时格式如下所示:(1)与使用scanf的“%s”格式输入字符串不同,gets()函数接受的字符串可以包含空格。(2)scanf()函数可以采用多个“%s”格式可以同时输入多个字符串,而gets()函数一次只能输入一个字符串,以回车符作为字符输入结束。gets(字符数组名);字符串处理函数puts()函数puts()函数使用时格式如下所示:作用:将数组中的以‘\0’结束的字符串输出,输出完毕自动换行。它的功能与printf()的“%s”格式的功能基本相同,只是每次只能输出一个字符串。puts(字符数组名);字符串处理函数strcat()字符串连接函数strcat()字符串连接函数使用时格式如下所示:作用:将字符数组1中的字符串结束符'\0'删除,将字符数组2连接到字符数组1后面,并返回字符数组1的首地址。strcat(字符数组1,字符数组2);字符串处理函数strcpy()函数strcpy()函数使用时格如下所示:作用:把字符串数组2的内容拷贝到字符数组1中,拷贝结束后,系统会自动在字符数组1中加入结束符'\0'。strcpy(字符数组1,字符数组2);字符串处理函数strcmp()函数strcmp()函数使用时格式如下所示:作用:比较两个字符串的大小,比较时对两个字符串自左至右逐个字符按ASCII码值大小比较,直到出现不同字符或'\0'为止。比较结果由函数值返回。字符串1>字符串2,函数返回值是正整数,为两个字符串中第一个不同字符的ASCII码值的差值。在字符串比较时,字符串结束符'\0'也参加比较。字符串1<字符串2,函数返回值是负整数,其它同上。字符串1=字符串2,函数返回值为0。C语言规定,不能使用“==”比较两个字符串,只能用strcmp()函数来处理。strcmp(字符数组1,字符数组2);字符串处理函数strlen()函数strlen()函数使用时格式如下所示:作用:测试字符串长度,函数的返回值为字符实际长度,不包含“\0”。strlen(字符数组名/字符串);任务四输入年份,显示该年的日历,每3个月一排,每行显示相邻3个月的同一周任务技能变量(1)变量的作用域
函数形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。在C语言中,按作用域范围不同可分为局部变量和全局变量。任务技能变量(2)局部变量
局部变量也称为内部变量。局部变量是在函数体内声明的变量。其作用域仅限于函数内,离开声明它的函数后就失去作用。任务技能变量关于局部变量的作用域的几点说明:(1)main()中定义的变量也只能在main()中使用,不能在其它函数中使用。同时,main()中也不能使用其它函数中定义的变量,因为main()也是一个函数,它与其它函数是平行关系。这一点与其它语言不同的,应予以注意。(2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。(4)在复合语句中也可定义变量,其作用域只在复合语句范围内。任务技能变量(3)全局变量全局变量也称为外部变量,它是在任何一个函数体外定义的变量,它不属于任何函数,它属于整个源程序文件,即其作用域是从其定义之处到整个源程序结束。在一个函数中既可以使用本函数中的局部变量,又可以使用有效的全局变量。在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。任务技能变量关于局部变量和全局变量的几点说明:(1)对于局部变量的定义和声明,可以不加区分。但对于全局变量则不然,全局变量的定义和声明有不同的涵义。全局变量的定义必须在所有函数体之外,且只能有一次。(2)全局变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此在不必要时尽量不要使用全局变量。(3)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。(4)外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。当一个源程序由若干个源文件组成时,在一个源文件中定义的外部变量在其它的源文件中也有效。(5)程序在内存中存在期间,外部变量始终存在,不会随着函数的调用或退出而存在或消失。任务技能变量(4)变量的存储类型变量的存储方式可分为静态存储和动态存储两种。静态存储变量通常是在变量定义时就分配存储单元并一直保持不变,直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形参,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。这种由于变量存储方式不同而产生的特性称变量的生存期。生存期表示了变量存在的时间。生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。一个变量究竟属于哪一种存储方式,并不能仅从其作用域来判断,还应有明确的存储类型说明。在C语言中,对变量的存储类型说明有四种:自动变量(auto)、静态变量(static)、外部变量(extern)和寄存器变量(register)。自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后,可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。任务技能变量自动变量
自动变量具有以下特点:(1)自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。(2)自动变量属于动态存储方式,只有在定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。(3)由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内),因此不同的个体中允许使用同名的变量而不会混淆。即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。例如,例9-6中的变量k。任务技能变量静态变量静态变量的类型说明符是static,属于静态存储方式。但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。静态局部变量具有以下特点:①静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。②静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。③对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。任务技能变量静态全局变量全局变量的声明之前加上sta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实战保安证考试试题及答案指导
- 江西名师联盟2024-2025学年高三下学期高考适应性考试物理试题含解析
- 江苏海事职业技术学院《植物配置设计》2023-2024学年第二学期期末试卷
- 昭通卫生职业学院《商务礼仪理论与实践》2023-2024学年第二学期期末试卷
- 宁波财经学院《现代汉语Ⅰ》2023-2024学年第二学期期末试卷
- 2025年保安证学习计划试题及答案
- 保安证作业标准试题及答案
- 贺州学院《机器学习及实践》2023-2024学年第二学期期末试卷
- 北京艺术传媒职业学院《中医四诊技能训练》2023-2024学年第二学期期末试卷
- 中南大学《人体运动学》2023-2024学年第二学期期末试卷
- 广西河池市(2024年-2025年小学六年级语文)统编版随堂测试(下学期)试卷及答案
- 印刷行业安全培训
- 年产1500台半导体制冷加热控温系统、700台温箱控温单元柜技术改造及扩产项目环评资料环境影响
- 高速铁路建设工模具管理办法
- 江苏省南京市2024年中考英语试题(含解析)
- 手术室护理不良事件警示
- 2019版 人音版 高中音乐 选择性必修4戏剧表演《第六单元 戏曲》大单元整体教学设计2020课标
- 桥的发展的课件
- 外研版(2024新版)七年级上册英语Unit4学情调研测试卷(含答案)
- 新生儿早期基本保健护理课件
- 建设项目档案管理专题
评论
0/150
提交评论