版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1概述计算机程序设计涉及两个问题数据的描述----数据结构动作的描述----算法计算机程序的主要任务就是对数据进行处理。计算机中的数据不单是简单的数字数据,所有计算机处理的信息都是以一定的数据形式存储的。数据在计算机内存中保存,存放的情况由数据类型所决定。在程序设计中应注意不管是常量还是变量,都是有类型的,运算时必须注意数据类型的匹配。C语言提供哪些数据类型呢??第2章C语言的基础知识内容提要:1.C语言的基本要素2.数据
3.C语言的基本数据类型
4.运算初步
5.数据类型转换C程序设计课件设计制作:陈谋文32.1C语言的基本要素2.1.1C语言字符集
字符是C语言的最基本的元素,C语言字符集由字母、数字、空白、标点和特殊字符组成(在字符串常量和注释中还可以使用汉字等其它图形符号)。由字符集中的字符可以构成C语言进一步的语法成分(如,标识符,关键词,运算符等)。字母:A-Z,a-z数字:0----9下划线:_其他特殊符号:运算符号等特殊符号C程序设计课件设计制作:陈谋文42.1.2标识符用来标识变量名、符号常量名、函数名、数组名、类型名等实体的有效字符序列。标识符由用户自定义(取名字),
C语言标识符定义规则:1)标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。合法的标识符:sum,average,_total,Class,day,stu_name,p4050
不合法的标识符:M.D.John,$123,#33,3D64,a>b2)大小写敏感。C程序员习惯:变量名小写,常量名大写,但不绝对。例如:sum不同Sum。BOOK不同book。3)ANSIC没有限制标识符长度,但各个编译系统都有自己的规定和限制(TC32个字符,MSC8个字符)。(ANSI
AmericanNationalStandardsInstitute-美国国家标准化协会
)例如:student_name,student_number如果取8个,这两个标识符是相同的。4)标识符不能与“关键词”同名,也不与系统预先定义的“标准标识符”同名。5)建议:标识符命名应当有一定的意义,做到见名知义。C程序设计课件设计制作:陈谋文52.1.3关键词C语言中预定义的符号,它们有固定的含义
auto声明自动变量(一般不使用)const声明只读变量double声明双精度变量或函数float声明浮点型变量或函数int声明整型变量或函数short声明短整型变量或函数struct声明结构体变量或函数unsigned声明无符号类型变量或函数break跳出当前循环continue结束当前循环,开始下一轮循环else条件语句否定分支(与if连用)for一种循环语句long声明长整型变量或函数signed生命有符号类型变量或函数switch用于开关语句void声明函数无返回值或无参数,声明无类型指针case开关语句分支default开关语句中的“其他”分支enum声明枚举类型goto无条件跳转语句register声明积存器变量sizeof计算数据类型长度typedef用以给数据类型取别名(当然还有其他作用)volatile说明变量在程序执行中可被隐含地改变char声明字符型变量或函数do循环语句的循环体extern声明变量是在其他文件中声明(也可以看做是引用变量)while循环语句的循环条件return子程序返回语句(可以带参数,也看不带参数)static声明静态变量union声明联合数据类型if条件语句62.2数据2.2.1常量(分直接常量和符号常量)直接常量整型常量即整常数。有以下三种表示方法:十进制整数,如:789,-1234,0八进制整数,如:0123,-011以前导符0(不是O)开头十六进制整数,如:0x10、0Xde、0xf以前导符0x(或大写字母X)开头实型常量即实数。有两种表示方法:小数形式,如:0.123、.123、123.、0.0
指数形式,如:0.98765E1、9.8765e0、98.765e-1
规范化的指数形式:即在字母e(或E)之前的小数部分中,小数点左边有且只有一位非零的数字。如:1.234e-3,-5.67e4。一个实数在用指数形式输出时,是按规范化的指数形式输出的。字符常量,用单引号(即撇号)括起来的一个字符,如:’A’,’+’字符串常量,用双引号括起来的字符,如:”A”,”bookone”强调形式的合法性7字符串常量与字符常量的区别表示形式上的区别:字符常量由单引号作为定界符,而字符串常量由双引号作为定界符存储上的区别:字符常量在内存中占一个字节,而字符串常量在存储时系统自动在其结尾加上一个字符‘\0’作为结束标志,因此其在内存中占用的字节数为字符的个数加“1”不能将一个字符串常量赋给一个字符变量,C语言没有专门的字符串变量,若要将一个字符串存放在变量中,必须使用字符数组8符号常量:用标识符代表常量
定义格式:#define符号常量常量
例如:#definePI3.1415926/*求圆的面积程序*/#definePI3.1415936#defineR2#include”Stdio.h”main(){floats;s=PI*R*R;printf(”面积=%6.3f\",s);}一般用大写//宏定义92.2.2变量1.变量的概念变量:以标识符为名字,其值可以变的量。变量的属性:变量名、变量类型、变量的值注意:C语言中变量必须“先定义(声明),后使用”2.变量的定义定义格式:类型标示符变量名1,变量名2,……如:intx,y,z;
unsignedu,v;
注:一般放在一个函数的开头部分的声明部分里3.变量的赋值定义时可以赋初值,如:intx=10,y;inti=10,j=1;
而inta=b=c=d=10;是错误的
!正确的是inta=3,b=3,c=3,d=3;
102.3C语言的基本数据类型2.3.1数据类型概述
C语言程序的数据处理能力很强。C语言的数据类型可归纳如下:数据类型基本类型复杂类型(构造类型)指针类型
空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度型双精度型112.3.2整型定义:没有小数部分的数据。整形数据分类:基本型短整型长整型无符号型类型名称(英文)占用的字节数取值范围[signed]int4-2147483648~2147483647unsigned[int]40~4294967295[signed]short[int]2-32768~32767unsignedshort[int]20~65535[signed]long[int]4-2147483648~2147483647unsignedlong[int]40~4294967295每一类型又包含:常量变量12
实型数据即实数数据类型,在C语言中又称浮点型。实型数据又分两种类型:单精度(float)双精度(double)2.3.3实型(在C语言中,实数只采用十进制)类型(中文)类型(英文)占字节数有效数字数值范围单精度float46~7-3.4*1038~3.4*1038双精度double815~16-1.7*10308~1.7*10308和整型数同样,每一类型中又含:常量和变量。13字符型数据有两种:可见字符:如:’A’、’
C’、’
s’、’!’、’?’都是合法的字符不可见字符:如换行、退格等控制字符。在C语言中用转义字符常量表示控制字符。
转义字符:又称反斜线字符,它是以一个“\”开头的字符序列。意思是将反斜杠(\)后面的字符转换成另外的意义,常用的转义字符及其作用见P19:表2.4
注意:转义字符常量只代表一个字符,如‘\n’(代表一个控制字符即“换行”符)、‘\101’(代表字符常量‘A’)、‘\141’(代表字符常量‘a’)、‘\x41’(代表字符常量‘A’)2.3.4字符型转义字符转义字符的意义
\n回车换行
\t横向跳到下一制表位置
\v竖向跳格
\b退格
\r回车
\f走纸换页
\\反斜线符“\”
\‘
单引号符
\”
双引号符
\a鸣铃
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符14字符型变量
字符变量用来存放字符常量,一个字符变量只能存放一个字符(在内存中占一个字节)。字符变量用关键字char进行定义,定义的同时可以赋初值。如
charch1=‘*’,ch2=‘A’,ch3;字符数据在内存中的存储形式及其使用方法
A、存储形式:字符变量在内存中占一个字节,将一个字符常量放到一个字符变量中,不是把字符本身放到内存单元中,而是将该字符的相应的ASCII代码值放到存储单元中,如有以下语句:c1、c2的值在内存中实际是以二进制形式存放的,如图(b)
charc1,c2;c1=‘x’;c2=‘y’;则内存中变量c1、c2的值如图(a)120121c1c2(a)0111100001111001c1c2(b)15
字符型数据的使用:由于字符型数据在内存中的存储形式与整型数据的存储形式类似,所以字符型数据和整型数据之间可以通用;字符型变量可以作为整型变量来处理。分析以下程序的运行结果,理解字符型数据的使用方法:main(){charc1,c2,c3;inti;c1=97;c2=98;c3=99;i=‘c’;printf(“%c%c%c\n”,c1,c2,c3);printf(“%d%d%d\n”,c1,c2,c3);printf(“%c%d\n”,i,i);}程序运行时输出如下:
abc979899c99162.4运算初步C语言的运算符归类如下:算术运算符(+-*/%)关系运算符(><==>=<=!=)逻辑运算符(!&&||)位运算符(<<>>~|^&)赋值运算符(=及其扩展赋值运算符)条件运算符(?:)逗号运算符(,)指针运算符(*和&)求字节数运算符(sizeof)强制类型转换运算符((类型))分量运算符(.)下标运算符([])其它(如函数调用运算符())172.4.1算术运算算术运算符
C语言中算术运算符有:+(加或正值)、-(减或负值)、*(乘)、/(除)、%(模或求余:即求两个整数相除后的余数)注:①对求余运算,要求两数必须为整型数据,当运算量为负数时,所得结果的符号随机器而不同,在TURBOC中,符号与被除数相同。例如:17%-3的结果为2,-19%4的结果为-3;
②两个整数相除,结果为整数,舍去小数部分。如5/3=1,-7/2=-3,5/-3=-1(例C2-601.c)
③字符型数据可以和数值型数据混合运算。182.算术表达式
1)定义
用算术运算符和括号将运算对象(操作数)连接起来的、符合C语法规则的式子。如(x-y)*z+z/3.14-’a’2)运算符的优先级、结合性
C语言规定了运算符的优先级和结合性,在对表达式求值时,先按运算符的优先级别高低次序执行,若在一个运算对象两侧的运算符的优先级别相同,则按“结合方向”处理。(见P22表2.5)19优先级结合性优先级运算符结合性1()[]->.左→右2!~(按位反运算符)++---(负号运算符)(type)(类型转换)
*(取内容运算符)
&(取地址运算符)
sizeof右→左3*(乘法运算符)
/(除法运算符)
%(取余运算符)左→右4+-(减法运算符)左→右5>><<(右、左移位)左→右6<(小于)<=(小于等于)>(大于)>=(大于等于)左→右7==(等于)!=(不等于)左→右8&(按位与运算符)左→右9^(按位异或运算符)左→右10|(按位或运算符)左→右11&&(逻辑与运算符)左→右12||(逻辑或运算符)左→右13?:(条件运算符)右→左14=+=-=*=/=%=^=|=&=>>=<<=(复合的赋值运算符)右→左15,(逗号运算符)左→右20运算符的优先级、结合性举例:表达式x-y+z
y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。赋值运算符是最典型的右结合性运算符。表达式x=y=z由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。自右至左的结合方向称为“右结合性”。
表达式10+5*2%6-3/2的值是多少?213)
类型转换整型、单精度实型、双精度实型、字符型数据间可以混合运算。
如:25+6.8+’A’
不同类型的数据参加运算时,系统将自动进行类型转换,使两者具有同一种类型,然后再进行运算。
224)取负值运算符C语言取负值运算符为“-”,是一元运算符。例如:-x,-b取负值运算符的优先级高于算术运算符的优先级。例如:y=-a-b*c+a/c
运算顺序是:
y=-a-b*c+a/c
①②③④⑤232.4.2赋值运算1.赋值运算符
在C语言中,“=”符号称为赋值运算符,其作用是将一个数据(或一个表达式的值)赋给一个变量,如:x=-5242.赋值表达式
(1)赋值表达式的构成
由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式,其形式如下:
变量名=表达式
使用赋值运算符和赋值表达式应注意的地方:
A.赋值运算符不同于数学中的“等于号”。如n=n+2,其作用是取变量n中的值加2后再放入到变量n中,即使变量n
中的值增2。因此赋值表达式的求解过程是:先求赋值运算符右侧的“表达式”的值,再将此值赋给左边的变量。x+a=a是错误的,因为“=”左边不是变量。
B.赋值表达式的值就是被赋值的变量的值,如“a=3”这个赋值表达式的值为3(变量a的值也是3)
C.赋值表达式中的“表达式”又可以是一个赋值表达式。如:a=(b=3),整个赋值表达式的值为325
(2)优先级赋值运算符的优先级别只高于逗号运算符,比其它任何运算符的优先级都低。例如:x=6+x*a+sin(y)
先求出6+x*a+sin(y)的值,再执行赋值运算,将结果赋给变量x。
(3)结合性
赋值表达式按照自右向左的顺序结合。如:x=y=z=8*a/b等价于:x=(y=(z=8*a/b))
26例:分析以下赋值表达式及变量的值
a=b=c=d=5
a=5+(c=6)
a=(b=4)+(c=6)
a=(b=10)%(c=2)(赋值表达式的值为5,a、b、c、d值均为5)(赋值表达式的值为11,a值为11,c值为6)(表达式的值为10,a值为10,b值为4,c值为6)(表达式的值为0,a值为0,b值为10,c值为2)273.复合的赋值运算符
在赋值符“=”之前加上其他的双目运算符,可以构成复合赋值符。C规定可以使用10种复合赋值运算符:即:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
后5种是有关位运算的,在此先介绍前5种,如:
a+=3等价于a=a+3b-=4等价于b=b-4c*=a+5等价于c=c*(a+5)d/=6-b等价于d=d/(6-b)e%=7等价于e=e%7采用复合赋值符的原因:
(1)简化程序,使程序精炼
(2)提高编译效率28赋值表达式也可以包含复合的赋值运算符而形成复合的赋值表达式。如:
a+=a-=a*a
等价于思考:
若的a初值为3,求整个赋表达式值的值和a最后的值答案:a=-12a=a+(a=a-(a*a))292.4.3自增(++)、自减(--)运算符
作用:使变量的值增1或减1,相当于赋值语句i=i+1或i=i–1,但运算符在变量前或后是有区别的,如:
++i,--i
(在使用i之前,先使i的值加(减)1)
i++,i--
(在使用i之后,使i的值加(减)1)又如若y的值为1,则执行下面的语句:
x=--y;
(y的值先变成0,再赋给x,x的值为0)
x=y--;
(先将y的值1赋给x,x的值为1,然后y变成0)再如:b=-3;
printf(“%d”,++b);输出“-2”。若改为
printf(“%d”,b++);则输出“-3”☻正确的语义解释是:“前自增”和“后自增”都是先将变量加1,然后区别在于加1后返回值,后自增在加1后返回的是原来的,而前自增返回的是加1后新值。30注意之点:++、--是单目运算符,其本质是给变量赋值,因此其运算对象只能是变量,不能是常量或表达式。如:9++、(x-y)++是不合法的。++、--无论是作为前缀(++i、--i)还是作为后缀(i++、i--)运算符,对于变量本身来说自增1或自减1都具有相同的效果,但作为表达式来说却有着不同的值(前面的例子已经说明了这一点)。++和--的结合方向是“自右至左”。例:-i++等价于-(i++)(4)C的运算符和表达式使用灵活,利用它可以巧妙的处理许多在其他语言中难以处理的问题,但不要写出别人看不懂的、也不知道系统会怎样执行的语句或程序。31分析程序运行结果:voidmain(){inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d\n",p,q,i,j);}322.5.1自动转换
整型、实型、字符型数据间可以混合运算,在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。其转换规则见下图doublelongunsignedintfloatchar,short高低注:横向向左的箭头表示必定的转换纵向的箭头表示当运算对象为不同类型时转换的方向上述类型的转换是由系统自动完成的2.5数据类型转换332.5.2赋值转换
前面讲到数值型数据间的混合运算要进行类型转换,在进行赋值运算时,当左右两侧的类型不一致时,也要进行类型转换。注意:这种转换仅限于数值型或字符型数据之间,通常称为“赋值兼容”;对于另外一些数据,如后面将要讨论的地址值就不能赋给一般的变量,称为“赋值不兼容”实型数据与整型数据、单精度数与双精度数之间的赋值规则容易理解,不同类型的整型数据间赋值看似复杂,其实归根到底就是一条:按存储单元中的存储形式直接传送。C语言使用灵活,在不同类型数据之间赋值时,常常会出现意想不到的结果,而编译系统并不提示出错,全靠编程者的经验来找出问题,因此,这部分内容不必死记,最好的方法是通过上机实践来掌握。342.5.3强制类型转换
作用:
将一个表达式转换成所需的类型
格式:
(类型名)(表达式)
如:(long)(a-b)(double)x(float)(5%3)
说明:a.表达式应用括号括起来
b.在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型和值未发生变化352.3.3逗号运算符和求字节数运算符1.逗号运算符和逗号表达式
“,”是C语言提供的一种特殊运算符,用逗号将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高压燃气管道绿化带清理协议合同三篇
- 智能仓储系统库存管理标准操作手册
- 大型企业培训体系搭建操作手册
- CN119929031A 自行车座垫骨架、座垫和自行车
- 心肾综合征诊疗的临床实践指南(2025版)课件
- 扬尘治理达标实施方案要求
- 仓储作业标准化管理手册
- 2026年技术升级支持请求函6篇
- 建筑装饰密封施工缝质量控制规范
- 2026年大疆售前技术支持工程师题
- (二模)2026年合肥市高三第二次教学质量检测语文试卷(含答案)
- 广东省广州市白云广雅中学2024-2025学年八年级下学期数学期中考试卷(含答案)
- 2025年四川省烟草专卖局(公司)招聘考试笔试试题(含答案)1
- 2026年西部计划志愿者招募考试题库及答案
- 2025-2026人教版高中地理选择性必修二期末综合检测练习卷(含解析)
- 产业链数字化全链条协同机制研究
- 2026年水利工程质量检测员网上继续教育考试题库200道完整版
- GB/Z 141-2025蓄电池和蓄电池组起动用铅酸蓄电池减少爆炸危险的装置性能检验的试验方法
- 校服代售合同范本
- 2026年河南交通职业技术学院单招职业适应性考试题库及参考答案详解
- 前瞻性队列研究的随访失访控制策略
评论
0/150
提交评论