版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机程序设计,2011 中国科学技术大学,3、数据类型 运算符 表达式,提纲,数据的类型 常量和变量的概念 整型 浮点型 字符型 运算符的种类、优先级和结合方向 表达式的类型和求值 基本输入输出,1 数据的类型,程序中用到的所有数据都具有一定类型 数据类型决定了数据占用存储空间的大小、值的编码方式、以及允许哪些操作类型。 C语言的数据类型包括: 基本类型 整型、字符型、浮点型(实型)、枚举类型 构造类型 数组类型、结构体类型、共用体类型 指针类型 空类型,2 常量和变量的概念,常量:程序运行过程中,其值不能被改变的量 例如:12整型、-6.7浮点型、a字符型 符号常量 用一个标识符代表的常量
2、, 相当于用标识符把一个常量 替换下来 习惯上符号常量名用大写字母 优点: 含义清楚直观; 修改时一改全改,#define PRICE 30 #define NUM 12 int main() . . total = NUM * PRICE; total2 = 84 * PRICE2; printf(total=%d, total); . . ,2 常量和变量的概念,不会被替换,= total = 12 * 30;,常量,符号常量,2 常量和变量的概念,变量:程序运行时其值可以改变的量称为变量 变量名采用标识符 变量在存储器中占据一定的存储单元 变量占据存储空间的大小由其类型决定 程序中的变量
3、参与计算时,从这个变量所占据的存储单元里取出存储的数据的值 变量要“先定义,后使用”,2 常量和变量的概念,变量的存储:变量名、变量值、变量地址,2 常量和变量的概念,变量赋初值 (Initialization) 在定义变量的同时对变量赋值(初始化) 举例 int a=1; /*相当于 int a; a=1;*/ int a, b=3; /*对b赋初值,a没有初值*/ int b, c, a=b=c=100; /*对三个变量赋同样的初值*/ 使用变量前,一般应先对它赋值,3 整型 浮点型 字符型,整型 整型常量的表示方法 整型变量 整型数据在内存中的存放形式 整型变量的类型 整型变量的定义 整
4、型数据的溢出 整型常量的类型后缀,3 整型 浮点型 字符型,整型常量的表示方法 十进制 (Decimal) 例如,123、-456、0 八进制 (Octal) 以0开头,不得含有8或9 例如,0123、-0456 错例,0138、-0912 十六进制 (Hexadecimal) 以0 x或0X开头,用a-f或A-F表示10-15 例如,0 x123、-0X45、0 x3AB、-0 xabc,3 整型 浮点型 字符型,整型数据在内存中的存放方式 二进制形式 举例,(如图) int i=50; /*int类型占2字节*/ 【注 】高低字节顺序按照 Little Endian 补码 (Complem
5、ent) 正数:与原码一致,首位为0 负数:绝对值取反加一,首位为1 零:各位全为0,3 整型 浮点型 字符型,负整数的补码形式举例: int i=-50; /*int类型占2字节*/,50的原码,-50的补码,3 整型 浮点型 字符型,整型变量的分类 按占用存储空间的大小划分 基本整型int 短整型short int 长整型long int 按有无符号划分 有符号signed 无符号unsigned 上述两种分类方式组合,可得到6种类型,整数的类型与长度(p62 表3-2) short:占2字节(16bit) long: 占4字节(32bit) int: 占2或4字节(16或32bit) 2
6、Bytes = short int long = 4Bytes 若需要精确的长度,可选用short或long 举例 BC3.1:int长度为2Bytes gcc:int长度为4Bytes 数据长度由编译器指定,而编译器的设计受处理器的限制。,3 整型 浮点型 字符型,有符号数与无符号数 有符号数 二进制补码表示,首位为符号位 指定signed或缺省情况,即为有符号数 无符号数 没有符号位,只能表示非负数 无符号数类型必须指定为unsigned 若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理,3 整型 浮点型 字符型,int main() int i; unsigned j; i=
7、j=-50; i=i/2; /*-25*/ j=j/2; /*32743(16bit) 2147483623 (32bit)*/ /*除以2相当于右移1位*/,3 整型 浮点型 字符型,3 整型 浮点型 字符型,整型数据的取值范围,3 整型 浮点型 字符型,整型变量的定义 (Definition) 定义形式 int a, b; unsigned c; long d; unsigned short e; 变量的定义一般放在一个函数开头的声明部分,3 整型 浮点型 字符型,整型变量的定义与使用举例 int main() int a;/*定义有符号基本整型变量a*/ unsigned b;/*定义无
8、符号基本整型变量b*/ long c;/*定义有符号长整型变量c*/ a = -23;/*a的值为-23*/ b = 45;/*b的值为45*/ c = a + b;/*c的值为22*/ ,3 整型 浮点型 字符型,整型数据的溢出 (Overflow) 溢出 数据超出了变量能够存储的范围,造成数据丢失或数值改变等 举例 (假定int类型数据用16位表示):,int main() int a = 32767; a+; /*32768?*/ ,32767的补码,-32768的补码,3 整型 浮点型 字符型,整型常量的类型后缀:显式指定常量的类型 后缀 (Suffix) l、L表示常量是一个长整型
9、u、U表示常量是一个无符号整型数 两种后缀可以一起使用 举例 123l长整型常数123 456U无符号整型常数456 789ul无符号长整型常数789 101Lu无符号长整型常数101,3 整型 浮点型 字符型,整型常量使用中的类型问题 对整型变量赋值 常量的值不要超过变量的取值范围 直接使用常量 带有l、L、u、U等后缀的整型常量一般用于函数调用,以便和函数参数类型匹配。 不带有后缀的整型常量的类型,是根据其数值大小所处的范围来确定的,3 整型 浮点型 字符型,浮点型 (Floating Point) 浮点型常量的表示方法 浮点型变量 浮点型数据在内存中的存放形式 浮点型变量的类型 浮点型数
10、据的舍入误差 浮点型常数的类型,3 整型 浮点型 字符型,浮点型常量的表示方法: 十进制小数形式 由符号、数字和小数点(必须)组成 整数和小数部分都可省略,但不能同时省略 举例,12.3、-.123、123.、0.、.0 指数形式 由整数(或小数)、e(或E)、整数顺序组成 e或E之前必须有数字,之后必须是整数 举例,123.4e-5表示123.410-5 错例,e1、12e、1.2e3.4、.e5、e,3 整型 浮点型 字符型,规范化指数形式:类似于“科学计数法” e或E之前的小数中,小数点前面有且仅有一个非零数字 举例,123.456 规范化形式,1.23456e2、1.23456E+00
11、2 非规范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5,3 整型 浮点型 字符型,浮点型数据在内存中的存放方式 二进制的规范化指数形式 小数部分长度与能表示的精度有关 指数部分长度与能表示的数值范围有关,3 整型 浮点型 字符型,浮点型变量的类型 分类 单精度 float 双精度 double 长双精度 long double 长度和取值范围,3 整型 浮点型 字符型,浮点型数据的舍入误差 由于浮点型变量能够表示的有效数字有限,将有效位以外的数字舍去造成误差 举例,float a=123456.789e5, b; b = a +
12、 20; /*b=12345678920?*/ printf(a=%fnb=%fn, a, b);,运行结果 a=12345678848.000000 b=12345678848.000000,3 整型 浮点型 字符型,浮点型常量的类型 类型后缀 f、F表示常量是一个单精度型浮点数 l、L表示常量是一个长双精度型浮点数 无任何后缀的浮点型常量视作双精度型 对浮点型变量赋值 一个浮点型常量可以赋值给任何类型的浮点型变量 根据变量类型截取常量的相应有效数字 注意防止出现溢出,3 整型 浮点型 字符型,字符型 (Character) 字符型常量 字符型变量 字符型数据在内存中的存放形式 字符型数据的
13、使用方法 字符串常量,3 整型 浮点型 字符型,字符型常量 单引号括起来的一个字符 举例,a、A、1、?、? 错例,abc、我 转义字符 以开头的特殊字符 ddd 1到3位8进制数ASCII码代表的字符 xhh 1到2位16进制数ASCII码代表的字符 举例,n、t、123、x3A ,3 整型 浮点型 字符型,字符型变量 字符型变量只能存放一个字符 定义与使用:,int main() char c1, c2; /*定义字符型变量c1和c2*/ c1 = a; /*c1的值为a*/ c2 = 2; /*c2的值为2*/ ,3 整型 浮点型 字符型,字符型数据在内存中的存放形式 一个字符型数据占一
14、个字节的空间 字符型数据以其ASCII码形式存放 字符型数据的存放形式与只占一个字节长度的整型数据完全相同,3 整型 浮点型 字符型,字符型数据的使用方法 可以把字符型数据视作一种长度为1字节的整型数据处理 当使用字符型数据时,与使用这个字符的ASCII码(一个8位整数)是完全一样的 字符型数据的用法与整型数据完全一样,包括运算、赋值、输入、输出等 字符型数据使用过程中,同样需要注意溢出、符号等问题 是字符还是整数,只有在输出时才有意义,3 整型 浮点型 字符型,字符型数据使用举例:,int main() char c; int i, j; c = 97;/* 同 c = a*/ i = c
15、+ 20;/* 同 i = 117*/ j = 2;/* 同 j = 50*/ printf(%c, %dn, c, c); /*a, 97*/ ,3 整型 浮点型 字符型,字符型变量的符号 字符型变量与整型变量一样,也分为有符号数与无符号数 无符号字符 unsigned char c; char 一般默认为 signed char; 举例,表示一个班级的人数 (256) 赋值和使用中需要注意的问题,与整型变量相同,3 整型 浮点型 字符型,字符串(String)常量 表示形式 一对双引号括起来的字符序列 引号内可以包括0个、1个或多个字符 字符序列中的特殊字符用转义字符表示 举例,abc、a
16、、?、我 举例,12.4、$#*!、C:HOME 字符常量和字符串常量是不同类型的数据 例如,a与a是不同的 不能把一个字符串赋值给一个字符型变量,3 整型 浮点型 字符型,字符串在内存中的存放方式 在内存中每个字符按顺序存放 字符串结尾有一个空字符 ( ASCII=0, 0)作为字符串结束标志 字符串结束标志0是不能显示的,在字符串常量中,也不用显式写出来 举例 TEST a,3 整型 浮点型 字符型,运算中的类型转换 整型、字符型、浮点型数据可混合运算 混合运算时,不同类型的数据按照一定的规则先转换为同一类型,然后再运算。【隐式转换】,4 运算符的种类、优先级和结合方向,运算符的种类 算术
17、运算符+ - * / % + - 关系运算符 = | int a, b, c, d=5, e=2; a=(int)x+y;/* a=5, 2+3.7 = 5 */ b=(int)(x+y);/* b=6, (int)(6.5) */ c=(int)x; printf(x=%f, c=%dn, x, c); /* x=2.800000, c=2 */ z=(float)d/e;/* z=2.5 */,5 表达式的类型和求值,自增+、自减- 运算符 形式 +i, -i使用i之前,先使i的值加/减1 i+, i-使用i之后,再使i的值加/减1 说明 +i和-i的值是加/减1之后i的值 i+和i-的值
18、是加/减1之前i的值 +和-只能用于变量,不能用于常量和表达式 +和-的结合方向是“自右向左”,5 表达式的类型和求值,自增、自减运算符举例 int i=3, j, a, b=1, c=2; j = +i;/* i=i+1, j=i, i=4, j=4 */ j = i+;/* j=i, i=i+1, i=5, j=4 */ j = -i+;/* -(i+), i=6, j=-5 */ j = i+*2;/* (i+)*2, i=7, j=12 */ a = (b+c)+; /* 非法! */ a = 34+;/* 非法! */ j = +i+;/* 非法! */,5 表达式的类型和求值,有关
19、表达式使用的特殊问题 C的标准中,表达式中子表达式的求值顺序没有统一规定 i=3; j=(i+)+(i+)+(i+); /* j=9 ? =12? */实验结果9 C编译程序自左向右尽可能多的将若干字符组合成一个运算符、标识符、关键字 i+j /* (i+)+j? i+(+j)? */结果解释为(i+)+j 调用函数时,实参的求值顺序没有规定 i=3; printf(%d,%dn, i, i+); /* 3,3? 4,3? */ 结果 4,3,5 表达式的类型和求值,赋值运算符 (Assignment Operators) 赋值运算符 = 把右侧表达式的值赋给左侧的变量 一般情况下,赋值运算符
20、左侧只能是变量 赋值运算符的优先级较低,“自右向左”结合 运算符两侧类型不一致时,要进行类型转换 注意“赋值”与“等于”的区别,例如i=i+2; 复合赋值运算符 =前加上算术运算符或位运算符,如+=、|= 举例,z*=x+y;/* z=z*(x+y); */,5 表达式的类型和求值,赋值表达式 赋值表达式的值就是所赋的值 运算符右侧的表达式可以是一个赋值表达式 举例 a=5; /*表达式的值为5*/ a=b=3; /*a=(b=3)*/ a=b=c=1; /*a=(b=(c=1)*/ a=(b=4)+(c=3);/*b=4, c=3, a=7*/,5 表达式的类型和求值,逗号运算符 逗号运算符
21、 , exp1, exp2 逗号运算符的优先级最低,“自左向右”结合 逗号表达式的值是exp2的值 exp1和exp2都可以又是“逗号表达式” 把多个表达式组合成一个表达式使用 举例 x=(a=3, 6*a) /* a=3, x=18 */ x=a=3, 6*a /* a=3, x=3 */,5 表达式的类型和求值,逗号运算符举例 #include int main() int a=2,b=4,c=6,x,y; y=(x=a+b), (b+c); /这里y得到 6 printf(y=%d,x=%d,y,x); 其它算符和表达式在后续章节里分别介绍。,6 基本输入和输出,数据输入输出的概念 (一
22、).所谓输入输出是以计算机主机为主体而言的 输出:从计算机向外部输出设备(显示器,打印机)输出数据 输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据. (二).C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的 例如: 字符输入函数: getchar 字符输出函数:putchar 格式输入函数: scanf 格式输出函数: printf 字符串输入函数:gets 字符串输出函数:puts,6 基本输入和输出,(三).在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中. 例如:在调用标准输入输出库函数时,文件开头应该有: #in
23、clude “stdio.h” 或: #include 部分输入输出函数 字符输出函数putchar 字符输入函数getchar 格式输出函数printf 格式输入函数scanf 字符串输出函数puts 字符串输入函数gets,6 基本输入和输出,字符输出函数putchar 函数说明 int putchar(int c); 输出一个字符到标准输出设备 参数说明 int c 要输出的字符,可以是整数或字符,若超出字符型范围,则只使用低字节 返回值 若成功,返回输出字符的ASCII码值 若失败,返回EOF (End of File),6 基本输入和输出,函数putchar举例 int c, i;
24、putchar(a);/* 输出a */ putchar(n);/* 输出换行符 */ putchar(101);/* 输出e Ascii=101 */ putchar(101);/* 输出A ascii=65*/ c = 1000; i = putchar(c);/* 输出,i=232 */,6 基本输入和输出,字符输入函数getchar 函数说明 int getchar(void); 从标准输入设备输入一个字符 需要输入回车后,函数才返回 参数说明 无参数 返回值 若成功,返回输入字符的ASCII码值 若失败,返回EOF (End of File),6 基本输入和输出,函数getchar举
25、例 int c; c = getchar();/* 输入a后回车 */ putchar(c);/* 输出a */ c = getchar();/* 是否需要输入? */ printf(c=%dn, c);/* 输出c=? 10 */ c = getchar();/* 输入abcd后回车 */ putchar(c);/* 输出a */ putchar(getchar();/* 输出b */,6 基本输入和输出,格式输出函数printf 函数说明 int printf(char* format, args.); 格式化输出若干任意类型数据 参数说明 char* format 格式控制字符串 arg
26、s 需要输出的数据列表,可以多个或没有 返回值 若成功,返回输出的字节数,包括换行符 若失败,返回EOF (End of File),6 基本输入和输出,函数printf参数的进一步说明 格式字符串 包括“格式说明”和“普通字符” “格式说明”由%和“格式字符”组成,将输出数据按指定格式输出 “普通字符”按原样输出 输出列表 需要输出的数据 可以是变量、常量、表达式、函数调用等 输出数据按顺序与“格式说明”对应输出,6 基本输入和输出,函数printf的格式举例:,printf(a=%d b=%d, a, b);,输出结果a=3 b=4,6 基本输入和输出,格式字符,6 基本输入和输出,常见的
27、格式符的修饰符: l用于长整型整数,可加在格式符d,o,x,u前面 m(代表一个正整数):数据最小宽度 n(代表一个正整数):对实数,表示输出n位小数; 对字符串,表示截取的字符个数 - 输出的数字或字符在域内向左靠,6 基本输入和输出,函数printf举例 int i=1234; float f=-56.78; printf(i=%+6d, i);/* i=+1234 */ printf(%c, i);/* */ printf(%10.5E, f);/* -5.67800E+01 */ printf(%7.4f%, f);/* -56.7800% */ printf(%+6.3G, f);/
28、* -56.8 */,6 基本输入和输出,格式输入函数scanf 函数说明 int scanf(char* format, addrs.); 格式化输入若干任意类型数据 参数说明 char* format 格式控制字符串 addrs 需要输入的地址列表,可以有多个 返回值 返回输入并赋值的数据项的个数,6 基本输入和输出,函数scanf使用说明 “地址列表”中是变量的地址,而非变量 scanf(%d, 关于输入格式 格式字符串中的普通字符须按相应位置输入 除字符型(%c)外,输入项之间用一个或多个空白字符分隔,包括空格、回车、制表符 空白字符会作为%c对应的输入,如果需要输入下一个非空白字符,可以用%1s 如规定了最大宽度,且输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【1190】地中海贫血科普
- 规范:肾癌靶向MDT查房:肾癌伴下腔静脉瘤栓的处理
- 广州石化综合管理度与安全规范试卷含答案
- 《语法填空词性转换技巧精讲|教师备课专用》
- 《微生物检验技术培训课程》课件-项目4:需氧革兰阳性球菌检验
- 石英晶体振荡器制造工岗后测试考核试卷含答案
- 生物柴油装置操作工保密考核试卷含答案
- 气体分离工班组协作测试考核试卷含答案
- 2026年西藏自治区日喀则市昂仁县九年级中考三模数学试题(含答案)
- 水生产处理工岗前技术水平考核试卷含答案
- 2025年江苏省无锡市梁溪区侨谊教育集团小升初数学招生试卷(含答案解析)
- 贵州农商联合银行招聘笔试真题2025
- 煤矿安全生产标准化管理体系2024版与2026版对比分析报告
- 2025-2026学年-浙教版七年级下册数学期末质量检测模拟卷(含答案)
- 反恐怖防范安全风险评估工作指南(试行)
- 2026秋人教版九年级英语上册单词默写
- 体检科收费室工作制度
- 快递公司员工岗位职责及考核标准
- 无尘车间物料包装与拆包规范手册
- 2026广西南宁市青秀区文化广电体育和旅游局招聘1人笔试模拟试题及答案解析
- 期末综合达标测试卷(试卷)2025-2026学年三年级语文下册统编版(含答案)
评论
0/150
提交评论