资源描述
C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章本书本书内容内容 1 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章变量定义、算术表达式、变量定义、算术表达式、赋值语句和赋值语句和while语句语句 本章主要内容本章主要内容ARM Vector TableFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x001 13 32 2第一个第一个C语言程序语言程序 C语言程序的开发过程语言程序的开发过程4 4for循环语句循环语句、常量 5 5字符的输入和输出操作字符的输入和输出操作、函数6 6字符、整型数组和外部变量字符、整型数组和外部变量2 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章本章的节本要求本章的节本要求本章主要介绍本章主要介绍C语言的语言的核心要素核心要素,通过,通过本章的学习读者会对本章的学习读者会对C语言有一个整体语言有一个整体的基本概念,并能够编制基本的的基本概念,并能够编制基本的C程序。程序。本章将主要集中在以下本章将主要集中在以下基本内容基本内容上:上:变量、常量、运算符、表达式、控制变量、常量、运算符、表达式、控制流、函数、以及基本的输入输出库函流、函数、以及基本的输入输出库函数等。数等。让初学者快速让初学者快速建立对建立对C语言程序设计的语言程序设计的整体概念整体概念,并能够编制一些简单有趣,并能够编制一些简单有趣的的C程序。程序。最常使用的最常使用的2020元素元素3 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章学习或者教学学习或者教学C语言最重要的第一步是语言最重要的第一步是让学习者让学习者能够动手能够动手。动手能够增强学习者的信心,而信心动手能够增强学习者的信心,而信心对学好对学好C语言来说是重要的。语言来说是重要的。在阅读过程中,作者希望初学者在阅读过程中,作者希望初学者把主把主要精力放在基本要素上要精力放在基本要素上,感觉有难度,感觉有难度的内容可以先放一放。的内容可以先放一放。4 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.1 C语言程序的开发过程语言程序的开发过程 第一步:编辑第一步:编辑得到源程序。得到源程序。第二步:编译第二步:编译得到目标码。得到目标码。第三步:连接第三步:连接得到可执行代码。得到可执行代码。第四步:装载运行程序第四步:装载运行程序得到结果。得到结果。程序开发调试过程程序开发调试过程5 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.2 第一个第一个C语言程序语言程序开发工具:开发工具:VC+工具,或者工具,或者Dev-C+工具等工具等。其次,学会该工具的基本使用方法。其次,学会该工具的基本使用方法。下面以下面以“Hello World”程序为例:程序为例:例题例题2.1 输出输出“Hello World!”6 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章#include int main(void)printf(Hello World!n);return 0;预处理命令预处理命令主函数主函数被调函数被调函数函数参数函数参数函数返回值函数返回值7 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章main()函数是函数是特殊函数特殊函数。任何任何C程序必须程序必须有且只能有有且只能有一个一个main()函数。函数。main()函数可以放在函数可以放在C程序的任意位置。程序的任意位置。C程序的运行必须程序的运行必须从从main()函数开始,函数开始,而且也在而且也在main()函数中结束函数中结束。通过通过main这个名字才能找到将要执行这个名字才能找到将要执行的的程序入口程序入口。mainmain8 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章函数就是组成函数就是组成C语言程序的一个一个的语言程序的一个一个的功能模块功能模块,就像房子是由一块块砖头,就像房子是由一块块砖头搭建起来的一样,搭建起来的一样,C程序就是程序就是由一个个由一个个的函数组建的函数组建而来的。而来的。函数是函数是C程序的基本单位程序的基本单位,一般一个函,一般一个函数完成某一个相对独立的功能。数完成某一个相对独立的功能。在在C语言中,满足函数定义格式要求的语言中,满足函数定义格式要求的就是一个函数。就是一个函数。函数包括函数包括函数头和函数体函数头和函数体两部分两部分。9 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章图图2.1 函数定义的基本形式及函数调用的传值过程函数定义的基本形式及函数调用的传值过程 int Max(int x,int y)int Max(int x,int y)int z;int z;if(xy)if(xy)z=x;z=x;else else z=y;z=y;return(z);return(z);函数头函数头函数体函数体变量定义部分变量定义部分可执行语句部分可执行语句部分c c=Max Max(a,(a,b)b)(函函数数调调用用时时的的复复制制传传值过程)值过程)函函数数定定义义部部分分函数参数的对应关系函数参数的对应关系10 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章例题例题2.2 比较两个整数的大小比较两个整数的大小int Max(int x,int y);c=Max(a,b);int Max(int x,int y);声明时有类型声明时有类型调用时无类型调用时无类型定义时有类型定义时有类型11 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章C 程序的基本结构程序的基本结构 1.C语言程序的注释语言程序的注释/*和和*/中间中间所所包含的任何内容即为注释部分。包含的任何内容即为注释部分。2.main()函数及其返回值函数及其返回值 是主函是主函数的函数名,数的函数名,main()函数名是操作系函数名是操作系统调用统调用C程序的入口。程序的入口。3.函数参数和返回值函数参数和返回值 int Max(int x,int y)”则有两个参数,一个是则有两个参数,一个是x,一,一个是个是y。12 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章int Max (int x,inty)int Max (int x,inty)函函数数返返回回值值类型类型函函 数数名名函函 数数 参参数表数表13 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章4.函数体函数体包含在函数名后面的一包含在函数名后面的一对大括弧对大括弧“”之间的部分就是函数之间的部分就是函数体。体。构成函数体的基本要素,一般分为两构成函数体的基本要素,一般分为两种:种:一种是变量定义、声明语句;一一种是变量定义、声明语句;一种是可执行语句。种是可执行语句。变量定义语句:变量定义语句:int a,b,c;int z;函数体大括弧函数体大括弧 之间的内容。之间的内容。14 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章C程序的运行过程程序的运行过程 假设假设例题例题22的每一条语句所对应的的每一条语句所对应的机器指令都只占据一个字节机器指令都只占据一个字节。那么程序编译、连接、装载以后所对那么程序编译、连接、装载以后所对应的程序内存空间将抽象为如图应的程序内存空间将抽象为如图2.2所所示的结构。示的结构。同时,同时,假定:假定:1.假定计算机有两个读写头,一个是假定计算机有两个读写头,一个是程序读写头程序读写头;另一个是;另一个是数据读写头数据读写头。2.假定变量定义语句也会在程序中产假定变量定义语句也会在程序中产生可执行代码生可执行代码 对应对应PCPC对应对应SPSP15 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章printf();printf();system();system();return 0;return 0;0 x100000070 x100000070 x100000060 x100000060 x100000050 x100000050 x100000040 x100000040 x000000000 x000000000 xFFFFFFFF0 xFFFFFFFFmain(void)main(void)int a,b,c;int a,b,c;a=10;a=10;b=20;b=20;0 x100000030 x100000030 x100000020 x100000020 x100000010 x100000010 x100000000 x10000000程序读写头程序读写头z z system()system()y y 0 x1000101F0 x1000101F0 x3000FFFB0 x3000FFFB0 x100010080 x100010080 x100010070 x100010070 x3000FFFA0 x3000FFFA0 x100010000 x10001000printf()printf()int z;int z;if(xy)z=x;if(xy)z=x;else z=y;else z=y;return(z);return(z);0 x100001040 x100001040 x100001030 x100001030 x100001020 x100001020 x100001010 x100001010 x100001000 x10000100Max(x,y)Max(x,y)主主 函函 数数主主自自定定义义函函数数 库库函函数数 数数据据区区c=Max(a,b);c=Max(a,b);x xc c0 x3000FFFD0 x3000FFFD0 x3000FFFC0 x3000FFFCb ba a0 x3000FFFF0 x3000FFFF0 x3000FFFE0 x3000FFFE 程程序序区区 堆堆栈栈区区数据读写头数据读写头图图2.2 2.2 程序和数据在内存中的抽象程序和数据在内存中的抽象PCPCSPSP16 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章变量定义、算术表达式、赋值语句和变量定义、算术表达式、赋值语句和while语句语句完成一段数据转换任务:完成一段数据转换任务:它按照公式它按照公式m=(1+3n+3n2+n3),计算计算m的值。的值。当正整数当正整数n从从0变化到变化到99时,要求在终时,要求在终端上显示表格端上显示表格2.1的内容:的内容:17 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章表表2.1 例题例题2.3的数值转换表的数值转换表n nm=(1+3n+3n2+n3)0 01 11 18 82 227273 364644 4125125.9797941192941192989897029997029999991000000100000018 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章例题例题2.3 数值转换程序数值转换程序(第一版第一版):在程序中,设计了两个函数:在程序中,设计了两个函数:一个是必不可少的一个是必不可少的main()函数函数,另一个是另一个是数据转换函数数据转换函数Convert(),它它完成公式完成公式m=(1+3n+3n2+n3)的计算。的计算。注意结果的取注意结果的取值范围。值范围。19 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章将将int改为改为long有什么好处?有什么好处?int Convert(int x);int main(void)while(n=bottom)m=Convert(n);int Convert(int x)int z;z=1+3*x+3*x*x+x*x*x;return(z);20 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章变量定义语句变量定义语句:变量类型和变量名列变量类型和变量名列表表 int top;int bottom;int step;int a,b,c;变量类型变量类型变量名列表变量名列表21 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章表表2.2 几种不同的数据类型几种不同的数据类型类型类型在典型系在典型系统中占据统中占据的字节数的字节数意义意义C C标准规定的最小取值范围标准规定的最小取值范围charchar1 1字符型字符型0 0127127或者或者0 0255255shortshort2 2短整型短整型-32768-327683276732767longlong4 4长整型长整型-2-231312 23131-1-1floatfloat4 4浮点型浮点型1E37 1E37 1E+371E+37 ,6 6位精位精度度doubledouble8 8双精度浮双精度浮点型点型1E37 1E37 1E+371E+37 ,1010位精度位精度22 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章赋值语句赋值语句:top=0;bottom=99;step=1;n=top;将将0 0赋值给赋值给toptop变量,并非代变量,并非代数运算的等于符号。数运算的等于符号。23 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章算术表达式算术表达式:z=1+3*x+3*x*x+x*x*x;/*算术表达式算术表达式*/注意注意3x3x需要写为需要写为3*x3*x。C C语言中语言中3x3x时错误的。时错误的。24 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章当当时时while循环语句循环语句:while(n=bottom)m=Convert(n);printf(%dt%dn,n,m);n=n+step;当型循环结构。当型循环结构。25 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章while循环操作步骤循环操作步骤:1.测试测试while后的条件表达式,如果条后的条件表达式,如果条件不成立则退出件不成立则退出while循环语句;循环语句;2.如果条件表达式成立,则执行如果条件表达式成立,则执行while后面的循环体部分(也就是后面的循环体部分(也就是while后大后大括弧之间的内容,如果循环体只有一括弧之间的内容,如果循环体只有一个语句,也可以去掉大括弧,此时循个语句,也可以去掉大括弧,此时循环体就是环体就是while后的第一条语句)。后的第一条语句)。3.转入转入1(进行下一次进行下一次while循环循环)。26 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章表表2.3 while循环时内存的变换过程循环时内存的变换过程 循环循环次次数数第第1 1次次第第2 2次次第第3 3次次.第第9898次次第第9999次次第第10100 0次次退出退出m m1 18 82727.9411941192929702970299991000100000000 01000100000000 0n n0 01 12 2.979798989999100100stepstep1 11 11 1.1 11 11 11 127 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章显示输出函数显示输出函数printf()printf()是一个通用的格式输出函数。是一个通用的格式输出函数。它有它有两个输出参数两个输出参数,第一个参数是格,第一个参数是格式输出控制字符串,第二个参数是输式输出控制字符串,第二个参数是输出项,出项,第二个参数可以缺省第二个参数可以缺省,也可以,也可以有多个输出项。有多个输出项。在第一个参数中的在第一个参数中的是格式控制字符是格式控制字符,它控制后面参数中对应的输出项以它控制后面参数中对应的输出项以后面字符对应的格式输出。后面字符对应的格式输出。28 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章d dn ntt表示跳表示跳8 8个空格个空格29 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章表表2.4常用的输出格式控制字符常用的输出格式控制字符%d%d以整数形式输以整数形式输出出6d6d以整数形式输以整数形式输出,且输出出,且输出域宽为域宽为6 6位。位。f f以浮点数形式以浮点数形式输出输出6f6f以浮点形式输以浮点形式输出,且输出出,且输出域宽为域宽为6 6位。位。.2f.2f以浮点形式输以浮点形式输出,且小数出,且小数点后点后2 2位。位。6.2f6.2f以浮点形式输以浮点形式输出,出,6 6位宽度,位宽度,小数点后小数点后2 2位。位。数字表示输数字表示输出的域宽出的域宽字母表字母表示输出示输出数据类数据类型型30 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.4 for循环语句循环语句用用for()循环实现循环实现while。如下:。如下:for(n=top;n=bottom;n=n+step)m=Convert(n);printf(%dt%dn,n,m);ForFor型循环型循环31 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章基本语法格式如下:基本语法格式如下:for(循环初值条件循环初值条件;循环终止条件循环终止条件;循环循环步进表达式步进表达式).两个“;”号分隔三个表达式。32 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章例题例题2.4 用用for循环计算循环计算1到到100的和的和。sum=0;for(i=1;i=100;i=i+1)sum=sum+i;注意循环边界注意循环边界33 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章for循环的执行步骤一共四步,如下:循环的执行步骤一共四步,如下:1.首先首先执行循环初值表达式(执行循环初值表达式(只在进入只在进入for循环时执行一次,以后的每一次循环不再执循环时执行一次,以后的每一次循环不再执行循环初值表达式),行循环初值表达式),2.其次其次判断循环终止条件表达式判断循环终止条件表达式。如果条件。如果条件不满足则退出不满足则退出for循环语句。循环语句。3.如果条件满足则执行循环体(如果条件满足则执行循环体(for后大括后大括弧之间的内容,当只有一个语句时,可以不弧之间的内容,当只有一个语句时,可以不加大括弧,此时循环体就是加大括弧,此时循环体就是for后第一条语后第一条语句)。句)。4.执行循环步进表达式执行循环步进表达式,转入,转入2(进行下一(进行下一次循环条件判断)。次循环条件判断)。34 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.5 常量常量程序中程序中恒定不变的量恒定不变的量,就是常量。,就是常量。但是,直接在程序中使用数字表示常但是,直接在程序中使用数字表示常量,会给编程带来更大的麻烦:量,会给编程带来更大的麻烦:第一,数目字的意义不明确,不便阅第一,数目字的意义不明确,不便阅读;读;第二,一旦这些常量有变化时,需要第二,一旦这些常量有变化时,需要找到每一个数目字并进行修改,这不找到每一个数目字并进行修改,这不但麻烦而且容易出错。但麻烦而且容易出错。有什么办法表示数目字常量吗?有什么办法表示数目字常量吗?35 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章用用#define定义宏定义宏 宏的定义格式如下:宏的定义格式如下:#define NAME 替换字符串替换字符串程序在编译预处理时,自动用程序在编译预处理时,自动用“替换替换字符串字符串”取代取代NAME。例题例题2.5 数值转换数值转换(第第2版版):#define TOP 0#define BOTTOM 99#define STEP 1符号表示常量符号表示常量36 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章 for(n=TOP;n=BOTTOM;n=n+STEP)m=Convert(n);printf(%dt%dn,n,m);/*n=n+STEP;*/在步进表达式在步进表达式中步进。中步进。37 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章用用const定义常量定义常量 const int SINT_MAX=65535;就定义了一个常量,它与用宏定义的就定义了一个常量,它与用宏定义的宏名是有区别的:宏名是有区别的:#define定义的宏名定义的宏名在编译前的编译预处理阶段用字符串在编译前的编译预处理阶段用字符串替换宏名得到常量,这个常量在编译替换宏名得到常量,这个常量在编译以后将位于只读程序存储区;以后将位于只读程序存储区;而而const定义的常量将有对应的名字,定义的常量将有对应的名字,它位于数据存储区。它位于数据存储区。const const定义的常量有名字,位定义的常量有名字,位于数据区。于数据区。38 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.6 字符的输入和输出操作字符的输入和输出操作 getchar()和和putchar()函数函数文本的输入文本的输入/输出是按照字符流的方式输出是按照字符流的方式来处理的。字符流实际就是字符序列来处理的。字符流实际就是字符序列它被分成若干行,每一行有零个它被分成若干行,每一行有零个或者多个字符,一行紧接一行,直到或者多个字符,一行紧接一行,直到整个流结束。整个流结束。int getchar(void);int putchar(int ch);获取一个字符输出一个字符 chch为为intint。39 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章while(ch=getchar()!=EOF)putchar(ch);chch为什么必须是为什么必须是intint?可?可以是以是charchar吗?吗?40 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章scanf()和和printf()函数函数 scanf()可用于可用于输入字符输入字符、数值或者字数值或者字符串等符串等。它有两个参数:它有两个参数:第一个参数是输入格式控制字符串,第一个参数是输入格式控制字符串,第二个参数是输入项第二个参数是输入项。scanf()scanf()还有什么不可还有什么不可以输入的吗?以输入的吗?41 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章char ch;int i;scanf(%c,&ch);scanf(%d,&i);int printf(const char*control_string,.);int scanf(const char*control_string,.);函数参数个数可变函数参数个数可变42 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章基本的格式控制字符基本的格式控制字符如下:如下:%c代表字符型;代表字符型;%d代表整型;代表整型;%u代表无符号整型;代表无符号整型;%ld代表长整型;代表长整型;%f代表浮点型;代表浮点型;%s代表字符串。代表字符串。43 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章 gets()和和puts()函数函数 char*gets(char*str);int puts(const char*str);函数函数gets()获取一个字符串直到回车返获取一个字符串直到回车返回回。函数函数puts()则将其参数则将其参数str所代表的字所代表的字符串写到显示屏上,并回车换行符串写到显示屏上,并回车换行。函数原型中的函数原型中的const表示不可在该函数表示不可在该函数中修改该字符串的内容中修改该字符串的内容。putsputs自动回车自动回车44 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.6.2 文件拷贝文件拷贝 例例题题2.6 将将从从键键盘盘输输入入的的字字符符显显示示到到终终端上(第端上(第1版)。版)。ch=getchar();while(ch!=EOF)putchar(ch);ch=getchar();为何需要该为何需要该语句?语句?45 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章例题例题2.7 将从键盘输入的字符显示到终端将从键盘输入的字符显示到终端上(第二版)。上(第二版)。/*ch=getchar();*/while(ch=getchar()!=EOF)putchar(ch);/*ch=getchar();*/为何可去掉两处的为何可去掉两处的getchargetchar()?()?46 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章(ch=getchar()!=EOF的意义?的意义?int getchar()int getch(void);int getche(void);依据运算符的优先级依据运算符的优先级解读语句的意义。解读语句的意义。47 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.6.3 字符计数字符计数 例题例题2.8 统计键盘输入的字符个数(第统计键盘输入的字符个数(第一版)一版)lCount=0;while(getchar()!=EOF)+lCount;+运算符的意义?48 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章l1=+lCount;l2=lCount+;例题例题2.9 统计键盘输入的字符个数(第二版)。统计键盘输入的字符个数(第二版)。double dCount;for(dCount=0;getchar()!=EOF;+dCount);forfor循环实现循环实现49 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.6.4 行计数行计数 例题例题2.10 统计从键盘输入的文本的行数统计从键盘输入的文本的行数 while(ch=getchar()!=EOF)if(ch=n)+dCountRow;while while循环实现循环实现注意注意”=”=”并非并非”=”=”50 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章 if语句语句单分支单分支if语句语句,它控制,它控制if后面大括弧之后面大括弧之间的语句是否执行。它分两步执行:间的语句是否执行。它分两步执行:1.首先求首先求if后的条件表达式的后的条件表达式的“ch=n”的值。的值。2.如果值为真,即条件表达式满足,如果值为真,即条件表达式满足,则执行则执行if后一对大括弧间的语句体后一对大括弧间的语句体“+dCountRow”,如果值为假,即,如果值为假,即条件表达式不满足,则不予执行。条件表达式不满足,则不予执行。51 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.6.5 单词计数单词计数 例例题题2.11 统统计计从从键键盘盘输输入入的的字字符符个个数数、单词数和行数单词数和行数。关键是如何判断一关键是如何判断一个单词。个单词。52 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.7 函数函数函数可以将函数的内部实现细节封装函数可以将函数的内部实现细节封装在函数内部。在函数内部。例题例题2.12 定义函数定义函数Factorial(unsigned n)用于计算用于计算n!。函数具有一定的封装函数具有一定的封装和隐藏性。和隐藏性。53 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章抽象成更一般的形式如下:抽象成更一般的形式如下:函数名函数名(,.)变量定义部分变量定义部分;可执行语句部分可执行语句部分;一个带括弧的名字就是函数一个带括弧的名字就是函数54 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章函数返回语句函数返回语句return的语法格式如下:的语法格式如下:return (返回值返回值);/*括弧可省括弧可省*/当函数不需要返回值时,可以省掉当函数不需要返回值时,可以省掉return语句。语句。在新标准在新标准C99中,中,return语句语句必须必须带一带一个确定的返回值。个确定的返回值。voidvoid以外的函数必带以外的函数必带returnreturn语句。语句。55 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.8 函数参数函数参数复制传值复制传值参数的传递都通过参数的传递都通过复制传值复制传值。在调用。在调用函数时,将实参复制一份传递给对应函数时,将实参复制一份传递给对应的形式参数的形式参数。形参和实参形参和实参各自占据不同的内存空间各自占据不同的内存空间,对形参的任何改变都不会反作用于实对形参的任何改变都不会反作用于实参,也就是说对形参的任何改变都不参,也就是说对形参的任何改变都不会影响实参。会影响实参。实参并非形参。实参并非形参。56 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章我们来研究研究我们来研究研究Pow()函数,该函数计算函数,该函数计算xy,它有两种实,它有两种实现方式现方式。int Pow(int x,int y)int i,p;p=1;for(i=1;i 0;-y)p=p*x;return p;注意注意y y的作用,的作用,取消了取消了i i59 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章图图2.3 函数调用时的复制传值过程。函数调用时的复制传值过程。Pow(2,i)int Pow(int x,int y)int i,p;p=1;for(i=1;i 0)if(length maxLen)StrCpy(longest,line);maxLen=length;数组的定义形式数组的定义形式62 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章图图2.4 字符数组和指针字符数组和指针 指针指针指向指向数组数组的首的首地址地址63 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章图图2.5字符数组存放字符串常量字符数组存放字符串常量Goodn注意注意00的存在,的存在,它有用吗?它有用吗?64 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.9.2 字符指针字符指针 所谓指针,实际上就是所谓指针,实际上就是内存单元的地内存单元的地址。址。由于内存单元存放的数据类型不由于内存单元存放的数据类型不同,因而指针的类型也有所不同。同,因而指针的类型也有所不同。字符指针(也就是字符指针(也就是char型指针)就是型指针)就是一个一个指向字符的指针指向字符的指针,它实际上就是,它实际上就是字符变量在内存单元的地址。字符变量在内存单元的地址。指针变量则是这样一个变量指针变量则是这样一个变量它它专专门用来存放变量的地址门用来存放变量的地址。某种类型的。某种类型的指针变量只能用于存放该种类型的指指针变量只能用于存放该种类型的指针。针。65 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章定义指针变量的方法如下:定义指针变量的方法如下:char ch;/*定义了两个指针变量,其名字分别为定义了两个指针变量,其名字分别为p1、p2,它们可以指向,它们可以指向char型变量型变量*/char*p1,*p2;p1=&ch;*p1=A;p2=p1;指针就是地址指针就是地址66 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章ch=Ach=Ap1=&chp1=&chp2=p1p2=p1图图2.6 2.6 指针及其指向的对象指针及其指向的对象 p1p1和和p2p2都指向了都指向了chch67 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章StrCpy:将指针将指针pSrc所指向的字符复制到所指向的字符复制到指针指针pDest所指向的位置所指向的位置void StrCpy(char*pDest,char*pSrc)int i;i=0;while(*pDest+=*pSrc+)!=0);该语句的语义实什么?该语句的语义实什么?68 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.10 整型数组整型数组 编写程序统计从键盘输入的各个大写编写程序统计从键盘输入的各个大写字母,以及数字、空字符字母,以及数字、空字符(space、tab和换行符和换行符)以及其他字符出现的次数。以及其他字符出现的次数。总共有总共有30种输入情况,其中大写字母种输入情况,其中大写字母的情况有的情况有26种,因此种,因此用一个数组来记用一个数组来记录录各种大写字母输入的次数比较方便。各种大写字母输入的次数比较方便。*例题例题2.15 统计各大写字母的输入次数。统计各大写字母的输入次数。69 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章 while(ch=getchar()!=EOF)if(ch=A&ch=a&ch=0&ch=A&ch=A)+iUpperCase ch-A;对字符对字符ch的输入值,通过的输入值,通过if语句后面的语句后面的条件表达式作了一定的限定,字符条件表达式作了一定的限定,字符ch的的ASCII码值在码值在65到到90之间时才执行之间时才执行+iUpperCasech-A语句。语句。ch-A ch-A意义意义?72 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章else if语句语句if(条件表达式条件表达式1)语句语句1;else if(条件表达式条件表达式2)语句语句2;.else if(条件表达式条件表达式n)语句语句n;else语句语句n+1;73 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章2.11 外部变量及变量的作用域外部变量及变量的作用域 在主函数在主函数main()中定义的数组:中定义的数组:line、longest等,是主函数等,是主函数main()的的私有数私有数组组,也是主函数,也是主函数main()的的内部数组内部数组。这些内部变量为这些内部变量为自动型变量自动型变量。自动型变量随函数调用而存在,随函自动型变量随函数调用而存在,随函数调用结束而消失数调用结束而消失,因此它们不会在,因此它们不会在两次函数调用之间保持其值,每一次两次函数调用之间保持其值,每一次函数调用都必须重新分配内存单元、函数调用都必须重新分配内存单元、重新初始化。重新初始化。内部变量的作用?内部变量的作用?74 C C语语言言程程序序设设计计(C C9 99 9版版)清华大学出版社第二章要想一个变量能够被任何函数访问,要想一个变量能够被任何函数访问,可以将该变量设定为可以将该变量设定为外部变量外部变量。外部变量只能够在函数外定义,且只外部变量只能够在函数外定义,且只能定义一次,系统会在定义外部变量能定义一次,系统会在定义外部变量的时候为其
展开阅读全文