




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上一节我们学到了各种类型常量、转义字符、ASCII码5.05.0f'a'""""保存不变量的两种方法:#defineconst变量先声明后使用标识符的命名规则variableNameCONST_VARIABLE_NAME11/21/20221上一节我们学到了各种类型常量、转义字符、ASCII码11/2内容3.1顺序程序设计举例3.2数据的表现形式及其运算3.3C语句3.4数据的输入输出11/21/20222内容3.1顺序程序设计举例11/21/20222内容3.1顺序程序设计举例3.2数据的表现形式及其运算3.2.1常量和变量3.2.2数据类型3.2.3整型数据3.2.4字符型数据3.2.5浮点型数据3.2.6怎样确定常量的类型3.2.7运算符和表达式3.3C语句3.4数据的输入输出11/21/20223内容3.1顺序程序设计举例11/21/202233.2.2数据类型不同的类型分配不同的长度和存储形式。11/21/202243.2.2数据类型不同的类型分配不同的长度和存储形式。11基本数据类型(DataType)int整数,在目前绝大多数机器上占4个字节TC2中是2个字节所占字节数取决于机器字长float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数11/21/20225基本数据类型(DataType)int11/21/2022sizeof.c#include<stdio.h>#include<stdlib.h>intmain(void){printf("类型\t\t大小(bytes)\n");printf("short\t\t%d\n",sizeof(short));printf("int\t\t%d\n",sizeof(int));printf("long\t\t%d\n",sizeof(long));printf("float\t\t%d\n",sizeof(float));printf("double\t\t%d\n",sizeof(double));printf("longdouble\t%d\n",sizeof(longdouble));printf("char\t\t%d\n",sizeof(char));
return0;}11/21/20226sizeof.c#include<stdio.h>11/2数据类型修饰符shortshort
int,短整数,一般2个字节长。通常简写为shortlonglong
int,长整数,一般是4个字节长。通常简写为longlong
double,高精度浮点数,VC6占8个字节。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)11/21/20227数据类型修饰符short11/21/202273.2.3整型数据以补码形式存储正整数:本身负整数:对应正整数按位取反+1Q:下面的语句输出?unsignedshortprice=-1;printf("%d\n",price);A:65535why?-1的补码:1111111111111111最左一位不是符号11/21/202283.2.3整型数据以补码形式存储11/21/20228整型类型的取值范围---取决于字节数limits.h11/21/20229整型类型的取值范围---取决于字节数limits.h11/215位215-1=327672个字节有符号整数的最小最大值最大值0111111111111111=215-1=32767
最小值1000000000000000=-3276811/21/20221015位215-1=327672个字节有符号整数的最小最大超出取值范围会怎样?VC6中int的范围是-2147483648~2147483647-231~231-1如果我们给它一个小于-2147483648或者大于2147483647的数会如何呢?小蛇能吞下大象吗?11/21/202211超出取值范围会怎样?VC6中int的范围是-21474836整数溢出/*toobig.c-exceedsmaximumintsizeonoursystem*/#include<stdio.h>intmain(void){inti=2147483647;//int最大值unsignedintj=4294967295;//unsignedint最大值printf("%d%d%d\n",i,i+1,i+2);printf("%u%u%u\n",j,j+1,j+2);return0;}输出:2147483647-2147483648-2147483647
429496729501%u:以无符号整数形式输出11/21/202212整数溢出/*toobig.c-exceedsmaximu溢出(Overflow)造成的危害一台安装了Windows95/98的机器,如果连续运行49.7天没有重新启动,可能死机原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsigned
long类型的变量unsigned
long的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805……当49.7天的时候,此计数器会溢出,引起死机11/21/202213溢出(Overflow)造成的危害一台安装了Windows3.2.4字符型数据Q:输出结果?charc='?';printf("%d%c\n",c,c);A:63?Q:输出结果?charc=255;
printf("%d\n",c);A:-1why默认signed如改为unsignedcharc=255;输出25511/21/2022143.2.4字符型数据Q:输出结果?11/21/2022143.2.5浮点型数据double范围大、精度高、速度稍快VC6TC211/21/2022153.2.5浮点型数据double范围大、精度高、速度稍快V浮点类型的取值范围float.h11/21/202216浮点类型的取值范围float.h11/21/202216浮点数的存储11/21/202217浮点数的存储11/21/202217IEEE标准11/21/202218IEEE标准11/21/202218浮点数的陷阱#include<stdio.h>intmain(){
floatf;
f=123.456f;
if(f==123.456)
printf("fisequalto123.456indeed.");
else
printf("Infact,fisequalto%f\n",f); return0;}float.cQ:运行结果会是什么?11/21/202219浮点数的陷阱#include<stdio.h>float.浮点数的陷阱浮点数往往只是实际值的近似float的精度低,较易发生精度带来的相等性判断问题double精度高,这个问题发生的概率小一些,但也存在解决办法:
if(fabs(f–123.456)<1E-5)
……根据精度要求设定11/21/202220浮点数的陷阱浮点数往往只是实际值的近似根据精度要求设定11/3.2.6怎样确定常量的类型编译器把实型常量默认为doubleconstfloatPI=3.14159f;longdoubled=1.23L;实型常量后加f或F,表示double实型常量后加L,表示longdouble11/21/2022213.2.6怎样确定常量的类型编译器把实型常量默认为doub3.2.7运算符和表达式11/21/2022223.2.7运算符和表达式11/21/202222算术运算符-负号:-expr1,returnsthenegationofexpr1.+,-,*,/先算乘除,后算加减,先算左,后算右printf("%d\n",
1+2*3);printf("%d\n",
1
+
2
+
3/4);printf("%d\n",
(1+2+3)/4);VC6中商向零靠拢-5/3=-1%求余运算,运算对象必须为整数11/21/202223算术运算符-11/21/202223自增和自减运算符i++,i--,++i,--i++让参与运算的变量加1,--让参与运算的变量减1运算符为后缀,先取i的值,然后加/减1,即先运算,后加减运算符为前缀,先加/减1,然后取i的值,即先加减,后运算i的初值为3,分析下面的赋值语句j=++i;j=i++;i=3;....11/21/202224自增和自减运算符i++,i--,++i,--i11/21/2++、--的使用规则在程序设计中,效率和易读性是一对常见矛盾。有时简洁的程序可能降低程序的可读性和可理解性。而可读性差的程序容易隐藏错误且难于纠正,不易维护,降低了程序的可靠性。鉴于“软件危机”的教训,人们在程序设计时遵守的基本规范是:可靠性第一,效率第二。为了保证可靠性,程序必须清晰易读。因此,在一行语句中,使用自增或者自减运算的变量尽量只有1个不仅可读性差,而且因为编译器实现的方法不同,容易导致不同编译器运行效果不一样,贻害无穷11/21/202225++、--的使用规则在程序设计中,效率和易读性是一对常见矛盾类型转换在进行赋值操作时,会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分(非四舍五入)反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用11/21/202226类型转换在进行赋值操作时,会发生类型转换11/21/2022自动类型转换两个同种数据类型的运算结果,还是该类型两个不同种数据类型的运算结果,是两种类型中取值范围更大的那种long
double>(double>float>long>int>short>char)只要两者中有一个是unsigned,就都转为unsigned再计算把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,发出警告(好的编译器会给出)11/21/202227自动类型转换两个同种数据类型的运算结果,还是该类型11/21自动类型转换举例inti=3;floatf=2.5f;doubled=7.5;分析10+'a'+i*f-d/3编译时,从左至右扫描。1.先计算10+'a'(97),结果为1072.先计算优先级高的i*f,将i和f转换为double型,结果为7.5,double型3.......12+'A'//12+65('A'的ASCII码)11/21/202228自动类型转换举例inti=3;11/21/202228例3.3给定一个大写字母,要求用小写字母输出。//3_3.c--给定一个大写字母,要求用小写字母输出#include<stdio.h>intmain(){charcUpper,cLower;cUpper
=
'A';cLower=cUpper+32;printf("%c\n",cLower);printf("%d\n",cLower);return0;}11/21/202229例3.3给定一个大写字母,要求用小写字母输出。//3_3类型强转可以通过“(类型)表达式”的方式把表达式的值转为任意类型(double)a(将a转换成double类型)(int)(x
+
y)(将x+y的值转换成int型)(float)(5
%
3)(将5%3的值转换成float型)注意强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将11/21/202230类型强转可以通过“(类型)表达式”的方式把表达式的值转为任意这一节我们学到了数据类型char,short,int,long,float,double,long
doublesigned,unsigned算术运算、自增/自减运算类型转换11/21/202231这一节我们学到了数据类型11/21/202231找别扭inta
=
1;
if(a==0)
printf("OK");inta
=
0;
if(a==0)
printf("OK");inta
=
1;
if(a=0)
printf("OK");inta
=
0;
if(a=0)
printf("OK");11/21/202232找别扭inta=1;
if(a==0)
pri==和=inta;
a=0;
a==1;inta;
a==0;
a=1;一定要分清==和=下面用法能起点小作用:inta=0;
if(0==a)
printf("OK");inta=0;
if(0=a)
printf("OK");编译出错11/21/202233==和=inta;
a=0;
a==1;int作业P55用户从键盘输入一个小写字母,要求用对应的大写字母输出。P83习题311/21/202234作业P55用户从键盘输入一个小写字母,要求用对应的大写字母本周日上午8:30实验211/21/202235本周日上午8:30实验211/21/202235上一节我们学到了各种类型常量、转义字符、ASCII码5.05.0f'a'""""保存不变量的两种方法:#defineconst变量先声明后使用标识符的命名规则variableNameCONST_VARIABLE_NAME11/21/202236上一节我们学到了各种类型常量、转义字符、ASCII码11/2内容3.1顺序程序设计举例3.2数据的表现形式及其运算3.3C语句3.4数据的输入输出11/21/202237内容3.1顺序程序设计举例11/21/20222内容3.1顺序程序设计举例3.2数据的表现形式及其运算3.2.1常量和变量3.2.2数据类型3.2.3整型数据3.2.4字符型数据3.2.5浮点型数据3.2.6怎样确定常量的类型3.2.7运算符和表达式3.3C语句3.4数据的输入输出11/21/202238内容3.1顺序程序设计举例11/21/202233.2.2数据类型不同的类型分配不同的长度和存储形式。11/21/2022393.2.2数据类型不同的类型分配不同的长度和存储形式。11基本数据类型(DataType)int整数,在目前绝大多数机器上占4个字节TC2中是2个字节所占字节数取决于机器字长float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数11/21/202240基本数据类型(DataType)int11/21/2022sizeof.c#include<stdio.h>#include<stdlib.h>intmain(void){printf("类型\t\t大小(bytes)\n");printf("short\t\t%d\n",sizeof(short));printf("int\t\t%d\n",sizeof(int));printf("long\t\t%d\n",sizeof(long));printf("float\t\t%d\n",sizeof(float));printf("double\t\t%d\n",sizeof(double));printf("longdouble\t%d\n",sizeof(longdouble));printf("char\t\t%d\n",sizeof(char));
return0;}11/21/202241sizeof.c#include<stdio.h>11/2数据类型修饰符shortshort
int,短整数,一般2个字节长。通常简写为shortlonglong
int,长整数,一般是4个字节长。通常简写为longlong
double,高精度浮点数,VC6占8个字节。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)11/21/202242数据类型修饰符short11/21/202273.2.3整型数据以补码形式存储正整数:本身负整数:对应正整数按位取反+1Q:下面的语句输出?unsignedshortprice=-1;printf("%d\n",price);A:65535why?-1的补码:1111111111111111最左一位不是符号11/21/2022433.2.3整型数据以补码形式存储11/21/20228整型类型的取值范围---取决于字节数limits.h11/21/202244整型类型的取值范围---取决于字节数limits.h11/215位215-1=327672个字节有符号整数的最小最大值最大值0111111111111111=215-1=32767
最小值1000000000000000=-3276811/21/20224515位215-1=327672个字节有符号整数的最小最大超出取值范围会怎样?VC6中int的范围是-2147483648~2147483647-231~231-1如果我们给它一个小于-2147483648或者大于2147483647的数会如何呢?小蛇能吞下大象吗?11/21/202246超出取值范围会怎样?VC6中int的范围是-21474836整数溢出/*toobig.c-exceedsmaximumintsizeonoursystem*/#include<stdio.h>intmain(void){inti=2147483647;//int最大值unsignedintj=4294967295;//unsignedint最大值printf("%d%d%d\n",i,i+1,i+2);printf("%u%u%u\n",j,j+1,j+2);return0;}输出:2147483647-2147483648-2147483647
429496729501%u:以无符号整数形式输出11/21/202247整数溢出/*toobig.c-exceedsmaximu溢出(Overflow)造成的危害一台安装了Windows95/98的机器,如果连续运行49.7天没有重新启动,可能死机原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsigned
long类型的变量unsigned
long的最大值是:4294967295一天有24*60*60*1000=86400000毫秒4294967295/86400000=49.71026961805……当49.7天的时候,此计数器会溢出,引起死机11/21/202248溢出(Overflow)造成的危害一台安装了Windows3.2.4字符型数据Q:输出结果?charc='?';printf("%d%c\n",c,c);A:63?Q:输出结果?charc=255;
printf("%d\n",c);A:-1why默认signed如改为unsignedcharc=255;输出25511/21/2022493.2.4字符型数据Q:输出结果?11/21/2022143.2.5浮点型数据double范围大、精度高、速度稍快VC6TC211/21/2022503.2.5浮点型数据double范围大、精度高、速度稍快V浮点类型的取值范围float.h11/21/202251浮点类型的取值范围float.h11/21/202216浮点数的存储11/21/202252浮点数的存储11/21/202217IEEE标准11/21/202253IEEE标准11/21/202218浮点数的陷阱#include<stdio.h>intmain(){
floatf;
f=123.456f;
if(f==123.456)
printf("fisequalto123.456indeed.");
else
printf("Infact,fisequalto%f\n",f); return0;}float.cQ:运行结果会是什么?11/21/202254浮点数的陷阱#include<stdio.h>float.浮点数的陷阱浮点数往往只是实际值的近似float的精度低,较易发生精度带来的相等性判断问题double精度高,这个问题发生的概率小一些,但也存在解决办法:
if(fabs(f–123.456)<1E-5)
……根据精度要求设定11/21/202255浮点数的陷阱浮点数往往只是实际值的近似根据精度要求设定11/3.2.6怎样确定常量的类型编译器把实型常量默认为doubleconstfloatPI=3.14159f;longdoubled=1.23L;实型常量后加f或F,表示double实型常量后加L,表示longdouble11/21/2022563.2.6怎样确定常量的类型编译器把实型常量默认为doub3.2.7运算符和表达式11/21/2022573.2.7运算符和表达式11/21/202222算术运算符-负号:-expr1,returnsthenegationofexpr1.+,-,*,/先算乘除,后算加减,先算左,后算右printf("%d\n",
1+2*3);printf("%d\n",
1
+
2
+
3/4);printf("%d\n",
(1+2+3)/4);VC6中商向零靠拢-5/3=-1%求余运算,运算对象必须为整数11/21/202258算术运算符-11/21/202223自增和自减运算符i++,i--,++i,--i++让参与运算的变量加1,--让参与运算的变量减1运算符为后缀,先取i的值,然后加/减1,即先运算,后加减运算符为前缀,先加/减1,然后取i的值,即先加减,后运算i的初值为3,分析下面的赋值语句j=++i;j=i++;i=3;....11/21/202259自增和自减运算符i++,i--,++i,--i11/21/2++、--的使用规则在程序设计中,效率和易读性是一对常见矛盾。有时简洁的程序可能降低程序的可读性和可理解性。而可读性差的程序容易隐藏错误且难于纠正,不易维护,降低了程序的可靠性。鉴于“软件危机”的教训,人们在程序设计时遵守的基本规范是:可靠性第一,效率第二。为了保证可靠性,程序必须清晰易读。因此,在一行语句中,使用自增或者自减运算的变量尽量只有1个不仅可读性差,而且因为编译器实现的方法不同,容易导致不同编译器运行效果不一样,贻害无穷11/21/202260++、--的使用规则在程序设计中,效率和易读性是一对常见矛盾类型转换在进行赋值操作时,会发生类型转换将取值范围小的类型转为取值范围大的类型是安全的反之是不安全的如果大类型的值在小类型能容纳的范围之内,则平安无事但是,浮点数转为整数,会丢失小数部分(非四舍五入)反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用11/21/202261类型转换在进行赋值操作时,会发生类型转换11/21/2022自动类型转换两个同种数据类型的运算结果,还是该类型两个不同种数据类型的运算结果,是两种类型中取值范围更大的那种long
double>(double>float>long>int>short>char)只要两者中有一个是unsigned,就都转为unsigned再计算把数据赋值给另外一种类型变量也会发生自动类型转换从小到大,顺利转换从大到小,发出警告(好的编译器会给出)11/21/202262自动类型转换两个同种数据类型的运算结果,还是该类型11/21自动类型转换举例inti=3;floatf=2.5f;doubled=7.5;分析10+'a'+i*f-d/3编译时,从左至右扫描。1.先计算10+'a'(97),结果为1072.先计算优先级高的i*f,将i和f转换为double型,结果为7.5,double型3...
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 20XX春节习俗介绍模板
- 2025年度新员工劳动合同电子样本示例
- 瑜伽知到课后答案智慧树章节测试答案2025年春四川卫生康复职业学院
- 房屋拆除转让合同范本
- 2025年土地长期租赁合同
- 2024年伊春市铁力市招聘城市社区工作者真题
- 2025财务咨询委托合同样本
- 2024年山东省科创集团有限公司权属企业招聘真题
- 2024年明光市市属事业单位考试真题
- 2024年酒泉市市直事业单位选调真题
- DB3311T 132-2020 住宅小区物业服务规范
- (中职)门店运营实务教学ppt课件(完整版)
- 2022更新国家开放大学电大《计算机应用基础(专)》终结性考试大作业答案任务一
- 3.无人机在风电系统应用解决方案
- 广东省异地就医备案登记表
- 人教鄂教版四年级下册科学全册教案
- 幼儿绘本故事:小鲁的池塘
- SIEMENS-S120变频器硬件、软件培训(高端培训)课件
- CA6132普通车床使用说明书
- 教练技术红黑游戏脱盔甲
- 混凝土拆模令
评论
0/150
提交评论