c语言第2章数据类型运算符和表达式.ppt_第1页
c语言第2章数据类型运算符和表达式.ppt_第2页
c语言第2章数据类型运算符和表达式.ppt_第3页
c语言第2章数据类型运算符和表达式.ppt_第4页
c语言第2章数据类型运算符和表达式.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第2章 数据类型、运算符与 表达式 林淑玲 1 *2 知识目标:掌握C语言的数据类型;深刻理解常量与 变量;深刻理解整型、实型和字符型数据常量和变量的表 示方法;掌握赋值运算符和赋值表达式、变量的赋值方法 ;理解各种数据类型之间的混合运算。 能力目标:能正确定义“班级学生成绩管理系统”中 的相关数据的类型。 第2章 数据类型、运算符与表 达式 *3 内容提要 基本数据类型; 常量和变量; 标识符命名; 常用运算符和表达式; 运算符的优先级与结合性 *4 一个简单的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*/ sum = Add(x, y); /*调用函数Add计算x和y相加之和*/ printf(“sum = %dn“, sum); /*输出x和y相加之和*/ *5 简单的C语言程序总结 总结总结CC程序:程序: (1) C程序是由函数构成的。 这这使得程序容易实现实现 模块块化 。 (2) 一个函数由两部分组组成: 函数的首部:例2.1中的Add函数首部 int Add(int a, int b) 函数体:花括号内的部分。若一个函数有多个花括号,则则 最外层层的一对对花括号为为函数体的范围围。 函数体包括两部分 : 声明部分: int x, y, sum = 0;可缺省 执执行部分:由若干个语语句组组成。可缺省 *6 简单的C语言程序总结 (3) C程序是由函数构成的。总是从main函数开始执 行的,与main函数的位置无关。 (4) C程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上,C程序没有行号。 (5) 每个语句和数据声明的最后必须有一个分号。 (6) C语言本身没有输入输出语句。输入和输出的操 作是由库函数scanf和printf等函数来完成的。 (7)可以用/* */进行注释。 *7 源程序的结构特点 1.一个语言源程序可以由一个或多个源文件组成。 2.每个源文件可由一个或多个函数组成。 3.一个源程序不论由多少个文件组成,都有一个且只能有一 个main函数,即主函数。 4.源程序中可以有预处理命令(include 命令仅为其中的一 种),预处理命令通常应放在源文件或源程序的最前面。 5.每一个说明,每一个语句都必须以分号结尾。但预处理命 令,函数头和花括号“”之后不能加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已 有明显的间隔符,也可不再加空格来间隔。 7.C语言程序中可加任意多的注释。通常情况下,“/”注 释一行,“/* */”注释中间的所有内容。注释不参加 编译,因此不进行错误查找处理。 8.用户定义的变量或函数等其他的量必须先定义后使用。 *8 书写程序时应遵循的规则 C语语言程序书书写中应应当注意的问题问题 (1) 用分号作为语为语 句的结结束符,不可省略(即便是最 后一个语语句也不能省略)。 3种不能加分号的情况:预处预处 理命令后、定义义函数名 称(函数头头)后、花括号()之后。 (2) 第一行是预处预处 理命令行,其中的指令必须须以符号 “#”开始,所指定的头头文件也必须须用引号或尖括号标标 识识。 例如,#include “stdio.h“ 或 #include 。 (3) 主函数main()后的括号不能缺省。 *9 书写程序时应遵循的规则 编码风编码风 格 1)源程序通常使用小写字母,只有符号常量或其他特 殊用途的符号才大写。 2)C语语言可以一个语语句占一行,也可多个语语句占一行 。但后者不规规范,所以并不提倡。 3)程序代码码采用缩进缩进 格式。 4)建议议同一层层次的语语句应应左对齐对齐 。 5)用花括号对对()表示各个结结构层层次的范围围。它可 以表示函数,也可以表示循环环体等 *10 书写程序时应遵循的规则 6)一个语句中不同成分之间应使用空格隔开。标识符、 关键字之间必须至少加一个空格以示间隔。若已有明 显的间隔符,也可以不再加空格来间隔。 7)程序中的空白行不影响程序的执行。可以为使程序清 晰而添加空行,但不要在一个语句中间加空行。 8)建议使用注释语句,以增加程序的可读性。 9)程序块的分界符(即花括号“”和“”)应各独占 一行并且位于同一列,同时与引用它们的语句左对齐 。 *11 C程序常见符号分类 关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 标识符(Identifier) 系统预定义标识符 用户自定义标识符 运算符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant) *12 任务1 “学生成绩管理系统”中相关数据设计 1任务情境 “学生成绩管理系统”中的数据有常量与变量、简单类 型数据和复杂类型数据。这些变量有简单类型变量,还有一 些复杂类型变量,如数组、结构体、共用体、指针类型等变 量。 在这里我们只对“学生成绩管理系统”中的数据做一些 简单的分析。“学生成绩管理系统”中的学生信息主要有:学 号、性别、年龄、三门功课成绩、总成绩和平均成绩,再加 上一些与计算全班成绩有关的最高成绩、最低成绩等。如学 号、性别这类数据只是起到描述一些基本信息的作用,通常 情况下不进行算术运算;而年龄、三门功课成绩、总成绩和 平均成绩以及最高成绩、最低成绩等这类数据有可能进行算 术运算。所以针对这二类数据我们在定义数据类型时,要根 据实际情况选择不同的数据类型。 下面我们通过相关理论的学习,掌握如何将“学生成绩 管理系统”中的数据定义成C语言能够处理的数据。 *13 2知识必备 数据类型 常量 变量 *14 数据类型(Data Type) 数据为什么要区分类型? 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类 从基本数据类型到抽象数据类型 无数据类型 基本数据类型 构造数据类型 抽象数据类型 *15 数据类型(Data Type) 数据类型 基本类型 构造类型 指针类型 空类型 整型 实型(浮点型) 字符型 枚举类型 数组类型 结构体类型 共用体类型 单精度实型 双精度实型 基本整型 长整型 短整型 无符号整型 *16 标识符命名 变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name VariableName, variableName 不允许使用关键字作为标识符的名字 int, float, for, while, if等 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k Windows Windows 风格风格 UNIX UNIX 风格风格 *17 b, B, KB, MB, GB, TB Megabyte(MB),中文叫法:兆 Kilobyte(KB),中文叫法: K Byte,中文叫法:字节 bit,中文叫法:位 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T 1 TB 1 TB = 1,024 GB1,024 GB 1 GB1 GB = 1,024 MB1,024 MB 1 MB1 MB = 1,024 KB1,024 KB 1 KB1 KB = 1,024 B1,024 B 1 B 1 B = 8 b8 b *18 b, B, KB, MB, GB, TB 一个位有多大? 只能是“0”或者“1”,这叫二进制 一个字节有多大? 保存一个字符(英文字母、数字、符号) ASCII(美国标准信息交换码)编码 两个字节保存一个汉字 GB编码 可以表示数字0255 *19 基本数据类型 int 整数,在目前绝大多数机器上占4个字节。TC2中 是2个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数 *20 数据类型修饰符 short short int,短整数,一般2个字节长。通常简写为short long long int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长 。 signed 用来修饰char、int、short和long,说明他们是有符号的整数 (正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰 符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数 (正整数和0) *21 0111111111111111 最高位 假设编译系统为 int 型整数分配 2 个字节的存储空间,即 16 个二 进制位中最高位是符号位,以 32767 为例,其在内存中的存储形式 为: 有符号数与无符号数 1111111111111111 最高位 若是无符号数, 该数是 65535 , 若是有符号数,该 数是 -1 。 1000000000000001 最高位 1111111111111110 最高位 1111111111111111 最高位 1111111111111111 最高位 -1 的原码 -1 的反码 -1 的反码加 1 后的结果 -1 的补码 *22 uTC2中int的范围是-3276832767 u如果我们给它一个小于-32768或者大于32767的 数会如何呢? u现场演示 小蛇能吞小蛇能吞 下大象吗下大象吗 ? 超出取值范围会怎样? *23 u一台安装了Windows 95/98的机器,如果连续运 行49.7天没有重新启动,可能死机 u原因: Windows自启动时刻起,有一个计数器,记录系统已 经运行了多少毫秒。这个计数器是个unsigned long 类型的变量 unsigned long 的最大值是:4294967295 一天有 24*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805 当49.7天的时候,此计数器会溢出,引起死机 溢出(Overflow)造成的危害 *24 如何选择恰当的数据类型? u 具体问题具体分析 1 + 2 + 3 + 4 + 1! + 2! + 3! + 4! + 13 + 23 + 33 + 43 + *25 使用变量要注意 不要对类型或变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 现场演示程序在Turbo C2.0和Visual C下的运行结果 注意!注意! #include mainmain()() printfprintf(“Data(“Data type Number of bytesn“); type Number of bytesn“); printfprintf(“- -n“);(“- -n“); printfprintf(“char(“char % %dndn“, “, sizeof(charsizeof(char);); printfprintf(“int(“int % %dndn“, “, sizeof(intsizeof(int);); printfprintf(“short(“short intint % %dndn“, “, sizeof(shortsizeof(short);); printfprintf(“long(“long intint % %dndn“, “, sizeof(longsizeof(long);); printfprintf(“float(“float % %dndn“, “, sizeof(floatsizeof(float);); printfprintf(“double %dn“, sizeof(double);(“double %dn“, sizeof(double); *26 变量 变量定义语句: 类型关键字 变量名1,变量名2,变量名3, 定义变量时初始化方式: 类型关键字 变量名1=常量1,变量名2 =常量2 , *27 变量声明 使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数 char esc = a; int i = 1; int sum = 0; float eps = 1.0e-5; *28 阶码符号阶码的数值尾数符号尾数的数值 阶码j尾数S 实型数据在内存中的存储 1234.56=0.123456X104 =1.23456X103 =12345.6x10-1 N=S X r j 有效位数 (精度) 取值范围 *29 实型数据提供的有效数字位 数 float型数据提供7位有效数字 double型数据提供16位有效数字 使用不当导致舍入误差 #include mainmain()() floatfloat a; a; doubledouble b; b; a = 123456.789e4;a = 123456.789e4; b = 123456.789e4;b = 123456.789e4; printfprintf(“%fn%fn“,a,b);(“%fn%fn“,a,b); *30 #include main() float f; f = 123.456; if (f = 123.456) printf(“f is equal to 123.456 indeed.“); else printf(“In fact, f is equal to %fn“, f); 运行结果会是什么? float.cfloat.c 浮点数的陷阱 *31 ufloat的精度低,较易发生精度带来的相 等性判断问题 udouble精度高,这个问题发生的概率小 一些,但也存在 u解决办法: if (fabs(f 123.456) mainmain()() charchar chch = b; = b; chch = b - 32; = b - 32; printfprintf(“%c, %dn“, ch, ch);(“%c, %dn“, ch, ch); #include mainmain()() charchar chch = b; = b; chch = b - (a - A) = b - (a - A) ; ; printfprintf(“%c, %dn“, ch, ch);(“%c, %dn“, ch, ch); *33 常数(Constant) 整型常数 18、-31 长整型常量 123l、123L、123456l、123456L 无符号型常量 123u、 123U 浮点常数 十进制小数形式 123.45、456.78 指数形式 1e-2、4.5e3 单精度实型常量 123.45f、 456.78F、1e-2f、 4.5e3F 长双精度型常量 123.45l、 456.78L、1e-2l、 4.5e3L *34 八进制与十六进制常数 以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0x”或者“0X”开始的整型常数是十六进制 AF和af用来表示十进制的1015 十六进制的形式比较常用,尤其在进行位一级的 控制的时候 0x12、-0x1F, -0x1f *35 字符(Character)常数 字符常数的表示方法 a,A,5,%,$ 单引号内只能有一个字符,除非用“”开头 就是一个普通整数,也可以参与各种数学运算 每个字符具有一个0255之间的数值,可从ASCII表查出 注意:5和整数5的区别 字符的数学运算在密码学内用得比较多 *36 字符常数 转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义 字符表示 *37 字符串(String)常数 用双引号括住的由0个或多个字符组成的字符序列 “I am a string“ “表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方 “x“和x是不同的 里定义了一系列专门的字符串处理函数 *38 枚举(Enumeration)常量 一个被遗忘的角色 从程序来窥其一斑 enum weeks MON, TUE, WED, THU, FRI, SAT, SUN; enum weeks today; enum response no, yes, none; enum response answer; today = TUE; answer = yes; if (answer = yes) printf(“Today is Tuesday.n“); else printf(“Today is NOT Tuesday.n“); *39 宏常量 宏常量 也称符号常量 一般采用大写字母表示 #define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition) #include #define PI 3.14159#define PI 3.14159 #define R 5.3#define R 5.3 mainmain()() printfprintf(“area(“area = % = %fnfn“, PI * R * R);“, PI * R * R); printfprintf(“circumference(“circumference = % = %fnfn“, 2 * PI * R);“, 2 * PI * R); *40 宏常量 宏常量 也称符号常量 一般采用大写字母表示 #define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition) #include #define PI 3.14159#define PI 3.14159 #define R 5.3#define R 5.3 mainmain()() printfprintf(“PI(“PI*R*R = %*R*R = %fnfn“, PI * R * R);“, PI * R * R); printfprintf(“2*PI*R = %(“2*PI*R = %fnfn“, 2 * PI * R);“, 2 * PI * R); *41 const常量 用const修饰定义的变量为常量 const float pi = 3.1425926; 常量只能在定义时赋值,然后不能再改变其 值 常数、 const常量、宏常量和枚举常量,都 可以用来表示一个永远不会改变的数 前者不建议直接使用,而用后三者代替 *42 通过相关理论学习后,我们可以对“学生成绩管理系统” 中相关数据进行分析及定义了。将现实中的数据处理成C语言 能够理解的数据。 1.常量定义 在“学生成绩管理系统”中我们假定本系统能处理一个班 40个学生的数据。通常情况下,学生人数这个数据在程序的 运行过程中是不变的。因此,要把表示一个班学生总人数的 数据定义成符号常量。 定义符号常量的格式如下: #define STUNUM 40 说明:符号常量(STUNUM)必须用大写字母。 3 任务实施 *43 2.简单类型 “学生成绩管理系统”中的学生信息主要包括:学号 、姓名、性别、年龄、三门功课成绩、总成绩和 平均成绩,另外还有一些与计算全班成绩有关的 最高成绩、最低成绩等。这些数据在程序运行过 程中是可能改变的,这里只对部分表示学生信息 的简单数据定义,我们在定义变量时最好能做到 “见名知义”。 int stunum;/整数类型的学号 char stusex;/字符类型的性别 int stuage;/整数类型的年龄 float score1;/单精度类型的成绩1 *44 float score2;/单精度类型的成绩2 float score3;/单精度类型的成绩3 float avescore;/单精度类型的平均成绩 float maxscore;/单精度类型的最高分 float minscore;/单精度类型的最低分 由于性别这类数据只是起到描述一些基本信息的作用 ,通常情况下不进行算术运算,所以我们定义为字符型; 而年龄、三门功课成绩、总成绩和平均成绩以及最高成绩 、最低成绩等这类数据有可能进行算术运算, 所以我们定 义为数值型。 另外,在编程实践中还会遇到一些这里不能一一列举 出来的变量、数组变量和指针变量,我们将在后续的学习 逐渐认识与掌握。 在“班级学生成绩管理系统”中变量定义完成以后, 接下来我们还要

温馨提示

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

评论

0/150

提交评论