C语言程序的基本构成.ppt_第1页
C语言程序的基本构成.ppt_第2页
C语言程序的基本构成.ppt_第3页
C语言程序的基本构成.ppt_第4页
C语言程序的基本构成.ppt_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

1、上机实验中出现的问题,一.编写时候注意符号在英文格式下面输入 二.语句结束后“;”容易遗漏,但是也不能乱加,如while,if后面不能加”;” 三.对于函数来说,基本格式:函数头+一对 四.scanf和printf函数,第 2 章 C 程 序 的 基 本 构 成,2.1 C语言源文件 C语言是结构化的程序设计语言,一个C源程序可以由一个或多个文件组成,C源程序文件的扩展名一般为.c 或.cpp,下面通过实例学习多文件系统中的函数调用。,说明: 文件-是指存放在存储器上以文件名进行管理的一组信息. 函数-指具有独立功能、按一定格式构成的代码段。,一个大型,典型的C语言源程序大致如下所示:,C语言

2、源程序,源程序文件1,源程序文件n,源程序文件2,.,预处理命令,全局变量 声明,函数1,.,函数n,函数首部,函数体,局部变量 声明,执行语句,文件包含的概念: 一个文件可以将另一个源文件的全部内容包含进来,这叫文件包含处理。,当然文件包含予处理也可在特定的盘,特定的目录(文件夹)中寻找包含文件. 如:#include “c:my foldermyfile.c”,文件包含的一般格式 : #include 或者 #include “文件名”,在编译时,将file2.c全部内容复制到#include“file2.c“的位置上, 将file1.c作为一个源文件单位进行编译。,例2.1 在Visua

3、l C+环境下新建两个文件,其文件名分别 为2_1_1.c、 2_1_2.c, 其中2_1_1.c文件定义一个做乘法的函数f( ),定义另一个主调函数main().,在主调函数中分别调用函数f( )以及存放在2_1_2.c中的函数disp(),在main函数中输出f( )的返回值。,分析: 在文件2_1_1.c中由两个函数构成,文件2_1_2.c由一个函数构成. 程序的执行从main()函数开始,main函数调用f()函数,然后再调用disp()函数。,总结: 1. C 程序是由函数组成,必须要包含一个主函 数main( ). 函数之间可以相互调用. 因此,函数是 C 程序的基本单位。,(1)

4、. C 用各种各样的函数来完成某些特定功能。 (2). C函数库十分丰富,标准 C 提供一百多个函数.,被调函数可以是系统提供的库函数, 如: printf( ), scanf( ); 也可以是根据需要自己编写的函数,如: disp( ).,2. 一个C 程序总是从main()函数开始执行,不管这 个main( )在整个程序中处于什么位置。 main( )函数可放在整个程序的最上头,或最后, 或 一些函数的中间 .,3. C程序书写格式自由:一行内可以写几条语句. 一条语句可写在多行上,行尾使用续行符: “ ”. * 书写程序时,一律使用英文标点符号.,* C语言程序中区分大小写。,* 在程序

5、中int、return、include叫保留字,在C语言 中有特定的含义,一般不作它用。 * 而disp、f、a、b等为用户自定义标识符,通常为 了定义函数、变量所取的名字,取名要有一定的规 则。,4 每条语句及变量定义的最后要有一个分号( ; ) , 分号( ; )是语句的必要组成部分。 如: int x , y=7 ; c = a+b ; 注 :变量定义必须放在函数的开头部分,执行语句之前, 不能 插入在语句当中. C+可放程序任何位置.,5 C语言本身并没有输入,输出语句. 输入,输出的操 作是由库函数,像printf(), scanf()函数来完成。 C 语言对输入、输出实行“函数化”

6、管理。,2.2 C 函数 函数是完成特定任务的独立模块,函数的使用最主要涉及到函数的定义与调用。,C程序是由一个或多个文件构成,而文件可由一个或多个函数组成. 如在前述的文件2_1_1.c中,由两个函数main()、F()构成. 文件2_1_2.c由一个函数disp()构成。,一. 函数的调用形式为: 函数名( 参数 );,注: 函数的原型: 函数返回值类型 函数名( 形式参数表 );,参数: 执行一个函数所必须提供的数据叫参数.,返回值类型 函数名(形式参数声明) 数据声明部分 语句部分 ,二. C函数定义的结构示意图,int add(int x,int y) int z; /* 变量定义,

7、给变量分配内存空间*/ z=x+y; /*执行语句*/ return z; ,注: 在C语言中, 变量在使用前,一定要先定义: 指定变量的名字及类型,在编译时给变量分配存储空间。 例如: int z;,指定变量的名字为z,及类型为int.(在编译时给变量分配存储空间)。,变量的定义,变量定义的一般形式: 类型名 变量名表;,注: 变量名按C语言的命名规则命名. 变量名一般用小写字母, 见名知义.,例如: int x3,n; 定义整型变量 float y2; 定义单精度浮点型变量 double area, length; 定义双精度浮点型变量,多个变量用逗号(,)分开, 最后加一分号(;).,每

8、一个变量有二个特性: 有一个名字和相应的类型,并在编译时分配相应的内存单元。 该存储单元的大小由变量的数据类型决定.,变量名,变量值,存储单元,C语言中的变量和代数中的变量含义不同. 数学中的变量代表未知数. 如在C语言中的式子: x = x+1 在代数中没有意义.,但在C语言中,式子x=x+1 表示把变量x中的值加1,然后再保存到x中.,这里的”=“是赋值运算符. 构成了一赋值表达式.,x = x + 1,2.3 C语句 C文件由函数构成,函数由语句构成,语句的结束符用“;”表示. 在例2.1中的文件2_1_1.c中的main函数,由5条语句构成,每条语句用“;”表示语句的结束。,int x

9、=3,y=4,z; - 变量定义语句. 表示定义了x、y、z三个变量, 并给x、y分别赋予一个最初的值3与4.,int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( );,disp( ); - 函数调用语句. 表示调用函数disp(). 输出:*,int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( );,z=f(x,y); 表示调用函数f(),在调用函数f()时把实参x、y的值分别传给形参a、b. 返回值最后赋给变量z

10、.,printf(“ %d * %d = %dn” ,x,y,z);表示调用系统函数printf输出, 其输出形式为:3*4=12,在被调函数f()中把a、b的乘积赋给变量c,然后函数f()把返回值c赋给main函数中的z。,2.4 保留字与标识符 语句由保留字、标识符、运算符和表达式构成。 保留字 保留字是指C语言中有特殊含义的名字,只能用于C语言中特定的场合。,例如: int: 用于定义整型类型变量 float: 用于定义实型变量 double: 用于定义双精度变量 char: 用于定义字符变量或字符串变量,注意: 保留字只能用于规定的场合,不能用作给变量取名或用户自定义标识符。,if:

11、用于判断 for: 用于循环 while : 用于循环 在C语言中其它的保留字见附录C,其含义在以后的章节中陆续学到。,标识符 标识符简单的理解就是给在程序中涉及的对象取的名字. 标识符分为系统命名的标识符与用户自命名标识符,系统标识符通常用于系统函数的命名,如: printf、strlen、scanf、fabs、malloc等。,用户自命名标识符是用户为命名变量或定义函数等而取的名字,通常用户自定义标识符以字母、数字、下划线组成,并以字母或下划线开头。,注意: a_12 、 _12 、ab12 等 都是正确命名的标识符。 12a、a/b等 都是不正确的标识符。,思考: 是否可用:int if

12、=5; 定义一个整型变量?为什么?,2.5 运算符 在C程序中有极为丰富的运算符,例如: 赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符等。,运算符及其优先级请参阅附录,算术运算符 算术运算符有: 加、减、乘、除、取余数,它们的表达方式及含义如下表所示。,运算符 含义 例 备注 + 加 5+2 结果 7 - 减 5-2 结果 3 * 乘 5*2 结果 10 / 除 5/2 结果 2 % 求余 5%2 结果1 只适用于整型数,+ 自增 - 自减,算术运算符的优先级:,低,高,1. 关于除法运算符: / 两个整数相除结果为整数: 5/2 结果 2 5/3 结果 1,2. 关于求余运算符:

13、 % %两边的操作数都应是整数. 5%2 结果1 7%4 结果3,除法运算符” “/ “的运算结果跟两个操作数的类型有关: (1).如果两边都是整形,结果必定为整形. (2).如果两边是其它类形,结果不是整形 .,3. C语言也规定了算术运算符的优选级和结合性。 在表达式求值时: * 先按运算符的优先级别高低次序执行,如a-b*c, * 如果在一个运算对象两侧的运算符级别一样,则按 “结合方向”处理。,算术运算符的结合方向是“自左至右”,即先左后右. 又称“左结合性” 即运算对象先与左边的运算符相结合。,如: a-b+c , 因此b先与减号结合,执行a-b的运算,再执行加 +c的运算.,以后还

14、将遇到 “右结合性”的运算符,其结合方向为自右至左。即运算对象与右边运算符的相结合. 结合性是在别的高级语言中没有的,是C特有的 。 请参阅附录: 列出所有运算符的优先级和结合性。,3、算术表达式 :,算术表达式: 用算术运算符将运算对象连接起来的,符合C语言语法规则的式子.,什么是表达式? 由常量,变量,各种运算符, 函数和括号连接而成的,合符 c语言语法规则的有意义的式子,称为表达式。 如: a+23 , t+sqrt(y), z=x+y ,Pi*r*r,从广义上来讲,单个变量,单个常量也可看作表达式。 c具有众多运算符,可以构成多种表达式: 赋值表达式, 算术表达式、字符串表达式、 关系

15、表达式 ,逻辑表达式.,算术表达式的书写规则:,在数学表达式中省略的内容要写上: 如: 2x 要写成 2*x 2r 要写成 2*r,s(s-a)(s-b)(s-c) 要写成 s*(s-a)*(s-b)*(s-c) (59)(F-32) 要写成 (5 / 9)* (F - 32) x1+x2 要写成 x1+x2,4. 自增、自减运算符: 在算术运算符中,C语言又增加了两个很有用的运 算符: + 加 1 运算符(自增) - 减 1 运算符(自减),作用: 使变量的值加1或减1。如; +x; 相当于 x=x+1; -x; 相当于 x=x-1;,增1,减1运算符可放在操作数之前,也可放在其后。如: +

16、i, - -i 变量使用之前, 先使 i 增1,减 1. i+ , i- - 变量使用之后, 再使 i加 1,减1,设: i=3; j = +i ; (j的值为4) j = i+ ; (j的值为3,i的值为4),注意!,例: main ( ) int a=100; printf(“%d n”,+a); printf(“%d n”,a+); printf(“%d n”,a); ,结果: 101,101,102,(2). 结合方向是“自右至左”,即“右结合”. 如有: -i+ 负号和“+”同一优先级,结合方向同为“自右而左”,即相当于 -(i+).,注: (1). +,- - 运算符只能用于变量,

17、不能用于常量与表 达式。 如: 5+,(a+b)+ 都不合法.,思考: 表达式 y=1+x+ 是否等同于 x+, y=1+x 还是等同于 y=1+x, x+ ?,上机练习2 1:上机调试下列程序,总结余数的符号与什么相关。 #include int main() printf(%d %dn, 5%2, -5%2); return 0; ,2:上机调试下列程序,分析程序输出的结果。 #include int main() int x,y,z; scanf(%d, , scanf(%d, ,3:把前程序中的+都改为-,再次调试程序,观察程序运行的结果。,现设给x输入了一个5, 问:y,z,x输出各

18、为多少?,输出: y=5,z=3,x=3,5. 赋值运算符: =,在C中,把赋值符 “=”也列为运算符之列,“=”执行赋值操作。,如: y = 23.3 x=45.3+y*4,执行过程如下: 变量表达式,注: 左边必须是一个变量.,1. 首先计算表达式的值. 同时把其类型转为左边变量的类型.,说明: 1. 如果在赋值运算中,赋值符两侧类型不一致, 在赋值时要进行类型转换。,规则: 赋值符右边的值转变为赋值符左边变量所属的类型 (系统自动转换)。,例如: a. 将实型数据赋给整型变量时,小数部分自动 丢失。 int i ; i=8.56; ( i为整型变量, i 的值就为 8 ),b. 将整型数

19、据赋给实型变量时,数值不变,但以浮点形 式存于内存。 如: float f2; f2 = 28;,f2将以28.000000存于内存。 (单精度以6位有效数字存入, 双精度有15位有效数字),例: 若x是整型变量,表达式(x=10.0/4.0)的值是_ A. 2.5 B、2.0 C、3 D、 2,6、复合赋值运算符: (1). 如果在赋值符=之前加上其它运算符,可构成 复合赋值运算符, 如 : += (相加赋值) *= (相乘赋值),例如: a += 3 相当于 a=a+3 x *= y+8 相当于 x = x *(y+8) x %= 3 相当于 x=x%3,C 采用这种形式,一是为了简化程序

20、,二是为了提高编译效率。,凡是二目(二元)运算符,都可与赋值符组成复合赋值符.,为了便于记忆,可以这样理解: 设有 : a += b 又设a为变量,b为表达式 a + = b (“=”左边部分,插入“=”右边) a = a + b (“=”左边补上变量名),如果 b表达式是包含若干项的表达式,它相当 于有括号: x% = y+3 x% = (y+3) x = x%(y+3),(2).赋值表达式: 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”.,如: “a=5*b” 就是一个赋值表达式,赋值表达式的值就是 被赋值的变量的值.,7、强制类型转换运算符 如: (double)a

21、2 .(将a2变量强制转换成double型) (int)(x+y) .(将(x+y)的类型强制转换int型) 一般形式为:(类型名)(表达式),说明:进行强制类型转换时,得到一个所需的中间变量, 原来的变量类型不变。 例:float x1; int i; x1=13.6; i=(int)x1 ; * i的值为13 *,类型转换有二种方法: a. 系统自动进行. b. 强制进行. 强制类型转换在函数调用时,当要求形参与实参的类型一致时使用。,关系运算符 一、关系运算符与关系表达式 : 关系运算符也就是一种比较大小的运算符。,算术运算符 : * , / , % + , - 高 关系运算符: , =

22、, =, != 赋值运算符: = 低 复合赋值运算符: +=, %=, *=,运算符的优先级请见附录B,2关系表达式: 用关系运算符将两个表达式连起来的式子关系表 达式。关系表达式由于是一种比较的操作,其结果是成 立,不成立的关系。 也即产生一个逻辑值 , “真” 或 “假”。,C语言中没有设逻辑型数据 . C中用1代表逻辑真 ,0代表逻辑假。,0 1,如:设: a=4 , b=3 , c=2 ; 则:(1). a b的值为 “真”,表达式的值为 1 . (2). d= b c /* d的值为 1 .*/,(3). e = abc /* e 的值为 0.*/ /* 因 “” 运算符自左到右结合

23、, 先执行 ab,值为 1,再执行1c,值为 0*/ (4). f= (ab)+a f的值为5,思考: 表达式 y=610=1 它等同于 y=(610)=1 还是 y=6(10=1) ?,逻辑运算符 1逻辑运算符及优先级: 逻辑运算符是对逻辑量进行操作. 共有三种:,! 逻辑非(NOT) (对操作数取反,如操作数为真,结果就为假.), 是假用 0 表示。,例:设 a=4 , b=5 那么: ! a 的值为 0 (因为a的值为非 0,认为是真) a a=xy; printf(%d %d=%dn,x,y,a); a=x/y; printf(%d / %d=%dn,x,y,a); a=x%y; pr

24、intf(%d % %d=%dn,x,y,a); .,ch2_2_3.c,输出符号%时,需写成:,. a=x=y; printf(%d = %d=%dn,x,y,a); a=x!=y; printf(%d != %d=%dn,x,y,a); a=x ,注: 由于%通常用于格式控制符中,当在printf中输出符号%时,需写成: printf(“%d % %d=%dn”,x,y,a);, 而不是: printf(%d % %d=%dn,x,y,a);,说明: 在编译新程序前要关闭前一程序的工作空间。,注意!,思考: 1. 写出判断x大于0并且小于10的表达式。 (x 0) 1|0 为1; 0|0为

25、0 . 1100 | 1010 结果 1110,4. 按位异或 例: 11 为0; 00为0; 10为1 . 1100 scanf(%d, ,请读者自行调试,如程序运行时分别输入7、8,输出是什么?为什么?,ch2_2_4.c,输入12,(12) 1 1 0 0 ( 4 ) 0 1 0 0,2.6 编辑C程序时应注意的问题 1. C程序中区分大小写字母,书写格式自由,一行内可写几个语句。 用“;”作为语句的结束标记。,3. 函数定义如:main()、 #include、#define PI 3.14159 不是语句,后面不能用“;”号。 注释用符号“*” 和 “*”来界定,“”和“*”之间不可

26、以有空格。 一个好的程序应该有详细的注释。,第 2 章 C 程 序 的 基 本 构 成 结 束,例: 执行下列程序段后, a值为_: int a, b; a=15; b= -1; a= a+b A) 15 B) 0 C ) 1 D) 16,例:写出下列程序段的输出结果: float x1, x2; x1=3/2; x2=x1/2; printf(%d, %.1f, (int)x1, x2) ;,C). 1,1, 0.5,3/2的值为1,练习与实践 一、选择题 1( )是构成C语言程序的基本单位。 (A)函数 (B)过程 (C)子程序 (D)文件,2在下述程序段中,( )是错误的程序注释方法(注

27、:本例多个选择)。 (A) #in/*包含*/clude void main() printf(How are you?n); ,(B) #include void main() int i=3; /*整型数*/ ,(C) #include void main() int x/*初始化*/=10; /*打印*/printf(%d,x); (D) #include void main() int x=10; printf(%d,x); /*打印x/*x=10*/的值*/ ,3( )是C语言提供的合法的数据类型关键字。 (A)Float (B)signed (C)integer (D)Char 4

28、以下选项中不合法的用户标识符是( )。 (A)abc.c (B)file (C)Main (D)PRINTF 5合法的语言字符常数是( )。 (A)084 (B)A (C)ab (D)x43,6C语言中,要求运算数必须是整型的运算符是( )。 (A)% (B) / (C) (D)! 7以下选项中不正确的实型常量是( )。 (A)2.607E1 (B)0.8103e2. (C)77.77 (D)456e2 8合法的C语言赋值语句为( )。 (A)a=b=58 (B)i+ ; (C)a = 50 ,b = 50 (D)k = int(a + b);,9不合法的C语言赋值语句为( )。 (A)+a; (B)n1 =(n2 =(n3= 0); (C)a = b= = c; (D)k = a + b=1 ; 10正确的语句是( )。 (A)int x=y=z=0; (B)int z=(x+y)+; (C)x=+

温馨提示

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

评论

0/150

提交评论