第2章C程序基础-T.ppt

上传人:本田雅阁 文档编号:3423423 上传时间:2019-08-24 格式:PPT 页数:85 大小:942.04KB
返回 下载 相关 举报
第2章C程序基础-T.ppt_第1页
第1页 / 共85页
第2章C程序基础-T.ppt_第2页
第2页 / 共85页
第2章C程序基础-T.ppt_第3页
第3页 / 共85页
第2章C程序基础-T.ppt_第4页
第4页 / 共85页
第2章C程序基础-T.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《第2章C程序基础-T.ppt》由会员分享,可在线阅读,更多相关《第2章C程序基础-T.ppt(85页珍藏版)》请在三一文库上搜索。

1、中的数据类型 C中的运算符和表达式 C中的数据的输入、输出,本章内容:,第二章 C程序设计基础,2.1 常量和变量,常量:某些固定的值。一般从形式上很容易辨认。如在前面程序中的 int a; a=123; 123即是整型常量。另外,如5.3,12.5等为实型常量,a,S,4为字符常量 注意,4与4的不同:前者为整型常量,后者为字符型常量)。,符号常量:,符号常量:用一个标识符来代表一个常量。此时,符号就相当于某一常量的别名,如下例 #define PI 3.14159 #include void main() float r,s; printf(“请输入圆的半径:“); scanf(“%f“,

2、 ,int a; a=3;,3,定义了一个整型变量,名为a,将常数3赋给变量a,变量:在程序运行过程中,其值可以改变的量。每个变量在计算机中对应相应长度的存储空间。,变量:,对于变量的进一步理解:,程序中的变量,就类似于我们生活中装水的容器。容器根据大小有不同的类型,如杯子、桶等,而变量也可分为不同的类型,如整型、实型等;向一个固定大小的容器中装入多少水,取决于实际的需要,可以是1毫升,也可以是10毫升,而且其中的值还可以随时调整;另外,为了区别不同的容器,我们给它们取不同的名字以示区别,变量也类似;,对变量的进一步理解:,char a; int b; float c;,变量的总结:,(1)变

3、量中的值:变量中的值是可以根据程序的需要而改变的; (2)变量的类型:与容器类似,每一种类型的变量中所能存放的数据的最大值是一定的,如对于int的变量,其中所能存放的最大正整数为32767,当超过这个值时,与在某一容器中放入过量的水一样,也会产生所谓的“溢出”。 (3)变量名:用于区分不同的变量。变量名也被称为“标识符”(symbol)。,标识符:,C规定: 标识符只能由字母、数字和下划线三种字符组成,且第一个字符不能是数字。 另外,在C中是严格区分大小写的,即变量名大小写是不同的!,正确的标识符 student、num1、_SUM、_1_2_3 MyName、myname、my_name 错

4、误的标识符 room3-1 包含了其他字符(减号) 2men 以数字开头 long 与关键字重复 Mr.Zhu 包含了其他字符(小数点),标识符示例:,变量的定义与存储:,在C中,变量必须“先定义,后使用” 当在程序中定义变量后,系统为变量在存储器中分配一定的存储单元,即存储空间,其大小由所定义的类型决定,char a; int b; float c;,2.2 C中的基本数据类型 (Data Types),空类型,整型常量:一般为十进制整数形式、另外还包括以“”开头的进制整数,以“”开头的16进制整数。,2.2.1 整型常量的表示方法,十进制 (Decimal) 例如,123、-456、0 八

5、进制 (Octal) 以0开头,不得含有8或9 例如,0123、-0456 错例,0138、-0912 十六进制 (Hexadecimal) 以0x或0X开头,用af或AF表示1015 例如,0x123、-0X45、0x3AB、-0xabc,整型变量:一般的整型变量为基本型,用int关键字来定义。一个int型变量在内存中占两个字节。 在定义整形变量时,除基本型int外,在C中还可以用以下几种修饰符对int型数据进行修饰,以扩大int型数据的范围: long 长整型 4 byte short 短整型 2byte unsigned 无符号型 2byte,整型变量:,整型变量总结:,整型变量总体上可

6、以分为有符号数和无符号数,整型数据在内存中的存储形式:,数据在计算机中以二进制补码来表示,最高位表示符号位,正数用0表示,负数用1表示。,设有int age=15, 则15在计算机中的存储形式为:,若使age=-15, 则-15在计算机中的存储形式为:,所以,int型数据存储范围为:,-215 215-1,-32768 32767,整型变量的定义与使用举例:,void main() int a; /*定义有符号基本整型变量a*/ unsigned b; /*定义无符号基本整型变量b*/ long c; /*定义有符号长整型变量c*/ a = -23; /*a的值为-23*/ b = 45; /

7、*b的值为45*/ c = a + b; /*c的值为22*/ ,2.2.2 浮点型常量的表示方法,十进制小数形式 由符号、数字和小数点(必须)组成 整数和小数部分都可省略,但不能同时省略 举例,12.3、-.123、123.、0.、.0 指数形式 由整数(或小数)、e(或E)、整数顺序组成 e或E之前必须有数字,之后必须是整数 举例,123.4e-5表示123.410-5 错例,e1、12e、1.2e3.4、.e5、e,规范化指数形式:,规范化指数形式 类似于“科学计数法” e或E之前的小数中,小数点前面有且仅有一个非零数字 举例,123.456 规范化形式,1.23456e2、1.2345

8、6E+002 非规范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5,浮点型(实型)变量的类型:,分类 单精度 float 双精度 double 长双精度 long double 长度和取值范围,用小数部分和指数部分来表示,例如:,实型数据在内存中的存储形式:,12.3456,浮点型数据的舍入误差:,浮点型变量能够表示的有效数字有限,因此会出现将有效位以外的数字舍去由于而造成误差,#include void main() float x ; double y ; x=222222.222; /从表面上看,x,y的值都没有超出其 y=

9、222222.222; /类型的表示范围 printf(“x=%f ny=%fn“,x,y); ,字符常量:用单引号引起来的字符。如a、S、4等 注意 :在C中,a与A及“a”都是不同的 除了这种形式的字符常量外,C还有一种特殊形式的字符常量:以反斜杠为开头的字符序列,称之为“转义字符”。如前面接触的n。,2.2.3 字符型,转义字符及其功能:,说明 ddd 1到3位8进制数ASCII码代表的字符 xhh 1到2位16进制数ASCII码代表的字符 举例,n、t、“、123、x3A,转义字符示例:,123并非三个字符,而是8进制数(123)8(其对应的十进制数为83)所对应的ASCII字符,查附

10、录1可知其所对应的字符为S 如果写成028,如何?,用char关健字定义的变量,如:char c1,c2; 字符型变量占一个字节。 说明 :在字符变量中,只能存放一个字符,不能如下对字符变量赋值: c1=ab;或 c1=”a” 而只能这样赋值: c1=a; 思考:写成c1=n,是否正确?,字符变量:,我们知道,字符变量在内存中所占的空间是一个字节,而在这个字节中存放的,是这个字符的ASCII码。 例如,如有定义char c1=A,而查附录可知字符A的ASCII码为65,则内存中的存储形式为 另外,如有定义char c2=2,而字符2的ASCII码为50,其在内存中为,字符型数据在内存中的存放形

11、式:,字符变量中存放的也是数。事实上可以把字符型数据当作一种长度为1字节的整型数据来处理,因此,可以对字符变量进行加、减等算术运算。 问题:当我们写出char c1=65;这样的语句时,是否正确?如正确,那么在c1中,存放的到底是97,还是字符A ?,结论:,#include void main( ) char c1,c2; c1=a; /c1=c1-32; c2=2; /c2=c2+3; printf(“%c,%dn”,c1,c1); printf(“%c,%dn”,c2,c2); ,例:验证字符在内存中的存储形式,结论:输出的结果是字符还是数字,必须根据输出时所使用的格式符,字符串(Str

12、ing)常量:,表示形式 一对双引号括起来的字符序列; 引号内可以包括0个、1个或多个字符; 字符序列中的特殊字符用转义字符表示: 举例,“abc“、“a“、“、“、“我“ 举例,“12.4“、“$#*!“、“C:TC“ 字符常量和字符串常量是不同类型的数据 例如,a与“a”是不同的; 不能把一个字符串赋值给一个字符型变量。,字符串在内存中的存放方式:,在内存中每个字符按顺序存放 字符串结尾有一个空字符 0 (ASCII=0)作为字符串结束标志 字符串结束标志0是不能显示的,在字符串常量中,也不用显式写出来。 举例: “TEST“ “ “a“,回顾:,1.C语言中三种最基本的数据类型包括:(

13、) A.整型、实型、逻辑型 B、整型、实型、字符型 C.整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 2.在C语言中,下面哪一个不是整型常量( ) A.123 B、123L C、0x123 D、U123 3.在C语言中,下面哪一个不是字符型常量( ) A.a B、81 C、0x41 D、“a” E、t 4.下列哪个选项不符合C语言中变量名的命名规则( ) A.age_1 B、1_age C、_1age D、age*1,2.3运算符与表达式 运算符概述,2.3.1 算术运算符和算术表达式,说明:当两数相除时,其结果为表达式中精度最高的类型。因此两个整数相除的结果为整数,如4/31,3/4

14、0(只取整数);而参加运算的数中只要有一个数为实数,则所有的数都按double型进行计算,其结果为double型数据,%为求余运算符。其结果为两整数相除后所得余数,如7%3=1。注:本运算符要求两侧均为int型数据。例如5.3%3就是错误的表达式。 用途:判断奇偶性、能否被整除、取数的个位,优先级: 如 a+b*c 结合性:当一个运算对象两侧的运算符的优先级别相同时,C规定了各种运算符的结合方向,即“结合性”。 如: a+b-c;变量b两侧的运算符优先级别相同,此时用到“结合性”的概念。,算术运算符的优先级和结合性:,优先级与结合方向总结:,不同优先级的运算符,运算次序按优先级由高到低执行 同

15、一优先级的运算符,运算次序按结合方向的规定执行 可以使用圆括号( )明确运算次序 圆括号()具有最高的优先级,2.3.3 赋值运算符和赋值表达式,1.赋值号左边必须是变量! 2.赋值号的作用是将其右边表达式的值计算出来再赋值给左边的变量,因此可以有a=a+1,原则上要求赋值号两边数据类型要一致,若不一致时,系统将自动进行类型转换,把右边的数据类型转换为左边的; 转换时,对于占内存单元多的数据类型赋给少的时,会截取;少的给多的时,不变 。例: int a; a=5.8;,例:不同类型间的数据互相赋值 #include main() char a; int b; long c; a=b=c=755

16、35; printf(“%d“,a); ,复合的赋值运算符:在”=”号之前加上其它运算符,就可构成复合运算符。如在”=”前加一个+”就构成了复合运算符“+=”。 对于复合的赋值运算符+=,可以这样理解: 变量+=表达式 变量=变量+(表达式) 例如:a+=3;a=a+3; y+=y*8 y=y+(y*8) 其它的复合的赋值运算符,其理解方式与+=相类似:如 a*=a+3 ?,请考虑:若a=3,则a+=a*=a/=a的值?,赋值表达式:由赋值运算符将一个变量和一个表达或连接起来的式子。如“a=5” C中规定:赋值表达式是有值的,它的值就是被赋值变量的值。即表达式“a=5”的值为5。由此又可将其值

17、再赋值给其它变量:b=(a=5); 或简写为:b=a=5; 又如:a=(b=4)+(c=5);,a-=a+4a=a-(a+4)a=-4 a*=a a=a*aa=16 a+=a a=a+aa=32,现在我们来看刚才的那个例子: 若a=3,则表达式a+=a*=a-=a+4的值?,2.3.3各类数据间的混合运算,通过前面的讲解,我们已经知道:字符型与整型在C中是通用的。因此,在C中,整型、实型和字符型数据间可以进行混合运算。在混合运算时不同的数据要先转换成同一类型,再进行运算。转换规则如下图:,各类数据间混合运算时的转换:,高 doublefloat long unsigned 低 int char

18、,short,注:纵向的箭头方向只表示级别高低,并不表示必须一级级按此转换。横向的箭头则表示必然的转换!,例:10+a +i*f-d/e (i为int型;f为float;d为double;e为float。,10+a a97=10+97(int) i*f ifloat=(float) int+float intfloat=(float) d/e edouble=(double) float+double floatdouble=(double) 结论:运算的结果为混合运算的数据类型中最高的类型 。,但是,一定要注意:这种转换并不是将所有的量统一后才进行运算,而是在运算过程中,逐步进行转换的!如:

19、,#include main() float a; a=5/2+2.5; printf(“%f“,a); ,小 结:,两个整数相除,结果也为整数 直接舍去商的小数部分,而不会“四舍五入”; 负数整数除法,结果的舍入方向没有规定; 如果需要得到精确的运算结果,可以把其中一个操作数转换为浮点数: 举例,5/3(=1)、5.0/3(=1.66666) 举例,-5/3(=-1?-2?) 模运算符的两个操作数都必须是整数 负数模运算结果的符号没有规定; 举例,5%3(=2)、-5%3(=-2?1?),2.3.4 关系运算符和关系表达式,注意: C中判断两个数是否相等,应该使用“=”而不是赋值号“=”!

20、表达式53的值为1,5=”等符号时,中间不要有空格;,关系运算符的优先级低于算术运算符而高于赋值运算符.即: 算术运算符关系运算符赋值运算符 使用关系运算符应注意的问题: ( 设a=5,b=4,c=3 ) 1)abc 2) a+bc 3) f=ab=c,2.3.5 逻辑运算符和逻辑表达式,逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来,就是逻辑表达式,如 ab & bc 注意:在C中,任何数据都可以参与逻辑运算,运算时将“0”认为假,而其它的所有的“非0”数都作为“真”处理!,如何表示整数x既可以被5整除又可以被7整除.,x%5=0,x%7=0,&,( ) ( ),逻辑运算符”逻辑与”,

21、逻辑或(): 一般形式 ab, a和b中任一为真,结果为真.,逻辑与( 只有当a和b都为真时,结果才为真.,逻辑非(!): 一般形式 !a, a为真,!a就为假; a为假,!a为真.,参与逻辑运算的运算对象可以是任何数值,而对于逻辑运算的结果,则不是0,就是1。 如: 53 ,在逻辑表达式的求解过程中,并非所有的逻辑运算符都被执行,而是在必须执行下一个逻辑运算符才能求出表达式的值时,才执行该运算符。因此,注意以下表达式执行后,m和n的值(设a=1,b=2,c=3,d=4,m=5,n=6) (m=ab) & (n=cd),实训:,1若a=5,b=4,x=0,判断下面两个表达式的结果及x的值: (

22、1) 0&x=ab (2) ab +x,2要判别某一年是否闰年。闰年的条件是符合下面两个条件的其中一个就可以了: (1)能被4整除, 但不能被100整除; (2)能被4整除, 又能被400整除;,(year%4=0&year%100!=0) (year%400=0),一般形式:(类型名)(表达式) 功能:把一个表达式(变量)转换成所需类型。 例:若有x=3.8;则 (int)x的值为3 注1:类型名应用()括起。 注2:强制类型转换只是生成一个中间数据,而原有数据的类型、值均不发生变化。,2.3.6 强制类型转换运算符,例:强制类型转换 #include main() float x=3.7,

23、y=4.4,z; z=(int)(x+y); printf(“x=%f,y=%f,z=%fn”,x,y,z); ,2.3.7 逗号运算符及逗号表达式,逗号表达式的求解过程是:先求解表达式1的值,再求解表达式2的值,整个逗号表达式的值是表达式2的值。,逗号表达式:用,将两个表达式连接起来,称为逗号表达式。如:6+8,3+4。 逗号表达式的一般形式:表达式1,表达式2。,如:若a=3;则表达式 a*=a+4,a*4 的值为?,逗号表达式可扩展为 表达式1,表达式2,表达式n 它的值为表达式n的值。 逗号运算符是所有运算符中级别最低的。因此,以下两个表达式: 1)x=(a=3,6*3) 2) x=a

24、=3,6*3 其意义是不同的,而且x的值也是不同的。,自增运算符为+,自减为-,作用分别是使变量的值加1或减1。具体使用时有以下两种形式: +i、-i(使用i之前,先使i的值加1、减1) i+、i-(先将i的值取出来使用,用后再使i的值加1、减1) 参看下例:若有定义 int i=10,j; 执行 j=i+; /则 j=10;i=11; = 执行 j=+i; /则 j=11;i=11;,2.3.8 自增、自减运算符,+,- -只能用于变量而不能用于常量或表达式。如5+,(a+b)+都是错误的。 +、- -的结合方向为“自右向左”。若有语句:-i+;则相当于-(i+);即对于语句: printf

25、(“%d”,-i+); 输出结果为:-3 而此时i的值为4; 设i=3,则对于表达式j=(i+)+(i+),j的值为6,而执行完表达式后i的值为5;,在使用+、-运算符时,应注意以下三点:,对于C系统而言,当遇到类似于(i+)+(i+)之类的表达式时,会首先从左到右地“扫描”一遍,如果有+i,则先将i的值自加,然后再计算整个表达式的值;如果是i+,则先取i的值来计算表达式的值,算完后再将i进行自加! 因此,对于表达式j=(i+)+(i+),其计算过程相当于上以下的几步之和:,k=i+i;i=i+1;i=i+1;,同理,对于表达式k=(i+)+(+i),相当于,void main( ) int

26、i=3,j,k; k=(i+)+(i+)+(i+); printf(“k=%d,i=%d”,k,i); i=3; k=(+i)+(+i); printf(“k=%d,i=%d”,k,i); i=3; k=(+i)+(i+); printf(“k=%d,i=%d”,k,i ); i=3;j=10;k=i+j; printf(“k=%d,i=%d,j=%d”, k , i , j); ,例:自增、自减运算符,C编译程序自左向右尽可能多的将若干字符组合成一个运算符、标识符、关键字,2.3.9 位运算符,1.位运算符是对二进制数据进行按位操作的,所以当手工计算3&4这样的表达式时,应先将数据转换为二进

27、制再进行计算; 2.左移和右移只是对操作数进行按位移动而已,如果不是将运算结果赋值给原变量的话,则不会改变原变量的值,例如a2和a=a2是两码事,前者不会改变a的值,而后者就会改变;,示例:3&4 ,3|4 , 22,0000 0011 0000 0010 0000 0100 0000 0100,“按位与”运算符&,“按位与”又称“按位乘”,即二进位相乘。 “按位与”的规则为: 0&0=0, 0&1=0, 1&0=0, 1&1=1,例: 求-1和5按位与的结果.,-1的补码: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,5的补码: 0 0 0 0 0 0 0 0 0 0 0

28、 0 0 1 0 1,0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1,按位与的作用: 将某些指定位清零,2.3.10 sizeof 运算符,使用sizeof运算符可以得到一个变量或某种数据类型在计算机内存中所占的字节数。 注:sizeof是运算符而不是函数。 例:sizeof的用法 #include main() int a=1000; printf(“%d, %d“,sizeof(a),sizeof(char); ,条件运算符 ? :,C中的惟一的一个三目运算符。 语法:表达式1?表达式2:表达式3 功能:先求解表达式1的值,若为非0,则求解表达式2的值并将之作为整个表达式的

29、值;若为0,则求解表达式3的值并将之作为整个表达式的值。 例:max=(ab?a:b); 结果:将a和b中较大的数赋值给max,注意:,条件运算符的优先级大于赋值语句而小于算术运算符,而其结合方向为“右结合”。因此,语句 (ab)?a-b:a+b (ab)?(a-b):(a+b) ab?a:cd?c:d ab?a:(cd?c:d) 条件表达式中表达式2或表达式3将有一个不执行,因此注意:ab?a+:b+语句中,a和b的值的变化。,2.4 C语句概述 2.4.1 C语句概述,表达式语句:最典型的是由赋值表达式构成的赋值语句,如 a=3 ; 函数调用语句:如 printf(“hello!”); 控

30、制语句:如ifelse、for、dowhile 空语句:只有一个分号的语句。 复合语句:用一对 括起来的语句。如: if(ab) c=a; a=b; b=c; ,2.4.2 复合语句,使用复合语句时,注意以下几点: 一个复合语句在语法上等同于一个语句,而不论其中有多少个语句;且凡是可以出现单个语句的地方,都可以出现复合语句; 复合语句中,又可以再嵌套其它的复合语句; 对于在复合语句中说明的变量,其作用范围只在这个复合语句中; 如果在复合语句的内外都出现了同样的变量定义,则按“局部优先”的原则处理;,例:复合语句例,#include main() int a=3; int b=4; int b=

31、5; int c=5; printf(“a=%d,b=%d,c=%d n“,a,b,c); printf(“a=%d,b=%d,c=%d n“,a,b,c); ,判断:设a=5;b=6;则执行以下语句后a,b的值为? if(ab) a=3;b=4;,2.5 C中的数据输入输出 1.字符输出函数:putchar(),功能:向屏幕输出一个字符。 调用格式 :putchar(ch); 注:ch可以是字符型变量或常量。如: #include main() char c=A; putchar(c); putchar(007); ,2.字符输入函数:getchar(),功能:从键盘上输入一个字符。 调用格

32、式 :ch=getchar( ); /其中ch为char型变量,用于接收键入的字符。 注:getchar()函数没有参数! #include main() char c; c=getchar(); putchar(c); ,功能:向屏幕输出各种信息。 一般形式:printf(“格式控制”,输出表列);,格式控制包含三种信息: 1.提示的字符串,原样输出。例如:printf(“Hello”); 2.转义字符,如“123”。 3.格式转换控制符。由“%”和格式字符组成,如“%d”、“%f” 注:在C中,数据的输出形式是由格式符决定的。格式符则应与数据类型相匹配,同一数据用不同的格式符得到的将是不同

33、的结果。 例如:若有定义 char ch=a; 则 printf(“%c,%d”,ch,ch); 得到两个不同结果。,3.格式化输出函数:tprinf(),函数printf 的格式举例 (a=3,b=4),printf(“a=%d b=%d“, a, b);,输出表列应与前面的格式说明符数目一致,字符宽度修饰符,常用的格式控制符如下表所示:,实 训 main( ) int a=-1; printf(“%d,%o,%8o,%x”,a,a,a,a);,a在计算机中的存储形式,输出结果:-1,177777, 177777,ffff,输出实数时指定小数位数 :,#include void main()

34、 float x=123.456; printf(“%f,%10f,%10.2f,%.2f,%-10.2f,“,x,x,x,x,x); 程序运行结果为 123.456001,123.456001 ,123.46,123.46,123.46,4.格式化输入函数:scanf(),功能:用于从键盘上接收各种类型的数据。 一般形式:scanf(“格式控制”,输入项地址表列); 说明: 格式控制的含义同printf函数。在printf中能用的,在scanf中都能用。 可以指定输入数据所占的列数,系统将按它进行截取。 函数中“格式控制”后面应当是变量的地址,而绝对不能写成变量名。 在格式控制字符串中,最好

35、只使用格式字符。不要把其它字符加进来。(如“n”、“Please input a,b:”等) 当格式符间没有分隔符时,系统默认的分隔符是空格、回车和TAB,但在使用“c”格式符输入字符时,它们不再作为分隔符而同样是有效的输入。 输入long、double型数据时,应用“%ld”、“%lf”格式符。,函数scanf举例,int i, j; char c; scanf(“%d%d“, /* “2 a 3“ = i=2, c=, j出错 */ /* “2a 3“ = i=2, c=a, j=3 */,使用scanf和printf函数时常见错误: 在使用scanf输入数据时忘记取地址运算符,如: scanf(“%d,%d”,a,b); 在输入数据时,数据间的分隔符与scanf中的不匹配,如: scanf(“%d,%d”,简单的C程序设计 :,例1:输入球体半径,求球的体积。 例2:输入大写字母,转换为小写字母。,The End,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1