已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 数据类型、运算符 与表达式,2.1 一个简单的C程序例子 2.2 C程序常见符号分类 2.3 数据类型 2.4 常量 2.5 变量 2.6 常用运算符及表达式 2.7 赋值和表达式中的类型转换,2.1:一个简单的C程序例子,#include /*函数功能:计算两个整数相加之和 入口参数:整型数据a和b 返回值: 整型数a和b之和 */ int Add(int a, int b) return (a + b); /*主函数*/ main() int x, y, sum = 0; printf(“Input two integers:“); scanf(“%d%d“, /*输出x和y相加之和*/ ,并列的两个函数 其中一个是 程序的入口,程序注释,编译预处理命令,下面针对一般的C程序作几点说明: (1)一个完整的C语言程序可以由多个函数组成,但必须 包含一个且只能包含一个名为main的函数(主函数)。程序总是从main函数开始执行,与它在程序中的位置无关。 (2)在一个C函数模块中,由左右花括号 括起来的部分是函数体,其中的语句系列实现函数的预定功能。 (3)函数首部包括函数返回值类型、函数名、形参类型、形参名的说明。有时可以没有形参,但()不能省略。 (4) C程序中的每一个语句必须以“;”结束,但书写格式是自由的。 (5)#include是编译预处理命令,其作用是将双引号或尖括号括起来的文件内容读到该命令的位置处。 (6)在C程序的任何位置处都可以用/* */作注释,以提高程序的可读性。,2.2 C程序常见符号分类,关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 数据类型修饰符int,控制语句return等 标识符(Identifier) 系统预定义标识符,main,printf 等 用户自定义标识符,通常用做变量名、 函数名Add, x, y 等 运算符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant),标识符命名,变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name variableName 不允许使用关键字作为标识符的名字 int, float, for, while, if等 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k,Windows 风格,UNIX 风格,2.3 数据类型(Data Type),数据类型总表,数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3.数据表示形式 4.可参与的运算种类,b, B, KB, MB, GB, TB,如何衡量数据类型所占空间大小? bit,中文叫法:位 Byte,中文叫法:字节 Kilobyte(KB),中文叫法: K Megabyte(MB),中文叫法:兆 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T,1 TB = 1,024 GB,1 GB = 1,024 MB,1 MB = 1,024 KB,1 KB = 1,024 B,1 B = 8 b,数据类型总表(数据类型修饰符),说明:数据类型所占字节数随机器硬件不同而不同.,标识符命名规则,在C语言中,变量名的命名要符合以下几个规则: 组成: 只能由英文字母、数字、下划线组成,且第一个字母必须是英文字母或下划线 大小写敏感 不能使用关键字 不能与库函数名重名 长度: Turbo C系统下的有效长度为1至32个字符。 命名原则: 见名知意 不宜混淆 如l与I, o与0,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days #33 lotus_1_2_3 char ab _above $123,M.D.John,3days,#33,char,$123,ab,枚举常量: 直接常量: 整型常量 实型常量 字符常量 字符串常量,定义:程序运行时其值不能改变的量(即常数) 分类: 符号(宏)常量:,2.4常量,1.整型常量的表示形式,2.4.1整型常量,在C语言中,有3种类型的整型常量:基本整型常量、长 整型常量、无符号整型常量。 基本整形常量三种形式: 十进制整数:由数字09和正负号表示.如 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0x开头,后跟09,af,AF表示. 如0x123,0xff,例 12 与 12L,例 30000 为int型 65536 为long int 型,问题: 0123 = ( )10 0x123 = ( )10 0xff = ( )10,表示形式: 十进制小数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5,实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float 型 在实型常量后加字母lf或LF,认为它是long double 型,2.4.2 实型常量(实数或浮点数),定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101 -A 012 -n 376 - x61 -a 60 -0 483 -(),例: A-101-x41-65,如 A65, a97, 048 , n10,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“Turbo C“); ,运行结果:(屏幕显示) A B C Isay:”How are you?” C Program Turbo C,2.4.3 字符常量,字符常量与字符串常量不同,2.4.4 字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字 符串结束标志,2.4.5 宏(符号)常量,一般形式: #define 标识符 字符串(宏体) 功能:用指定标识符(宏名)代替字符串(宏体),宏体可缺省,表示宏名 定义过或取消宏体,定义位置:任意(一般在函数外面) 作用域:从定义命令到文件结束 #undef可终止宏名作用域 格式: #undef 宏名,宏定义可嵌套,不能递归,引号中的内容与宏名相同也不置换,宏定义中使用必要的括号(),宏展开:预编译时,用宏体替换宏名-不作语法检查,如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2); 宏展开:printf(“2*PI=%fn”,3.14159*2);,例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展开:var= 80+40 *2;,所谓“枚举”是指一一列举出来. 声明枚举类型用enum开头 例如: enum weekdaysun,mon,tue,wed,thu,fri,sat; 声明了一个枚举类型enum weekday, 可以用此类型来定义变量。 如:enum weekday workday,week-end; workday和week-end被定义为枚举变量,它们的值只能是 sun到sat之一。 例如:workday=mon;week-end=sun;是正确的。 (1) 在C编译中,对枚举元素按整型常量处理,故称枚举常量。 它们不是变量,不能对它们赋值。 例如:sun=0;mon=1;是错误的。,2.4.6 枚举常量,(2) 枚举元素作为整型常量,它们是有值的,C语言编译按定 义时的顺序使它们的值为0,1,2,。 在上面定义中,sun的值为0,mon的值为1sat为6。如果 有赋值语句:workday=mon; workday变量的值为1。这个整数是可以输出的。 如:printf(“%d“,workday);将输出整数1。 也可以改变枚举元素的值,在定义时由程序员指定,如:enum weekdaysun=7,mon=1,tue,wed,thu,fri,satworkday, week-end;定义sun为7,mon=1,以后顺序加1,sat为6。 (3) 枚举值可以用来做判断比较,用在条件语句中。如 if(workday=mon) if(workdaysun),(4) 一个整数不能直接赋给一个枚举变量。 如:workday=2;是不对的。它们属于不同的类型。 应先进行强制类型转换才能赋值。如: workday=(enum weekday)2; 它相当于将顺序号为2的枚举元素赋给workday,相当于 workday=tue; 甚至可以是表达式。如: workday=(enum weekday)(5-3); (5)枚举元素代表的是一个整数值,是一个整数值的名字, 并不是字符串,因此可以用于使用整数值的任何场合,但不 能作为字符串直接输入和输出。 workday=2; printf(“%s”, workday);/*错误的*/,1、 变量的声明与初始化 概念:其值可以改变的量 变量定义的一般格式: 数据类型 变量名1,变量名2,变量名n;,变量初始化:定义时赋初值,例: int a,b,c; float data;,决定分配字节数 和数的表示范围,合法标识符,例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;,变量的使用:先定义,后使用,例1 int student; stadent=19; /Undefined symbol statent in function main,变量定义位置:一般放在函数开头,2.5 变量, 一个类型说明语句可以同时定义多个同类型的变量,各变 量之间用逗号“,”分隔。 用户定义的变量名只是用来标识内存中的一个具体的存储 单元,在这个存储单元中存放的数据为变量的值。在未对这些 变量赋值前,这些变量中(即存储空间中)的值是随机的 C语言允许在定义变量的同时为变量赋初值。 在为整型变量初始化或赋值时,C编译系统自动将被赋数 据转换成与相应变量的类型一致。 由于各种整型变量所占的字节数有限,因此,它们所能 存放的整数有一定的范围。,变量定义说明,整型变量 占字节数随机器不同而不同,一般占一个机器字 shortintlong 可用sizeof(类型标识符)测量,实型变量 float:占4字节,提供7位有效数字 double:占8字节,提供1516位有效数字,字符型变量 字符变量存放字符ASCII码 char与int数据间可进行算术运算,例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/,例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */,例1 /*ch2_003.c*/ #include #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); ,运行结果: total=37.500000, ch1=d,2、 const类型修饰符,用const修饰定义的变量为常量 const float pi = 3.1425926; const常量与宏常量相比的优点是什么? const常量有数据类型 某些集成化调试工具可以对const常量进行调试,#define pi 3.1425926,3、 数据在内存中的存储格式,整型 实型 N=S2j 字符型,所占位数决定 实数的取值范围,所占位数决定 实数的精度,4、char型与int型之间的关系,例:小写字母转换为大写字母,#include main() char ch = b; printf(“%c, %dn“, ch, ch); ch = b - 32; printf(“%c, %dn“, ch, ch); ,#include main() char ch = b; printf(“%c, %dn“, ch, ch); ch = b - (a - A) ; printf(“%c, %dn“, ch, ch); ,b, 98 B, 66,b, 98 B, 66,2.6 运算符和表达式,学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,基本算术运算符: + - * / % 结合方向:从左向右 优先级: - -* / % - + - (2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,余数的符号与被除数的符号相同,例 5/2 = -5/2.0 =,例 5%2 = -5%2 = 12%(-7) = (- 12 )%7 5%1 = 5.5%2,例 5/2 = 2 -5/2.0 = -2.5,例 5%2 = 1 -5%2 = -1 12%(-7) = 5 (- 12 )%7 = -5 5%1 = 0 5.5%2 (),一.算术运算符和表达式,关系运算符 种类:= != 结合方向:自左向右 优先级别:,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,二.关系运算符和表达式,关系运算注意:,例 若a=0; b=0.5; x=0.3; 则 a=x=b的值为,0,例 5278在C中是允许的, 值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为 A100 结果为,1,0,二.关系运算符和表达式,关系运算注意:,例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,二.关系运算符和表达式,逻辑运算符 种类: ! & | 逻辑运算真值表,C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,三.逻辑运算符和表达式,例 ab&xy a=b|x=y !a|ab,/ (a=x) & (x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),三.逻辑运算符和表达式,优先级:,结合方向:,优先级:,结合方向:,例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0) 值为1,短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a (m=ab)&(n=cd),/结果m=0,n=1,优先级:,结合方向:,简单赋值运算符 符号: = 格式: 变量名=表达式 作用:将一个数据(常量或表达式)赋给一个变量,复合赋值运算符 种类:+= -= *= /= %= = = &= = |= 含义: exp1 op= exp2 exp1 = exp1 op exp2,例 a=3; d=func(); c=d+2;,四.赋值运算符和表达式,说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例 3=x-2*y; a+b=3; ,例 float f; int i; i=10; f=i; 则 f=10.0,例 int i; i=2.56; /结果i=2;,例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2),/表达式值为5,a,b,c值为5,/ b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,四.赋值运算符和表达式,说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例: a=12; a+=a-=a*a,例: int a=2; a%=4-1; a+=a*=a-=a*=3;,/a=-264 等价于a=a+(a=a-(a*a),/a=0 等价于a=a+(a=a*(a=a-(a=a*3),四.赋值运算符和表达式,作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1),例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,五.自增、自减运算符+ -,作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1),说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ - (2) (3) (4),例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3,例 -i+ i=3; printf(“%d”,-i+);,五.自增、自减运算符+ -,形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15(级别最低) 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中,例 a=3*5,a*4 a=3*5,a*4,a+5 例 x=(a=3,6*3) x=a=3,6*a 例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,六.逗号运算符和表达式,形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15(级别最低) 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中,例: /*ch2_6.c*/ #include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(“x=%dn“,x); ,运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宽城满族自治县网格员招聘考试参考题库及答案解析
- 人教部编版(五四制)四年级下册2乡下人家教学设计
- 2026中国鞋材研发制造产业技术革新趋势解析及市场竞争分析报告
- 2025届河南省许昌市数学三下期中教学质量检测模拟试题含答案解析
- 高中物理 第十三章 光 1 光的反射和折射教案 新人教版选修3-4
- 2026年九阳股份招聘面试题及答案
- (正式版)DB11∕T 839-2017 《行道树栽植与养护管理技术规范》
- 鼾症知识试题及答案集萃
- 游戏宫-快乐的夏令营(教学设计)人音版(2012)音乐一年级下册
- 四年级英语下册 Unit 7 What's the matter第4课时教案 译林牛津版
- T-CAS 938-2024 家用便携式永磁体富氧机
- 2025选择性必修上册成语【释义+根据释义写成语】
- 教师声乐培训课件
- 百师联盟2025届高三10月一轮复习联考英语试卷(含答案详解)
- DL∕T 2447-2021 水电站防水淹厂房安全检查技术规程
- 电力线路安装合同范本
- 公有云技术及应用高职全套教学课件
- 预防艾滋病、梅毒和乙肝母婴传播工作规范(2020年版)
- 电子元器件封装识别与手工焊接技术-2
- 瑶浴功效与作用讲义课件
- 14D504接地装置安装图集
评论
0/150
提交评论