第三章 数据类型、运算符与表达式_第1页
第三章 数据类型、运算符与表达式_第2页
第三章 数据类型、运算符与表达式_第3页
第三章 数据类型、运算符与表达式_第4页
第三章 数据类型、运算符与表达式_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计第三章数据类型、运算符与表达式1C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union3.1C语言的数据类型数据类型决定了数据在内存中占用的存储空间大小,从而确定了数据的表示范围。23.2常量与变量一、标识符用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。1.C标识符的命名规则(1)标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,(2)必须是字母或下划线开头。(3)字符之间必须并排书写,不能出现上下标(4)不能使用C语言的保留字符

以下标识符是合法的:

a,x,x3,BOOK_1,sum5

以下标识符是非法的:3ss*T以数字开头出现非法字符*32.C语言的标识符大致分为三类:

1)关键字:32个关键字都有固定的含义,例如用来说明数据类型的标识符int、char,以及控制程序流程的if,while等。不能再作为变量名或函数名。

2)预定义标识符:这类标识符在C语言中也有特定含义,例如C提供的库函数的名字(printf,scanf等)和预编译处理命令(define,include等)。虽然C语言语法允许用户把这类标识符另作他用,但为了维持这类标识符的原有含义和避免不必要的麻烦,建议不要将预定义标识符改作其他用途。

3)用户标识符:由用户根据需求定义的标识符,一般用来给变量、函数等数据对象命名。除了要遵循命名规则外,还应做到“见名知意”。为了提高程序的可读性和可移植性,建议自定义的标识符长度最好不要超过8个字符。4二、常量:在程序运行时,其值不能被改变的量叫常量。根据类型划分,常量有整型常量、浮点型常量、字符常量和字符串常量。另外,常量还可以分为直接常量和符号常量。

1.直接常量:其类型一般从其字面形式即可判别,又称为字面常量。例如100、-123为整型常量,3.14、0.56为浮点型常量,’a’、’z’是字符常量,”hello”、”a”是字符串常量。2.符号常量:用一个标识符代表一个常量。

C语言中使用宏定义命令#define来定义:格式:#define标识符常量

例如:#definePI3.1415926

此处定义了符号常量PI,代表圆周率π。此后在程序中出现的PI都代表浮点型常量3.1415926。

5例1从键盘输入半径,求圆的面积。

#include<stdio.h>#definePI3.1415926main(){ floatradius,area;

scanf("%f",&radius); area=PI*radius*radius;

printf("area=%f\n",area);}运行结果:

2↙area=12.566370说明:1)符号常量名常常用大写字母、变量名用小写字母;2)当常量值需要调整时,能够在整个程序段内做到“一改全改”。但符号常量不能在其作用域范围内重新赋值。6三、变量:在程序运行时,其值能被改变的量叫变量。

C语言是一种强制定义语言,程序中的每一个变量,需要先定义后使用。变量的定义形式:

数据类型变量列表;在一条变量定义中可以定义一个或多个同类型变量,当定义多个变量时,变量名之间用“,”隔开。例如:

charcourse;

intnum,grade;

编译程序按照变量类型给每一个变量分配内存,因此一个变量名对应了内存中的某个存储单元,变量的值是存放在该存储单元中的数据。在C程序中使用变量的值,就是通过变量名找到变量的存储单元,取出其值;对变量赋值时,则是向变量名所代表的存储单元中存入数据。

7

例2变量的定义、赋值和输出。

#include<stdio.h>main(){ charcourse;

intnum,grade; course=’C’; /*course赋值为’C’*/ num=1201; /*num赋值为1201*/ grade=90; /*grade赋值为90*/

printf("%d,%c,%d\n",num,course,grade);}运行结果为:

1201,C,90

变量名、内存地址和变量值的对应关系

83.3整型数据一、整型数据的分类整型数据基本整型int占内存2B短整型shortint或short占内存2B长整型longint或long占内存4B无符号整型无符号基本整型unsignedint无符号短整型unsignedshort无符号长整型unsignedlong整型是不带小数点的数据类型。按照表示范围分为基本整型,短整型,和长整型;按照数值有无正负之分又可分为有符号整型(signed)和无符号整型(unsigned)。有符号整型的存储空间最高比特位用0表示正数,1表示负数;而无符号整型的存储空间最高位为有效数字位。

9下面列出了TurboC中各类整型量所分配的内存字节数及数的表示范围。

类型说明符数的范围分配字节数

int-32768~327672字节

shortint-32768~327672字节

signedint-32768~327672字节

unsignedint0~655352字节

longint-2147483648~21474836474字节(-21亿-21亿)

unsignedlong0~42949672954字节例如:一个整型(int)数据的最大值0111111111111111符号位10二、整型常量在C语言中,使用的整常数有八进制、十六进制和十进制三种。1.十进制整常数:其数码为0~9

以下各数是合法的十进制整常数:237-5682.八进制整常数:其数码为0~7,前缀为0。以下各数是合法的八进制整常数:0150101

以下各数是不合法的八进制整常数:07908001

3.

十六进制整常数:数码取值为0~9,A~F或a~f,前缀为0X或0x。以下各数是合法的十六进制整常数:

0X2A(十进制为42)0XA0(十进制为160) 0XFFFF(十进制为65535)

以下各数不是合法的十六进制整常数:

5A(无前缀0X)0X3H(含有非十六进制数码)114.整型常量的类型:关系到其在内存中存储单元的分配,可按照以下几点规则进行:1)根据其值所在的范围确定类型,如果其值在-32768~32767范围内,认为它是int型,例如4567为int型常量,为它分配2个字节空间;如果其值超过了上述范围,在-2147483648~2147483647,则认为它是long型,例如56789为long型常量,为它分配4个字节空间;2)在整型常量后加字母l或L,则指定它为long型常量,例如158L,系统为其分配4个字节空间;158与158L,虽然数值没有差别,但是系统只为158分配2个字节空间,因此在运算和输出格式上要加以区分,避免出错;3)在整型常量后加字母u或U,则指定它为unsigned型常量,例如123u。后缀l和u还可综合使用,例如234Lu,表示234为无符号长整型常量,系统为其分配4个字节空间。

12三、整型变量整型变量说明的一般形式为:

类型说明符变量名标识符,变量名标识符,...;

例如:

inta,b,c;(a,b,c为整型变量)longx,y;(x,y为长整型变量)unsignedp,q;(p,q为无符号整型变量)在定义变量时,如不指定为无符号类型(unsigned),则默认为有符号型(signed)。编译系统按照变量定义时指定的类型分配相应的存储空间

13例3Pg.43#include<stdio.h>main(){

inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;

printf(“a+u=%d,b+u=%d\n”,c,d);}

运行结果为:

a+u=22,b+u=-1414四、整型数据的溢出

C语言中,数据超出其类型所能表示的范围,即“溢出”,不报错误信息,程序仍然能运行,但可能出现不正确的结果。例4Pg.44#include<stdio.h>main(){inta,b;a=32767;b=a+1;

printf("a=%d,b=%d\n",a,b);}运行结果为:

a=32767,b=-3276815整型≠整数

int的范围:-32768~+32767例5

#include<stdio.h>main(){inta;

printf(“Input:”);

scanf(“%d”,&a);

printf(“a=%d\n”,a);}

运行结果:

Input:12345

a=12345Input:1234567

a=-10617

Why?!Because:

12345的补码是

00110000001110011234567的补码是

100101101011010000111

截去多余部份(超过2个字节的左边部分)后其原码为

1010100101111001(-10617)可用下图表示:327673276632765……-32766-32767-32768有趣的结果:

输入(Input:)输出(a=)327673276732768-3276832769-3276732770-32766-32768-32768-3276932767-3277032766163.4浮点型数据(实数型)一、浮点型数据的分类:浮点型是带小数点的数据类型,也叫实型。单精度型float双精度型double浮点型变量分为三类:长双精度型longdouble类型名称类型标识符所占字节数有效数字位数数值范围单精度型float46~7-3.4*10-38~3.4*1038双精度型double815~16-1.7*10-308~1.7*10308长双精度型longdouble1618~19-1.2*10-4932~1.2*104932TurboC中各类浮点型数据的相关信息

17二、浮点型常量浮点型常量也称为实数或者浮点数。在C语言中,浮点数只采用十进制,有二种形式:小数形式与指数形式:1.小数形式:由数码0~9和小数点组成。例如:0.0,.25,-0.13,300.等均为合法的浮点数。2.指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为aEn(a为十进制数,n为十进制整数)其值为如:2.1E5(等于2.1*105),-2.8E-2(等于-2.8*10-2)以下不是合法的浮点数:

345(无小数点)E7(阶码标志E之前无数字)

.1-5(无阶码标志)53.-E3(负号位置不对)2.7E(无阶码)为了保证运行结果的精度,浮点型常量的类型一般默认为double类型,也可以在浮点型常量后加字母f或者F来指定其为float类型,如356f和356.是等价的。18三、浮点型变量浮点型变量说明的格式和书写规则与整型相同。例如:floatx,y;(x,y为单精度实型量)doublea,b,c;(a,b,c为双精度实型量)由于浮点型变量存放在有限的存储单元中,其能够表示的有效数字是有限的,有效位之外的数字将被舍去,产生误差,所以根据实际用途为变量选择合适的浮点类型。例6浮点型数据的精度。

#include<stdio.h>main(){floatsum;doubleavg_1,avg_2;sum=123456.888;avg_1=sum/2.0;avg_2=123456.888/2.0;

printf("sum=%f,avg_1=%f,avg_2=%f\n",sum,avg_1,avg_2);}

运行结果为:

sum=123456.890625,avg_1=61728.445312,avg_2=61728.444000193.5字符型数据字符型量包括字符常量和字符变量。一、字符常量字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。在C语言中,字符常量有以下特点:

1)字符常量只能用单引号括起来,不能用双引号或其它括号。

2)字符可以是字符集中任意字符。但数字被定义为字符型之后与原本的数值表达含义不同。如‘5’和5是不同的。

3)字符常量在内存中占用1个字节的空间,存储的是其对应的ASCII码值。如A的十进制ASCII码是65,若将字符‘A’存到内存变量中,实际存放形式是:

0100000120二、转义字符转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。转义字符含义转义字符含义\a响铃\f换页,移到下页开头\b退格\\一个反斜杠字符’\’\n换行,移到下一行开头\’一个单引号字符\r回车,移到本行开头\”一个双引号字符\t水平制表\ddd1~3位八进制数所代表的字符\v垂直制表\xhh1~2位十六进制数所代表的字符常用的转义字符

21三、字符变量字符类型标识符为char,字符变量的定义形式:

char变量名列表;例如:chara,b;

字符变量的取值是字符常量,即单个字符,每个字符变量中只能存放一个字符,系统为其分配1个字节的存储单元。由于字符型数据在内存中实际存放的是其对应的ASCII码值,所以在C程序中,字符型数据可以当做整型数据来处理,允许对整型变量赋予字符值,也允许对字符变量赋予整型值。

22例7字符型与整型的运算。#include<stdio.h>main(){intnum1,num2;charch1,ch2;ch1='A';num1=ch1+32;num2=321;ch2=num2;printf("num1=%d,num2=%d,ch1=%d,ch2=%d\n",num1,num2,ch1,ch2);printf("num1=%c,num2=%c,ch1=%c,ch2=%c\n",num1,num2,ch2,ch2);}本例中,num2是int类型,占用2字节,而ch2是char类型,只占用1字节,因此将num2的值赋予ch2时,系统只截取低8位赋予ch2。0000000101000001num2在内存中的存储形式运行结果为:num1=97,num2=321,ch1=65,ch2=65num1=a,num2=A,ch1=A,ch2=A23四、字符串常量

C语言中的字符串常量是由一对双引号“”括起来的字符序列。例如:“ABC”,“A”,“123lkdf”。字符串在内存中占据连续的存储空间,且在每个字符串的结尾处要加一个空操作符'\0'作为字符串结束标志,以便系统判断字符串是否结束。注意:1)在C语言中没有字符串变量。字符串数据是通过字 符数组或字符指针变量来处理。

2)不要将字符常量和字符串常量混淆。 例如'a'与"a"是C语言中两种完全不同类型的数据。aa\0'a'与"a"在内存的存储形式243.6运算符和表达式一、C运算符简介

C语言提供了丰富的运算符,能够构成多种表达式。按照运算形式,C语言的运算符可以分成13类。

学习运算符应注意的几个问题

1)运算符的功能

2)与运算量的关系

要求运算量的个数单目运算++,--,&双目运算+,-,*,%三目运算?:要求运算量的类型3)运算符的优先级别4)运算符的结合性:自左向右、自右向左5)运算结果的类型25二、算术运算符及表达式

1.C语言的基本算术运算符:

加法+减法-乘法*除法/求余%

其中:求余%运算要求运算量均为整型。这5个算术运算符的结合性都是自左向右,其中*、/和%的优先级高于+、-运算符。

2.算术表达式:用算术运算符和一对圆括号将运算量连接起来,符合C语法规则的表达式。算术表达式的结果一定是数值类型的,即整型或浮点型。

下列表达式就是算术表达式:

1+2%5-3.4

(9+100)/2.026

3.算术表达式的计算结果:与算术运算符的优先级、结合性以及运算量的类型有关,一般有以下几点规律:

1)+、-、*这三个运算符,当两个运算量数据类型相同时,运算结果的类型和运算量类型相同;当两个运算量类型不同时,按照为各种类型分配的存储单元的多少,在计算之前,将占用单元少的数据类型转换成占用单元多的数据类型。例如有下列变量定义:

inta=10;

doubleb=-0.9;进行a+b运算时,由于a、b类型不同,且a占用2字节存储单元,b占用8字节,因此先将a转换成double类型再进行a+b的计算。2)对于/运算,当两个运算量均为整型时,运算结果为整型;当其中一个运算量为浮点型时,另一个运算量也要转换成浮点型,运算结果为浮点型。

C中若写成:1/2*a*t*t则结果不对,恒为0

应写成:0.5*a*t*t或则:a*t*t/2274.自增、自减运算符和表达式

C语言还提供了两个单目算术运算符:++(自增)和--(自减)。其作用是实现变量的加1、减1操作,例如有inti,则i++或++i等价于i=i+1,因此,自增、自减的运算量只能是变量,不能是常量或表达式,例如++2,(x+y)--都是错误的表达式。

与其他运算符有所不同的是,++和—即可放在变量的前面,也可放在变量的后面。例如有inti,则++i,--i,i++,i--都是合法的书写方式。但如果将自增、自减运算与其他运算符构成表达式,则放在变量之前和放在变量之后,其效果有所不同:1)++i与--i,其作用为先将i的值加1或减1,更新i的值后再使用i;2)i++与i--,其作用为先使用i,之后再将i的值加1或减1。28例8自增、自减运算。

#include<stdio.h>main(){

int

x,y,z;x=5;y=++x;z=x--;

printf("x=%d,y=%d,z=%d\n",x,y,z);}运行结果为:

x=5,y=6,z=629三、赋值运算符和赋值表达式1.赋值运算符

C语言中,符号“=”称为赋值运算符,其作用是将一个数据赋给一个变量。要注意与数学中的等于符号“=”区分开。2.复合赋值运算符在赋值运算符“=”之前,加上其他二元运算符构成复合赋值运算符。C语言中,共有10个复合赋值运算符,分别与5个算术运算符(+、-、*、/、%)和5个位运算符(<<、>>、|、^、&)构成。3.赋值表达式:变量赋值运算符表达式其中,赋值运算符的左侧只能是变量,不能是常量或表达式。例如x-y=1就是非法的赋值表达式。以下表达式都属于赋值表达式:

a=3x+=2 等价于x=x+2y*=x-8 等价于y=y*(x-8)

30赋值运算符的优先级只高于逗号运算符,低于其他任何运算符,其结合性为自右向左。赋值表达式的计算过程:先求赋值运算符右侧表达式的值,然后将求出的值赋给左侧的变量。当赋值运算符左右两侧的数据类型不相同时,系统将自动进行类型转换,将右侧的类型转换成左侧的类型后再赋值,一般有以下几种情况:1)将浮点型赋给整型,则将小数部分舍弃,只保留整数部分。例如有inti;执行“i=1.5”,结果i的值为1;2)将整型赋给浮点型,数值不变,但增加小数部分(小数部分

温馨提示

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

评论

0/150

提交评论