c语言数据类型解析课件_第1页
c语言数据类型解析课件_第2页
c语言数据类型解析课件_第3页
c语言数据类型解析课件_第4页
c语言数据类型解析课件_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

C语言基础C/C

++程序设计1C语言基础C/C++程序设计1C程序的基本结构(复习)【例】计算并输出一个数a的平方。#include<stdio.h>main(){

floata,b;a=5.2;b=a*a;printf("b=%f\n",b);

}

main

为函数名程序从这里开始运行函数体开始函数体结束函数体内定义a,b为a赋值计算并输出平方值b执行程序的输出结果为:b=27.039997

2C程序的基本结构(复习)【例】计算并输出一个数a的平方。m数据类型(复习)【例】计算圆的面积,半径为5cm。

程序如下:main(){float

r,area;

r=5;

area=3.14*r*r;

printf("%f\n",

area);}运算结果是输出圆的面积:78.500000程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=3数据类型(复习)【例】计算圆的面积,半径为5cm。maiC语言的数据类型C数据类型数组类型结构体类型共用体类型枚举类型整型字符型实型(浮点型)空类型单精度型双精度型基本类型指针类型构造类型4C语言的数据类型C数据类型数组类型整型单精2.2.1整型数据1.整型数据的类型基本整型数据int,分配2Byte短整型数据shortint,分配2Byte长整型数据longint,分配4Byte无符号型,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。整型数据均以二进制补码形式存储52.2.1整型数据1.整型数据的类型52.2.2实型数据2.实型数据的类型

C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。如:

floatx,y;(指定x,y为单精度实数)

doublez;(指定z为双精度实数)在一般系统中,一个float型数据在内存中占4个字节(32位)·一个double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。62.2.2实型数据2.实型数据的类型C实型变量分为单精2.2.3字符型数据字符型数据char,分配1Byte

字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如'a'是一个char类型数据,称作字符常量2.2.4空类型空类型void通常与指针或函数结合使用72.2.3字符型数据字符型数据char,分配1Byt2.3常量、变量与标准函数主要内容:常量变量标准库函数82.3常量、变量与标准函数主要内容:82.3.1常量在运行程序的过程中值保持不变的量1.整型常量十进制:0~9八进制:0~7,以0开头十六进制:0~9,A~F/a~f,以0x或0X开头main(){inta=0123;b=0x123;printf(“a=%d,b=%d”,a,b);}92.3.1常量在运行程序的过程中值保持不变的量main(1.整型常量整型常量的类型:根据值大小默认类型。整型常量后面加l或L,则认为是longint型例如:123L、0L、432l、0x100l注意:十六进制常量中可以使用大写字母A~F,也可以使用小写字母a~f。八进制常量中不能出现数字8或9例如:018、0921非法101.整型常量整型常量的类型:注意:102.实型常量十进制形式

1.01.+12.0-12.00.0指数形式

1e31.8e-3-123E-6-.1E-3等价于:1×1031.8×10-3

-123×10-6

-0.1×10-3112.实型常量十进制形式等价于:1×1031.83.字符型常量可视字符常量

单引号括起来的单个可视字符例如:'a'、'A'、'+'、'3'、''等

转义字符常量单引号括起来的\与可视字符组合,例如:123.字符型常量可视字符常量12voidmain(){printf(“abc\tde\rf\tg\n”);printf("h\ti\b\bjk");}

程序运行时在打印机上得到以下结果:

fabcgdehjik

注意在显示屏上最后看到的结果与上述打印结果不同,是:

fgdehjk13voidmain()13字符变量的定义形式如下:

charc1,c2;

它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值:

c1=‘a’;c2=‘b’;

一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,·而是将该字符的相应的ASCII代码放到存储单元中。例如字符‘a’的ASCII代码为97,‘b’为98,

c1c29798011000010110001014字符变量的定义形式如下:14【例】

voidmain(){charc1,c2;c1=97;c2=98;printf("%c%c",c1,c2);}c1、c2被指定为字符变量。但在第3行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:

c1='a';c2='b'程序输出:

ab15【例】154.字符串常量用双引号括起的一个字符序列例如:"ABC"、"123"、"a"、"\n\t""\nGoodmorning"字符串常量的长度:所包含的字符个数

字符串常量的存储方式:

\nGoodmorning\0a\0所占存储单元数:串长度+1例如:字符串结束标记164.字符串常量用双引号括起的一个字符序列\nGoodmo2.3.2变量1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。a510变量值为变量分配的存储单元变量名例如:有变量a它的值是510172.3.2变量1.变量的有关概念a510变量值为变量分2.变量定义变量定义的一般格式:

数据类型说明符变量列表;例如:inti,j;

longk,m;floatx,y;charch1,ch2;必须使用合法的标识符作变量名不能使用关键字为变量命名182.变量定义变量定义的一般格式:必须使用合法的标识符作变量3.变量的初始化:允许在说明变量的时候对变量赋初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1='a',ch2=66,ch3='\142‘;表示定义变量并对变量存储单元赋值。错误的初始化:

inta=3+b,b=5;floatm=n=23.16;

193.变量的初始化:允许在说明变量的时候对变量赋初值main(){inta,b,c,d;/*指定a,b,c,d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf("a+u=%db+u=%d",c,d);}

运行结果为a+u=22b+u=-14

可以看到不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsignedint型数据进行相加相减运算。20main()202.3.3标准库函数由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材)函数调用形式:函数名([参数表])例如:putchar('a')sqrt(x)212.3.3标准库函数由C编译系统定义的一种函数,存放在系统数据类型和运算规则22数据类型和运算规则222.4运算符一、运算符简介按运算类型分类1.

算术运算符

2.

关系运算符

3.

逻辑运算符

4.

位运算符

5.

赋值与赋值组合运算符

6.

自增自减运算符7.条件运算

8.指针运算9.

其它运算符按运算对象的数目分类◆单目运算◆双目运算◆三目运算232.4运算符一、运算符简介按运算类型分类23运算符-算术运算一、算术运算符运算符(双目运算符/单目运算符)+加法运算-减法运算*乘法运算/除法运算%求余运算优先级:*/%同级(高),+

-同级(低)结合性:相同优先级运算符进行运算时的次序

自左向右(标记为→)24运算符-算术运算一、算术运算符运算符(双目运算符/单目运算符运算符-算术运算实例1.参加运算的对象都是int型,结果截取为int型10/3 11/310.0/3 11/3.1/2 1./210/5*3 10/(5*3)2.求余运算的对象必须是整型9%3 1%310%3 10%-3-10%3 -10%-3=3=3=3.3333=3.66667=0=0.5=6=0=0=1=1=1=-1=-1注意:运算对象的数据类型对运算结果的影响25运算符-算术运算实例1.参加运算的对象都是int型,结果截取运算符-关系运算二、关系运算符运算符(双目运算符→)>大于

>=大于等于<小于 <=小于等于

==

等于 !=不等于优先级:>>=<<=同级(高),!=

==同级(低)关系运算的结果应该为逻辑型“真”或“假”

C语言中没有逻辑型,将逻辑型数值化处理,用整型1表示“真”,用整型0表示“假”。26运算符-关系运算二、关系运算符运算符(双目运算符→)优先运算符-关系运算实例实例关系表达式

7>5的值是

1,5>7的值是

0。已知:inta=13,b=2,c=1;a>b a<=b a!=b a==b (a>b)==ca>b==ca-b==c 成立,结果为1不成立,结果为

0成立,结果为1不成立,结果为0结果为1与上面等价,结果为1等价于(a-b)==1,结果为0?

如何判断数学中的逻辑关系:0≤a≤9?

0<=a<=9等价于(0<=a)<=9结果恒为1

27运算符-关系运算实例实例成立,结果为1?如何判运算符-逻辑运算三、逻辑运算符运算符&&逻辑与(双目)(→)¦¦逻辑或(双目)(→)!逻辑非(单目)(←)逻辑运算真值表ab!a!ba&&ba||b11

0

01110

010101

10

0100

110

0逻辑运算关系28运算符-逻辑运算三、逻辑运算符运算符逻辑运算真值表ab运算符-逻辑运算式2

(y¦¦b)&&(y

¦¦a

)

1结果2结果例:要判断0≤x≤9是否成立:(

0<=x

)&&(

x<=9

)

如果没有括号:0

<=

x

&&

x

<=

9

等价

结果

结果

实例:比较下列两个逻辑表达式的执行过程式1

y¦¦b&&y¦¦a29运算符-逻辑运算式2(y¦¦b)&&(y运算符-位运算四、位运算符运算符

>> 按位右移(双目)(→)

<< 按位左移(双目)(→)

& 按位与(双目)(→)

∧ 按位异或(双目)(→)

¦ 按位或(双目)(→)

~ 按位反(单目)(←)真值表aba∧b~a~b000110 1110101011100030运算符-位运算四、位运算符运算符真值表aba∧b实例:已知:intx=7,y=10,z=1;设字长为8位

x&y= x&z=x

¦y=y¦

z=

x^y=

~

x=

–x=x<<2=y>>2=x>>2=

2(00000111

&00001010=0010) 1(00000111

&00000001=0001)15(00000111

¦00001010=1111)11(00001010

¦

00000001=1011)

13(00000111

^00001010=1101)

–8(

~

0000

0111)=1111

1000–728(00000111

<<2=0001

1100)2(00001010>>2=00000010)1(00000111

>>2=00000001)运算符-位运算31实例:已知:intx=7,y=10,z=1;设字长为8位说明关于>>:右移一位=缩小1/2关于<<:左移一位=扩大2倍关于~: 因为: ~

x=按位求反=求反运算 求负=求补=求反+1所以: 求反=求负–1

~x=-x-1

~7=–8~(–8)=7注意:1.位运算是对二进制的位进行运算2.只能对int型、char型和long型进行位运算运算符-位运算32说明运算符-位运算32运算符-自增自减运算五、自增自减运算符运算符(单目←)

++ 自增

–– 自减 ++和––为单目运算,只能作用于变量只能对int、char、long和指针变量进行运算功能: ++x <==>x=x+1

––x <==>x=x–1 (前缀)

x++ <==>x=x+1 x––

<==>x=x–1 (后缀)33运算符-自增自减运算五、自增自减运算符运算符(单目←)3运算符-自增自减运算自增(自减)有前缀和后缀之分。前缀形式:先自增(自减)再引用后缀形式:先引用再自增(自减)前缀与后缀的区别:

y=++x;<==>x=x+1;

y=x;

x先加1再赋值

y=x++;<==>y=x;

x=x+1;

x先赋值再加134运算符-自增自减运算自增(自减)有前缀和后缀之分。34运算符-自增自减运算实例实例(1)

++i;i++;

因为在表达式中没有其它运算,结果一样。(2)

x=1;y=++x;

结果:x=2,y=2

y=++x;<==>x=x+1;y=x;

在做赋值运算之前,x先加1,然后将x赋给y(3)x=1;y=x++;

结果:x=2,y=1y=x++;<==>y=x;x=x+1;先将x

赋值给y,然后x

再加135运算符-自增自减运算实例实例351.++和––运算法只能用于变量,不得用于常量和表达式.如:5++,(a+b)++均为不合法.几点注意:361.++和––运算法只能用于变量,不得用于常量和表达式2.++,–

–,的结合性为从右至左,而一般算术运算符为从左至右。如:–i++

"–"和"++"为同一优先级.–i++相当于–(i++)例: #include<stdio.h> main() {inti=3,j; j=-i++; printf("i=%d,j=%d\n",i,j); }运行结果:i=4,j=-3372.++,––,的结合性为从右至左,而一般算术运算符1.要慎用++、––运算符。有关表达式使用中的问题说明对于表达式(i++)+(i++)+(i++);

我们可能会认为应从左至右:3+4+5=12例:#include<stdio.h>main(){inti=3,j;

j=(i++)+(i++)+(i++);printf("i=%d,j=%d\n",i,j);}实际运行结果:i=6,j=9381.要慎用++、––运算符。有关表达式使用中的问题说明先对i进行3次自加,结果i的值为6,然后三个i值相加为18。3+3+3=9然后再把6赋给i值如果表达式j=(i++)+(i++)+(i++);改为:

j=(++i)+(++i)+(++i);则运行结果:

i=6,j=18这是因为运算时是先取i的原值:339先对i进行3次自加,结果i的值为6,然后三个i值2.

在表达式中,有的运算符为一个字符,有的为两个字符。一般地:自左至右尽可能多地将若干字符组成一个运算符。如:

i+++j,究竟理解为(i++)+j还是i+(++j)?402.在表达式中,有的运算符为一个字符,有的为两个字符。一般例:#include<stdio.h> main() {inti=3,j=3,m; m=i+++j; printf("i=%d,j=%d,m=%d\n",i,j,m); }运行结果:i=4,j=3,m=6对语句m=i+++j;系统理解为m=(i++)+j;41例:#include<stdio.h>运行结果:i=43.在函数调用时要注意参数的计算顺序,printf("i=%d,i=%d",i,i++);如:inti=3;intj=3;printf("j=%d,j=%d",j++,j);输出结果:i=4,i=3;j=3,j=3;原因:参数的计算顺序从右到左。423.在函数调用时要注意参数的计算顺序,printf("i=运算符-赋值与赋值组合运算六、赋值与赋值组合运算符运算符(双目←)

赋值运算: = 赋值组合运算:e1

op=e2

等于于:e1=e1

op(e2) 其中:op为下列10个运算符之一+–*/%<<>>|&∧

e1为可以进行赋制操作的变量

e2为合法的表达式例:x+=2; <==>x=x+2; x*=y+1; <==>x=x*(y+1);

不等价

x=x*y+1; x>>=2; <==>x=x>>2;43运算符-赋值与赋值组合运算六、赋值与赋值组合运算符运算符(双例:

a+=a–=a

a(设a12)又:a=5+(c=6)c=6,a=11a=(b=4)+(c=6)

b=4,c=6,a=10a=(b=10)/(c=2)b=10,c=2,a=5还可用复合赋值运算符作下列运算:步骤:

aa144.a–=a

aa=a–a

a=12–144=–132a+=–132a=a+(–132)=–26444例:a+=a–=aa(设4545运算符-条件运算七、条件运算符运算符(三目←)e1

?

e2

:

e3功能:如果表达式e1成立(e1值为非0),则执行表达式e2;否则(表达式e1不成立),执行表达式e3例:max=(a>b)?a:b; 求变量a与b的最大值

min=(a<b)?a:b;求变量a与b的最小值判断e1

?执行e2执行e3成立不成立46运算符-条件运算七、条件运算符运算符(三目←)例:max运算符-指针运算八、指针运算符运算符(单目

←)

&取变量的地址

*

取指针变量(所指向)的内容 注意:运算符&和“位与”运算是同一符号;运算符*

和“乘”运算是同一符号。只能从程序的上下文来区分运算符&和运算符*

的实际意义。47运算符-指针运算八、指针运算符运算符(单目←)47运算符-其它运算九、其它运算符运算符

. 取结构/联合的成员

–>通过指针取结构/联合的成员

() 改变表达式中的优先级关系

[] 数组下标

, 逗号,表达式从左向右顺序计算

(type)

e将e的数据类型强制转换为type

sizeof(opr) 求opr所占用的内存的字节数 48运算符-其它运算九、其它运算符运算符48运算符-其它运算实例实例:已知:intx,y,z;

y=(x=10,x+1);

答案:先执行x=10,然后再执行y=x+1

y=11,x=10

z=sizeof(int);

答案:z=2求int型数据占用的内存字节数量

z=sizeof(x);

答案:z=2求变量x占用的内存字节数量49运算符-其它运算实例实例:49例:

ina,b;

a=3

5,a

4;

b=(3*5,a*4);结果:a=15

b=60若:b=((a=3

5,a

4),a+5);

a+5b即20b.

3

5=15

a

a

4=60(此时a值仍未变)50例:ina,b;

a=35,a4;

b=(3

x=(a=3,6

3)赋值表达式,x的值18;

x=a=3,6

a逗号表达式,x的值3.逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。思考:若有:inta;a=(3*5,a*4);则:a的值为多少?答案:不确定注意:51x=(a=3,63)赋值表达式,x的值18;运算符的优先级与结合性按运算符的优先级分为15级按运算符的结合性分为2种

自左向右结合自右向左结合优先级不同时:运算符优先级的高低决定了进行运算的先后次序。优先级相同时:同优先级运算符的运算次序由结合性决定。例如:四则运算中的“先乘除,后加减”反映了运算符的优先级;“同级运算从左至右”反映了乘/除(加/减运算)的结合性。52运算符的优先级与结合性按运算符的优先级分为15级52运算符的优先级与结合性优先级运算符结合性优先级运算符结合性15()[]→8&→.->7^→14++--!~+-*&(type)sizeof←6|→5&&→13*/%→4||→12+-→3?:→11<<>>→2=+=-=*=/=&=^=|=<<=>>=←10<<=>=>→9==!=→1,→运算符优先级表53运算符的

温馨提示

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

评论

0/150

提交评论