1 / 32

《 C 语言程序设计案例教程 》

北京大学出版社. 《 C 语言程序设计案例教程 》. 汪新民、刘若慧主编. 主讲:傅 丰 黄淮学院信息工程学院. Huanghuai University Department of Information Engineering. 知识回顾. 1 、 C 语言程序的结构. int max(int x , int y) { int z; if (x>y) z=x; else z=y; return(z); }. 函数首部. 函数. 声明部分. 函数体. 执行部分. 程序. 函数. ….

zoe-bowen
Download Presentation

《 C 语言程序设计案例教程 》

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 北京大学出版社 《 C语言程序设计案例教程》 汪新民、刘若慧主编 主讲:傅 丰 黄淮学院信息工程学院 Huanghuai University Department of Information Engineering

  2. 知识回顾 1、C语言程序的结构 int max(int x,int y) { int z; if (x>y) z=x; else z=y; return(z); } 函数首部 函数 声明部分 函数体 执行部分 程序 函数 … void main() { …… } 函数

  3. 编辑 编译 连接 运行 源程序 .c / .cpp 目标程序 .obj 可执行程序 .exe 开始 结果 运行 错误 语法 错误 连接 错误 2、调试C语言程序的方法

  4. 第二章数据描述与基本操作 • §1 数据类型 • §2 常量与变量 • §3 运算符与表达式 • §4不同类型数据间的转换 • §5数据的输入和输出 2学时 本节 2学时

  5. §1 数据类型 短整型short基本整型int长整型long 整型 本章 单精度float双精度double 基本类型 浮点型 字符型char 第7章 枚举类型enum 第5章 数组以[ ]标志 结构体struct 构造类型 第7章 共同体union 第9章 文件类型FILE 第6章 指针类型 空类型void 数据的存储 (置后介绍)

  6. §2 常量与变量 一、常量 程序运行中值不能改变的量 直接常量(字面常量) 符号常量 直接书写 用一个标识符 代表一个常量 整型常量:-3、0 实型常量:1.2、3.0 字符常量:‘a’、‘#’ 参阅教材P22例5

  7. 带#的为预处理命令,编译前先处理。(第4章) • 符号常量(使用前必须先定义): #define <符号常量> <常量值> 例:求圆的面积(参阅教材P22例5) • 使用符号常量含义清楚,修改方便。 • 一个预处理命令中只能定义一个符号常量。定义后本程序中所有该符号都代表相应的常量值。 • 符号常量与变量不同,其值不能在程序中被改变。 • 习惯上用大写字母表示符号常量,小写表示变量。 #define PI 3.141592654 #define R 20 main() { double s,c; s=PI*R*R; c=2*PI*R; printf(“s=%f,c=%f\n”,s,c); }

  8. 直接常量 1、整型常量(整常数) • 有3种表示形式:8进制:以0开头的整数,如:012、-012;16进制:以0x开头的整数,如:0x12、-0x12;10进制:以非0数字开头的整数,如:12、-12 • 数值在-32768~32767间的为基本整型int。超出该范围但在- 231~(231-1)范围内的整数为long (int)型。 • 整型常量后加l或L则为long (int)型,用于函数调用中和long (int)型形参对应的实参的书写。如123和123L的大小相同,但存储时所占字节数分别为2和4个字节。 • 整型常量后加u则为unsigned (int)型。如-12345u,则先将-12345转成补码53191,然后按无符号数存储。 置 后 介 绍 1011000000111001 1100111111000111 原码:补码:

  9. 2、浮点型常量(实数) • 有2种表示形式:十进制小数形式:由数字和小数点组成,必须有小数点。如0.0为浮点型,而0为整型。指数形式:用E或e表示10的幂。123×103表示为123E3或123e3 • 一个浮点数有多种指数形式,应采用规范化的(科学记数法)表示方法:E前的小数部分中,小数点前应有且只有一位非0数。如:-1.23e5是规范化的,756e0是不规范化的。 • 系统输出时按规范化形式输出。 • 不能用8进制和16进制表示,只能用10进制表示。

  10. 3、字符型常量 • 用单引号括起来的一个字符。如‘a’和‘A’为不同字符,而“a”不是字符,是字符串。 • 单引号中的字符不能是单引号和反斜杠\,可分别用‘\’’和‘\\’表示。 • 转义字符:(1)以反斜杠\后跟一个字母,代表一个控制字符。如:‘\n’表示换行。见P24表2-4 (2)以反斜杠\后跟ASCII值,代表该ASCII值对应的字符(P350附录1)。

  11. 在P24表2-4中:为转义字符 不在表中:表示2个字符 转义字符 \字符 \ASCII值 带x前缀的1~2位数:16进制 不带x前缀的1~3位数:8进制 如:\101或\x41表示‘A’ \010或\x08表示‘\b’(退格)\012或\x0A表示‘\n’(换行)\0表示ASCII码为0的字符(空操作) ASCII码表 见P350附录1 例6:printf(“Y\b=\n”); 结果:¥(只能打印,不能显示)例7:printf(“\362”); 结果:≥补充举例:printf(“_ab_c\t_de\rf\tg\n”);/*_代表空格*/printf(“h\ti\b\bj_k\n”);分析:结果: 说明:\t的作用是跳到下一个制表位(一个制表位占8列)。 \r是回到本行开头,则此后在本行上再输出的字符(包括空格 和跳格)所经过的位置将取代原来该位置上的字符。

  12. 4、字符串常量 • 由一对双引号括起来的字符序列。“a”与‘a’不同。如:char c; 则c=‘a’; 是正确的,c=“a”是错误的。 • 双引号为定界符,不属于字符串,串中的单引号要用转义字符\’表示。如:字符串“I say: ‘Goodby!’ ”应表示为: “I say: \‘Goodby!\’ ” • 字符串中的字符个数称为字符串的长度。字符串常量在内存中的存储是以‘\0’作结束标志的。 • 如:“CHINA”的长度为5,占6字节 “a”占2字节 ‘a’占1字节 • “”表示空字符串,占1字节 实际存储的是字符的二进制ASCII码

  13. 变量值 a 变量名 +1 二、变量 1、变量有关的概念 代表内存中具有特定属性的一块存储空间,用来存放数据。 变量值:变量代表的存储空间中存放的数据。程序运行中,其值可变。 变量名:用一个名字代表变量对应的存储空间。 变量的地址:变量代表的那块存储空间的首地址。变量a的地址记作&a 内存 4 3 如:int a; 编译时为变量名a分配存储空间(2字节)。a=3; 将3存放到变量a的存储空间,称变量a的值为3。a=a+1; 将a中的值取出加1后再存放到a的存储单元中。 从运算器向变量代表的存储空间传送数据的操作,称为赋值(P26) 调至赋值表达式处详介

  14. 2、标识符 为程序中变量、符号常量、函数、数组等对象所起的名字 • 以字母或下划线开头,由字母、数字或下划线组成的字符序列。如:¥123、3D、a>b、5_2、one-of、a book非法,day、_total、A_1合法。 • 不能与P351附录II中的32个关键字同名。 • 系统内部使用了一些以下划线开头的标识符,为防止冲突,建议用户自定义标识符尽量不要以下划线开头。 • 区分大小写。如Sum和sum为不同变量。习惯上,变量和函数名用小写,符号常量用大写。 • ANSI C没规定标识符的长度,但不同的C编译系统有自己的规定:Turbo C允许变量名长32个字符,有的则允许8个字符。考虑程序移植性,建议变量名最好不超过8个字符。 • 应做到见名知意,避免使用易认错的字符。如:2、Z和z

  15. 变量必须先定义后使用,这样编译 时才能根据指定的类型为其分配存储空 间,确定数据的存储方式和允许的操作。 3、变量声明(定义) ①变量声明的意义 • 不同类型的数据在内存中占居不同长度的存储区,在程序中引用一个变量,实际上是对指定存储空间的引用,必须先为其分配存储空间才能引用,即先定义后使用。凡未被定义的变量,不认为是变量名,保证了变量名的正确性。如:使用了int student; 而执行部分中误写为stadent=30;则系统会提示“Undefined symbol ‘standent’ in function main”。 • 一种数据类型对应一组允许的操作。变量声明便于编译时检查程序中对该变量的运算是否合法。如:float a,b; 则a%b(求余)非法。 • 一种数据类型对应一个取值范围。

  16. ②变量声明的方法 〈数据类型标识符〉〈变量名表〉; 如:int m, n; char c; float x; • 一般放在函数的声明部分,也可以放在函数中某一段分程序(用{}号括起来的程序段)中,其作用域仅限于它所在的分程序。 • 一个程序中的一个变量只能属于某类型,不能声明为几种不同类型。 • 允许在声明变量时为变量赋初值。如: • float f=3.5; char c=‘a’; int x=1,y=3+5; int x,y=1; int x=1,y=1; 均合法。int x=y=1; 非法。 仅对y赋 了初值: int x,y; y=1;

  17. 数据的存储空间长度及取值范围(P21) 说明:不同的C编译系统对基本整型int的处理不同,Turbo C 2.0将其处理为short 整型和字符型数据有带符号和无符号两种

  18. 一、整型变量 1、整型变量的分类 说明:不同的C编译系统为基本整型int分配的字节数不同:Turbo C 2.0和Turbo C++3.0为其分配2个字节Visual C++ 6.0为其分配个4字节

  19. 2、整型数据的存储(1) 带符号的整型 • 内存中的整型数据是以二进制形式存储的。带符号的整型数据的最高位(左边)为符号位:0表示正,1表示负。 • 内存中的数据以补码形式表示:正数的补码是:该数的二进制数(原码);负数的补码是:对原码除符号位外求反,加1后补上符号位。 如:int x; /*声明x为整型变量,为其分配2字节存储空间*/ x=10; /*将10存放到x的存储空间中,10的二进制为1010 */ 符号位 若:x=-10; 则存-10的补码:①除符号位外(绝对值)求反: ②加1后补上符号位

  20. 2、整型数据的存储(2) 无符号的整型 无符号的整型数据的最高位不作符号位,因此不能存放负数,但所能存储的最大数扩大了一倍。 215-1= 32767 int型正数: int型负数: 存储的是补码,除符号外求反加1可以得到原码: 求反 -215= -32768 加1 unsigned: 216-1= 65535

  21. 3、整型变量的定义(补充) 转到前面遗留问题 例:整型变量的定义与使用。 main() { int a,b,c,d; unsigned u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d,b+u=%d\n”,c,d); } 运行结果: a+u=22,b+u=-14 不同类型的整型数据 可以进行算术运算

  22. 4、整型数据的溢出(补充) int型变量的范围为-32768~32767,超出会出现数据溢出。 将变量类型改为高一级类型便可解决 32767 main() { int a,b; a=32767; b=a+1; printf(“%d,%d\n”,a,b); } +1后 由补码求原码:除符号位外求反加1 -32768 运行结果: 32767,-32768 也可以是除符 号位外-1求反

  23. 二、浮点型(实型)变量 1、浮点型变量的分类 2、浮点型数据的存储 按指数形式存储,分成小数和指数两部分存放。如:3.14159 符号位0或1 小数部分指数部分 • 标准C未规定小数和指数部分的位数,各种C编译系统的规定不同。多数用24位(包括符号位)表示小数部分,8位表示指数部分(包括符号位)。 • 小数部分位数越多,精度越高;指数部分位数越多,表示的数据范围越大。

  24. 3、浮点型数据的舍入误差(补充) 浮点型变量的存储空间是 有限的,有效数字也是有限的, 有效位以外的数字将被舍去, 因此会产生误差。 main() { float a,b; a=123456.789e5; b=a+20; printf(“%f,%f\n”,a,b); } 运行结果: 12345678848.00000 ,12345678848.00000 结论:单精度浮点型数据的有 效数为7位,后几位数是不准确的, 把20这样一个很小的数加在丢失精 度的大数上是无意义的,应避免。

  25. 三、字符型变量 1、字符型变量的分类 2、字符型数据的存储 • 字符型变量用于存放字符常量,占1个字节。但并不是把字符本身存入内存,而是存放字符的二进制ASCII码(P350附录1)。 • 字符的存储与整数的存储类似,两者间可以通用(相互赋值,混合运算)。但字符变量只占1个字节,只能存放0~255之间的整数。如:char c1=‘a’; 字符十进制二进制ASCII码ASCII码

  26. ‘A’的ASCII值为65 ‘a’的ASCII值为97 例1: 例2: main( ) { char ch; ch=‘a’; printf(“%d”,ch); printf(“%c\n”,ch); } main( ){ char ch; int i; ch=‘A’; ch=ch+32; i=ch; printf(“%d is %c”,i,ch); printf(“%c is %d\n”,ch,ch);} ch ch 运行结果: 97 is a a is 97 i 运行结果: 97a

  27. 扩展:大小写字母的转换 main() { char c1,c2; c1=‘a’; c2=‘B’; c1=c1-32; c2=c2+32; printf(“%c %c\n”,c1,c2); } 97 c1 66 c2 97-32=65 ------A 66+32=98 ------ b 运行结果:A b

  28. 例3: main( ) { char c; c=0362; /*以0开头为8进制*/ printf(“%d\n”,c);} 运行结果: -14 c 补码 符号位外其它位求反 加1补符号位原码 -14

  29. 补充举例: 为字符变量赋整数值 main() { char c1,c2; c1=97; c2=98; printf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } c1 c2 运行结果:a b 97 98

  30. 能否将上例改为: main() { int c1,c2;char c1,c2; c1=97; c2=98; printf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } c1 c2 运行结果:a b 97 98 在可输出的字符范围内, 整型和字符型可以通用。

  31. 测试某种类型数据所占存储空间的长度 sizeof(类型标识符) 例4(了解) main( ) { printf( “char: %d bytes\n”, sizeof(char) ); … }

  32. 课后作业及上机任务 • 习题4、6、7、8、9 • 必作:1、调试习题4、7、9 2、将“China”译成密码:用原来字母后面第4个字母代替原来字母。如:A后面第4个字母是E,用E代替A。“China”应译为“Glmre”。请编程用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’。通过计算将其译成密码并输出。 • 选作:调试教材例1、2、3、5、6、7

More Related