第2章基本数据类型及其运算_第1页
第2章基本数据类型及其运算_第2页
第2章基本数据类型及其运算_第3页
第2章基本数据类型及其运算_第4页
第2章基本数据类型及其运算_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章基本数据类型及其运算(I)本章学习的目标:1、掌握基本数据类型的表示,基本数据类型 常数的书写方法;2、掌握算术运算、关系运算、逻辑运算、赋值运算等运算的意义;3、掌握表达式的书写方法;4、了解单个字符输入输出方法,掌握整数、浮点数、字符、字符串的格式输入和格式输出方法。12.1 基本数据类型2.2输入和输出基础2.3 数据运算2.4 表达式22.1 基本数据类型 基本数据类型有三种: 整数 浮点数 字符(实数) 理论上有无穷多的不同整数、浮点数、字符,但是,计算机只能表示有限的整数、有限的浮点数和有限的字符3整型数据整数是不带小数点和指数符号的数据 整型数据按其数值范围划分成三种:1.

2、 基本型:用2. 短整型:用3. 长整型:用int标记shortint标记,简写为标记,简写为shortlonglong int 按值内部的最不同理解又分两类:作为符号位1. 带符号:2. 不带符号:单元最单元中全部二进位用作存放数据本身,而没有符号位。表示方法:unsignedint 、unsignedshort 、unsignedlong4常用整数的数值范围 用16个二进位一个整数带符号数值范围:- 32768 32767 ( -215 215-1 )不带符号数值范围 0 65535 (0 216 - 1) 用32个二进位带符号数值范围是- 2147483648 2147483647 (

3、-231 231-1 )不带符号数值范围是一个整数0 ( 0 232 - 1)5 带符号整型数据与无符号整型数据的区别:设整数用16位二进位表示 带符号整数,代码:0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1最是符号位:0表示正 /1表示负,其余各位是数据位,最大值为32767(即215-1) 带符号整数,代码: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1最是符号位:0表示正/1表示负,其余各位是数据位,一个全1的二进位数,其对应的值为-1(负数用补码表示) 无符号整数,代码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 116位二进位都是数

4、据位,值为65535(即216-1)6在计算机中,负整数用补码表示。若x是一个正整数,则-x的补码表示是x的反码加上1。用补码表示负整数是为了简化整数的运算,例如,运算: x-y可用x加上y的补码实现。x = 1反码0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0-1补码1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17整型常量的书写形式 十进制整数:如0,123,-45。 八进制整数:以数字0开头,并由07组成的数字符序列。如:0123表示八进制整数,其值等于十进制整数为:1*82+2*81 +3=83

5、 十六进制整数:以0x(或0X)开头,并由十六进制数的数字符组成的数字符序列。表示十六进制数的数字符有16个:09和A、B、C、D、E、F,其中六个字母也可以小写如:0x123表示十六进制整数,其值等于十进制整数为:1*162+2*161+3=2910xabc,其值等于10*162+11*161+12=27488长整型整数和无符号整数的表示long型整数:在整型常数后加字母L或l,即为long型整型常数。等。例如:0L、132L无符号的整型:在整型常数后加字母U或u,即为unsigned型整型常数。例如:1U、122U等。无符号的long 型整数:在整型常数后同时加上字母U和L,表明该整型常数

6、是unsignedlong型。例如22UL、35LU等。9浮点型数据浮点型数据是带小数点或带指数的数值数据。浮点型数据应考虑:数值大小(范围)、有效位数 多少(精度)两个方面。浮点型有三种:1.单精度型:用float标记。如:floatx,y;2.双精度型:用double标记。如:doubleresult;3.长双精度型:用longdouble标记。如:longdoublez;10浮点数的模型阶码尾数S*10jN=7.123 * 10171.23数符阶码数值部分712.37.123* 102阶码是整数,阶符和阶码的位数合起来反映浮点数的表数范围;尾数是小数,其位数反映了浮点数的精度表数精度。1

7、1jS1.float型在内存中占用4个字节(32个二进位),约7个十进位有效数字,能表示绝对值约为10-381038。2.double型在内存中占用8个字节(64个二进位),约15个十进位有效数字,能表示绝对值约为10-308 10308。3.longdouble型在内存中占用的字节,有的有效数字位数。但在VC中与double一样,也只占8个字节。12浮点型常量的一般书写格式正负号整数部分.小数部分e指数部分(1)指数部分e(或E)之前必须有数字,且e后面必须为整数。(2)整数部分和小数部分可以任选,但不可同时没有。(3)在浮点型常数后加f标识,表示float;加l(或L)表示longdoub

8、le型,而无后缀符的浮点型常数被认为是double型。合法的浮点型常数:7.、.457、1E5、1.5e-6不正确的浮点型常数:E4、.E5、4.0E1.5、1.5f、1.5L分别表示double型、float型和longdouble型浮点型常数13(4)计算机例如:的浮点数与书写的浮点数会有误差。floatx=111111.111;因x只有约7位有效数字,浮点数111111.111所对应的二进制形式中,超出位数的那些位就被。(5)由于浮点数运算的计算误差,两个数学上完全等价的计算公式,会因计算顺序不同,得到的两个结果不能保证相等。常用判别两浮点数非常相近的表达式绝对误差fabs(x-y)&l

9、t;1e-6相对精度fabs(x-y)<=fabs(x*1e-6)字符型数据 字符型数据用于表示一个字符值。 字符型数据的内部表示是字符的码(二进制形式)。ASCII代 字符型数据的类型符用char来标记。如:charc1,c2; 字符型数据在内部用一个字节(8位二进位)表示,也可当作一个8位的整型数据。15字符型常量书写方法普通字符:用 单 引 号 括 起 一 个 字 符 。如a。特殊字符:用字符或字符列来标记。如: r 、n 、t 。见P.17表21。回车符r:表示对当前行作重叠输出换行符n:使以后的输出从下一行首开始制表符t:使输出位置横向跳至下一个输出区开始列。16表2-1功特殊

10、字符表能标记形式ntvbrfa”dddxhh换行符(打印位置移到下一行首)制表符,横向跳格到下一个输出区首竖向跳格符退格回车(打印位置移到当前行的首) 走纸换页产生响铃声反斜杠字符单引号符双引号符”ddd为1至3个8进制数字,以该值为ASCII码的字符hh为1至2个16进制数字,以该值为ASCII码的字符17注意:打印机与显示屏输出的组织方法稍有不同打印机:仅当一行字符填满或遇换行符时才输出,即整行输出。当输出空格符或制表符时,作跳格处理,不用空格符填充。逐个字符输出,空格符及制表符经过位置都用空格符输出。显示器18字符型常量与字符串常量的区别 字符串常量引号括起来的字符序列。如: ”Chin

11、a” ,形式:注意:字符型常量a与字符串常量”a”不同,如代码:charc=”a”是错误的。 字符型数据可与整型数据混合运算字符型数据以储,与整数的ASCII代码的二进制形式存形式相类似。因此,在程序中,字符型数据和整型数据之间可以通用,字符型数据与整型数据可混合运算19China0【例2.1】字符型数据与整型数据通用。#include<stdio.h>voidmain()charc1,97;c2;/*定义两个字符型变量*/*/*/c1c2=/*a的ASCII码值为97c1+1;/*字符型与整型数据混合运算printf("c1=%c,c2=%cn",c1,c2)

12、;printf("%c'sASCIIcode=%dn",c2,c2);程序输出:c1=a,c2=bb'sASCIIcode=98char 型是有符号类型! char a = 255; printf(“%d”, a);-1 unsigned char a = 255; printf(“%d”, a);25521表2.2数据类型整型无符号整型短整型基本数据类型的方式和取值范围类型符int占用字节数数值范围-2147483648 21474836470 -32768 327674unsigned intshort int42无符号短整型unsigned short

13、 int0 65535-2147483648 21474836470 3.4×10-38 3.4×10381.7×10-308 1.7×103081.7×10-308 1.7×10308-128 1270 2552长整型无符号长整型单精度双精度长双精度字符型无符号字符型long int4unsigned long int4floatdouble long doublecharunsigned char488112.2输入和输出基础在C程序中,数据的输入和输出是分别通过调用格式输入函数scanf()和格式输出函数printf()来实现的

14、。在C+程序中,主要是通过调用输入输出的流对象cin和cout来实现的。#include<iostream.h>在输入操作中,输入字节流从输入设备流向内存在输出操作中,输出字节流从内存流向输出设备23单个字符输出函数putchar(ch)格式:功能:将一个字符输出到标准输出设备(显示器)输出ASCII代码为ch值的字符。说明:1.ch是形参,可以是字符型常量、整型常量(包括控制字符和转义字符)、字符型变量、整型变量等。使用字符输入输出函数, 在程序首必须书写2.#include<stdio.h>24【例2.2】使用putchar函数的示例#include<stdi

15、o.h>voidmain()charch;h;intii;i;/*/*/*ch=putchar(C);putchar(ch); putchar(i); putchar(n);输出字符Chi*/*/*/输出字符输出字符/*输出字符输出字符na*/(141为八进制)*/putchar(141);/*putchar(n);/*输出一个回车符*/运行该程序将输出China25单个字符输入函数格式:getchar()功能: 从标准输入设备上( 通常为键盘) 一个字符的ASCII代码。说明:该函数没有参数,它只能接受一个输入字符。getchar()得到的字符可以赋给一个字符变量或整型变量,也可以不赋

16、给任何变量。1.2.例如:putchar(getchar()26【例2.3】使用putchar函数的示例#include<stdio.h>voidmain()charc;c=getchar();/*/*/*调用getchar(),无参数输出读入的字符 */*/putchar(c); putchar(n);输出一个回车符*/若:程序运行时从键盘键入字符则:程序输出ZZ(其中变量c的值为Z)27#include<stdio.h>voidmain()charc1,c2;c1c2=getchar();getchar();/*/*输入一个字符再输入一个字符*/*/putchar(

17、c1);printf("code1putchar(c2);=%dcode2=%dn",c1,c2);若:程序运行时从键盘键入字符则:程序输出ZZ和回车code1=90code2=10(90和10分别是'Z'和回车的ASCII码值)28格式输出函数格式:printf(格式项,)字符串,输出项,输出功能:将输出项按指定格式排版输出到标准设备上。其中:格式字符串是引号括起来的字符串格式字符串包含三类字符:1.2.普通字符:要求按原样输出的字符。转义字符:要求按转义字符的意义输出。如n 表示输出时回车换行,b表示退格等。格式转换说明:由“%”和格式字符组成,如%d、

18、%f、%c、%s等。3.例:inta=3,b=5;printf("a=%d,b=%d,a+b=%dn",a,b,a+b);结果:a=3,b=5,a+b=829格式转换说明一般形式:%-+#w.ph/l/L输出格式符30输出格式符表格式符意义%d或I整型数据以十进制形式输出printf(“%d”,16);16%o无符号整型数据以八进制形式输出printf(“%o”,16);20%x或X无符号整型数据以十六进制形式输出printf(“%x”,16);10%u无符号整型数据以十进制形式输出printf(“%u”,-1);Notice:输出格式符不影响变量的值!31 %c以单个字符

19、形式输出printf(“%c”,c);c %s以字符串形式输出printf(“%s”,”string”);string32 %f以浮点形式输出实型数据printf(“%f”,1.0000001.0); %e或E以标准指数形式输出实型数据printf(“%e”,1.000000e+0001.0); %g或G以f或e格式输出实型数据printf(“%g”,1.0);133%p指针值转换成一串可显示的字符输出%n已输出的字符个数%输出一个字符%34输出格式修饰符w域宽说明。表示输出数据的字符数。若输出字符数>w,则输出实际字符数;若输出字符数<w,左边补空格(若左边有-,则在右边补空格)

20、。若w有前导0, 则以字符0作填充字符。域宽说明为*,这时域宽大小由下一个输出项的整数值指出。例如:printf("%*c",10,*)则:等同与%10c,即先输出9个空格,再输出一个*。35-左对齐标志。当输出字符个数少于w时,右边补填充符。缺省时右对齐,即左边补填充符。正数也带符号输出。在输出数值前加符号+或-。缺省时,只对负数输出有负号-。+空格在输出数值前加空格。若+和空格同时出现,空格格式修饰说明被忽略。对八进制数前加0;对十六进制数前加0x; 对浮点数总显示小数点。36#对e、f格式,指明小数点之后输出的位数,缺省时,p=6。对s格式,指明最多输出字符串的前p个

21、字符,多余截断。.ph/l/L指明输出项的类型。h与整型格式符一起使用,表示输出项是shortint或unsignedshortint。l与整型格式符一起使用,表示输出项是longint或unsignedlongint。L与实型格式符一起使用,表示输出项是double型。long37格式输出实例(1)printf("%d,%+6d,%-6d,%ldn", 1234, 1234, 1234, 1234567L)(2)printf("%#o,%4o,%6lon", 045, 045, -1);(3)printf("%#x,%4x,%6lXn&quo

22、t;, 045, 045, -1);(4)printf("%d,%4u,%lun",u,u, -1);(5)printf("%c,%-3c,%2cn", 045, a, a);/ 八进制045对应的字符是%(6)printf("%f,%8.3f,%-7.2f,%.7fn", 123.4567f,123.4567f,123.4567f, 123.456789);代码的输出内容:1234,1234 ,1234567045, 45,377777777770x25, 25,FFFFFFFF-1,%,a , a,123.456703, 123.

23、457,123.46 ,123.456789038说明注意实型数据的有效位数。“凡是打印或显示的数字都是准确的”观点是错误的。因为,float型只有7位有效数字,double型有15位有效数字。实际上,因计算过程中的误差积累,通常不能达到所说的有效位数。注意%g格式的特殊性,当它选择整数部分.小数部分形式时,因格式修饰说明.p在e格式中的意义是指明精度,所以p的值是整数部分位数与小数部分位 数之和(不是f格式中的小数位数)。格式修饰说明#表示:无意义的0及小数点照常输出;若无#,则不输出无意义的0及小数点。391.2.3.进一步的例子:floatdoubleg1d=12.34f,g2=0.0f

24、;123.456789,g=123456.789;intcount;/*已输出的字符数*/printf("%g,%g,%#g,%#g%nn",g1,g2,g1,g2,&count);printf("COUNT=%dn",count);printf("%f,%g,%g,%g,%.8g",g1,g1,d,g,g)将输出:12.34,0,12.3400,0.000000COUNT=2312.340000,12.34,123.457,123457,123456.7940格式输入函数格式:scanf( 格式址,)字符串, 储存地址,地功

25、能:从标准设备读入数据,并按格式到对应的数据其中:格式地址中。字符串是引号括起来的字符串格式字符串有:1.空白类字符(空格符、制表符、换行符)输入时忽略,直到遇到下一个非空白类字符。 普通字符(不包括%)输入时,这些字符要求输入。2.3.格式转换说明(以字符%开头)输入的内容按要求进行格式转换。41格式转换说明的形式%*wh/l/L输入格式符*w星号(赋值抑制符),跳过一个输入数据项。整型常数(域宽说明),输入数据项的字符宽度。若实际输入字符的宽度<w,以实际宽度为准。h/l/L长度修饰符,指明输入的是shortint、longint或longdouble型。例如:inti,j,k;sc

26、anf(”%d%d%d”, &i,&j,&k);为变量i,j,k输入数据。其中&i,&j,&k分别表示变量i,j,k的地址。42输入格式符表格式符d o x u c se、f、gp n %意义以十进制形式输入整型数据以八进制形式输入整型数据 以十六进制形式输入整型数据输入无符号整型数据输入字符数据输入字符串 输入实型数据输入指针值已输入的字符个数输入匹配字符串匹配输入字符43说明1.格式字符串之后给出的是变量地址,而不是变量名(除非是指针)。例如:为整型变量n输入数据写成:应写成:scanf("%d",scanf("

27、%d",n)是不正确的&n)2.在格式字符串中,如果有普通字符,则在输入数据时应输入与这些字符相同的字符。例如:正确输入:错误输入:scanf("%d,%d",1,2&i,&j)12443.在用“%c”格式输入字符时,空白类字符和转义字符 都作为有效字符输入。若要取输入的一串空白类字符之后的第一个非空白类字符,可采用格式"%c"。4.在输入数值数据和字符串时,遇以下情况,就认为该数据结束:遇空白类字符:空白符、制表符、换行符。已读入由宽度所指定的字符数:如数字符。"%4d"多至4个对于输入数值数据,下

28、一个字符不能格式。正确的数据455.s格式用来输入字符串,输入的字符序列之后自动添加字符串结束标志符0(因此,存储输入字符序列的字符数组的长度必须比实际最长字符串的字符数多1)。请注意c格式符和s格式符的区别。6.例:charc100,s100;scanf("%4c",c);/*输入4个字符*/输入:abcd结果:scanf("%4s",s);/*忽略前导空格*/输入:abcd结果:46abcd0abcd7.e、f、g格式用来输入实数。如格式转换说明中含有长度修饰说明l,则为double型变量地址;含有长度修饰说明L,则为longdouble型变量地址;否则,为float型变量地址。x; doubley;例如:floatlongdoublez;scanf(“%f %lf匹配字符格式%Lf",&x,&y,&z);8.例如:格式"%xy",当输入字符序列中,只由字符x和y组成的字符序列才能与之匹配。例如:格式"%xy",当输入字符序列中,除字符x和字符y之外的其他字符才能与之匹配。说明:从当前输入字符开始到第一个不能与之匹配的 字符为止。47对应下列输入代码,要让变量i和j值分别为12和234,试指出合理的

温馨提示

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

评论

0/150

提交评论