《C语言程序设计》 课件 蔡玲芳 第二章 数据类型、运算符和表达式_第1页
《C语言程序设计》 课件 蔡玲芳 第二章 数据类型、运算符和表达式_第2页
《C语言程序设计》 课件 蔡玲芳 第二章 数据类型、运算符和表达式_第3页
《C语言程序设计》 课件 蔡玲芳 第二章 数据类型、运算符和表达式_第4页
《C语言程序设计》 课件 蔡玲芳 第二章 数据类型、运算符和表达式_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

整型常量及其表示本讲内容常量整型常量及其表示整型常量及其表示常量在程序运行过程中,其值保持不变的量称为常量。在C语言中,常量是有类型的,常量的类型不需要事先说明,而是由书写方法自动默认的。

如:32,1.75整型常量及其表示常量按表现形态来分类主要有两种:直接常量和符号常量。直接常量按数据类型来分类有4种:整型常量、实型常量、字符常量和字符串常量;整型常量及其表示整型常量整型常量习惯称为常数、整数。可以用十进制、八进制和十六进制来表示。在每一种常量后加小写字母l或大写字母L又得到十进制长整型常量、八进制长整型常量和十六进制长整型常量。整型常量及其表示整型常量的表示类型开头数码举例长整型举例思考十进制整型常量0~932,-764L,65783l八进制整型常量00~7027,036,-015032l,057L049十六进制整型常量0x或0X0~9,a~f,A~F0xa8,0X59,-0X390XFFl,0x64L0xag,2f说明:在VC++6.0环境中,整型常量在内存中占4个字节。感谢观看实型常量及其表示本讲内容01常量02实型常量及其表示常量在程序运行过程中,其值保持不变的量称为常量。在C语言中,常量是有类型的,常量的类型不需要事先说明,而是由书写方法自动默认的。

如:32,1.75常量按数据类型来分类有4种:整型常量、实型常量、字符常量和字符串常量;按表现形态来分类主要有两种:直接常量和符号常量。

本节将介绍实型常量及其表示。实型常量及其表示实型常量也称为实数或者浮点数。在C语言中实型常量有两种表示方法:十进制小数形式(定点形式)和指数形式(浮点形式)2种。(1)十进制小数形式(定点形式):由数码0~9、正负号和小数点(必须有小数点)组成的十进制小数表示的实数。如图所示,例如:3.14、-0.271、0.0、0.6。十进制小数形式(定点形式)数码0~9正负号小数点(必须有)如:3.14,-0.271,0.0,0.,.6说明:在VC++6.0环境中,实型常量在内存中占8个字节。实型常量及其表示由十进制数、字母e或E、阶码三部分组成,一般格式为:aEn,表示为a×10n。其中阶码为-308~308的十进制整数。如图所示(2):指数形式(浮点形式):指数形式(浮点形式)3.14159e2尾数:十进制小数或整数阶码:为-308至308的十进制整数E或e3.14159×102=31415.9E-231415.9×10-2314.1591e03表示十进制数1×103,这里的尾数1不能省。E03,-2e314都是不合法的实型常量,因为E03中缺少尾数;-2e314中阶码超过了阶码所允许的范围。注意:实型常量及其表示感谢观看字符型常量及其表示字符型常量C语言中的字符型常量代表ASCII码字符集里的所有字符,分为显示字符和不显示字符。一个字符常量占1个字节(8位)的内存单元,字符在内存中以ASCII码值的形式存储。字符型常量字符型常量有2种表示方法:(1)用单引号括起来的一个字符。如‘A’,‘a’,‘8’,‘+’,‘@’等。字符常量只能用单引号括起来,不能用双引号或者其它符号。字符常量只能是单个字符,不能包括多个字符。字符常量可以是字符集中的任意字符,但数字被定义成字符型后就不能参加数值运算,如5是数值常量和‘5’是字符常量。(2)转义字符,用单引号括起来的由反斜杠“\”开头的一个字符或一个数字序列。转义字符是一种特殊的字符常量,具有特殊的含义,不同于字符原有的意义,故称为“转义”字符。转义字符的四种形式字符型常量有2种表示方法:1以反斜杠“\”开头后跟一个规定的字母,代表一个控制字符。如:\n。2\\代表反斜杠字符“\”,\'代表单撇号字符“'”等。3以反斜杠开头后跟1~3位八进制数代表ASCII码值为该八进制数的字符(此方法可表示ASCII字符集中的任一字符)。如:‘\101’表示大写字母A。4以反斜杠和小写字母x开头,即以\x开头,后跟1~2位十六进制数代表ASCII码值为该十六进制数的字符(也可表示ASCII字符集中的任一字符)。转义字符及其含义列表字符形式含义ASCII码值(十进制)\a响铃7\b退格(将光标前移一列)8\t水平制表(横向跳格到下一个制表区)9\n回车换行(将光标移到下一行开头)10\v垂直制表(竖向跳格)11\f换页(将光标移到下页开头)12\r回车(将光标移到本行开头)13\"双撇号字符“"”34\'单撇号字符“'”39\?问号字符“?”63\\反斜杠字符“\”92\0空字符0\dddddd为1到3位八进制数,ddd所代表的字符需转换\xhhhh为1到2位十六进制数,hh所代表的字符需转换几点说明注意\n和\r的区别,\n是回车换行,而\r只是回车但不换行。(1)\t的作用是横向跳格,屏幕的每一行被分为10个制表区,每个制表区占8列。(2)\0代表ASCII码值为0的控制字符NUL,即空操作。(3)字符常量在内存中占1个字节,按字符的ASCII码值对应的二进制数形式存放。(4)【示例】'a','\141','\x61'都是合法的字符常量,都代表字符a;'\n','\12'都代表控制字符“回车换行”;而'\29','\x3g'都是不合法的字符常量,因为'\29'中有数码9,'\x3g'中有字符g。感谢观看字符串常量及其表示字符串常量及其表示用双撇号括起来的字符序列称为字符串常量,简称字符串。字符串中含字符的个数称为该字符串的长度。注意:\154和\n都是转义字符,都只代表一个字符。字符串长度"Howdoyoudo"13"A"1“abc”3"He\154lo.\n"7字符串的存储长度C语言中,字符串的存储是按字符串中每个字符的存储形式存储,每个字符占一个字节,并在字符串的结尾系统自动加上一个字符串结束标志“\0”,用以表明字符串的结束。所以,字符串的存储长度为字符串长度加1。思考:‘A’与“A”一样吗?比如:“abc”,长度为3,存储长度为4A\0“A”字符串常量例:

【例1】“helloworld”在内存中占多少个字节?hello

world/0字符串常量

字符串常量和字符常量是不同类型的常量。字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以是多个字符。字符常量占一个字节的内存空间,字符串常量占的内存字节数等于字符串长度加1,增加的一个字节中存放字符串结束标志“\0”。如字符常量‘a’和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。感谢观看符号常量及其表示符号常量在C语言中,使用标识符代表的常量,称为符号常量。符号常量是用“宏定义”方式表示某个常量。符号常量的定义方法:在程序的开头,使用如下的编译预处理命令。格式:#define符号常量常量例如:#definePI3.14159符号常量的使用:程序中经常出现的常量,可以考虑定义成符号常量。优点:1.能减轻编程的工作量。2.修改起来比较方便。符号常量的使用符号常量名通常用大写字母来表示,以区别程序中的变量。此处PI的值用3.14159代替程序代码:求圆面积(1)#include<stdio.h>(2)#definePI3.14159(3)doubleArea(doubler);

(4)intmain()(5){ (6)doubleRadii,s;(7)printf("请输入圆的半径:");(8)

scanf("%lf",&Radii);(9)

s=Area(Radii);

(10)

printf("半径为%lf的圆的面积是%lf\n",Radii,s);(11)return0;(12)}(13)doubleArea(doubler)(14){(15)

doubles;(16)

s=PI*r*r;(17)

return

s;(18)}符号常量的使用

程序中的第(1)行是一条编译预处理命令,称为文件包含,由于程序中用到的函数printf和scanf的有关信息都在头文件stdio.h中,所以,通过该命令使头文件stdio.h

中的信息包含到程序中来,才能够正确调用这两个函数。符号常量的使用

程序中的第(2)行用#define定义了一个符号常量PI,它代表常量3.14159,经编译预处理后,该文件中所有出现PI的位置(第(16)行)都用3.14159来代替。由此可以看出,使用符号常量可以减轻程序输入的工作量;符号常量的使用

如果想把程序中的PI用3.14来代替,只须把编译预处理命令#definePI3.14159修改为#definePI3.14,而不必对整个程序进行修改。所以,使用符号常量便于对程序的修改,给程序设计带来了很大的方便。符号常量的使用程序代码:求圆面积(1)#include<stdio.h>(2)#definePI3.14159(3)doubleArea(doubler);

(4)intmain()(5){ (6)doubleRadii,s;(7)printf("请输入圆的半径:");(8)

scanf("%lf",&Radii);(9)

s=Area(Radii);

(10)

printf("半径为%lf的圆的面积是%lf\n",Radii,s);(11)return0;(12)}(13)doubleArea(doubler)(14){(15)

doubles;(16)

s=PI*r*r;(17)

return

s;(18)}符号常量名通常用大写字母来表示,以区别程序中的变量。此处PI的值用3.14159代替程序中经常出现的常量,可以考虑定义成符号常量。1.能减轻编程的工作量。优点2.修改起来比较方便。感谢观看实型变量及其表示实型变量实型变量的类型主要有两种,单精度实型和双精度实型,它们的类型标识符分别是:float(单精度实型)double(双精度实型)注意对于实型变量都是有符号的。doublex,y;定义了两个双精度实型变量x,y实型数据的存储长度和取值范围类型存储长度取值范围有效数字float4字节±(3.4×10-38~3.4×1038)6~7位double8字节±(1.7×10-308~1.7×10308)15~16位1.单精度型单精度型变量的类型声明符为float,在TurboC中,单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38-3.4E+38,只能提供7位有效数字。floatx,y;/*x、y为单精度实型变量*/也可在声明变量为实型的同时,给出变量的初值。floatx=3.2,y=5.3;/*x、y为单精度实型变量,且有初值*/解:

单精度变量定义:2.双精度型双精度型变量的类型声明符为double,在TurboC中,双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308—1.7E+308,可提供16位有效数字。实型变量声明的格式和书写规则与整型相同。双精度变量定义:doublea,b;/*a、b为双精度实型变量*/也可在声明变量为实型的同时,给出变量的初值。doublea=0.2,b=1.8;/*a、b为双精度实型变量且有初值*/说明:实型常量部分单精度和双精度。一个实型常量可以赋给一个float和double型变量,根据变量的类型截取实型常量中相应的有效位数字。下面举例说明实型变量对有效位数字的限制。例题[例]单精度实型变量对有效位数字的限制。程序代码如下:Main(){floata;a=0.123456789printf(“a=%f”,a);}运行结果:a=0.1234567例题[例]演示float和double的区别。程序代码如下:Main()floata;doubleb;a=3333.333333333;b=3333.333333333;Printf(“a=%f\nb=%f\n”,a,b);/*用格式化输出函数函数输出a和b的值*/}说明:本例中,由于a是单精度浮点型,有效位数只有7位。而整数已占4位,故小数三位之后均为无效数字。b是双精度型,有效位为16位。但C规定小数后最多保留6位,其余部分四舍五入。实型变量#include“stdio.h”main(){floatf=12.123456789;/*定义float类型的变量f*/doubled=12.123456789;/定义double类型的变量d*/doubled1=-3.168E-6;/*定义double类型的变量d1*/doubled2=3.23e+3;/*定义double类型的变量d2*/printf(“f=%f,d=%f,%f\n”,f,d,ld);/*输出f,d*/printf(“d1=%f,d2=%f\n”,d1,d2);/*输出d1,d2*/}运行结果:f=12.123457,d=12.123457d1=-0.000003,d2=3230.000000感谢观看字符型变量字符型变量(有符号)字符型:[signed]char

无符号字符型:unsignedcharchara,b;unsignedcharc;定义a,b为(有符号)字符型变量;定义c为无符号字符型变量。注意:对于字符型变量只能存放一个字符,而不能存放字符串。字符型数据的存储字符型数据在内存中占1个字节,以其相应的ASCII码值的8位二进制数(补码)形式存储,每一个数值对应一个字符。‘a’的ASCII码值为97,97对应的八位二进制数为01100001,所以,字符‘a’在内存中存储形式如下图。举例:01100001类型数据取值范围char-128~127unsignedchar0~255字符型和整型字符型数据可以按整型数据处理,可以作为整数参加运算,按整数形式输出;在ASCII码值范围内的整数可以按字符型数据来处理,按字符形式输出,即字符型数据与整型数据具有通用性。程序代码(1)#include<stdio.h>(2)intmain()(3){ (4)charx;(5)inty;(6)x=65;(7)y='B';(8)printf("x=%c\ny=%c\n",x,y);(9)printf("x=%d\ny=%d\n",x,y);(10)return0;(11)}示例该程序通过第(15)行的操作,能将一个大写字母转换为小写字母。即字符型数据可以看成是整型数据,整型数据可以看成是字符型数据。说明程序代码:将大写字母转换为小写字母(1)#include<stdio.h>(2)charToLower(charch);(3)intmain()(4){ (5)charch,low;(6)printf("请输入一个大写字母:");(7)scanf("%c",&ch);(8)

low=ToLower(ch);(9)

printf("大写字母%c转换为小写字母是%c\n",ch,low);(10)return0;(11)}(12)charToLower(charch)(13){(14)chartlow;(15)

tlow=ch+32;(16)

returntlow;(17)}感谢观看数据的输出数据的输出

把数据从计算机内部送到计算机外部设备的操作称为输出。我们讲的输出设备主要指的是键盘和显示器。C语言的输出操作是通过调用函数来实现的,在C标准函数库中提供了一些输出函数。

在使用C语言的库函数时,由于库函数的有关信息都在相关的头文件中,所以在使用前应在程序的开头使用相应的编译预处理命令,即在使用前必须在程序的前面使用命令:#include

<stdio.h>

或#include"stdio.h"。格式化输出函数2.3.1格式化输出函数将输出列表中的各个表达式的值,按格式控制字符串中对应的格式,输出到标准输入/输出设备上。1、

printf函数的功能格式化输出函数printf("格式控制字符串",输出列表);例如:printf("%d,%c,%f",a,b,c);通过上面的一般形式,可以看出printf函数有两个参数(用逗号分隔),分别是格式控制字符串(注意该参数必须要用双引号括起来)和输出列表。2、

printf函数的调用格式格式化输出函数#include<stdio.h>

voidmain()

{printf("thisisacprogram"); } 其在显示器上的输出结果为:thisisacprogram例:格式化输出函数#include<stdio.h>voidmain(){

printf("*\n**\n***");}编译运行该程序后的输出为:(注意在该例中“\n”为换行转义字符)

******例:格式化输出函数通过此例可以看出printf函数的第二个参数(输出列表)不是必需的,那么到底什么时候该有第二个参数呢?printf函数输出时会原样输出格式控制字符串中的非格式字符内容,如格式控制字符串中有格式字符,则用输出列表的相应值代替该格式字符,上面的例子就是原样输出了格式控制字符串,因为其中并没有格式字符,所以也没有输出列表。在有格式字符的情况下才要有输出列表,那么什么是格式字符呢?格式化输出函数编程计算半径为2.1圆的面积。 #include<stdio.h> voidmain() {floatr,s; r=2.1;

s=3.14*r*r;}

例:编译运行该程序都没有问题,但是运行后我们无法查看结果(面积是多少?),原因是所求的面积是保存在变量s中的,但是程序并没有输出s的值,所以无法看到结果。格式化输出函数作如下修改: #include<stdio.h> voidmain() {floatr,s; r=2.1; s=3.14*r*r; printf("area=s"); } 改:为程序添加了一条输出语句,再次运行该程序发现有输出结果,但输出的是“area=s”,而并不是具体的数值,也就是它输出了变量s的变量名而不是变量值。原因还是上一小节所说的printf函数会原样输出格式控制字符串的非格式字符内容,此例的printf函数中的s是一个普通字符而非格式字符。那么要输出s的值该怎么做呢?格式化输出函数对程序再作如下修改: #include

<stdio.h> void

main

()

{ float

r,s;

r=2.1; s=3.14*r*r;

printf("area=%f",s)

; }改:运行程序后的输出结果是:area=13.847399。此时可以看出上例中的“%f”就是一种格式字符,输出时用输出列表中的相应值代替它(该例的输出列表相应值就是变量s的值)。格式化输出函数格式字符由“%”开始(如上例的“%f”),后跟类型控制符。不同类型的数据输出要使用不同的格式字符。(1)d格式符:用来输出十进制整数。3、

格式字符的形式和分类格式化输出函数例: #include<stdio.h> voidmain() {

inta=3;

printf("a=%d",a); }

编译运行程序后输出结果为:a=3格式化输出函数格式字符说

明d,i以带符号的十进制形式输出整数(正数不输出符号)u用来输出无符号的十进制数o以八进制无符号形式输出整数(不输出前导符0)X,x以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制的a-f时以小写形式输出,用X时,则以大写形式输出c输出单个字符s输出字符串f以小数形式输出单、双精度数,隐含6位小数。用e时指数以“e”表示(如1.2e+02),用E时指数以E表示(如1.2E+02)g,G选用%f和%e格式中输出宽度较短的一种格式,不输出无意义的0;用G时,若以指数形式输出,则指数以大写表示E,e以指数形式输出实数,用E则输出时,指数用E表示表printf格式字符格式化输出函数字符说

明l用于长整型,可加在格式符d,o,x,u之前m(代表一个正整数)数据最小宽度.n(代表一个正整数)对实数,表示输出n位小数;对字符串表示截取的字符个数-输出的数字或字符在域内向左靠表printf的修饰符字符数据操作之字符输出函数字符输出函数1.putchar调用格式:putchar(c);2.putchar函数的功能说明:(1)函数参数c的范围(2)函数的功能【示例】

chara,b,c,d; a='g';b='o';c=111;d='d';

putchar(a);putchar(b);putchar(c);putchar(d);

程序段的运行结果为:good注意:putchar

函数只能用于单个字符的输出,并且一次只能输出一个字符。感谢观看数据操作之格式化输入函数数据的输入

从计算机外部设备将数据送到计算机内部的操作称为输入。C语言的输入操作是通过调用函数来实现的,在C标准函数库中提供了一些输入函数。

在使用C语言的库函数时,由于库函数的有关信息都在相关的头文件中,所以在使用前,应在程序的开头使用相应的编译预处理命令,即在使用前必须在程序的前面使用命令:#include

<stdio.h>

或#include"stdio.h"。格式化输入函数scanf函数称为格式输入函数,即按用户指定的格式从键盘将数据输入到指定的变量之中。scanf(“格式控制字符串”,地址表列);1、

scanf函数调用格式:格式化输入函数scanf("%d,%d",&a,&b);其中,格式控制字符串的作用和printf函数的相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如:&a,&b,分别表示变量a和变量b的地址。符号“&”的作用是取得变量在内存中的地址,如:例:图表示变量a所在内存单元的地址为102,其存放的值为28;变量b所在内存单元的地址为106,其存放的值为29。那么&a的值是多少呢?不是28而是102。scanf函数用取地址运算符“&”的作用就是将从键盘输人的数据存到对应地址的内存单元中。格式化输入函数编程实现输入一个圆的半径,输出其面积。例:#include<stdio.h> main() { floatr,s; scanf("%f",&r); s=3.14*r*r; printf("r=%3.1f,s=%5.2f",r,s); } 若输人的半径为3,则输出是:r=3.0,s=28.26。格式化输入函数例:inta,b;scanf("%d%*d%d",&a,&b);printf("%d,%d\n",a,b);如果输入数据为:12345678↙输出结果为:123,678。格式化输入函数1系统如何分割数据流中的数据送给相应的变量呢?有以下4种方法。①根据格式说明规定的数据类型从数据流中取得数据,即当数据流的数据类型与格式说明的类型不一致时,就认为这一数据项结束。例:inta;charch;floatx;scanf("%d%c%f",&a,&ch,&x);如果输入流为:123%456.78↙如果输入流为123%456.78↙,

系统将输入流送入缓冲区,然后按格式%d为变量a读入数据,当读到数据%时发现类型不符,于是把123存入变量a的内存单元,再把字符%存入变量ch的内存单元,最后把456.78存入变量x的内存单元。②根据格式说明中指定的域宽从数据流中分割数据。格式化输入函数例:chara;intb;scanf("%3c%3d",&a,&b);printf("%c,%d\n",a,b);如果输入流为:ab12345↙,则输出结果为:a,234。③通过在格式字符串指定分割符来分割数据,分割符可以是一切非格式字符。格式化输入函数例:inta,b;printf("a=,b=:");scanf("a=%d,b=%d",&a,&b);在输入数据时应输入:a=456,b=789↙。④在格式字符串中没有指定分割符时,常使用空格、Tab键、回车键来分割数据。格式化输入函数例:intk1,k2;scanf("%d%d",&k1,&k2);输入流可以是1020↙,也可以是10↙20↙,还可以是10(按Tab键)20↙。格式化输入函数表scanf格式字符格式字符说

明d,i用来输入有符号的十进制数u用来输入无符号的十进制数o用来输入无符号的八进制数X

温馨提示

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

评论

0/150

提交评论