《C语言程序设计教程》_第1页
《C语言程序设计教程》_第2页
《C语言程序设计教程》_第3页
《C语言程序设计教程》_第4页
《C语言程序设计教程》_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计教程语言程序设计教程Huanghuai University Department of Computer Science主讲:傅主讲:傅 丰丰黄淮学院计算机科学黄淮学院计算机科学系系高等教育出版社谭浩强 张基温等编著知识回顾知识回顾1、C语言程序的结构语言程序的结构函数程序程序函数int max(int x,int y) int z; if (xy) z=x; else z=y; return(z); 函数首部函数体声明部分执行部分函数void main() 2、调试、调试C语言程序的方法语言程序的方法输入与编辑源程序编译编译源程序与库函数连接连接运行运行目标程序F1.CF1.

2、OBJF1.EXE运行结果输入源程序,按F2存盘。按F6实现消息窗口与程序窗口的切换来修改源程序按Alt+F5查看结果Ctrl+F9出出错错第二章第二章 数据描述与基本操作数据描述与基本操作 1 数据类型 2 常量与变量 3 运算符与表达式 4 不同类型数据间的转换 5 数据的输入和输出2学时2学时本节本节2学时1 数据类型数据类型整型基本类型构造类型指针类型空类型void浮点型字符型 char枚举类型 enum短整型 short基本整型 int长整型 long单精度 float双精度 double数组 以 标志结构体 struct共同体 union文件类型 FILE第7章第9章第6章第5章本

3、章第7章数据的存储数据的存储(置后介绍)(置后介绍)一、常量一、常量直接常量(字面常量)直接常量(字面常量)符号常量符号常量整型常量:-3、0实型常量:1.2、3.0字符常量:a、#参阅教材P22例5直接书写用一个标识符代表一个常量程序运行中值不能改变的量程序运行中值不能改变的量2 常量与变量常量与变量带#的为预处理命令,编译前先处理。(第4章)v符号常量符号常量(使用前必须先定义):(使用前必须先定义):例:求圆的面积(例:求圆的面积(参阅教材P22例5 )#define PI 3.141592654#define R 20main() double s,c; s=PI*R*R; c=2*P

4、I*R; printf(“s=%f,c=%fn”,s,c);#define v 使用符号常量含义清楚,使用符号常量含义清楚,修改方便。修改方便。v 一个预处理命令中只能一个预处理命令中只能定义一个符号常量。定义定义一个符号常量。定义后本程序中所有该符号都后本程序中所有该符号都代表相应的常量值。代表相应的常量值。v 符号常量与变量不同,符号常量与变量不同,其值不能在程序中被改变。其值不能在程序中被改变。v 习惯上用大写字母表示习惯上用大写字母表示符号常量,小写表示变量。符号常量,小写表示变量。1、整型常量(整常数)、整型常量(整常数)v 有有3种表示形式:种表示形式: 8进制:以进制:以0开头的

5、整数,如:开头的整数,如:012、-012; 16进制:以进制:以0 x开头的整数,如:开头的整数,如:0 x12、-0 x12; 10进制:以非进制:以非0数字开头的整数,如:数字开头的整数,如:12、-12v 数值在-3276832767间的为基本整型int。超出该范围但在- 231(231-1)范围内的整数为long (int)型。v 整型常量后加l或L则为long (int)型,用于函数调用中和long (int)型形参对应的实参的书写。如123和123L的大小相同,但存储时所占字节数分别为2和4个字节。v 整型常量后加u则为unsigned (int)型。如-12345u,则先将-1

6、2345转成补码53191,然后按无符号数存储。置后介绍10110000001110011100111111000111原码:原码: 补码:补码:v 直接常量直接常量2、浮点型常量(实数)、浮点型常量(实数)v 有2种表示形式: 十进制小数形式:十进制小数形式:由数字和小数点组成,必须有小数点。如0.0为浮点型,而0为整型。 指数形式:指数形式:用E或e表示10的幂。123103表示为123E3或123e3v 一个浮点数有多种指数形式,应采用规范化的 (科学记数法)表示方法:E前的小数部分中,小数点前应有且只有一位非0数。如:-1.23e5是规范化的,756e0是不规范化的。v 系统输出时按规

7、范化形式输出。v 不能用8进制和16进制表示,只能用10进制表示。3、字符型常量、字符型常量v 用单引号单引号括起来的一个一个字符。如a和A为不同字符,而“a”不是字符,是字符串。v 单引号中的字符不能是单引号和反斜杠,可分别用和表示。v 转义字符:转义字符:(1)以反斜杠后跟一个字母,代表一个控控制字符制字符。如:n表示换行。见P24表2-4 (2)以反斜杠后跟ASCII值,代表该ASCII值对应的字符值对应的字符(P350附录1)。字符字符含义含义ASCIIn换行(到下行开头)10t跳到下一个Tab位(8列)9b退格(前移一列)8r回车(到本行开头)13f换页(到下页开头)12反斜杠92单

8、引号39”双引号”34ddd13位8进制数代表的字符xhh12位16进制数代表的字符转义字符转义字符如:101或x41表示A 010或x08表示b(退格) 012或x0A表示n(换行) 0表示ASCII码为0的字符(空操作)在P24表2-4中:为转义字符不在表中:表示2个字符带x前缀的12位数:16进制不带x前缀的13位数:8进制ASCII码表码表见见P350附录附录1例例6:printf(“Yb=n”); 结果:¥(只能打印,不能显示)(只能打印,不能显示)例例7:printf(“362”); 结果:补充举例:补充举例:printf(“_ab_ct_derftgn”); /*_代表空格*/

9、printf(“htibbj_kn”); 分析: 结果:1 2 3 4 5 6 7 8 9 0 1f a bcg d ehj i k1 2 3 4 5 6 7 8 9 0 1fg d ehjk说明:说明:t的作用是跳到下一个制表位(一个制表位占8列)。 r是回到本行开头,则此后在本行上再输出的字符(包括空格 和跳格)所经过的位置将取代原来该位置上的字符。ASCII值值字符字符4、字符串常量、字符串常量v 由一对双引号双引号括起来的字符序列。“a”与a不同。 如:char c; 则c=a; 是正确的,c=“a”是错误的。v 双引号为定界符,不属于字符串,串中的单引号要用转 义字符表示。如:字符串

10、“I say: Goodby! ”应表示为: “I say: Goodby! ”v字符串中的字符个数称为字符串的长度。字符串常量在 内存中的存储是以0作结束标志的。 如:“CHINA”的长度为5,占6字节 “a”占2字节 a占1字节 “”表示空字符串,占1字节C H INA 0a00实际存储的是字符的二进制ASCII码a65 0二、变量二、变量代表内存中具有特定属性的一块存储空间,用来存放数据。代表内存中具有特定属性的一块存储空间,用来存放数据。变量值:变量值:变量代表的存储空间中存放的数据。程序运行中,其值可变。变量名:变量名:用一个名字代表变量对应的存储空间。变量的地址:变量的地址:变量代

11、表的那块存储空间的首地址。变量a的地址记作&a如:如:int a; 编译时为变量名a分配存储空间(2字节)字节)。 a=3; 将3存放到变量a的存储空间,称变量a的值为3。 a=a+1; 将a中的值取出加1后再存放到a的存储单元中。a变量名变量名00000000000000113内内 存存+100000000000001014变量值变量值1、变量有关的概念、变量有关的概念从运算器向变量代表的存储空间传送数据的操作,称为赋值(从运算器向变量代表的存储空间传送数据的操作,称为赋值(P26)调至赋值表达式处详介2、标识符、标识符为程序中变量、符号常量、函数、数组等对象所起的名字为程序中变量、符号常量

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

13、应做到见名知意,避免使用易认错的字符。如:2、Z和z3、变量声明(定义)、变量声明(定义)变量声明的意义变量声明的意义v 不同类型的数据在内存中占居不同长度的存储区,在程序中引用一个变量,实际上是对指定存储空间的引用,必须先为其分配存储空间才能引用,即先定义后使用。凡未被定义的变量,不认为是变量名,保证了变量名的正确性。如:使用了int student; 而执行部分中误写为stadent=30;则系统会提示“Undefined symbol standent in function main”。v 一种数据类型对应一组允许的操作。变量声明便于编译时检查程序中对该变量的运算是否合法。如:floa

14、t a,b; 则a%b(求余)非法。v 一种数据类型对应一个取值范围。 变量必须先定义后使用,这样编译时才能根据指定的类型为其分配存储空间,确定数据的存储方式和允许的操作。变量声明的方法变量声明的方法数据类型标识符变量名表;v 一般放在函数的声明部分,也可以放在函数中某一段分程序(用号括起来的程序段)中,其作用域仅限于它所在的分程序。v 一个程序中的一个变量只能属于某类型,不能声明为几种不同类型。v 允许在声明变量时为变量赋初值。如: 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; 非法

15、。如:int m, n; char c; float x;仅对y赋了初值:int x,y;y=1; 数据的存储空间长度及取值范围数据的存储空间长度及取值范围(P21)基本类型字节取值范围整型signed带符号short int 2-3276832767 (215-1)int2-3276832767long int 4- 231(231-1)unsigned无符号short int 2065535 (216-1)int2065535long int 40(232-1)浮点型单精度 float4-3.4e-383.4e38有效数67位双精度 double8-1.7e-3081.7e308有效数15

16、16位长双精度 long double16-1.2e-49321.2e4932字符signed char1-128127(27-1)unsigned char10255 (28-1)说明:不同的C编译系统对基本整型int的处理不同,Turbo C 2.0将其处理为short整型整型和字符型字符型数据有带符号和无符号两种一、整型变量一、整型变量整型signed带符号short int2字节-3276832767 (215-1)int2字节-3276832767long int4字节- 231(231-1)unsigned无符号short int2字节065535 (216-1)int2字节065

17、535long int4字节0(232-1)说明:不同的C编译系统为基本整型int分配的字节数不同: Turbo C 2.0和Turbo C+3.0为其分配2个字节 Visual C+ 6.0为其分配个4字节1、整型变量的分类、整型变量的分类v 内存中的整型数据是以二进制二进制形式存储的。带符号的整型数据的最高位(左边)为符号位符号位:0表示正,1表示负。v 内存中的数据以补码补码形式表示:正数的补码是:该数的二进制数(原码原码);负数的补码是:对原码除符号位外除符号位外求反,加1后补上符号位。带符号的整型带符号的整型如:int x; /*声明x为整型变量,为其分配2字节存储空间*/ x=10

18、; /*将10存放到x的存储空间中,10的二进制为1010 */0 0 0 00 0 0 0 0 0 0 0 1 0 1 0若:x=-10; 则存-10的补码:除符号位外(绝对值)求反:符号位符号位1 1 1 1 1 1 1 1 1 1 1 0 1 0 1加1后补上符号位1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 02、整型数据的存储、整型数据的存储(1) 无符号的整型数据的最高位不作符号位,因此不能存放负数,但所能存储的最大数扩大了一倍。无符号的整型无符号的整型int型负数:加10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1int型正数:1 0 0 00 0

19、0 0 0 0 0 0 0 0 0 0215-1= 32767存储的是补码,除符号外求反加符号外求反加1可以得到原码:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1求反-215= -327681 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0unsigned:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1216-1= 655352、整型数据的存储、整型数据的存储(2)3、整型变量的定义(补充)、整型变量的定义(补充)例:例:整型变量的定义与使用。main() int a,b,c,d; un

20、signed u; a=12; b=-24; u=10; c=a+u; d=b+u; printf(“a+u=%d,b+u=%dn”,c,d);运行结果:运行结果: a+u=22,b+u=-14不同类型的整型数据不同类型的整型数据可以进行算术运算可以进行算术运算转到前面遗留问题转到前面遗留问题4、整型数据的溢出(补充)、整型数据的溢出(补充)int型变量的范围为-3276832767,超出会出现数据溢出。main() int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b);0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1327671 0 0 0

21、 0 0 0 0 0 0 0 0 0 0 0 0+1后由补码求原码:除符号位外求反加11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1-32768运行结果:运行结果: 32767,-32768将变量类型改为高一级类型便可解决将变量类型改为高一级类型便可解决也可以是除符也可以是除符号位外号位外-1求反求反浮点型单精度 float4字节-3.4e-383.4e38有效数67位双精度 double8字节-1.7e-3081.7e308有效数1516位长双精度 long double 16字节 -1.2e-49321.2e49

22、32(不常用)按指数指数形式存储,分成小数和指数两部分存放。如:3.14159+.3141591符号位符号位 0或或1 小数部分小数部分 指数部分指数部分v标准C未规定小数和指数部分的位数,各种C编译系统的规定不同。多数用24位(包括符号位)表示小数部分,8位表示指数部分(包括符号位)。v小数部分位数越多,精度越高;指数部分位数越多,表示的数据范围越大。1、浮点型变量的分类、浮点型变量的分类2、浮点型数据的存储、浮点型数据的存储二、浮点型(实型)变量二、浮点型(实型)变量3、浮点型数据的舍入误差(补充)、浮点型数据的舍入误差(补充) 浮点型变量的存储空间是浮点型变量的存储空间是有限的,有效数字

23、也是有限的,有限的,有效数字也是有限的,有效位以外的数字将被舍去,有效位以外的数字将被舍去,因此会产生误差。因此会产生误差。main() float a,b; a=123456.789e5; b=a+20; printf(“%f,%fn”,a,b);运行结果:运行结果: 12345678848.00000 ,12345678848.00000 结论:单精度浮点型数据的有结论:单精度浮点型数据的有效数为效数为7位,后几位数是不准确的,位,后几位数是不准确的,把把20这样一个很小的数加在丢失精这样一个很小的数加在丢失精度的大数上是无意义的,应避免。度的大数上是无意义的,应避免。字符signed c

24、har1字节 -128127(27-1)unsigned char1字节 0255 (28-1)1、字符型变量的分类、字符型变量的分类2、字符型数据的存储、字符型数据的存储v 字符型变量用于存放字符常量,占1个字节。但并不是把字符本身存入内存,而是存放字符的二进制ASCII码码(P350附录1) 。v 字符的存储与整数的存储类似,两者间可以通用(相互赋值,混合运算)。但字符变量只占1个字节,只能存放0255之间的整数。如:char c1=a;a9701100001字符 十进制 二进制 ASCII码 ASCII码三、字符型变量三、字符型变量P18例例1:main( ) char ch; ch=a

25、; printf(“%d”,ch); printf(“%cn”,ch);运行结果:运行结果:97a9701100001chP18例例2:main( ) char ch; int i; ch=A; ch=ch+32; i=ch; printf(“%d is %c”,i,ch); printf(“%c is %dn”,ch,ch);运行结果:运行结果:97 is aa is 976597chA的的ASCII值为值为65a的的ASCII值为值为9797i扩展:扩展:大小写字母的转换main() char c1,c2; c1=a; c2=B; c1=c1-32; c2=c2+32; printf(“%c %cn”,c1,c2);运行结果:运行结果: A ba01100001B01000010c1c2976697-32=65 -A66+32=98 - bP20例例3:main( ) char c; c=0362; /*以0开头为8进制*/ printf(“%dn”,c);运行结果:运行结果:-14(0362)8c11110010补码符号位外其它位求反加1补符号位原码1000110110001110-14 注意:注意:Turbo C将将char规定为规定为signed char类型。存储单元类型。存储单元的最高位为符号位,取值范围为的最高位为符号位,取值范围为-128127。若按。若按%

温馨提示

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

评论

0/150

提交评论