模块2书本慨念.docx
- 文档编号:4063416
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:6
- 大小:19.85KB
模块2书本慨念.docx
《模块2书本慨念.docx》由会员分享,可在线阅读,更多相关《模块2书本慨念.docx(6页珍藏版)》请在冰点文库上搜索。
模块2书本慨念
C程序设计模块二
目录:
一·C程序内容摘要
①数组
②函数
③预处理命令
二·C程序学习小结
一·C程序内容摘要
1·数组
以前本书使用的是基本类型(整型,字符型,实型)的数据,而数据,结构体,共用体是构造类型的数据。
一维数组的定义形式:
类型说明符数组名[常量表达式]数组说明:
1数组名的命名规则和变量名相同,遵循标识符命名规则。
2常量表达式中可以包括常量和符号常量,不能包括变量,C语言不允许对数组的大小做动态定义。
3数组必须先定义,后使用。
下标可以是整型常量和整型表达式,类型说明符数组名【常量表达式】【常量表达式】二维数组的初始化1分行给二维数组赋初值,例如:
inta【3】【4】={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2可以将所以数据写在一个花括号内,按数组排列的顺序对个元素赋初值。
3可以对部分元素赋初值。
4如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
字符数组中一个元素存放一个字符。
编译系统在字符串结束标志后面加‘\0’,‘\0’代表ascll码为0的字符,从ascll码表中可以查到,ascll码为0的字符不是一个可以显示的字符,而是一个空操作字符,即它什么也不做,用它来作为字符串结束的标志,不会产生附加的操作或增加有效字符,只起一个供辨别的标志。
字符数组的输入输出有两种方法1是将逐个字符输入输出。
2将整个字符串一次输入输出。
用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
如果一个字符数组中包含一个以上‘\0’。
则遇到第一个‘\0’时输出就结束。
可以用scanf函数输入一个字符串。
Scanf函数中的输入项如果是字符数组名,不再加地址符&,因为在C语言中数组名代表该数组的起始地址。
字符串处理函数1puts函数作用是将一个字符串输出到终端。
2gets函数其作用是将从终端输入一个字符串到字符数组并且得到一个函数值。
3strcat函数的作用是将字符串2接到字符串1的后面。
4strcpy函数是将字符串2复制到字符串1中去。
要求字符串数组1足够长,以便容纳被复制的字符串。
5strcmp函数是将两个字符串比较,他是将两个字符串自左向右逐个字符相比,直到出现不同的字符或遇到‘\0’为止。
如全部字符相同,则认为相等,若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
比较结果由函数值带回。
1如果字符串1=字符串2,则函数值为0。
2如果字符串1>字符串2,则函数值为一个正整数。
3如果字符串1<字符串2,则函数值为一个负整数。
Strlen函数是用来测试字符串长度的函数。
函数的值为字符串的实际长度:
例如:
charshr【0】={“china”};printf(“%d”,strlen(str));输出的长度为5,stlwr函数的一般格式是strlwr(字符串)函数的作用是将字符串中的大写字母换成小写字母。
Strupr(字符串)函数的作用是将字符串中小写字母换成大写字母。
2·函数
一个较大的程序一般应分为若干个程序模块,每个模块用来实现一个特定的功能。
即用子程序实现模块的功能。
在C语言中子程序的作用是由函数来实现的。
一个C程序可由一个主函数和若干个其它函数构成。
在指定函数的类别为void,此函数无类型。
也就是说执行此函数后不会把任何值带回main函数。
1一个C程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。
对于较大的程序,是将它们分别放在若干个源文件中,从而组成一个C程序。
这样提高调试效率。
2一个源程序文件由一个或多个函数以及其它有关内容组成。
3一个C程序的执行是从main函数开始的,如是在main函数中调用其它函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。
4函数不能嵌套定义。
5函数从用户定义的角度看,函数分为标准函数和用户定义的函数。
从而函数形式看,可分为无参函数和有参函数。
无参函数调用时,主函数不向被调用函数传递数据。
有参函数相反。
无参函数定义一般为:
类型说明符函数名(形式参数表列){声明部分语句部分}在程序设计中有时会用到空函数:
类型说明符函数名(){}例如:
voiddummy(){}在主函数中写上dummy();表明这里要调用一个函数,而现在这个函数没起作用,等以后扩充函数功能时补充上。
在定义函数中指定的形参,在未出现函数调用时,它们并不占用存储单元,只有在发生函数调用时,函数的形参才被分配存储单元,在调用结束后,形参所占的内存单元才被释放。
实参可以是常量,变量或表达式,但要求它们有确定的值。
在被定义的函数中,必须指定形参的类型。
在C语言中实参向形参单向传递数据。
执行一个被调用函数时,不会改变主调函数实参的值。
Return(语句)是将被调函数中一个确定值带回主调函数中去。
Return语句后面的括号可以省略不要,如“returnZ;”与“return(z);”等价。
Return后面的值可以是一个表达式。
Max(intx,inty){return(x>y?
x:
y)}在定义函数类型时指定的函数类型一般应和return语句中的表达式类型一致。
如果不一致,以函数类型为准。
对于不带回值的函数,应当用“void”定义函数为“无类型”这样,系统就保证不使函数带回任何值,即禁止在调用函数中使用被用函数返回值。
此时在函数体中不得出现有返回值的return语句。
如果是调用无参函数,则“实参表列”可以没有。
但括号不能省略。
如果实参表列包含多个实参,则个参数间逗号隔开。
函数调用的方法有3中,1函数语句如“printstar();”,这时不要求函数带回值,只要求函数完成一定的操作。
2函数表达式函数出现在一个表达式中,这种表达式称为函数表达式。
这时要求函数带回一个确定的值以参加表达式的运算。
C=2*max(a,b);3函数参数函数调用作为一个函数的实参。
例如:
m=max(a,max(b,c));在函数声明中可以不写形参名,而只写形参的类型。
函数的定义和声明不是一回事。
函数体等它是一个完整的,独立的函数单位。
而函数的声明的作用则是把函数的名字函数类型以及形参的类型,个数和顺序通知编译系统。
如果已在文件的开头,以对本文件中所调用的函数进行了声明,则在各函数中不必对其所调用的函数再作声明。
如果被调用的函数的类型为整型,C语言允许在调用函数前不必作函数原型声明。
C语言的函数是相互平行的,独立的,也就是说,在定义函数时,一个函数内部不能包含另一个函数。
这就是和pascal不同的(pascal允许在定义一个函数时,其函数体内又包含另一个函数的完整的定义,这就是嵌套定义)。
C语言不能嵌套定义函数,但可以嵌套调用函数。
在调用一个函数的过程中又出现直接或间接地电影该函数的本身,称为函数的递归调用。
典型问题hanoi塔问题。
数组元素也可以作为函数实参,其用法与变量相同,此外,数组名也可以作实参与形参,传递的是数组首地址。
用数组名作函数参数,应该在主调函数和被调函数分别定义数组,例如array是形参数组名,score是实参数组名。
实参数组与形参数组类型应该一致。
C语言编译对形参数组大小不做检查,只是将实参数组的首元素的地址传递给形参数组。
形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号。
用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首地址传递给形参数组。
多维数组名作函数参数,多维数组名可以作为函数的实参和形参。
在被调用函数中对形参数组定义时可以指定每一维的大小。
在一个函数内部定义的变量是内部变量,他只在函数范围内有效,也就是说只有在本函数内部才能使用它们。
主函数不能使用其它函数中定义的变量。
不同函数中可以是相同名字的变量。
它们代表不同的对象,互不干扰。
形式参数也是局部变量。
在一个函数内部,可以在复合语句中定义变量,但这些变量只在复合语句中有效。
C语言中设全局变量的作用是增加函数数据联系的渠道。
为了便于区别全局变量和局部变量。
一般全局变量的第一个字母用大写表示。
利用全局变量可以减少函数实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗。
全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时开辟单元。
从变量值存在的时间角度来分,可以分为静态存储方式和动态存储方式。
所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。
而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。
用户使用的存储空间来看,这个存储空间可以分为三部分:
1程序区2静态存储区3动态存储区。
动态存储区中存放以下数据:
1函数形式参数,在调用函数给形参分配存储空间。
2自动变量(未加static声明的局部变量,详见后面的介绍)。
3函数调用时的现场保护和返回地址等。
存储类别包括四种:
自动(auto)静态的(static)寄存器的(register)外部的(extern)。
Auto为自动存储方式,程序大多数变量都属于自动变量。
有时希望函数中局部变量的值在函数调用结束后不消失而保留原值。
这时用到static进行声明。
一般情况,变量的值是存放在内存中的。
当程序运行到哪一段时由控制器发出指令将内存中该变量的值送到运算器中。
当程序执行循环语句时,必然要花许久,我们可以对变量声明register函数,这样将一个变量寄存到寄存器里面去。
外部变量extern是在函数的外部定义的全局变量。
编译时将外部变量分配在静态存储区。
如果一个函数只能被本文件中的其他函数所调用。
称为内部函数。
内部函数又称为静态函数,因为它是用static声明的,可以使函数的作用域只局限于所在文件。
一般形式staticintfun(inta,intb);如果在函数最左端加关键词extern,则表示此函数是外部函数。
可供其他文件调用。
如函数首部可写成externintfun(inta,intb);
3·预处理命令
在C语言中加入一些预处理命令,能够改进程序设计环境,提高编程效率。
1宏定义用一个指定的标示符来代替一个字符串,即#define标示符字符串宏名一般用大写字母表示,以便与变量名相区别。
带参数的宏定义如#define宏名(参数表)字符串,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令中的形参。
文件包含,C语言利用#include<>用来实现“文件包含”。
一个#include命令只能指定一个被包含文件。
如果要包含n个文件,要n个#include命令。
如果文件1包含文件2,而文件2中要用到文件3的内容。
则可以在文件1中用两个include命令分别包含文件2和文件3.而且文件3应出现在文件2之前,即在file.c中定义。
#include“file3.h”
#include“file2.h”
一般情况下,源程序中所在行都参加编译。
但是有时希望程序中一部分内容只在满足一定条件时才进行编译,这叫条件编译。
条件编译的一般形式:
#ifdef标示符#ifdef标示符
程序段1程序段1
#else#endif
程序段2
#endif
#ifndef标示符(作用是若标示符未被定义过则编译程序段1;
程序段1否则编译程序段2.)
#else
程序段2
#endif
由此可知,采用条件编译,可以减少被编译的语句,从而减少目标程序的长度,减少运行时间。
当条件编译段比较多时,目标程序长度可以大大减少。
C程序小结:
本模块的主要内容包括数组,函数和预处理命令,在这一模块中函数是重点和难点。
数组作为一种构造类型数据,在定义使用它时,可以有效的处理大批量的数据。
数组包括一,二维数组的定义和引用,和一些简单的程序举例。
在定义和使用数组中要注意字符数组中字符串的结束标志。
当然也要记住以
函数这一章内容:
有参函数和无参函数定义的一般方式,一般先定义,后使用,函数调用的两种特殊调用方式:
函数的嵌套调用,函数的递归调用。
数组作函数参数;有数组元素做函数实参,数组名作函数的参数参数有数组元素作函数实参,数组名作函数参数,多维数组名作函数参数变量按作用区域可分为局部变量和全局变量,按照存储方式可分为动态存储方式和静态存储方式,按类别分为auto变量,用static(静态)声明局部变量,register变量。
用extern声明外部变量,用static声明外部变量。
预处理命令这一章包括以带#define的宏定义,#include《文件》的文件包含#ifdef标识符程序段else程序段的#endif的条件编译。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模块 书本