语言程序设计9期末复习课_第1页
语言程序设计9期末复习课_第2页
语言程序设计9期末复习课_第3页
语言程序设计9期末复习课_第4页
语言程序设计9期末复习课_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

1、CC语言程序设计语言程序设计中山大学数学与计算科学学院中山大学数学与计算科学学院冯冯 伟伟2013-1-82013-1-8 本课程内容概况本课程内容概况一、程序设计初步一、程序设计初步二、基本数据类型与基本操作二、基本数据类型与基本操作三、结构化的流程设计三、结构化的流程设计四、模块化的函数设计四、模块化的函数设计五、复杂数据类型及其操作五、复杂数据类型及其操作六、程序开发与调试六、程序开发与调试本课程目的本课程目的1 1、掌握、掌握CC语言的语法、语义、语用。语言的语法、语义、语用。2 2、掌握结构化程序设计的思想、方法。、掌握结构化程序设计的思想、方法。3 3、掌握小规模程序的设计、编写、

2、调试。、掌握小规模程序的设计、编写、调试。4 4、掌握程序设计中一些常规算法。、掌握程序设计中一些常规算法。学好学好CC语言程序设计语言程序设计1 1、记忆力、记忆力( (前提条件前提条件) ): 牢记牢记CC语法规则及其用法语法规则及其用法( (语法语法, ,语义语义, ,语语用用) )。2 2、逻辑分析能力、逻辑分析能力( (内在基础内在基础) ): 习惯用习惯用CC语言思考和表达解题详细步骤语言思考和表达解题详细步骤( (算法算法) )。3 3、上机实践、上机实践( (关键所在关键所在- -实践出真知实践出真知) ): 加深理解,熟练掌握并灵活运用加深理解,熟练掌握并灵活运用CC程序程序

3、设计。设计。CC语言源程序的上机建立和运行的基本过程语言源程序的上机建立和运行的基本过程 静态检查静态检查 目标程序目标程序 可执行程序可执行程序 编辑编辑 编译编译 连接连接 执行执行 结果结果 源程序源程序 动态检查动态检查 有错F.cF.objF.exe有错有错有错结构化程序设计的思想和方法结构化程序设计的思想和方法(1).(1).自顶向下:有序性自顶向下:有序性(2).(2).逐步细化:由粗到细的层次性逐步细化:由粗到细的层次性(3).(3).模块化设计:按功能化分为模模块化设计:按功能化分为模块块函数函数(4).(4).结构化编码:三种基本结构结构化编码:三种基本结构基本数据类型与基

4、本操作基本数据类型与基本操作1 1、基本数据类型、基本数据类型2 2、运算符和表达式、运算符和表达式3 3、数据输入和输出、数据输入和输出CC语言的数据类型语言的数据类型数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型字符类型字符类型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共同体类型共同体类型文件类型文件类型单精度型单精度型双精度型双精度型整型整型实型实型数值类型数值类型基本数据类型的存储空间长度及取值范围基本数据类型的存储空间长度及取值范围signed charsigned charunsigned charunsigned char -27 -27(

5、27-1)(27-1)0 0(28-1) ASCII(28-1) ASCII码码025502558 88 8signed intsigned intunsigned intunsigned int-215-215(215-1)(215-1)0 0(216-1) (216-1) 32323232floatfloatdoubledouble-3.4-3.410-3810-383.43.41038 f F1038 f F-1.7-1.710-30810-3081.71.710308 10308 32326464取值范围取值范围长度长度类型类型 注意:注意:1. 1. 长度是比特长度是比特( (位位)

6、 )数,数,8 8个比特是个比特是1 1个字节。个字节。 2. 2. 存储长度和取值范围可能因具体机器和编译系统而异,存储长度和取值范围可能因具体机器和编译系统而异, 用运算符用运算符sizeofsizeof求字节数。求字节数。强调说明强调说明1 1、在、在CC语言中,在使用变量前必须先对其进语言中,在使用变量前必须先对其进行定义行定义 ( (先定义后使用先定义后使用) ),以申请存储空间。变量,以申请存储空间。变量名必须名必须 符合标识符的命名规则。变量的数据类符合标识符的命名规则。变量的数据类型决定了型决定了 变量占用的内存空间的大小。变量占用的内存空间的大小。2 2、变量值的改变可由赋值

7、语句、变量值的改变可由赋值语句( (表达式表达式) )、键、键盘输入盘输入 等实现。变量在任一时该只能保存一个等实现。变量在任一时该只能保存一个值,而且值,而且 该值只与最后一次赋值有关该值只与最后一次赋值有关( (当前值当前值) )。3 3、CC语言规定:在函数体内部,只能在第一语言规定:在函数体内部,只能在第一个可执个可执 行语句前定义变量。因此,一般在函数行语句前定义变量。因此,一般在函数开头声明开头声明 部分进行变量定义。部分进行变量定义。关于变量的其它说明关于变量的其它说明1) 1) 循环变量用简单写法,如循环变量用简单写法,如 i, j, k i, j, k 等等2) 2) 变量名

8、要有意义,见名知意:变量名要有意义,见名知意:scorescore分数,分数,ageage年龄年龄3) 3) 变量名不要太长,书写麻烦,记忆麻烦变量名不要太长,书写麻烦,记忆麻烦4) 4) 不允许两个全局变量同名,否则编译程序时不允许两个全局变量同名,否则编译程序时出错出错5) 5) 同一个函数内不能定义两个同名的局部变量,同一个函数内不能定义两个同名的局部变量,但不同函数内的局部变量可以重名但不同函数内的局部变量可以重名 普通常量与符号常量普通常量与符号常量1) 1) 常量可以是任何的基本数据类型,表示方法由其常量可以是任何的基本数据类型,表示方法由其类型决定。类型决定。2) 2) 普通普通

9、( (直接、字面直接、字面) )常量常量: : 一般的常量。一般的常量。 如整数、实数、字符、转义字符、字符串等。如整数、实数、字符、转义字符、字符串等。3) 3) 符号常量:在程序中指定用标识符名字代表的常符号常量:在程序中指定用标识符名字代表的常量。量。 符号常量有两种定义方法:符号常量有两种定义方法: a. a.宏常量,在程序文件首部定义:宏常量,在程序文件首部定义:# define PI # define PI 3.14593.1459 b. b.变量常量,按变量说明定义:变量常量,按变量说明定义:const float const float PI=3.14159f;PI=3.141

10、59f; 使用符号常量含义清楚,见名知意,且易修改,使用符号常量含义清楚,见名知意,且易修改,一改全一改全 改。习惯上,符号常量名用大写改。习惯上,符号常量名用大写( (区别变量名用区别变量名用小写小写) )。1 1字符常量:用一对单撇号括起来的一个字符字符常量:用一对单撇号括起来的一个字符 注意注意: : 不能用双撇号代替单撇号。不能用双撇号代替单撇号。2 2转义字符:将反斜杠后面字符转成别的意思转义字符:将反斜杠后面字符转成别的意思 (1) (1) 用反斜杠开头后面跟一个字母代表一个特殊字符用反斜杠开头后面跟一个字母代表一个特殊字符 (2) (2) 用用代表字符代表字符“”“”,用,用 和

11、和”代表字符单和双撇代表字符单和双撇号号 (3) (3) 用用 后跟后跟1 1到到3 3个八进制数代表相应的个八进制数代表相应的ASCIIASCII的字符的字符 (4) (4) 用用xx后跟后跟1 1到到2 2个十六进制数代表相应的个十六进制数代表相应的ASCIIASCII的字符的字符3 3字符串常量:用一对双撇号括起来的字符序列字符串常量:用一对双撇号括起来的字符序列 注意注意: : 存储时多占存储时多占1 1个字节,以存储结束标志个字节,以存储结束标志0(0(空字空字符符) )0101算术运算符算术运算符 (+ - + - * * / % + - / % + -)0202关系运算符关系运算

12、符 ( = = = !=)0303逻辑运算符逻辑运算符 (!(! & | & |)0404位运算符位运算符 ( | & | &)0505赋值运算符赋值运算符 (= = 复合赋值运算符)复合赋值运算符)0606条件运算符条件运算符 (?(?: :)0707逗号运算符逗号运算符 (,)(,)0808指针运算符指针运算符 (* *)0909地址和引用运算符地址和引用运算符 (& &)1010求字节数运算符求字节数运算符 (sizeofsizeof)1111强制类型转换运算符强制类型转换运算符 ( ( (类型类型) ) 或类型或类型( ) ( ) )12

13、12分量运算符分量运算符 (成员运算符指向成员运算赋(成员运算符指向成员运算赋 )1313下标运算符下标运算符 ( )1414其它其它 (如函数调用运算符(如函数调用运算符() ())运算符运算符( (优先级和结合性优先级和结合性) )printfprintf函数函数该函数是最常用的有格式的输出函数。用法如下:该函数是最常用的有格式的输出函数。用法如下: printf(“ printf(“格式控制字符串格式控制字符串”,”,输出表列输出表列); );注意:注意: 1) “ 1) “格式控制字符串格式控制字符串”是用双撇号括起来的字符是用双撇号括起来的字符串,包括串,包括格式说明和普通字符。格式

14、说明和普通字符。 2) 2) 格式说明由格式说明由“%”“%”和格式字符组成,作用是将和格式字符组成,作用是将输出数据转输出数据转换为指定的格式输出换为指定的格式输出( (提倡类型匹配一致提倡类型匹配一致, ,避免隐式避免隐式转换转换) ),即,即说明对应输出项在输出时的位置宽度及相应的数据说明对应输出项在输出时的位置宽度及相应的数据类型。类型。 3) 3) 普通字符是需要原样输出的字符,目的是提示普通字符是需要原样输出的字符,目的是提示说明,说明,增加输出数据的可读性。增加输出数据的可读性。 4) “ 4) “输出表列输出表列”可以是表达式、变量、常量等列可以是表达式、变量、常量等列表表(

15、(建议输建议输出表列不要实现计算功能出表列不要实现计算功能) ),每项之间用逗号,每项之间用逗号“,”“,”隔开。隔开。 5) 5) 在使用时,建议严格按照格式要求,提倡个数在使用时,建议严格按照格式要求,提倡个数对应、对应、类型匹配,即格式符的个数应该与输出项的个数相类型匹配,即格式符的个数应该与输出项的个数相同,并且同,并且对应的数据类型应该一致。对应的数据类型应该一致。格式符格式符1 1、格式符的标准写法:、格式符的标准写法: %-m.n %-m.n字母字母 关于附加格式字符或修饰符的说明:关于附加格式字符或修饰符的说明: a) a) 正负号:用以指定输出项左右对齐方式,正负号:用以指定

16、输出项左右对齐方式,负号是左负号是左对齐,缺省正号()为右对齐,剩余位置补对齐,缺省正号()为右对齐,剩余位置补空格。空格。 b) b) 域宽及精度描述符域宽及精度描述符m.nm.n:mm是最小域宽,是最小域宽,即输出数即输出数据所占最小位数据所占最小位数( (包括可能的小数点所占的一包括可能的小数点所占的一位位) ),若超,若超出该位数,则按实际位数输出;出该位数,则按实际位数输出;n n是精度,输出是精度,输出实数时实数时是小数位数,输出字符串时是自左端截取的字是小数位数,输出字符串时是自左端截取的字符个数。符个数。2 2、常用格式符:、常用格式符:符号符号数据类型数据类型符号符号数据类型

17、数据类型符号符号数据类型数据类型%dint%cchar%o8进制数进制数%ldlong %s字符串字符串%号号%ffloat%u无符号无符号%e指数指数%lfdouble%x16进制进制 注意:输出实数时,若不指定精度,默认输出注意:输出实数时,若不指定精度,默认输出6 6位小数,但输出的数字并非都是有效数字,位小数,但输出的数字并非都是有效数字,floatfloat和和doubledouble型实数的有效位数分别是型实数的有效位数分别是7 7位和位和1616位,最后位,最后一位都采取一位都采取4 4舍舍5 5入。规范化指数形式输出位数规定。入。规范化指数形式输出位数规定。scanfscanf

18、函数函数该函数是标准输入函数,用法如下:该函数是标准输入函数,用法如下: scanf(“ scanf(“格式控制字符串格式控制字符串”,”,内存地址表列内存地址表列); );注意:注意:1) “1) “格式串格式串”中中“格式符格式符”的含义与的含义与printfprintf说明说明基本一致。基本一致。 格式符的标准写法:格式符的标准写法:%* *mm格式字符格式字符2) “2) “内存地址表列内存地址表列”指的是用逗号分隔的内存地指的是用逗号分隔的内存地址,可以址,可以 是变量地址或字符串的首地址,是变量地址或字符串的首地址,& &是取变量地址符。是取变量地址符。3) 3)

19、格式串中的格式符与内存地址列表个数必须相格式串中的格式符与内存地址列表个数必须相同,对应的数据类型必须一致,类型匹配,一同,对应的数据类型必须一致,类型匹配,一一对应。一对应。4) 4) 在键盘上读入一个字符串,可利用在键盘上读入一个字符串,可利用scanfscanf函数函数的的“%s” “%s” 格式,但遇空格或回车时结束。若格式,但遇空格或回车时结束。若输入带空格字符串,可以使用输入带空格字符串,可以使用string.hstring.h中的函中的函数数gets(str)gets(str),遇回车时结束。,遇回车时结束。应用中应该强调的问题应用中应该强调的问题1) 1) 建议建议“格式串格式

20、串”中只出现中只出现“格式符格式符”,除非必要的提示,除非必要的提示说明,其它符号最多只出现逗号说明,其它符号最多只出现逗号“,”“,”或空格。如:或空格。如: scanf(“%d,%d,%f”,&a,&b,&c); / scanf(“%d,%d,%f”,&a,&b,&c); / 逗号分隔逗号分隔 scanf(“%d%d%f”,&a,&b,&c); / scanf(“%d%d%f”,&a,&b,&c); / 空格回车跳格分隔空格回车跳格分隔 2) 2) 如果如果“格式串格式串%”%”中出现其它非中出

21、现其它非“格式符格式符”,则从键盘,则从键盘上上 输入数据时,必须按顺序原样输入相应字符。如:输入数据时,必须按顺序原样输入相应字符。如: scanf(a=%d,b=%d,%f,&a,&b,&c); scanf(a=%d,b=%d,%f,&a,&b,&c); 3) 3) 输入数据时不能规定精度,这与输入数据时不能规定精度,这与printf()printf()函数不同。函数不同。4) “4) “域宽域宽”指定输入数据所占列数,系统按照域宽截取相指定输入数据所占列数,系统按照域宽截取相 应位数;抑制字符应位数;抑制字符“* *”表示本输入项在按格式说

22、明读入表示本输入项在按格式说明读入数据后不赋给任何变量,即跳过该输入项。数据后不赋给任何变量,即跳过该输入项。结构化的流程设计结构化的流程设计3.1 3.1 顺序结构顺序结构3.2 3.2 选择结构选择结构3.3 3.3 循环结构循环结构3.4 3.4 限定转向限定转向CC语言语句概括语言语句概括 C C语言基本语句语言基本语句表表达达式式语语句句控控制制语语句句复合表达式语句复合表达式语句简单表达式语句简单表达式语句函数调用语句函数调用语句( (数据声明数据声明& &执行语句执行语句) )赋值语句赋值语句空语句空语句流程控制语句流程控制语句限定转向语句限定转向语句限定转向限定

23、转向(break;continue;return)(break;continue;return)无限定转向和退出无限定转向和退出(goto;exit()(goto;exit()选择结构选择结构循环结构循环结构while;dowhilewhile;dowhileforfor多分支多分支二分支二分支(ifelse)(ifelse)else ifelse ifswitchswitchif if 选择结构选择结构1 1)选择基本结构双分支选择结构)选择基本结构双分支选择结构 if( if(表达式表达式) ) 语句块语句块1;1; else else 语句块语句块2; 2; 2 2)缺省)缺省elsee

24、lse的选择型结构单分支选择结构的选择型结构单分支选择结构 if( if(表达式表达式) ) 语句块语句块; ; 3 3) if if条件语句的嵌套复合分支选择结构条件语句的嵌套复合分支选择结构 if( if(表达式表达式1) 1) if( if(表达式表达式2)2) 语句块语句块1;1; else else 语句块语句块2 2; else else 语句语句3; 3; 4 4) if-else-if if-else-if结构多分支选择结构结构多分支选择结构 if( if(表达式表达式1) 1) 语句块语句块1; 1; else if( else if(表达式表达式2)2) 语句块语句块2;

25、2; else else 语句块语句块3 3; switchswitch选择结构多分支选择结构选择结构多分支选择结构 switch ( switch (表达式表达式) ) case case 常量表达式常量表达式1: 1: 语句块语句块1; break;1; break; case case 常量表达式常量表达式n: n: 语句块语句块n; break;n; break; default: default: 语句块语句块n+1n+1; 1) switch1) switch后的表达式只能是整型、字符型或枚举型表达式后的表达式只能是整型、字符型或枚举型表达式;casecase后的常量表达式结果只能

26、是常量值;而语句块后的常量表达式结果只能是常量值;而语句块ii可以简单语句、空语句、复合语句块,也可以省略。可以简单语句、空语句、复合语句块,也可以省略。2) 2) 先计算表达式的值,若值等于某个常量表达式值,则选先计算表达式的值,若值等于某个常量表达式值,则选择执行其对应语句块择执行其对应语句块ii;否则,执行;否则,执行defaultdefault对应语句块对应语句块n+1n+1。对表达式和常量表达式是否值一致只作一次判断。对表达式和常量表达式是否值一致只作一次判断,当选择执行语句块,当选择执行语句块ii后,如果未碰到语句后,如果未碰到语句breakbreak,则会,则会继续顺序执行语句块

27、继续顺序执行语句块ii后面的语句,直到碰到后面的语句,直到碰到breakbreak或到或到switchswitch最后语句为止。最后语句为止。whilewhile循环循环( (先判断后执行的当型循环先判断后执行的当型循环) )while(while(条件表达式条件表达式) / “) / “真真”为循环执行条件为循环执行条件 循环体语句循环体语句; ; 当条件为真时执行语句,直到条件为假才结束循环。当条件为真时执行语句,直到条件为假才结束循环。 首先要对条件表达式进行计算和判断,若其值为真,首先要对条件表达式进行计算和判断,若其值为真, 则执行循环体中的语句,并进行下一次的条件判断;则执行循环体

28、中的语句,并进行下一次的条件判断; 否则立即跳过循环体,即一次也不执行循环。否则立即跳过循环体,即一次也不执行循环。 do-whiledo-while循环循环( (先执行后判断的当型循环先执行后判断的当型循环) ) do do 循环体语句循环体语句; ; while( while(条件表达式条件表达式); / “); / “真真”为循环执行条件为循环执行条件 1) 1) 先执行循环体语句,直到条件为假时结束循环。先执行循环体语句,直到条件为假时结束循环。 2) 2) 首先要执行一次循环,然后才对条件表达式进行首先要执行一次循环,然后才对条件表达式进行计算和判断,若其值为真,则执行下一次循环体中

29、的语计算和判断,若其值为真,则执行下一次循环体中的语句,并进行随后的条件判断;否则立即退出循环体,即句,并进行随后的条件判断;否则立即退出循环体,即仅仅执行一次循环。仅仅执行一次循环。 3) while 3) while循环和循环和do-whiledo-while循环都是当型循环,因此循环都是当型循环,因此两者的条件表达式的涵义是一致的,真则执行循环,假两者的条件表达式的涵义是一致的,真则执行循环,假则退出循环。但由于后者至少执行一次,因此前者可以则退出循环。但由于后者至少执行一次,因此前者可以涵盖后者,应用更广。除此外,两者等价。涵盖后者,应用更广。除此外,两者等价。forfor循环循环(

30、(先判断后执行的当型循环先判断后执行的当型循环) )for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3) 循环体语句循环体语句; ; forfor循环的简单理解:循环的简单理解:for(for(初始化表达式初始化表达式; ;条件表达式条件表达式; ;修正表达式修正表达式) ) 循环体语句循环体语句; ; 当条件为真时执行语句;直到条件为假才结束循环。当条件为真时执行语句;直到条件为假才结束循环。 forfor循环的真正涵义循环的真正涵义表达式表达式1;1;for(;for(;表达式表达式2;) / while(2;) / while(表达式表达式2)2) 循环体语句循环

31、体语句; ; 表达式表达式3;3; 表达式表达式1 1执行且执行一次。执行且执行一次。表达式表达式2 2是条件或逻辑表达式,值只能是逻辑真或假。是条件或逻辑表达式,值只能是逻辑真或假。循环体语句和表达式循环体语句和表达式3 3共同构成共同构成forfor循环的循环体语句。循环的循环体语句。注意:如果缺少注意:如果缺少e2e2,循环条件恒为真,切忌死循环!,循环条件恒为真,切忌死循环!一、一、breakbreak语句语句: : 在在switchswitch语句中中止执行选择;语句中中止执行选择; 在循环语句中直接退出所在层循环。在循环语句中直接退出所在层循环。二、二、continuecontin

32、ue语句:在循环语句中,不执行该语句后的语句,语句:在循环语句中,不执行该语句后的语句, 但继续下次是否执行循环的判定。但继续下次是否执行循环的判定。限定转向语句限定转向语句1 1、把结构作为一个整体(一块)、把结构作为一个整体(一块) 用用 开始开始, ,用用 结束。结束。 如:如: 2 2、结构之前或之后空一行,如:、结构之前或之后空一行,如: / / for(i=0;in;i+) for(i=0;in;i+) / /3 3、若结构有嵌套,则内层结构、若结构有嵌套,则内层结构 一定要缩进,编辑器有标准一定要缩进,编辑器有标准 缩进,逻辑层次清晰。如:缩进,逻辑层次清晰。如: for() f

33、or() for() for() 4 4、当有多层嵌套时,最好每层、当有多层嵌套时,最好每层 开始和结束作适当注释,以开始和结束作适当注释,以 便知道结构开始点和结束点。便知道结构开始点和结束点。作作 业业 题题( (用结构化流程设计写用结构化流程设计写CC程序程序) )(1). (1). 打印出打印出1 120122012中的闰年,并统计闰年中的闰年,并统计闰年的个数。的个数。 (2). (2). 打印出打印出1 120122012中的素数,并统计素数中的素数,并统计素数的个数。的个数。(3). (3). 输入两个正整数输入两个正整数mm和和n n,求最大公约数,求最大公约数和最小公倍数。和

34、最小公倍数。(4). (4). 打印出所有的水仙花数。打印出所有的水仙花数。(5). (5). 求方程求方程 a a* *x x* *x+bx+b* *x+c=0 x+c=0 的根。的根。(6). (6). 输入输入3 3个二维点的坐标,求它们围成的个二维点的坐标,求它们围成的面积。面积。复杂数据类型复杂数据类型1 1 数组数组2 2 指针指针3 3 结构体与共同体结构体与共同体4 4 文件文件数组数组定义:数组是指一组相同类型数据组成的定义:数组是指一组相同类型数据组成的序列。序列。 表示:表示: 1) 1) 用一个统一的数组名称来标识这一用一个统一的数组名称来标识这一组数据;组数据; 2)

35、 2) 用下标来指示数组中元素的序号。用下标来指示数组中元素的序号。 概括:把一批相同数据类型的变量,概括:把一批相同数据类型的变量,用一个相同用一个相同名字来表示,这就是数组。当要用其中某名字来表示,这就是数组。当要用其中某个变量时,个变量时,只需用该名字与相应变量在数组中序号表只需用该名字与相应变量在数组中序号表示即可。示即可。 注意:同一数组中所有元素必须属于注意:同一数组中所有元素必须属于同一数据类同一数据类型。在实际程序设计中,很少不用数组的型。在实际程序设计中,很少不用数组的程序。将数程序。将数组与循环结合起来,可方便和高效处理大组与循环结合起来,可方便和高效处理大批量数据。批量数

36、据。一维数组一维数组1 1、数组定义:、数组定义: 数据类型数据类型 数组名数组名 正整数常量表达正整数常量表达式式 ; 数组的定义与普通变量的定义类似,数组的定义与普通变量的定义类似,只需在数只需在数组名后加上一对方括号和正整数常量表达组名后加上一对方括号和正整数常量表达式式( (包括包括符号常量符号常量) )以表示元素个数或数组长度以表示元素个数或数组长度( (大大小小) )即可。即可。2 2、数组元素的表示、数组元素的表示 数组名数组名 元素序号元素序号 / /数组元素等同数组元素等同于变量于变量括号括号 及其中的值又称为下标。及其中的值又称为下标。1)1)若若N N为数组长度,则下标从

37、为数组长度,则下标从0 0 开始,最开始,最大为大为N-1N-1。2) C2) C语言不允许数组的大小为变量。语言不允许数组的大小为变量。3) C3) C编译不检查下标是否编译不检查下标是否“越界越界”。数组初始化方法数组初始化方法1 1: 数据类型数据类型 数组名数组名 数组元素数组元素=常量数据列表常量数据列表; ;数组初始化方法数组初始化方法2:2: 数据类型数据类型 数组名数组名 = =常量数据列表常量数据列表; ; 方法方法2 2中,数组的中,数组的“元素个数元素个数”可以省略,此时,可以省略,此时,数组元素的个数数组元素的个数=“=“常量数据列表常量数据列表”中常量的个数。中常量的

38、个数。但若元素个数与初值表中数据个数不相同时,则必须但若元素个数与初值表中数据个数不相同时,则必须在数组名后给出元素个数。在数组名后给出元素个数。/花括弧中初值个数不能大于数组长度花括弧中初值个数不能大于数组长度, ,否则语法错误否则语法错误int a10=1,2,3,4,5,6,7,8,9,10;int a10=1,2,3,4,5,6,7,8,9,10;int b =1,2,3,4; /bint b =1,2,3,4; /b中的元素个数为中的元素个数为4 4int c20=1,2,3; int c20=1,2,3; /把把1,2,31,2,3分别赋给分别赋给c c前前3 3个元素个元素,c,

39、c其余元素被赋其余元素被赋0 0值值二维数组二维数组1 1、定义、定义( (两对方括号内都是正整数常量表达式两对方括号内都是正整数常量表达式) ) 数据类型数据类型 数组名数组名 行数行数 每行元素个数或列数每行元素个数或列数 2 2、元素的下标表示法:、元素的下标表示法: 数组名数组名 行下标行下标 列下标列下标 其中:行下标其中:行下标( (慢维慢维) )表示该元素所在的行,表示该元素所在的行, 列下标列下标( (快维快维) )表示该数组元素所在的列。表示该数组元素所在的列。CC语言规定:二维数组在内存中存储是按行存储,语言规定:二维数组在内存中存储是按行存储,即先行后列:先存储第即先行后

40、列:先存储第0 0行,再存第行,再存第1 1行,行,二维数组的初始化二维数组的初始化int a33=1,2,3,1,2,5;int b33=1,2,3,1,2,5;int c3=1,2,3,4,5,5,6,7; /列数不能省列数不能省在定义二维数组时也可以给数组初始化或赋初值:在定义二维数组时也可以给数组初始化或赋初值:数组初始化方法数组初始化方法1(1(提倡按行赋初值提倡按行赋初值, , 界限清楚界限清楚) ): 数据类型数据类型 数组名数组名 行数行数 每行元素个数每行元素个数= 第第0 0行常量列表行常量列表,第第1 1行常量列表行常量列表 ,.;.;数组初始化方法数组初始化方法2 2:

41、 数据类型数据类型 数组名数组名 行数行数 每行元素个数每行元素个数= 常量列表常量列表 ;字符数组与字符串字符数组与字符串1) 1) 字符串是数据处理中重要的数据类型,但字符串是数据处理中重要的数据类型,但CC语言中语言中没有专门的字符串类型。字符串是指若干有效字符的序没有专门的字符串类型。字符串是指若干有效字符的序列,而有效字符是指系统允许使用的字符,包括字母、列,而有效字符是指系统允许使用的字符,包括字母、数字、专用字符、转义字符等。在数字、专用字符、转义字符等。在CC语言中字符串用定界语言中字符串用定界符双撇号来表示,如:符双撇号来表示,如:“China”, “a+b=c”, “Chi

42、na”, “a+b=c”, “%dn” “%dn” 。 2) 2) 在在CC语言中,字符串是存放在一个字符型数组中。语言中,字符串是存放在一个字符型数组中。字符数组就是用来存放字符数据的数组。字符数组就是用来存放字符数据的数组。CC语言中字符串语言中字符串使用字符数组来表示和存储。使用字符数组来表示和存储。 3) 3) 字符串中的每个字符按次序顺序存储在内存中,每字符串中的每个字符按次序顺序存储在内存中,每个字符串都以个字符串都以00结束,该字符的结束,该字符的ASCIIASCII值为值为0 0。注意:字符串一定是字符数组,字符数组不一定字符串注意:字符串一定是字符数组,字符数组不一定字符串!

43、 !字符串的初始化字符串的初始化char a=“I like C programming”; / 推荐的初始化方法推荐的初始化方法char a30=I, ,l,i,k,e, ,C,p,r,o,g,r,a,m,m, i,n,g,0; 初始化:可逐个地为数组中各元素指定初值字符初始化:可逐个地为数组中各元素指定初值字符(繁琐繁琐),也可用字符串整体赋初值也可用字符串整体赋初值(方便方便),即指定一个字符串初值。,即指定一个字符串初值。 注意:赋值语句不支持字符数组或字符串的整体赋值,注意:赋值语句不支持字符数组或字符串的整体赋值,而只能逐个赋值。而只能逐个赋值。 char a30; a=I lik

44、e C programming; / Error数组名表示一个地址常量,而赋值运算符左边必须是变量。数组名表示一个地址常量,而赋值运算符左边必须是变量。 char Name230=Zhang San , Li Si;字符串的输入与输出字符串的输入与输出 1 1、scanfscanf函数格式输入函数格式输入 char a30; char a30; scanf(%c, &a0); / scanf(%c, &a0); /逐个输入各元素值逐个输入各元素值 scanf(%s,a); / scanf(%s,a); /一次输入字符串一次输入字符串 注意:注意:1) 1) 数组名本身就代表首元

45、素地址。数组名本身就代表首元素地址。 2) 2) 系统会自动加一个结束符系统会自动加一个结束符00。 3) scanf 3) scanf遇到空格或回车为结束。遇到空格或回车为结束。2 2、getsgets函数字符串输入函数字符串输入 char a30; char a30; gets(a); / gets(a); /输入时以回车为结束标记输入时以回车为结束标记注意:注意: scanf scanf和和getsgets整体输入字符串的时候整体输入字符串的时候, 参数必须是一维数组名参数必须是一维数组名( (存储首地址存储首地址) )。3 3、printfprintf函数格式输出函数格式输出 char

46、 a30; char a30; printf(%c,a0) / printf(%c,a0) /逐个输出各元素值逐个输出各元素值 printf(“%sn”,a); / printf(“%sn”,a); /一次输出字符串,并回车换一次输出字符串,并回车换行行 注意:注意:1) 1) 输出元素时输出元素时(%c)(%c),要带下标。,要带下标。 2) 2) 输出串时输出串时(%s)(%s)只用数组名只用数组名( (首地址首地址) )即可。即可。 3) 3) 输出时不包括输出时不包括0(0(字符串结束符字符串结束符) )。 4) 4) 字符数组或串中首个字符数组或串中首个00后字符不予输后字符不予输出

47、。出。4 4、putsputs函数字符串输出函数字符串输出( (一次输出字符串一次输出字符串, ,并自动换行并自动换行) ) char a20=I love China!; char a20=I love China!; puts(I love China!); puts(a); puts(I love China!); puts(a); 注意:注意: printf printf和和putsputs整体输出字符串的时候,参数必须整体输出字符串的时候,参数必须 是一维数组名或字符串是一维数组名或字符串( (一维数组存储首地址一维数组存储首地址) )。函数库函数库中的字符串函数中的字符串函数1 1

48、、strlen strlen 求字符串长度求字符串长度 strlen(1 strlen(1维字符数组名或串维字符数组名或串) ) 注意:返回值为第注意:返回值为第1 1个结束符个结束符00之前的实际长度。之前的实际长度。2 2、strcmp strcmp 比较两个字符串的大小比较两个字符串的大小(ASCII(ASCII码值码值) ) strcmp(1 strcmp(1维字符数组名或串维字符数组名或串1, 11, 1维字符数组名或串维字符数组名或串2)2) 注意:前者大于注意:前者大于, , 等于等于, , 小于后者返回值分别为小于后者返回值分别为1, 0, -11, 0, -1。3 3、str

49、cpy strcpy 字符串复制字符串复制( (覆盖覆盖) strncpy() strncpy(设定要复制的数目设定要复制的数目) ) strcpy(1 strcpy(1维字符数组维字符数组1 1名名, 1, 1维字符数组维字符数组2 2名或串名或串) ) 注意:字符数组注意:字符数组1 1必须足够容纳字符数组或串必须足够容纳字符数组或串2 2。用数组进行程序设计用数组进行程序设计(1). (1). 由键盘输入由键盘输入MM行行MM列的方阵,作矩阵转置,最后输出。列的方阵,作矩阵转置,最后输出。 要求转置前后只用同一个二维数组实现程序。要求转置前后只用同一个二维数组实现程序。(2). (2).

50、 由键盘输入由键盘输入MM个最大长度为个最大长度为N N的无空格的字符串,存入的无空格的字符串,存入 二维字符数组中,按二维字符数组中,按ASCIIASCII码由小到大排序,最后输出。码由小到大排序,最后输出。(3). P153(3). P153习题习题7.97.9对已排序数组,实现折半查找。对已排序数组,实现折半查找。模块化的函数设计模块化的函数设计1 1 函数定义及使用函数定义及使用2 2 函数的参数传递函数的参数传递3 3 数组作为函数参数数组作为函数参数4 4 函数的复杂调用函数的复杂调用5 5 全局变量与局部变量全局变量与局部变量6 6 变量和函数的存储类别变量和函数的存储类别7 7

51、 编译预处理编译预处理 函数的定义函数的定义数据类型数据类型 函数名函数名( (形参定义形参定义) ) 说明部分说明部分 语句部分语句部分 1 1、“数据类型数据类型”可以是简单类型、可以是简单类型、构造类型等。构造类型等。2 2、“说明部分说明部分”指的是变量的说明指的是变量的说明或函数说明。或函数说明。3 3、“语句部分语句部分”,即可执行语句。注即可执行语句。注意:意:CC语言中语言中“说说明部分明部分”与与“语句语句部分部分”不能交叉。不能交叉。4 4、“形参定义形参定义”中的形参是一中的形参是一些变量,这些变量必须单独定义。些变量,这些变量必须单独定义。如:如:int x,int y

52、,float zint x,int y,float z,不能简,不能简写为写为int x,y,long zint x,y,long z函数调用的规则函数调用的规则 如果在函数如果在函数A A中使用函数中使用函数B B,则称:函数,则称:函数A A为主调用为主调用函数,函数函数,函数B B为被调用函数。函数调用过程的规则是:为被调用函数。函数调用过程的规则是:1. 1. 函数必须先定义后才能使用。即被调用函数应该在函数必须先定义后才能使用。即被调用函数应该在 主调用函数之前定义,或者先说明后定义。主调用函数之前定义,或者先说明后定义。2. 2. 函数定义和说明函数定义和说明( (声明声明) )不

53、同,后者又称函数原型声明,不同,后者又称函数原型声明,使编译阶段能对调用函数的合法性进行全面检查。使编译阶段能对调用函数的合法性进行全面检查。3. 3. 在使用函数时,实际参数与形式参数的个数必须相同,在使用函数时,实际参数与形式参数的个数必须相同,并且对应的数据类型必须相同。并且对应的数据类型必须相同。( (个数、顺序、类型个数、顺序、类型) )4. 4. 若函数定义前调用函数,则函数说明是必须的,函数若函数定义前调用函数,则函数说明是必须的,函数原型声明的方法与变量定义类似,但可以省略形参名。原型声明的方法与变量定义类似,但可以省略形参名。函数的使用函数的使用( (调用调用) )自定义函数

54、的使用与标准函数的使用是一样的。用法如下:自定义函数的使用与标准函数的使用是一样的。用法如下:函数名函数名( (实际参数列表实际参数列表) )函数名函数名( (实际参数列表实际参数列表); );或或用在表达式中用在表达式中用作程序语句用作程序语句(1) (1) 实际参数可以是:变量、常量、表达式、函数等。实际参数可以是:变量、常量、表达式、函数等。 (2) (2) 函数的参数传递就是把实参传递给形参的过程。函数的参数传递就是把实参传递给形参的过程。 若形参是非数组的变量,则为单向值传递;若形参是非数组的变量,则为单向值传递; 若形参为数组,则实参和形参共享地址。若形参为数组,则实参和形参共享地

55、址。(3) (3) 函数定义在调用之后,则必须进行函数原型声明。函数定义在调用之后,则必须进行函数原型声明。 原型中形参的变量名可以省略。数组特别规定!原型中形参的变量名可以省略。数组特别规定!变量的作用域与生存期变量的作用域与生存期1. 1. 变量在什么地方有效变量在什么地方有效( (可用可用) ):作用域:作用域( (空间可见性空间可见性) ) 变量按有效范围,分为全局变量与局部变量。变量按有效范围,分为全局变量与局部变量。2. 2. 变量在什么时候有效变量在什么时候有效( (可用可用) ):生存期:生存期( (时间存在性时间存在性) ) a a 静态存储:在编译时分配的存储单元;静态存储

56、:在编译时分配的存储单元; b b 动态存储:只在程序执行的某一段时间存在。动态存储:只在程序执行的某一段时间存在。 注意:变量是对程序中数据的存储空间的抽象,有注意:变量是对程序中数据的存储空间的抽象,有两种两种属性:操作属性属性:操作属性( (数据类型数据类型) )和存储属性和存储属性( (动态变量、动态变量、静态静态变量、外部变量变量、外部变量) )。 I. 全局变量全局变量(文件作用域文件作用域)定义:在所有函数之外定义的变量,称为全局变量。定义:在所有函数之外定义的变量,称为全局变量。有效范围:从定义之处开始,对随后所有函数都有有效范围:从定义之处开始,对随后所有函数都有效。效。II

57、. 局部变量局部变量(块作用域块作用域)定义:在某个函数内部定义的变量。定义:在某个函数内部定义的变量。有效范围:局部变量只在定义它的函数内部有效。有效范围:局部变量只在定义它的函数内部有效。 相同变量名在不同函数内部是互不相同相同变量名在不同函数内部是互不相同的。的。注意:当全局变量与局部变量名字相同时,它们是注意:当全局变量与局部变量名字相同时,它们是不同的变不同的变 量,此时局部变量的使用优先于全局变量。量,此时局部变量的使用优先于全局变量。(函数原型作用域:函数原型声明时形参的作用范围函数原型作用域:函数原型声明时形参的作用范围)标识符作用域可见性的一般规则标识符作用域可见性的一般规则

58、1. 1. 标识符要声明在前,引用标识符要声明在前,引用( (使用使用) )在后。在后。2. 2. 在同一作用域中,不能声明同名的标识符。在同一作用域中,不能声明同名的标识符。3. 3. 在没有互相包含关系的不同的作用域中声在没有互相包含关系的不同的作用域中声明的明的 同名标识符,互不影响。同名标识符,互不影响。4. 4. 如果在两个或多个具有包含关系的作用域如果在两个或多个具有包含关系的作用域中声中声 明了同名标识符,则外层标识符在内层不可明了同名标识符,则外层标识符在内层不可见。见。变量的存储类别及特点变量的存储类别及特点 动态变量:在程序执行的某一时刻被动态地建立,并动态变量:在程序执行

59、的某一时刻被动态地建立,并在另一时刻被动态撤销的一种变量。动态变量包括:自动在另一时刻被动态撤销的一种变量。动态变量包括:自动变量和寄存器变量。变量和寄存器变量。 1. 1. 自动变量自动变量( (缺省的存储类别缺省的存储类别) ) auto auto 数据类型数据类型 变量名列表;变量名列表; 自动变量用自动变量用autoauto定义,是局部变量,在对其赋值之前,定义,是局部变量,在对其赋值之前,它的值是不确定的,存储在内存的动态存储区。当程序进它的值是不确定的,存储在内存的动态存储区。当程序进入到函数时,入到函数时,autoauto定义的变量自动建立,当退出函数时,定义的变量自动建立,当退

60、出函数时,自动释放。若没有指出变量存储类别,则默认是自动释放。若没有指出变量存储类别,则默认是autoauto变量。变量。 2. 2. 寄存变量寄存变量 register register 数据类型数据类型 变量名列表;变量名列表; 具有与自动变量完全相同的性质,保存在具有与自动变量完全相同的性质,保存在CPUCPU的寄存的寄存器里,存取速度快,但不能定义太多这样的变量。器里,存取速度快,但不能定义太多这样的变量。 3. 3. 静态变量静态变量 static static 数据类型数据类型 变量名列表变量名列表=初始化初始化 ; static static变量保存在静态存储区。变量保存在静态存储区。staticstatic变量有全局静态变量有全局静态变量与局部静态变量。变量与局部静态变量。staticstatic变量在整个程序中只定义变量在整个程序中只定义1 1次。次。在函数中定义的在函数中定义的stat

温馨提示

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

评论

0/150

提交评论