版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C语言基础
2.1数据类型
2.2标识符、常量和变量
2.3基本类型数据2.4运算符及表达式1第2章C语言基础2.1数据类型1数据类型基本类型(简单)
构造类型
指针类型空类型
数组类型结构体类型共用体类型标准类型用户自定义类型:整型实型字符型单精度型双精度型枚举类型2.1数据类型2数据类型基本类型数组类型标准类型用户自定义类型:整型单精度2.2标识符、常量与变量1、字符集C语言字符集由以下几部分组成:①字母:大、小写英文字母共52个。②数字:0~9共10个③空白符:空格符、制表符、换行符等统称为空白符共3个。④标点和特殊字符:+-*/%_.=<>&|()[]{};?:’”!#等25个。32.2标识符、常量与变量1、字符集3标识符是指用来标识变量名、符号常量名、函数名、文件名以及一些具有专门含义的有效字符序列。①以字母或下划线(_)开头,由字母、数字、下划线组成的字符序列。如:num,a8,no_13d,no1,xk#1(不合法)②大写字母和小写字母视为两个不同的字符。③不同的C语言编译器规定的标识符的长度可能会不同,一般规定取前面8个字符,多余的不被识别。例如:student_name和student_num被认为是相同的标识符student_。2、标识符:4标识符是指用来标识变量名、符号常量名、函数名、文件名以及一些关键字标识符:预定义标识符:用户标识符:代表固定含义,不能另作它用。代表特定含义(一般是库函数名和预编译处理命令名),一般不另作它用。标识符分类定义用户标识符时注意:大小写有区分。如book,BOOK,Book。标识符做到“见名知意”。如average,sum,length等。关键字不能作为标识符。如do,int,if等。5关键字标识符:代表固定含义,不能另作它用。代表特定含义(一般3、常量:在程序运行过程中,其值不能被改变的量称为常量。符号常量:#define符号常量名常量
#definePI3.1415926常量类型:直接常量:算术型运算常量:123,3.1415926字符型常量:’a’,”hello”63、常量:在程序运行过程中,其值不能被改变的量称为常量。符#include"stdio.h"
main(){floatradius;/*radius圆的半径*/
floatarea,length;/*area圆的面积*/
printf("Pleaseinputradius:");scanf("%f",&radius);/*输入圆的半径*/
area=3.1415926*radius*radius;/*计算圆的面积*/length=2*3.1415926*radius;/*计算圆的周长*/printf("area=%f,length=%f",area,length);}#definePI3.1415926PIPI【例】计算圆的面积和周长。7#definePI3.1415926PI程序执行过程中,其值可以被改变的量(1)变量名:既代表某存储空间,又代表该空间存储的数据。(3)变量的数据类型:决定了存储空间的大小。
C要求:变量必须先声明后使用,指明其数据类型变量定义格式:数据类型标识符变量名表如:inta,b,c;floatd;(4)变量的地址:即变量所占内存空间的首字节的编号。4、变量:a6(2)变量的值:存放在存储单元中的数据(存储单元内容)。标识符
8程序执行过程中,其值可以被改变的量#include"stdio.h"main(){intnum;
floatprice,total;num=5;price=3;total=price*num;printf("total=%f",total);}【例】用price代表商品单价、num代表商品数量,然后计算商品的总价total。9#include"stdio.h"【例】用price代表整型数据类型标识符整型数据有基本型、短整型、长整型和无符号型四种。基本整型(简称整型):类型标识符为int。短整型:类型标识符为shortint或short。长整型:类型标识符为1ongint或1ong。无符号型:表示不带符号的整数。又可分为以下三种:无符号整型:类型标识符为unsignedint。无符号短整型:类型标识符为unsignedshort无符号长整型,类型标识符为unsigned1ong。整型数据2.3基本类型数据10整型数据类型标识符整型数据2.3基本类型数据102.3.1基本数据类型(一)
1.整型数据整型数据分为一般整型(int)、短整型(short)和长整型(long),并且每一种类型又分为带符号(signed)和无符号(unsigned)两种类型。整型数据的特性见下表:
数据类型名说明VisualC++6.0环境TurboC2.0环境字节取值范围字节取值范围short[int]短整型2-32768~327672-32768~32767signedshort[int]带符号短整型2-32768~327672-32768~32767unsignedshort[int]无符号短整型20~6553520~65535int整型4-2147483648~21474836472-32768~32767signed[int]带符号整型4-2147483648~21474836472-32768~32767unsigned[int]无符号整型40~429496729520~65535long[int]长整型4-2147483648~21474836474-2147483648~2147483647signedlong[int]带符号长整型4-2147483648~21474836474-2147483648~2147483647unsignedlong[int]无符号长整型40~429496729540~4294967295112.3.1基本数据类型(一)1.整型数据数据类型名说整数在内存中的存储方式:补码0000000000000000 0000001010100100 0000001010100100 00000010101001000000000000000000000000101010010000000000000000000000001010100100int型short型long型unsignedint型unsignedshort型unsignedlong型图2.2整型数据676的存储情况符号位0000000000000000 0000001010100100 12整数在内存中的存储方式:补码0000000000原码=补码=反码原码原码除符号位其余位取反+1补码正整数:负整数:反码+1如:求-5的补码原码:1101反码(在原码基础上,符号位不变,其它位都取反):1010补码(在反码基础上,加1):1011-5+5=0.而1011+0101=0.所以就是1011如何求整数的补码?13原码=补码=反码原码原码除符号位其余位取反+1补码正整数:负例如:intk;longp,l;
unsignedshortn,m;任何一种数据类型都有常量和变量之分2、整型变量的定义变量定义后,只是在内存中申请了相应的空间,此时存储空间中并没有有意义的数据,即变量没有确定的值。14例如:intk;任何一种数据类型都有常量和变量之分2、C语言中整型常量可以用3种形式表示:
①十进制数,如+123,-234,0,23;
②八进制数,如0234,0777;
③十六进制数,如0x234,0X9A。整型数又分为基本整型、短整型、长整型(后加l或L)和无符号整型数(后加u或U)。前缀、后缀可同时使用以表示不同类型不同进制的整型数。如03456LU表示八进制无符号长整型数。3、整型常量15C语言中整型常量可以用3种形式表示:3、整型常量15二.实型数据1.实型数据类型标识符实型数据有单精度型和双精度型两种。
单精度型:类型标识符为float。
双精度型:类型标识符为double。类型占用字节数有效数字数值范围float473.4*10-38-3.4*1038double812-161.7*10-308-1.7*10308
16二.实型数据1.实型数据类型标识符类型占用字节数有实型数据存储方式:规范化的指数形式
假设机器字长为32位,其指数(即阶码)部分占8位,尾数占24位,则如图所示。11101011011101011000000000000000313024232210阶符指数部分数符尾数部分二进制数据0.00000011101011的存储形式指其尾数部分(M)为纯小数,阶码部分(E)为纯整数。N=2E*M17实型数据存储方式:规范化的指数形式假设机器字长为32位,2.实型变量的定义floatf,f1;/*定义f、f1为单精度实型变量*/doubled;/*定义d为双精度实型变量*/182.实型变量的定义floatf,f1;/*3.实型常量(又称实数,只有十进制形式)小数形式指数形式由数字和小数点组成(必有小数点,但其前后0可省)例如:0.246.2465.05.等。由小数或整数、字母E或e及指数部分组成。(e前必有数字,后必为整数)其格式为:整数部分.小数部分E指数部分例如:135e312.12e-5.123e40e0
e23.5e1.5在程序中,实数可以用小数或指数形式表示,但在内存中,实数都以规范化的指数形式存放。××193.实型常量(又称实数,只有十进制形式)小数形式由数字和小1.字符型数据类型标识符类型标识符为char,在内存中存储一个字符型数据需要一个字节。三.字符型数据201.字符型数据类型标识符三.字符型数据20说明字符变量用char作标识符如:charx;一个字符变量在内存中占一个字节,一个字符变量只能存放一个字符如:x=‘a’;将字符a赋值给字符变量x实际上是把a的ASCII代码值97放到x对应的内存单元中去
字符变量=字符常量/字符变量/0-255的整数2.字符型变量的定义21说明字符变量用char作标识符字符变量=字符常量/字
如:charc1,c2;inti; c1=‘a’; c2=c1-32; i=97; printf(‘%c,%d\n’,c1,c1);c1c2i=====c1=97;===c2=‘A’;===c2=65;===c2=‘a’-32;======i=‘a’;=====printf(‘%c,%d\n’,i,i);注意:**在内存中,字符数据和整型数据的存储形式相似,所以在c语言中二者可以通用。97659722如:charc1,c2;3.字符型常量字符常量:用单引号括起来的字符。代表ASCII字符集中的一个字符
两种表示形式:由单引号括起来的普通字符常量;如‘A’,’a’,‘3’,‘’由单引号括起来的转义字符;如‘\n’,‘\t’
233.字符型常量字符常量:用单引号括起来的字符。23单引号中的大小写字母代表不同的字符常量。如:’a’,’A’’a’和a的区别‘’是一个字符常量,有一空格,和’’的区别。单引号中只能包含一个字符只能用‘’表示字符常量,“”表示的是字符串常量C语言规定:字符型常量在内存中占8位(一个字节)。字符常量在内存中实际存储的是其ASCII码的值如:‘A’—’a’—‘3’—一、普通字符常量659751字符常量和整型常量是可以混用的。24单引号中的大小写字母代表不同的字符常量。如:’a’,’A以一个反斜线开头后跟一个特定的字符,代表某一特定的ASCII字符。又称反斜线字符。如:’\n’,’\’’\后可跟8进制或16进制数,表示一个ASCII字符如:’A’也可用’\101’或’\0101’’\x41’表示(\后不允许用X,0x)二、转义字符常量25以一个反斜线开头后跟一个特定的字符,代表某一特定的ASC4.字符型数据在内存中的存储形式c2c10100000100001010图2.4字符型数据的存储charc1,c2;c1=’A’;c2=’\n’
264.字符型数据在内存中的存储形式c2c10100000100【例2.3】字符型数据的输出。#include"stdio.h"main(){ charc1; c1=65; printf("%c,%d\n",c1,c1);}输出结果:A,6527【例2.3】字符型数据的输出。#include"stdio可对字符数据进行的运算字符型数据可参与任何整数运算如:算术运算’B’-’A’等价于66-65等价于1‘a’+1等价于97+1等价于98等价于’b’
大小写字母的相互转换:‘A’+32等价于65+32等价于97等价于’a’‘b’-32等价于98-32等价于66等价于’B’
数字字符与相应整数值的相互转换:‘9’-’0’等价于57-48等价于99+’0‘等价于9+48等价于’9’28可对字符数据进行的运算字符型数据可参与任何整数运算28【例】#include"stdio.h"main(){ charc1,c2; c1='A'; c2='b'; c1=c1+32; c2=c2-32; printf("c1=%c,c2=%c",c1,c2);}输出结果:c1=a,c2=B29【例】输出结果:c1=a,c2=B29四.字符串常量
用一对双引号括起来的一串字符;如“hello”,“%d%d”C规定:在一个字符串的末尾加一个串结束标志’\0’在内存中占的字节数=字符个数+1如:“hello”在内存中的存储形式是(该字符对应ASCII码值):1041011081081110
为了能直观理解,以后直接用字符本身表示。上例表示成:hello\0注意:在写字符串时不必加'\0',否则画蛇添足。'\0'字符是系统自动加上的。
30四.字符串常量用一对双引号括起来的一串字符;如“hel“”和“”的区别字符常量与字符串常量的区别:(’b’与”b”)形式上:‘’括起来的单个字符或以\开头的一个转义字符
内存表示:都存储ASCII码,但字符常量占1个字节,转义字符也不例外,而字符串常量“b”占2个字节.注意:C语言中没有字符串变量,字符串存放在字符数组变量或字符指针变量中。31“”和“”的区别形式上:‘’括起来的单个字符或以\开头的一变量赋初值是指在定义变量的同时对变量进行赋值。例如:
inta=5;
inta,b,c=10;
五.变量赋初值
如果对几个变量赋以同一个初值,不能写成:inta=b=c=8;而应写成:inta=8,b=8,c=8;32变量赋初值是指在定义变量的同时对变量进行赋值。五.变量赋初运算符:算术运算符、关系运算符、赋值运算符、逗号运算符等表达式:由运算对象(常量、变量、函数)、运算符和括号组成的、有意义的、符合C语言规定的式子。表达式的求值规则:先按运算符的“优先级”由高到低进行,若级别相同,则按运算符的“结合性”处理。2.5运算符和表达式结合性右结合性:自右至左的结合方向如:x=y=z左结合性:自左至右的结合方向如:x+y-z332.5运算符和表达式结合性右结合性:自右至左的结合方向如一、算术运算符和算术表达式1.算术运算符及优先级和结合性
双目:+(加法运算符) -(减法运算符) *(乘法运算符) /(除法运算符) %(模运算符或求余运算符)说明:1.除%
,双目运算对象可以是整型、实型。%运算对象只能是整型。2.操作数类型一致时运算结果与操作数类型一致。3.不一致时不能直接运算,数据类型自动转换34一、算术运算符和算术表达式1.算术运算符及优先级和结合性说明整除:整/整=整(舍去所有小数部分≠四舍五入)
8/3=2实除:两实数或与一实数相除=双精度型。如:8/3.0=2.6666666整型%整型=整型如:8%3=2-19%4=-3(运算量为负数时,在VC6.0中结果的符号与被除数相同) /(除法运算符)%(模运算符或求余运算符)35整除:整/整=整(舍去所有小数部分≠四舍五入)整型%整型=单目:+(正值运算符)+3-(负值运算符)-3,-2.0注:1.运算符必须出现在运算对象的左边。2.运算对象可以是整型、实型。2.算术运算符和圆括号的优先级:()+-*/%+-单目双目同级同级同级结合性:高低双目:从左到右单目:从右到左优先级a-b+c36单目:注:1.运算符必须出现在运算对象的左边。2.算术运算3.算术表达式:算术运算符和括号将运算对象连接起来的、符合C语法规则的式子常量、变量、函数等2+sqrt(c)*b求值规律:1)括号可以嵌套多层,但左右括号必须配对。由内向外计算。2)不同级别的运算符,按优先级由高到低运算同一级别运算符,按结合性运算3)若一个运算符两侧数据类型不同,则先进行类型转换,然后计算。如:2
*3%5/4a*b/c-1.5(a,b,c为变量)inti=10;floatf=12.0,e=10.0;doubled=12.0;10+i*f-d/e373.算术表达式:常量、变量、函数等2+sqrt(c)*doublefloatlongunsignedintchar,short高低为必定的转换当运算符两侧的运算对象的数据类型不一致时的转换方向。
注:
102.400103110.4004.基本类型数据间的混合运算5+‘b‘-x/2+y*mintm=2,floatx=1.2,doubley=4.00.600-+y*m+y*m8.0001)自动类型转换38doublefloatlongunsi功能:将表达式的值转换为指定类型。
如:(double)a(把a转换为double类型)(int)(x+y)(把x+y的值转换为整型,)(float)(5%3)(把5%3的值转换为float型)
注:1.整型数转换为实型时,补足有效位数;实型数转换为整型时,只取其整数部分。
2.(int)x+y(把x转换为整型,然后与y相加)3.强制类型转换或自动类型转换,只是得到了一个所需类型的中间变量,原变量或表达式的值和类型并不变。4.强制类型转换的优先级高于自动类型转换。强制类型转换运算符2)强制类型转换格式:(类型名)(表达式)39功能:将表达式的值转换为指定类型。#include"stdio.h"main(){ inti=1,j=5,k1,k2,k3;floatx=5.7,y=2.8,z1,z2,z3; k1=(int)x; k2=(int)(x)/y; k3=(int)(x/y); z1=(float)i; z2=(float)i/j; z3=(float)(i/j); printf("k1=%d\n",k1); printf("k2=%d\n",k2); printf("k3=%d\n",k3); printf("z1=%f\n",z1); printf("z2=%f\n",z2); printf("z3=%f\n",z3);}【例2.6】强制类型转换示例40#include"stdio.h"【例2.6】强制类型转换1.
基本赋值运算符:=如:a=10
复合赋值运算符:+=,-=,*=,/=等二、赋值运算符和赋值表达式格式:〈变量〉赋值运算符〈表达式〉作用:把表达式的值赋给一个变量。a=3a=a+1a+=5a=b=c=1(结合性:自右向左)2.赋值表达式:由赋值运算符组成的表达式a10(1)赋值运算符可以是基本的、复合的赋值运算符。
赋值运算符的优先级只高于逗号运算符。〈表达式〉也可以是一个赋值表达式。411.基本赋值运算符:=二、赋值
赋值表达式的值与类型=赋值运算符左边变量的值与类型例1:inta,b,c;a=5;a=(b=5);a=(b=5)+(c=3);(3)在程序中可给一个变量多次赋值,最后赋的值为其当前数据。(2)赋值运算符左侧必须是变量,不能是常量或表达式。(4)赋值过程:求出表达式的值,比较表达式值的类型与变量的类型,类型相同时:直接赋值类型不同时:先自动类型转换再赋值。42(3)在程序中可给一个变量多次赋值,最如:floatf;f=23;则f=23.000000如:doublef;f=23;则f=23.00000000000000
b、整型实型:舍弃小数部分.如:inti;i=12.5则i=12(5)赋值运算中的类型转换原则:赋值前,自动把右侧表达式值按左边变量类型转换
a、实型整型:数值不变,但以浮点数形式存储到变量中.43如:floatf;如:i000000000000000011111111111110001111111111111111低位字节照写,高位字节扩展: 被转换为有符号型(左边)时:符号位扩展 被转换为无符号类型时:0扩展
00000000000010000000000000000000000000000000100011111111111110000000000000000000shortinta=8;intb;b=a;符号位符号位符号位shortinta=-8;longintb;b=a;符号位
unsignedlongc、(1)较长的整型变量较短的整数440000000000000000111111000000000000100000000000000010000000000000000000(2)较短型整数较长型整数:只截取低位字节位。Shortinta;longintb=8;a=b;符号位符号位450000000000001000000000d.①长整型变量无符号的整数:低位赋值,不足的高位补0
11111111111111111111111111111111-1unsignedshortinta=65535;shortintb;b=a;②同长整型变量无符号的整数:若数据超出范围,则出错
000000000000100000000000000000000000000000001000符号位unsignedshortinta=8;longintb;b=a;数值位数值位符号位46d.①长整型变量无符号的整数:低位赋值,不足的高位e.同长无符号整型变量带符号的整数:(符号作为数据传入)例2.7#include"stdio.h"main(){unsignedshortinti;shortintj=-6;i=j;printf("%u\n",i);}11111111111110101111111111111010结果:65530ij补码
数值位符号位思考:如果j为6,则运行结果是什么?47e.同长无符号整型变量带符号的整数:(符号作为数据传入3.复合赋值运算符任何双目运算符若i=2,j=12,k=10则k+=j+=i+8的值是?===》k=k+(j=j+(i+8))值是
32在赋值符“=”之前加上其它运算符,构成复合运算符。注:其它运算符放在“=”之前如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3483.复合赋值运算符任何双目运算符若i=2,j=12,k=10三、自增(++)、自减(--)运算符
如:inti=3,x;x=++i;x=i++;++和--使运算对象的值增1或减1。运算对象可为实型变量、整型变量。不能是常量或表达式如:++3,(i+j)--都不合法。是单目运算符。++i,--i,i++,i--都是合法的表达式。结合方向为:“自右向左”。如:-i++相当于-(i++)++i,--i:前置运算符(i值先增/减1,后使用i)i++,i--:后置运算符(先使用i的值,后使i值增/减1)相同点:变量都具有自增1或自减1的效果
不同点:表达式却会有不同的值==>i=i+1=4;x=i=4;==>x=i=3;i=i+1=4;49三、自增(++)、自减(--)运算符如:inti=3,最好不要在一个表达式中对同一个变量进行多次++或--操作【例2.8】自增、自减运算符使用示例:#include"stdio.h"main(){ inti=5,j,k; j=++i; i=5; k=i++; printf("i=%d,j=%d,k=%d\n",i,j,k); printf("j=%d,k=%d\n",++j,k++);}50最好不要在一个表达式中对同一个变量进行多次++或--操作【例逗号运算符:“,”优先级:最低结合性:从左到右逗号表达式:用逗号将表达式连接起来的式子格式:〈表达式1〉,〈表达式2〉,······,〈表达式N〉逗号表达式的值:从左到右,依次求出各表达式的值,
表达式N的值和类型为逗号表达式的值和类型。如:x=(a=3,b=5,c=b*4)t=3,t+2(a=2*3,a*5),a+6四、逗号运算符和逗号表达式51逗号运算符:“,”优先级:最低四、逗号运算符和逗五、sizeof运算符sizeof运算符是一个单目运算符,它返回变量或数据类型的字节长度。一般形式为:sizeof(类型标识符)或sizeof(变量名)例如:
sizeof(double)
sizeof(int)
设有下列程序段:
floatf;
inti;
i=sizeof(f);则变量i的值为4。52五、sizeof运算符sizeof运算符是一个单目运算符,第2章C语言基础
2.1数据类型
2.2标识符、常量和变量
2.3基本类型数据2.4运算符及表达式53第2章C语言基础2.1数据类型1数据类型基本类型(简单)
构造类型
指针类型空类型
数组类型结构体类型共用体类型标准类型用户自定义类型:整型实型字符型单精度型双精度型枚举类型2.1数据类型54数据类型基本类型数组类型标准类型用户自定义类型:整型单精度2.2标识符、常量与变量1、字符集C语言字符集由以下几部分组成:①字母:大、小写英文字母共52个。②数字:0~9共10个③空白符:空格符、制表符、换行符等统称为空白符共3个。④标点和特殊字符:+-*/%_.=<>&|()[]{};?:’”!#等25个。552.2标识符、常量与变量1、字符集3标识符是指用来标识变量名、符号常量名、函数名、文件名以及一些具有专门含义的有效字符序列。①以字母或下划线(_)开头,由字母、数字、下划线组成的字符序列。如:num,a8,no_13d,no1,xk#1(不合法)②大写字母和小写字母视为两个不同的字符。③不同的C语言编译器规定的标识符的长度可能会不同,一般规定取前面8个字符,多余的不被识别。例如:student_name和student_num被认为是相同的标识符student_。2、标识符:56标识符是指用来标识变量名、符号常量名、函数名、文件名以及一些关键字标识符:预定义标识符:用户标识符:代表固定含义,不能另作它用。代表特定含义(一般是库函数名和预编译处理命令名),一般不另作它用。标识符分类定义用户标识符时注意:大小写有区分。如book,BOOK,Book。标识符做到“见名知意”。如average,sum,length等。关键字不能作为标识符。如do,int,if等。57关键字标识符:代表固定含义,不能另作它用。代表特定含义(一般3、常量:在程序运行过程中,其值不能被改变的量称为常量。符号常量:#define符号常量名常量
#definePI3.1415926常量类型:直接常量:算术型运算常量:123,3.1415926字符型常量:’a’,”hello”583、常量:在程序运行过程中,其值不能被改变的量称为常量。符#include"stdio.h"
main(){floatradius;/*radius圆的半径*/
floatarea,length;/*area圆的面积*/
printf("Pleaseinputradius:");scanf("%f",&radius);/*输入圆的半径*/
area=3.1415926*radius*radius;/*计算圆的面积*/length=2*3.1415926*radius;/*计算圆的周长*/printf("area=%f,length=%f",area,length);}#definePI3.1415926PIPI【例】计算圆的面积和周长。59#definePI3.1415926PI程序执行过程中,其值可以被改变的量(1)变量名:既代表某存储空间,又代表该空间存储的数据。(3)变量的数据类型:决定了存储空间的大小。
C要求:变量必须先声明后使用,指明其数据类型变量定义格式:数据类型标识符变量名表如:inta,b,c;floatd;(4)变量的地址:即变量所占内存空间的首字节的编号。4、变量:a6(2)变量的值:存放在存储单元中的数据(存储单元内容)。标识符
60程序执行过程中,其值可以被改变的量#include"stdio.h"main(){intnum;
floatprice,total;num=5;price=3;total=price*num;printf("total=%f",total);}【例】用price代表商品单价、num代表商品数量,然后计算商品的总价total。61#include"stdio.h"【例】用price代表整型数据类型标识符整型数据有基本型、短整型、长整型和无符号型四种。基本整型(简称整型):类型标识符为int。短整型:类型标识符为shortint或short。长整型:类型标识符为1ongint或1ong。无符号型:表示不带符号的整数。又可分为以下三种:无符号整型:类型标识符为unsignedint。无符号短整型:类型标识符为unsignedshort无符号长整型,类型标识符为unsigned1ong。整型数据2.3基本类型数据62整型数据类型标识符整型数据2.3基本类型数据102.3.1基本数据类型(一)
1.整型数据整型数据分为一般整型(int)、短整型(short)和长整型(long),并且每一种类型又分为带符号(signed)和无符号(unsigned)两种类型。整型数据的特性见下表:
数据类型名说明VisualC++6.0环境TurboC2.0环境字节取值范围字节取值范围short[int]短整型2-32768~327672-32768~32767signedshort[int]带符号短整型2-32768~327672-32768~32767unsignedshort[int]无符号短整型20~6553520~65535int整型4-2147483648~21474836472-32768~32767signed[int]带符号整型4-2147483648~21474836472-32768~32767unsigned[int]无符号整型40~429496729520~65535long[int]长整型4-2147483648~21474836474-2147483648~2147483647signedlong[int]带符号长整型4-2147483648~21474836474-2147483648~2147483647unsignedlong[int]无符号长整型40~429496729540~4294967295632.3.1基本数据类型(一)1.整型数据数据类型名说整数在内存中的存储方式:补码0000000000000000 0000001010100100 0000001010100100 00000010101001000000000000000000000000101010010000000000000000000000001010100100int型short型long型unsignedint型unsignedshort型unsignedlong型图2.2整型数据676的存储情况符号位0000000000000000 0000001010100100 64整数在内存中的存储方式:补码0000000000原码=补码=反码原码原码除符号位其余位取反+1补码正整数:负整数:反码+1如:求-5的补码原码:1101反码(在原码基础上,符号位不变,其它位都取反):1010补码(在反码基础上,加1):1011-5+5=0.而1011+0101=0.所以就是1011如何求整数的补码?65原码=补码=反码原码原码除符号位其余位取反+1补码正整数:负例如:intk;longp,l;
unsignedshortn,m;任何一种数据类型都有常量和变量之分2、整型变量的定义变量定义后,只是在内存中申请了相应的空间,此时存储空间中并没有有意义的数据,即变量没有确定的值。66例如:intk;任何一种数据类型都有常量和变量之分2、C语言中整型常量可以用3种形式表示:
①十进制数,如+123,-234,0,23;
②八进制数,如0234,0777;
③十六进制数,如0x234,0X9A。整型数又分为基本整型、短整型、长整型(后加l或L)和无符号整型数(后加u或U)。前缀、后缀可同时使用以表示不同类型不同进制的整型数。如03456LU表示八进制无符号长整型数。3、整型常量67C语言中整型常量可以用3种形式表示:3、整型常量15二.实型数据1.实型数据类型标识符实型数据有单精度型和双精度型两种。
单精度型:类型标识符为float。
双精度型:类型标识符为double。类型占用字节数有效数字数值范围float473.4*10-38-3.4*1038double812-161.7*10-308-1.7*10308
68二.实型数据1.实型数据类型标识符类型占用字节数有实型数据存储方式:规范化的指数形式
假设机器字长为32位,其指数(即阶码)部分占8位,尾数占24位,则如图所示。11101011011101011000000000000000313024232210阶符指数部分数符尾数部分二进制数据0.00000011101011的存储形式指其尾数部分(M)为纯小数,阶码部分(E)为纯整数。N=2E*M69实型数据存储方式:规范化的指数形式假设机器字长为32位,2.实型变量的定义floatf,f1;/*定义f、f1为单精度实型变量*/doubled;/*定义d为双精度实型变量*/702.实型变量的定义floatf,f1;/*3.实型常量(又称实数,只有十进制形式)小数形式指数形式由数字和小数点组成(必有小数点,但其前后0可省)例如:0.246.2465.05.等。由小数或整数、字母E或e及指数部分组成。(e前必有数字,后必为整数)其格式为:整数部分.小数部分E指数部分例如:135e312.12e-5.123e40e0
e23.5e1.5在程序中,实数可以用小数或指数形式表示,但在内存中,实数都以规范化的指数形式存放。××713.实型常量(又称实数,只有十进制形式)小数形式由数字和小1.字符型数据类型标识符类型标识符为char,在内存中存储一个字符型数据需要一个字节。三.字符型数据721.字符型数据类型标识符三.字符型数据20说明字符变量用char作标识符如:charx;一个字符变量在内存中占一个字节,一个字符变量只能存放一个字符如:x=‘a’;将字符a赋值给字符变量x实际上是把a的ASCII代码值97放到x对应的内存单元中去
字符变量=字符常量/字符变量/0-255的整数2.字符型变量的定义73说明字符变量用char作标识符字符变量=字符常量/字
如:charc1,c2;inti; c1=‘a’; c2=c1-32; i=97; printf(‘%c,%d\n’,c1,c1);c1c2i=====c1=97;===c2=‘A’;===c2=65;===c2=‘a’-32;======i=‘a’;=====printf(‘%c,%d\n’,i,i);注意:**在内存中,字符数据和整型数据的存储形式相似,所以在c语言中二者可以通用。97659774如:charc1,c2;3.字符型常量字符常量:用单引号括起来的字符。代表ASCII字符集中的一个字符
两种表示形式:由单引号括起来的普通字符常量;如‘A’,’a’,‘3’,‘’由单引号括起来的转义字符;如‘\n’,‘\t’
753.字符型常量字符常量:用单引号括起来的字符。23单引号中的大小写字母代表不同的字符常量。如:’a’,’A’’a’和a的区别‘’是一个字符常量,有一空格,和’’的区别。单引号中只能包含一个字符只能用‘’表示字符常量,“”表示的是字符串常量C语言规定:字符型常量在内存中占8位(一个字节)。字符常量在内存中实际存储的是其ASCII码的值如:‘A’—’a’—‘3’—一、普通字符常量659751字符常量和整型常量是可以混用的。76单引号中的大小写字母代表不同的字符常量。如:’a’,’A以一个反斜线开头后跟一个特定的字符,代表某一特定的ASCII字符。又称反斜线字符。如:’\n’,’\’’\后可跟8进制或16进制数,表示一个ASCII字符如:’A’也可用’\101’或’\0101’’\x41’表示(\后不允许用X,0x)二、转义字符常量77以一个反斜线开头后跟一个特定的字符,代表某一特定的ASC4.字符型数据在内存中的存储形式c2c10100000100001010图2.4字符型数据的存储charc1,c2;c1=’A’;c2=’\n’
784.字符型数据在内存中的存储形式c2c10100000100【例2.3】字符型数据的输出。#include"stdio.h"main(){ charc1; c1=65; printf("%c,%d\n",c1,c1);}输出结果:A,6579【例2.3】字符型数据的输出。#include"stdio可对字符数据进行的运算字符型数据可参与任何整数运算如:算术运算’B’-’A’等价于66-65等价于1‘a’+1等价于97+1等价于98等价于’b’
大小写字母的相互转换:‘A’+32等价于65+32等价于97等价于’a’‘b’-32等价于98-32等价于66等价于’B’
数字字符与相应整数值的相互转换:‘9’-’0’等价于57-48等价于99+’0‘等价于9+48等价于’9’80可对字符数据进行的运算字符型数据可参与任何整数运算28【例】#include"stdio.h"main(){ charc1,c2; c1='A'; c2='b'; c1=c1+32; c2=c2-32; printf("c1=%c,c2=%c",c1,c2);}输出结果:c1=a,c2=B81【例】输出结果:c1=a,c2=B29四.字符串常量
用一对双引号括起来的一串字符;如“hello”,“%d%d”C规定:在一个字符串的末尾加一个串结束标志’\0’在内存中占的字节数=字符个数+1如:“hello”在内存中的存储形式是(该字符对应ASCII码值):1041011081081110
为了能直观理解,以后直接用字符本身表示。上例表示成:hello\0注意:在写字符串时不必加'\0',否则画蛇添足。'\0'字符是系统自动加上的。
82四.字符串常量用一对双引号括起来的一串字符;如“hel“”和“”的区别字符常量与字符串常量的区别:(’b’与”b”)形式上:‘’括起来的单个字符或以\开头的一个转义字符
内存表示:都存储ASCII码,但字符常量占1个字节,转义字符也不例外,而字符串常量“b”占2个字节.注意:C语言中没有字符串变量,字符串存放在字符数组变量或字符指针变量中。83“”和“”的区别形式上:‘’括起来的单个字符或以\开头的一变量赋初值是指在定义变量的同时对变量进行赋值。例如:
inta=5;
inta,b,c=10;
五.变量赋初值
如果对几个变量赋以同一个初值,不能写成:inta=b=c=8;而应写成:inta=8,b=8,c=8;84变量赋初值是指在定义变量的同时对变量进行赋值。五.变量赋初运算符:算术运算符、关系运算符、赋值运算符、逗号运算符等表达式:由运算对象(常量、变量、函数)、运算符和括号组成的、有意义的、符合C语言规定的式子。表达式的求值规则:先按运算符的“优先级”由高到低进行,若级别相同,则按运算符的“结合性”处理。2.5运算符和表达式结合性右结合性:自右至左的结合方向如:x=y=z左结合性:自左至右的结合方向如:x+y-z852.5运算符和表达式结合性右结合性:自右至左的结合方向如一、算术运算符和算术表达式1.算术运算符及优先级和结合性
双目:+(加法运算符) -(减法运算符) *(乘法运算符) /(除法运算符) %(模运算符或求余运算符)说明:1.除%
,双目运算对象可以是整型、实型。%运算对象只能是整型。2.操作数类型一致时运算结果与操作数类型一致。3.不一致时不能直接运算,数据类型自动转换86一、算术运算符和算术表达式1.算术运算符及优先级和结合性说明整除:整/整=整(舍去所有小数部分≠四舍五入)
8/3=2实除:两实数或与一实数相除=双精度型。如:8/3.0=2.6666666整型%整型=整型如:8%3=2-19%4=-3(运算量为负数时,在VC6.0中结果的符号与被除数相同) /(除法运算符)%(模运算符或求余运算符)87整除:整/整=整(舍去所有小数部分≠四舍五入)整型%整型=单目:+(正值运算符)+3-(负值运算符)-3,-2.0注:1.运算符必须出现在运算对象的左边。2.运算对象可以是整型、实型。2.算术运算符和圆括号的优先级:()+-*/%+-单目双目同级同级同级结合性:高低双目:从左到右单目:从右到左优先级a-b+c88单目:注:1.运算符必须出现在运算对象的左边。2.算术运算3.算术表达式:算术运算符和括号将运算对象连接起来的、符合C语法规则的式子常量、变量、函数等2+sqrt(c)*b求值规律:1)括号可以嵌套多层,但左右括号必须配对。由内向外计算。2)不同级别的运算符,按优先级由高到低运算同一级别运算符,按结合性运算3)若一个运算符两侧数据类型不同,则先进行类型转换,然后计算。如:2
*3%5/4a*b/c-1.5(a,b,c为变量)inti=10;floatf=12.0,e=10.0;doubled=12.0;10+i*f-d/e893.算术表达式:常量、变量、函数等2+sqrt(c)*doublefloatlongunsignedintchar,short高低为必定的转换当运算符两侧的运算对象的数据类型不一致时的转换方向。
注:
102.400103110.4004.基本类型数据间的混合运算5+‘b‘-x/2+y*mintm=2,floatx=1.2,doubley=4.00.600-+y*m+y*m8.0001)自动类型转换90doublefloatlongunsi功能:将表达式的值转换为指定类型。
如:(double)a(把a转换为double类型)(int)(x+y)(把x+y的值转换为整型,)(float)(5%3)(把5%3的值转换为float型)
注:1.整型数转换为实型时,补足有效位数;实型数转换为整型时,只取其整数部分。
2.(int)x+y(把x转换为整型,然后与y相加)3.强制类型转换或自动类型转换,只是得到了一个所需类型的中间变量,原变量或表达式的值和类型并不变。4.强制类型转换的优先级高于自动类型转换。强制类型转换运算符2)强制类型转换格式:(类型名)(表达式)91功能:将表达式的值转换为指定类型。#include"stdio.h"main(){ inti=1,j=5,k1,k2,k3;floatx=5.7,y=2.8,z1,z2,z3; k1=(int)x; k2=(int)(x)/y; k3=(int)(x/y); z1=(float)i; z2=(float)i/j; z3=(float)(i/j); printf("k1=%d\n",k1); printf("k2=%d\n",k2); printf("k3=%d\n",k3); printf("z1=%f\n",z1); printf("z2=%f\n",z2); printf("z3=%f\n",z3);}【例2.6】强制类型转换示例92#include"stdio.h"【例2.6】强制类型转换1.
基本赋值运算符:=如:a=10
复合赋值运算符:+=,-=,*=,/=等二、赋值运算符和赋值表达式格式:〈变量〉赋值运算符〈表达式〉作用:把表达式的值赋给一个变量。a=3a=a+1a+=5a=b=c=1(结合性:自右向左)2.赋值表达式:由赋值运算符组成的表达式a10(1)赋值运算符可以是基本的、复合的赋值运算符。
赋值运算符的优先级只高于逗号运算符。〈表达式〉也可以是一个赋值表达式。931.基本赋值运算符:=二、赋值
赋值表达式的值与类型=赋值运算符左边变量的值与类型例1:inta,b,c;a=5;a=(b=5);a=(b=5)+(c=3);(3)在程序中可给一个变量多次赋值,最后赋的值为其当前数据。(2)赋值运算符左侧必须是变量,不能是常量或表达式。(4)赋值过程:求出表达式的值,比较表达式值的类型与变量的类型,类型相同时:直接赋值类型不同时:先自动类型转换再赋值。94(3)在程序中可给一个变量多次赋值,最如:floatf;f=23;则f=23.000000如:doublef;f=23;则f=23.00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省部分 高中高二上学期期中联考语文试卷
- 长沙医学院《循证医学》2021-2022学年第一学期期末试卷
- 长沙医学院《经络腧穴学》2022-2023学年第一学期期末试卷
- 2024年碳酸丙烯酯项目合作计划书
- 重庆缙云教育联盟2023-2024学年高二上学期11月月考生物试题(解析版)
- 长沙学院《商务时文选读》2021-2022学年第一学期期末试卷
- 长沙学院《乐理基础(2)》2021-2022学年第一学期期末试卷
- 2024-2025学年人教版八年级物理上册 第四章《光现象》试题(含答案)
- 2024-2025学年辽宁省大连市甘井子区北师大版一年级上册期中测试数学试卷
- 2024年窑炉、熔炉及电炉项目合作计划书
- 人教版必修一化学方程式归纳(练习卷附答案)
- 《中风的中医治疗》PPT课件.ppt
- 战略合作签约仪式教育PPT课程课件
- 《龟兔赛跑的故事》PPT课件.ppt
- 年开展干部全覆盖谈心谈话工作情况报告
- PCBA工厂建厂预算
- 《火电厂工艺流程》ppt课件
- (完整版)PI外贸PI模板(总1页)
- 【设计】课程设计—混凝土结构(电大)(精华版)
- 高度规作业指导书
- 2020新版煤矿安全生产质量标准化采煤
评论
0/150
提交评论