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

下载本文档

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

文档简介

1、 第第 2 章章 C 程程 序序 的的 基基 本本 构构 成成2.1 C语言源文件语言源文件 C语言是结构化的程序设计语言,一个语言是结构化的程序设计语言,一个C源程序可以源程序可以由一个或多个文件组成,由一个或多个文件组成,C源源程序程序文件的扩展名一般文件的扩展名一般为为.c 或或.cpp,下面通过实例学习多文件系统中的函数,下面通过实例学习多文件系统中的函数调用。调用。 说明:说明: 文件文件-是指存放在存储器上以文件名进行管理的一组是指存放在存储器上以文件名进行管理的一组信息信息. 函数函数-指具有独立功能、按一定格式构成的代码段。指具有独立功能、按一定格式构成的代码段。 一个大型一个

2、大型,典型的典型的C语言源程序大致如下所示语言源程序大致如下所示: C语言源程序语言源程序 源程序文件源程序文件1 源程序文件源程序文件n 源程序文件源程序文件2. 预处理命令预处理命令 全局变量全局变量 声明声明 函数函数1. 函数函数n 函数首部函数首部 函数体函数体 局部变量局部变量 声明声明 执行语句执行语句 文件包含的概念:文件包含的概念: 一个文件可以将另一个源文件的全部内容包含进来,一个文件可以将另一个源文件的全部内容包含进来,这叫文件包含处理。这叫文件包含处理。 当然当然文件包含文件包含予处理也可在特定的盘,特定的目录予处理也可在特定的盘,特定的目录(文文件夹件夹)中寻找包含文

3、件中寻找包含文件. 如如:#include “c:my foldermyfile.c” 文件包含的一般格式文件包含的一般格式 : #include 或者或者 #include “文件名文件名” #include “file2.C”file1.cA 在编译时,将在编译时,将file2.c全部内容复制到全部内容复制到#include“file2.c“的的位置上位置上, 将将file1.c作为一个源文件单位进行编译。作为一个源文件单位进行编译。file1.c BA+Bfile2.c包含包含例例2.1 在在Visual C+环境下新建两个文件,其文件名分别环境下新建两个文件,其文件名分别 为为2_1_

4、1.c、 2_1_2.c, 其中其中2_1_1.c文件定义一个做乘法的函数文件定义一个做乘法的函数f( ),定义另一,定义另一个主调函数个主调函数main(). 在主调函数中分别调用函数在主调函数中分别调用函数f( )以及存放在以及存放在2_1_2.c中的中的函数函数disp(),在,在main函数中输出函数中输出f( )的返回值。的返回值。2_1_2.c 文件文件disp()函数函数分析:分析: 在文件在文件2_1_1.c中由两个函数构成,文件中由两个函数构成,文件2_1_2.c由一个由一个函数构成函数构成. 程序的执行从程序的执行从main()函数开始,函数开始,main函数调用函数调用f

5、()函数,函数,然后再调用然后再调用disp()函数。函数。2_1_1.c文件文件f()函数函数main()函数函数#include “2_1_2.c调用调用总结总结: 1. C 程序是由函数组成程序是由函数组成,必须要包含一个主函必须要包含一个主函 数数main( ). 函数之间可以相互调用函数之间可以相互调用. 因此,因此,函数是函数是 C 程序的基本单位程序的基本单位。 (1). C 用各种各样的函数来完成某些特定功能。用各种各样的函数来完成某些特定功能。 (2). C函数库十分丰富,标准函数库十分丰富,标准 C 提供一百多个函数提供一百多个函数. 被调函数可以是系统提供的库函数被调函数

6、可以是系统提供的库函数, 如如: printf( ), scanf( ); 也可以是根据需要自己编写的函数也可以是根据需要自己编写的函数,如如: disp( ).2. 一个一个C 程序总是从程序总是从main()函数开始函数开始执行执行,不管这不管这 个个main( )在整个程序中处于什么位置。在整个程序中处于什么位置。 main( )函数可放在整个程序的最上头,或最后函数可放在整个程序的最上头,或最后, 或或 一些函数的中间一些函数的中间 .3. C程序书写格式自由:一行内可以写几条语句程序书写格式自由:一行内可以写几条语句. 一条语句可写在多行上一条语句可写在多行上,行尾使用行尾使用续行符

7、续行符: “ ”. * 书写程序时书写程序时,一律使用英文标点符号一律使用英文标点符号. * C语言程序中区分大小写。语言程序中区分大小写。 * 在程序中在程序中int、return、include叫保留字,在叫保留字,在C语言语言 中有特定的含义中有特定的含义,一般不作它用。一般不作它用。 * 而而disp、f、a、b等为用户自定义标识符,通常为等为用户自定义标识符,通常为 了定义函数、变量所取的名字,取名要有一定的规了定义函数、变量所取的名字,取名要有一定的规 则。则。 4 每条语句及变量定义的每条语句及变量定义的最后要有一个分号最后要有一个分号( ; ) , 分号分号( ; )是语句的必

8、要组成部分。是语句的必要组成部分。 如:如: int x , y=7 ; c = a+b ; 注注:变量定义必须放在函数的开头部分变量定义必须放在函数的开头部分,执行语句之前执行语句之前, 不能不能 插入在语句当中插入在语句当中. C+可放程序任何位置可放程序任何位置.5 C语言本身并没有输入语言本身并没有输入,输出语句输出语句. 输入输入,输出的操输出的操 作是由库函数,像作是由库函数,像printf(), scanf()函数来完成。函数来完成。 C 语言对输入、输出实行语言对输入、输出实行“函数化函数化”管理。管理。2.2 C 函数函数 C程序是由一个或多个文件构成,而文件可由一个或程序是

9、由一个或多个文件构成,而文件可由一个或多个函数组成多个函数组成. 如在前述的文件如在前述的文件2_1_1.c中,由两个函数中,由两个函数main()、F()构成构成. 文件文件2_1_2.c由一个函数由一个函数disp()构成。构成。一一. 函数的调用形式为:函数的调用形式为: 函数名函数名( 参数参数 ); 注注: 函数的原型:函数的原型: 函数返回值类型函数返回值类型 函数名函数名( 形式参数表形式参数表 );参数参数: 执行一个函数所必须提供的数据叫参数执行一个函数所必须提供的数据叫参数.返回值类型返回值类型 函数名函数名(形式参数声明形式参数声明) 数据声明部分数据声明部分 语句部分语

10、句部分 二二. C函数定义的结构示意图函数定义的结构示意图 int add(int x,int y) int z; /* 变量定义,给变量分配内存空间变量定义,给变量分配内存空间*/ z=x+y; /*执行语句执行语句*/ return z; 注:注: 在在C语言中语言中, 变量在使用前,一定要先定义变量在使用前,一定要先定义: 指定变量的名字及类型指定变量的名字及类型,在编译时给变量分配存储空间。在编译时给变量分配存储空间。 例如例如: int z; 指定变量的名字为指定变量的名字为z,及类及类型为型为int.(在编译时给变量分配在编译时给变量分配存储空间存储空间)。注注: 变量名按变量名按

11、C语言的命名规则命名语言的命名规则命名. 变量名一般用小写字母变量名一般用小写字母, 见名知义见名知义.例如:例如:int x3,n; 定义整型变量定义整型变量float y2; 定义单精度浮点型变量定义单精度浮点型变量double area, length; 定义双精度浮点型变量定义双精度浮点型变量 多个变量用逗号多个变量用逗号(,)分开分开,最后加一分号最后加一分号(;). 每一个变量每一个变量有有二个特性二个特性: 有一个有一个名字名字和相应的和相应的类型类型, ,并在编译时分配相应的内存并在编译时分配相应的内存单元。单元。 该存储单元的该存储单元的大小大小由变量的数据类型决定由变量的数

12、据类型决定. 1.5x3变量名变量名变量值变量值存储单元存储单元 C语言中的变量和代数中的变量语言中的变量和代数中的变量含义不同含义不同. . 数学中的变量代表未知数数学中的变量代表未知数. . 如在如在C语言中的式子语言中的式子: x = x+1 在代数中没有意义在代数中没有意义.但在但在C语言语言中中,式子式子x=x+1 表示把变量表示把变量x中的值加中的值加1,然后然后再保存到再保存到x中中. 这里的这里的”=“是是赋值运算符赋值运算符. 构成了一赋值表达式构成了一赋值表达式.x = x + 12.3 C语句语句 C文件由函数构成,函数由语句构成,语句的结束符文件由函数构成,函数由语句构

13、成,语句的结束符用用“;”表示表示. 在在例例2.1中的文件中的文件2_1_1.c中的中的main函数,由函数,由5条语句条语句构成,每条语句用构成,每条语句用“;”表示语句的结束。表示语句的结束。 int x=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( ); - 函数调用语句函数调用语句.表示调用函数表示调用函数di

14、sp().输出:输出:* 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. printf(“ %d * %d = %dn” ,x,y,z);表表示调用系统函数示调用系统函数printf输出,输出,其输出形式为:其输出形式为:3*4=12int f(int a,int b) int c; c=a*b; return

15、c; 在被调函数在被调函数f()中把中把a、b的乘积赋的乘积赋给变量给变量c,然后函数,然后函数f()把返回值把返回值c赋给赋给main函数中的函数中的z。2.4 保留字与标识符保留字与标识符 语句由保留字、标识符、运算符和表达式构成。语句由保留字、标识符、运算符和表达式构成。2.4.1 保留字保留字 保留字是指保留字是指C语言中有特殊含义的名字,只能用于语言中有特殊含义的名字,只能用于C语语言中特定的场合。言中特定的场合。 例如:例如: int: 用于定义用于定义整型类型整型类型变量变量 float: 用于定义用于定义实型实型变量变量 double: 用于定义用于定义双精度双精度变量变量 c

16、har: 用于定义用于定义字符字符变量或字符串变量变量或字符串变量 注意:注意: 保留字只能用于规定的场合,不能用作给变量取名或保留字只能用于规定的场合,不能用作给变量取名或用户自定义标识符。用户自定义标识符。if: 用于判断用于判断for: 用于循环用于循环while : 用于循环用于循环 在在C语言中其它的保留字见语言中其它的保留字见附录附录C,其含义在以后,其含义在以后的章节中陆续学到。的章节中陆续学到。2.4.2 标识符标识符 标识符简单的理解就是给在程序中涉及的对象取的名字标识符简单的理解就是给在程序中涉及的对象取的名字. 标识符分为标识符分为系统系统命名的标识符与命名的标识符与用户

17、用户自命名标识符,系自命名标识符,系统标识符通常用于系统函数的命名,如:统标识符通常用于系统函数的命名,如: printf、strlen、scanf、fabs、malloc等。等。 用户自命名标识符是用户为命名变量或定义函数等而取用户自命名标识符是用户为命名变量或定义函数等而取的名字,通常用户自定义标识符以的名字,通常用户自定义标识符以字母、数字、下划字母、数字、下划线线组成组成,并以字母或下划线开头并以字母或下划线开头。注意:注意: a_12 、 _12 、ab12 等等 都是正确命名的标识符。都是正确命名的标识符。 12a、a/b等等 都是不正确的标识符。都是不正确的标识符。 思考:思考:

18、 是否可用:是否可用:int if=5; 定义一个整型变量?为什么?定义一个整型变量?为什么? 2.5 运算符运算符 在在C程序中有极为丰富的运算符,例如程序中有极为丰富的运算符,例如: 赋值运算符赋值运算符、算术运算符、关系运算符、逻辑运算符、算术运算符、关系运算符、逻辑运算符、位运算符等。位运算符等。 运算符及其优先级请参阅运算符及其优先级请参阅附录附录2.5.1 算术运算符算术运算符 算术运算符有算术运算符有: 加、减、乘、除、取余数,它们的加、减、乘、除、取余数,它们的表达方式及含义如下表所示。表达方式及含义如下表所示。运算符运算符 含义含义 例例 备注备注 + 加加 5+2 结果结果

19、 7 - 减减 5-2 结果结果 3 * 乘乘 5*2 结果结果 10 / 除除 5/2 结果结果 2 % 求余求余 5%2 结果结果1 只适用于整型数只适用于整型数 + 自增自增 - 自减自减 算术运算符的优先级算术运算符的优先级:运算符运算符 + - * / % 相同相同相同相同低低高高1. 关于除法运算符关于除法运算符: / 两个整数相除结果为整数两个整数相除结果为整数: 5/2 结果结果 2 5/3 结果结果 1 2. 关于求余运算符关于求余运算符: % %两边的操作数都两边的操作数都应是整数应是整数. 5%2 结果结果1 7%4 结果结果3 除法运算符除法运算符” “/ “的运算结果

20、跟两个操作的运算结果跟两个操作数的类型有关数的类型有关: (1).如果两边都是整形如果两边都是整形,结果必定为整形结果必定为整形. (2).如果两边是其它类形如果两边是其它类形,结果不是整形结果不是整形 .3. C3. C语言也规定了算术运算符的语言也规定了算术运算符的优选级和结合性优选级和结合性。 在表达式求值时:在表达式求值时:* 先按运算符的先按运算符的优先级别优先级别高低次序执行,如高低次序执行,如a-ba-b* *c,c, * 如果在一个运算对象两侧的运算符级别一样如果在一个运算对象两侧的运算符级别一样, ,则按则按 “结合方向结合方向”处理。处理。 算术运算符算术运算符的结合方向是

21、的结合方向是“自左至右自左至右”, ,即先左后右即先左后右. . 又称又称“左结合性左结合性” 即运算对象先与左边的运算符相即运算对象先与左边的运算符相结合。结合。 如如: : a-b+ca-b+c , , 因此因此b b先与减号结合先与减号结合, ,执行执行a-ba-b的运算的运算, ,再执再执行加行加 +c+c的运算的运算. . 以后还将遇到以后还将遇到 “右结合性右结合性”的运算符的运算符, ,其结合方向为其结合方向为自自右至左。即运算对象与右边运算符的相结合右至左。即运算对象与右边运算符的相结合. . 结合性是在别的高级语言中没有的结合性是在别的高级语言中没有的, ,是是C C特有的特

22、有的 。请参阅请参阅附录附录: 列出所有运算符的优先级和结合性。列出所有运算符的优先级和结合性。3、算术表达式、算术表达式 : 什么是表达式?什么是表达式? 由常量,变量,各种运算符,由常量,变量,各种运算符, 函数和括号连接而成函数和括号连接而成的,合符的,合符 c语言语法规则的有意义的式子,称为表达式。语言语法规则的有意义的式子,称为表达式。 如:如: a+23 , t+sqrt(y), z=x+y ,Pi*r*r算术表达式的书写规则算术表达式的书写规则: 在数学表达式中省略的内容要写上在数学表达式中省略的内容要写上: 如如: 2x 要写成要写成 2*x 2 r 要写成要写成 2* *r

23、a b ca=b & b =c 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. 4. 自增、自减运算符自增、自减运算符: : 在算术运算符中,在算术运算符中,C C语言又增加了两个很有用的运语言又增加了两个很有用的运 算符:算符: + 加加 1 1 运算符运算符( (自增)自增) - 减减 1 1 运算符运算符( (自减)自减)作用:作用: 使使变量变量的值加的值加1 1或减或减1 1。如。如; ; +x +x; 相当于相当于 x=

24、x+1x=x+1; -x-x; 相当于相当于 x=x-1;x=x-1; 增增1,减,减1运算符可放在操作数之前,也可放在其后。如运算符可放在操作数之前,也可放在其后。如: +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

25、 n”,a); 结果:结果: 101 101 102(2). (2). 结合方向是结合方向是“自右至左自右至左”,即,即“右结合右结合”. 如有如有: -i+ 负号和负号和“+”同一优先级同一优先级,结合方向同为结合方向同为“自右而左自右而左”,即相当于即相当于 -(i+). 注注: : (1). +,- - 运算符只能用于运算符只能用于变量变量,不能用于常量与表不能用于常量与表 达式。达式。 如如: 5+,(a+b)+ 都不合法都不合法.思考思考: 表达式表达式 y=1+x+ 是否等同于是否等同于 x+, y=1+x 还是等同于还是等同于 y=1+x, x+ ?上机练习上机练习21:上机调试

26、下列程序,总结余数的符号与什么相关。:上机调试下列程序,总结余数的符号与什么相关。#includeint main() printf(%d %dn, 5%2, -5%2); return 0;2:上机调试下列程序,分析程序输出的结果。:上机调试下列程序,分析程序输出的结果。#includeint main() int x,y,z; scanf(%d,&x); y=x+; z=+x; printf(y=%d z=%d x=%dn,y,z,x); &的含义是的含义是“取地址取地址”的意思,函数的作用的意思,函数的作用是:是: 从键盘输入的两个值从键盘输入的两个值,分别送到分别送到

27、x所占地址所占地址的内存单元中去的内存单元中去,也就是输入也就是输入x的值的值. %d为输入格式说明为输入格式说明, d为为十进制整数格式说明符。十进制整数格式说明符。 现设给现设给x输入了一个输入了一个5, 问:问:y,z,x输出各为多少输出各为多少?输出输出:y=5,z=7,x=7 又又:#includeint main() int x,y,z; scanf(%d,&x); y=x-; z=-x; printf(y=%d z=%d x=%dn,y,z,x); 3:把前程序中的:把前程序中的+都改为都改为-,再次调试程序,观察程序,再次调试程序,观察程序运行的结果。运行的结果。 现设

28、给现设给x输入了一个输入了一个5, 问:问:y,z,x输出各为多少输出各为多少?输出输出:y=5,z=3,x=3 x=45.3+y*4执行过程如下执行过程如下:注注: 左边必须是一个变量左边必须是一个变量. 1. 首先计算表达式的值首先计算表达式的值. 同时把其类型转为左边同时把其类型转为左边变量的类型变量的类型. 2. 把右边表达式的值赋把右边表达式的值赋 给左边的变量给左边的变量.说明说明:1. 如果在赋值运算中,如果在赋值运算中,赋值符两侧类型不一致赋值符两侧类型不一致, 在赋值在赋值时要进行类型转换。时要进行类型转换。规则规则: 赋值符右边的值转变为赋值符左边赋值符右边的值转变为赋值符

29、左边变量所属的类型变量所属的类型 (系统自动转换)。系统自动转换)。 例如:例如: a. 将将实型数据赋给整型变量实型数据赋给整型变量时,小数部分自动时,小数部分自动 丢失。丢失。 int i ; i=8.56; ( i为整型变量为整型变量, i 的值就为的值就为 8 )b. 将整型数据赋给实型变量时将整型数据赋给实型变量时,数值不变,数值不变,但以浮点形但以浮点形 式存于内存。式存于内存。 如如: float f2; f2 = 28; f2将以将以28.000000存于内存。存于内存。 (单精度以单精度以6位有效数字存入位有效数字存入, 双精度有双精度有15位有效数字位有效数字)例例: 若若

30、x是整型变量是整型变量,表达式表达式(x=10.0/4.0)的的值是值是_ A. 2.5 B、2.0 C、3 D、 26、复合赋值运算符复合赋值运算符:(1). 如果在赋值符如果在赋值符=之前加上其它运算符,可构成之前加上其它运算符,可构成 复合赋值复合赋值运算符运算符, 如如 : += (相加赋值相加赋值) *= (相乘赋值相乘赋值) 例如例如: a += 3 相当于相当于 a=a+3 x *= y+8 相当于相当于 x = x *(y+8) x %= 3 相当于相当于 x=x%3 C 采用这种形式,一采用这种形式,一是为了简化程序,二是是为了简化程序,二是为了提高编译效率。为了提高编译效率

31、。 凡是二目凡是二目(二元二元)运算符,都可与赋值符组成复合赋值符运算符,都可与赋值符组成复合赋值符. 为了便于记忆,可以这样理解:为了便于记忆,可以这样理解: 设有设有 : a += b 又设又设a a为变量,为变量,b b为表达式为表达式 a + = b (“=”左边部分,插入左边部分,插入“=”右边)右边) a = a + b (“=”左边补上变量名左边补上变量名) 如果如果 b表达式是包含若干项的表达式,它相当表达式是包含若干项的表达式,它相当 于有括号:于有括号: x% = y+3 x% = (y+3) x = x%(y+3)(2).(2).赋值表达式赋值表达式: : 由赋值运算符将

32、一个变量和一个表达式连接起来的式子由赋值运算符将一个变量和一个表达式连接起来的式子称为称为“赋值表达式赋值表达式”. . 如如: : “a=5a=5* *b b” 就是一个赋值表达式就是一个赋值表达式, ,赋值表达式的值赋值表达式的值就是就是 被赋值的变量的值被赋值的变量的值. . 7 7、强制类型转换运算符强制类型转换运算符 如如: : (double)(double)a2 a2 . .( (将将a2a2变量强制转换成变量强制转换成doubledouble型型) ) (int)(int)(x+y) .(x+y) .( (将将(x+y)(x+y)的类型强制转换的类型强制转换intint型型)

33、) 一般形式为一般形式为: :( (类型名类型名) )( (表达式表达式) )说明说明:进行强制类型转换时,得到一个所需的中间变量进行强制类型转换时,得到一个所需的中间变量, , 原来的变量类型不变。原来的变量类型不变。 例:例:float x1;float x1; int i; int i; x1=13.6; x1=13.6; i= i=( (intint) )x1x1 ; ; * * i i的值为的值为13 13 * * 类型转换有二种方法:类型转换有二种方法: a. 系统自动进行系统自动进行. . b. 强制进行强制进行. . 强制类型转换在函数调用时,当要求形参与实参的类型强制类型转换

34、在函数调用时,当要求形参与实参的类型一致时使用。一致时使用。2.5.2 关系运算符关系运算符一、关系运算符与关系表达式一、关系运算符与关系表达式 : 关系运算符也就是一种比较大小的运算符。关系运算符也就是一种比较大小的运算符。1关系运算符及优先级关系运算符及优先级: (小于小于) (大于大于) = (大于等于大于等于) = = (等于等于) 低低 ! = (不等于不等于) 优先级相同优先级相同(低低)优先级相同优先级相同(高高) 算术运算符算术运算符 : * , / , % + , - 高高 关系运算符:关系运算符: , , =, =, != 赋值运算符:赋值运算符: = 低低 复合复合赋值运

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

36、 b的值为的值为 “真真”,表达式的值为,表达式的值为 1 . (2). d= b c /* d的值为的值为 1 1 .*/ (3). e = abc /* e 的值为的值为 0.*/ /* 因因 “” 运算符运算符自左到右结合自左到右结合, 先执行先执行 ab,值为值为 1,再执行再执行1c,值为值为 0 0*/ (4). f= (ab)+a f的值为的值为5思考:思考: 表达式表达式 y=610=1 它等同于它等同于 y=(610)=1 还是还是 y=6(10=1) ? 高高 算术运算符算术运算符 : * , / ,% + , - 关系运算符:关系运算符: , , =, , , =, =,

37、 != 赋值运算符:赋值运算符: = = 低低 2.5.3 逻辑运算符逻辑运算符1逻辑运算符及优先级:逻辑运算符及优先级: 逻辑运算符是对逻辑量进行操作逻辑运算符是对逻辑量进行操作. 共有三种:共有三种: ! ! 逻辑非逻辑非(NOT) (对操作数取反对操作数取反,如操作数为真如操作数为真,结果就为假结果就为假.) & 逻辑与逻辑与(AND) (只有两个只有两个操作数的值同时为真时操作数的值同时为真时,结果为真结果为真.) | | 逻辑或逻辑或 (OR) (只要两个只要两个操作数中的一个值为真时操作数中的一个值为真时,结果就为真结果就为真.)高高 低低 & , | | 是是双目

38、双目(二元二元)运算符,运算符,! 是是单目单目(一元一元)运算符运算符. 优先级优先级: 逻辑运算符逻辑运算符: ! 高高 算术运算符:算术运算符: + , * 关系运算符:关系运算符: , =b)& (xy) ab & xy (!a) | | ab ! a | | ab2逻辑表达式逻辑表达式 : 用逻辑运算符将关系表达式,或逻辑量连起来的式用逻辑运算符将关系表达式,或逻辑量连起来的式 子,子,叫逻辑表达式。叫逻辑表达式。 逻辑表达式的值应该是一个逻辑量:真逻辑表达式的值应该是一个逻辑量:真(1),假(假(0). 但在但在判断判断一个量是否为真或为假时一个量是否为真或为假时,

39、 即以非即以非0 0为真为真(包包括负值)括负值), 以以0 0值为假值为假. 这种表示方法法最先在这种表示方法法最先在C中使用,因为它使得编程显中使用,因为它使得编程显示特别方便。示特别方便。说明说明 : C语言在编译时,给出语言在编译时,给出逻辑运算结果逻辑运算结果时时 (如如 关系表关系表 达式、逻辑表达式),如果是真,用数值达式、逻辑表达式),如果是真,用数值 1 表示表示 ; 是假用是假用 0 表示。表示。例:设例:设 a=4 , b=5 那么:那么: ! a 的值为的值为 0 (因为(因为a的值为非的值为非 0,认为是真),认为是真) a&b 的值为的值为 1 . a| |

40、b 的值为的值为 1 . 4 & 0 | | 2 的值为的值为 1 (自左向右运算)(自左向右运算).可见可见: (1). 逻辑运算结果不是逻辑运算结果不是 0,就是,就是 1. (2). 参加逻辑运算的操作数可以是参加逻辑运算的操作数可以是1,0(真真, 假假),也可是,也可是 整数,也可以是任何类型的数据。系统最终是以整数,也可以是任何类型的数据。系统最终是以: 0判断为假,非判断为假,非 0 判断为真判断为真.例例:求表达式的值:求表达式的值: : 5 53 & 2|83 & 2|84 4!0!0 4!0 即: 3 得:53 & 2|83 5 53 3 结

41、果为结果为 1 1 ; 83 结果为结果为 0 得:1 & 2 | 0 1&2 1&2 结果为结果为 1 1 最后结果为最后结果为 1 注注: : 逻辑表达式求解自左向右逻辑表达式求解自左向右,且,且一旦知道结果一旦知道结果的真假的真假 值,求值即停止。值,求值即停止。 例例. . 若设若设: a=1,b=1,c=3,d=4, m,n: a=1,b=1,c=3,d=4, m,n原值为原值为1 1,那么,那么: : (m=ab) & (n=cd) (m=ab) & (n=cd) 则则m m新值为新值为0 0,n n不再赋值不再赋值。 2. 判断判断ch 是

42、否为是否为英文英文字母字母: (ch = a & ch = A & ch = Z) 熟练掌握关系运算符和逻辑运算符,可以巧妙地用一熟练掌握关系运算符和逻辑运算符,可以巧妙地用一个逻辑表达式来表示一个复杂的条件。个逻辑表达式来表示一个复杂的条件。 例例:闰年的条件:闰年的条件: a. 能被能被4整除,但不能被整除,但不能被100整除整除 b. 能被能被400整除整除 设设 year为某一年份,为某一年份, year为闰年的表达式:为闰年的表达式:(year%4 =0&year%100!=0)|year%400=0) 当上述逻辑表达式为当上述逻辑表达式为 1 时,时,yea

43、r这一年为闰年,这一年为闰年, 当为当为 0 时,时,year这一年为非闰年。这一年为非闰年。例例2.3 #include int main() int x=20,y=3,z=0,a; a=xy; printf(%d %d=%dn,x,y,a); a=x/y; printf(%d / %d=%dn,x,y,a); a=x%y; printf(%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=

44、x&y; printf(%d & %d=%dn,x,y,a); a=x|y; printf(%d | %d=%dn,x,y,a); a=!xy; printf(!%d%d=%dn,x,y,a);注:注: 由于由于% %通常用于格式控制符中,当在通常用于格式控制符中,当在printfprintf中输出符号中输出符号% %时,需写成:时,需写成: printf(printf(“%d %d % %d=%dn %d=%dn”,x,y,a);,x,y,a);,而不是:而不是: printf(%d % %d=%dn,x,y,a);printf(%d % %d=%dn,x,y,a); 说明:

45、说明: 在编译新程序前要关闭前一程序的在编译新程序前要关闭前一程序的 工作空间工作空间 。 注意!注意!思考思考: 1. 写出判断写出判断x大于大于0并且小于并且小于10的表达式。的表达式。 2写出判断写出判断ch是大写字母的的表达式。是大写字母的的表达式。 3写出判断写出判断ch是字母的表达式。是字母的表达式。 4写出整型数写出整型数a、b、c能构成一个三角形的表达式。能构成一个三角形的表达式。 2.5.4 位运算符位运算符 位运算符的运算对象为二进制数位运算符的运算对象为二进制数. 运算符运算符 含义含义 1. 按位取反按位取反 例:例: 1 结果结果 0 1010 结果结果 0101 2

46、. & 按位与按位与 例:例: 1&1为为1; 1&0为为0 1100&1010 结果结果 10003. | 按位或按位或 例:例: 1|1 为为1 ; 1|0 为为1; 0|0为为0 . 1100 | 1010 结果结果 1110 4. 按位异或按位异或 例:例: 11 为为0; 00为为0; 10为为1 . 1100&1010 结果结果 0110 5. 按位左移按位左移 例:例: 0010 按位右移按位右移 例:例: 0010 1 右移右移1位位 结果结果 0001例例2.4 从键盘输入一个整型数,判断此数转化为二进从键盘输入一个整型数,判断此数转化

47、为二进制数后第制数后第2位是否为位是否为1。分析:分析: 假定此整数为假定此整数为12,转化为二进制后为,转化为二进制后为1100(你可以用你可以用windows中的计算器转换中的计算器转换). 判断第判断第2位是否为位是否为1,即此数只要与二进制数,即此数只要与二进制数0100作作“与与”运算运算. 如结果不为如结果不为0,即可判断此数的二进制数的第,即可判断此数的二进制数的第2位不为位不为0.第第0位位不同数制之间的转换#includeint main()int x,y;scanf(%d,&x);y= (x&4) != 0;printf(此数的二进制数的第此数的二进制数的第

48、2位为位为:%dn,y); 请读者自行调试,如程序运行时分别输入请读者自行调试,如程序运行时分别输入7、8,输出,输出是什么?为什么?是什么?为什么?ch2_2_4.c输入输入12 (12) 1 1 0 0 ( 4 ) 0 1 0 0 2.6 编辑编辑C程序时应注意的问题程序时应注意的问题1. C程序中区分大小写字母,书写格式自由,一行内程序中区分大小写字母,书写格式自由,一行内可写几个语句。可写几个语句。 2.用用“;”作为语句的结束标记。作为语句的结束标记。3. 函数定义如:函数定义如:main()、()、 #include、#define PI 3.14159 不是语句,后面不能用不是语

49、句,后面不能用“;”号。号。 注释用符号注释用符号“*” 和和 “*”来界定,来界定,“”和和“*”之间不可以有空格。之间不可以有空格。 一个好的程序应该有详细的注释。一个好的程序应该有详细的注释。 第第 2 章章 C 程程 序序 的的 基基 本本 构构 成成 结结 束束例例: 执行下列程序段后执行下列程序段后, a值为值为_:int a, b;a=15; b= -1;a= a+b&a; A) 15 B) 0 C ) 1 D) 16 例例:写出下列程序段的输出结果写出下列程序段的输出结果: float x1, x2; x1=3/2; x2=x1/2; printf(%d, %.1f, (int)x1, x2) ;C). 11, 0.53/2的值为的值为1练习与实践练习与实践一、选择题一、选择题1( )是构成)是构成C语言程序的基本单位。语言程序的基本单位。(A)函数)函数 (B)过程)过程 (C)子程序)子程序 (D)文件)文件2在下述程序段中,(在下述程序段中,( )是错误的程序注释方法(注:)是错误的程序注释方法(注:本例多个选择)。本例多个选择)。(A) #in/*包含包含*/clude

温馨提示

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

评论

0/150

提交评论