《C语言程序设计》教学软件.doc_第1页
《C语言程序设计》教学软件.doc_第2页
《C语言程序设计》教学软件.doc_第3页
《C语言程序设计》教学软件.doc_第4页
《C语言程序设计》教学软件.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

语言程序设计教学软件第章 C 语言基础 C语言是一种结构化的计算机程序设计语言。它具有高级语言的特点,有具有低级语言的功能。它不仅适合于作为系统描述语言,写系统软件,也可以写应用程序。是当今国际上最流行的、最有发展前途的计算机高级语言。本章主要介绍什么叫C语言;C语言的发展历史;C语言的特点和应用;C语言基本符号与组成规则;C语言中使用的常量、变量、表达式及其数据类型的定义等知识。为学好后几章的程序设计打下良好的基础知识。1.1 C语言简介 C语言作为一种适合用于各领域、各阶层的语言,其重要性已经达到了不能用语言描述的地步了。它之所以能被广泛地应用,是因为它集计算硬件与软件开发于一身,这是以前的高级语言所不能达到的。它即有高级语言的可读性,又有低级汇编语言的软件开发功能,所以受到人们的喜爱,它适合编写系统软件,它也是一种编译语言。C 语言是一种得到广泛重视并普遍应用的计算机程序设计语言,也是国际上公认的最重要的几种通用程序设计语言之一。它主要用来编写: 系统软件(操作系统、编译系统等。与 C同时出名的多用户操作系统 UINX 现在都是用 C 语言程序编制的)。 应用软件(C是工业控制单片机的开发语言之一,并能进行图形处理)。 数据处理软件(如企业管理)。 数值计算等软件应用于各个领域。 C语言基本能做到“只要人能想到就能实现”,所以C语言的最大限制不再是使用语言环境而是人的思维。C语言有很强的可读性、移植性,可将其它语言程序很容易改成C语言的程序。 尽管当初C语言是为编写UNIX操作系统而设计的,但却不依赖于UNIX操作系统,可在多种操作系统的环境下运行,从普通的C到面向对象的C+(它的变种为JAVA)以及可视C(VISUAL C)都是针对软件开发要求而产生和发展的。虽然这个发展仍在继续,但C语言的基本功能不变,所以学习了C语言之后再学C+、JAVA、VC就很容易了。 C语言不象其它语言那样容易,在深层次应用上,要涉及到许多相关的知识,例如:数据结构、软件工程、数据库系统、人工智能、操作系统等。当学到函数、数组、指针、结构体时,就会有所体会。1.1.2 C语言的发展简介1.1.3 C语言的特点和应用 任何一种语言都有它的特点和独具之处,这是它能够生存和不断发展的关键。 1、C语言的主要特点如下:(1)语言简洁、紧凑、使用方便、灵活(32个关键字、9种控制语句)。C 语言程序书写格式自由。没有行号,一行可以写几个语句,一个语句可以写在多行上。(2)运算符十分丰富(34个)。C语言把括号、赋值号、强制类型转换等符号都作为运算符处理。通过灵活使用多种运算符来达到其他高级语言中难以实现的运算功能。(3)数据结构丰富多彩。C语言除了具有其他高级语言所包含的各种数据结构以外,还包含指针类型、结构体类型、工用体类型数据,以此来实现比较复杂的数据结构(如链表、栈、树、图等)的运算。(4)有结构化控制语句(if-else、while、do-while、for-)。C是理想的结构化语言,符合现代化编程风格。(5)语法限止不太严格,程序设计自由度大。一般的高级语言语法检查比较严格,能检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度,因此放宽了语法检查。(6)允许直接访问物理地址、位操作(位操作、可直接写汇编语句,加asm做前缀)。可以直接多硬件进行操作。(7)生成目标代码质量高,程序执行效率高(.exe、.com效率高)(8)可移植性好(对于机器型号、操作系统要求不高,可转换成其它语言)。 2、C语言的应用(1)科学计算(被突出的系统软件编写能力所掩盖)(2)软件系统开发(UNIX、WPS、WINDOWS95、FOXBASE、NT)(3)多媒体操作应用(编写多媒体工作平台、管理硬盘、通信软件等)1.2 简单的C程序解析 【例1.1】输出一字符串。 源程序main( ) printf(this is a C program.n); 程序运行结果为:this is a C program. 对于每一个程序都须有一个main函数,函数体须由 来括起来,printf( )是个输出函数,n是个换行符,其中的“this is a C program.”是要原样输出的一句话。 【例1.2】 求 a ,b 相加的和放在sum 中。 main( )int a,b,sum;a=123; b=456;sum=a+b;printf(sum is %dn,sum); 程序运行结果为:sum is 579源程序 【例1.3】通过调用子函数求两个数的和。main() /* 主函数 */int a,b,sum; /* 定义变量 */ a=3;b=4; /* 变量赋值 */ sum=add(a,b); /* 调用add函数*/ printf(sum=a+b=%d.n,sum);int add(int x,int y) /* 定义函数add,函数值为整型 */ int z; z=x+y; return(z); /* 将z的值返回 */程序运行结果为:sum=a+b=7.源程序 【例1.4】 求a ,b 中较大的数放在max 中。main( )int a,b,c;源程序scanf(%d,%d, &a,&b);c=max(a,b);printf(max=%d,c);int max(int x,int y)int z;if (xy) z=x;else z=y;return(z);程序运行情况如下:8,5max=81.2.1 C程序的组成规则 1、C 程序是由函数构成的。C语言是函数的语言,一个程序是由一个或多个函数构成的。 2、一个函数有两部分组成:(1)函数的首部(函数的第一行)。函数名、函数类型、函数属性、函数参数名、参数类型、一个函数名后面必须跟一对括弧,参数可无。(2)函数体 即函数首部下面的大括弧内的部分。(声明部分、执行部分)(3)一个C 程序总是从main 主函数开始执行。无论位置如何。(4)每个语句和数据定义的最后必须有一个分号“;”,最后一个语句也要包含一个分号。(5)C语言本身没有输入/输出语句,是库函数scanf 和 printf 等函数来完成的。(6)用/* */ 作注释,以用于增加可读性。 1.2.2 C程序的基本符号 1、基本符号集:C语言的基本符号是ASCII字符集。由以下部分组成:小写字母:a、b、c、z大写字母:A、B、C、Z阿拉伯数字:0、1、2、9 下划线:_特殊字符: * / % = = != & | ! # - ? + - += -= *= /= %= = 123E22 0.0001 -1E-04注意:E之前必须要有数字,E之后数字必须为整数。e12 4.4e1.5 .e5都是不合法的。对于123.456有以下几种表示方法: 123.456e0 12.3456e1 1.23456e2 0.123456e3 0.0123456e40.00123456e5等。 其中1.23456e2为“规范化 的指数形式”。2、实型数据的表示范围 实型数据在内存中的存放形式与整型数据不同,实型数据是按照指数形式存储的。如3.1415926+.314159261 一般实型数据占4个字节(32位),其中多少位存放小数部分,多少位存放指数部分不确定,但存放小数部分的位数越多,有效数字越多。而存放指数部分的位数越多,能表示数值的范围越大。 实型数据的表示范围为:(3.4E-38 3.4E+38) 1.3.3 字符型数据 1、字符数据的表示方法 在C语言中字符型数据是用单引号括起来的一个字符。 如:a、A、3、?、 、$ 等。 字符数据的表示范围 一般情况下字符型数据占1个字节(8位),系统在表示一个字符数据时,并不是将字符本身的形状存入内存,而只是将字符的ASCII码存入内存。在内存中所有的数据又是以二进制的形式存放的。例如字符a的ASCII码为97,b的ASCII码为98,所以使得在C语言有效的范围中字符数据和整型数据之间通用。(0255)1.4 常量与变量1.4.1 常量1、直接常量和符号常量:(1)直接常量:在程序运行的过程中,不能被改变的量称为常量。常量分为不同的类型,如:整型常量:12、0、-8实型常量:4.6、1.23、-0.9字符型常量:a、B、 其中为定界符,而不是字符型常量的一部分。常量一般从其字面形式即可判别的常量称为字面常量或直接常量。(2)符号常量:用一个标识符代表一个常量,称为符号常量。既标识符形式的常量。如:#define PI 3.14159PI为符号常量 【例1.5】符号常量的应用。 #define PI 3.14159 main() int mj,r=5; mj=PI*r*r; printf(mj=%d,mj); 程序运行结果:mj=78源程序这是一种编译预处理命令,叫做“宏定义”。指定PI代替常量3.14159,在程序中,凡遇到PI即用3.14159代替,只是简单的符号替换。它的值在其作用域(本例中为主函数)内不能改变,也不能再被赋值.一般写在程序的函数之外,它不属于C语句,所以不必在末尾加上“;”。其作用域在文件结束或遇 #undef 处结束。一般格式为:# define 符号常量 常量优点:含义清楚、改动方便注意:符号常量名常用大写、变量名常用小写!、整型常量在C语言中,整型常量有以下三种表示形式:(1)十进制整型常量:289、-183等。每个数位都可以是(0 9)十个代码。(2)八进制整型常量:以o开头,如(128)10 =o200 。每个数位都可以是(07)八个代码。(3)十六进制整型常量:以ox开头,如(128)16 =ox80。每数位都可以是(09、AF)共计十六个代码。如何判断整型常量的类型。 若在-3276832767之间,可认为是普通整型int型或短整型(short型)。 若超出了-3276832767,而在-2147483648+2147483647之间,则认为是长整型(long型)。若认为是int类型的,系统不做检查,但数据会丢失。 若常量是无符号型(unsigned型),那么一个非负值的整数可以赋值给unsigned型变量,但要注意其范围。50000可赋给unsigned int型,70000却不可以。(无符号整型变量最大值 65535.) 如一整型常量后有L或l则表示为long int型的。常用于函数的调用中。、实型常量C语言中实型常量有两种表示形式 十进制小数形式:由整数部分、小数点和小数部分组成。例如:1.23 0.345 .222 234.0 333. 0.0等。 指数形式:由实数部分、E(e)和整数部分组成。用于表示一些比较大的数值。例如:123*1022-123E22 123450000 - 1234.5E+05注意:E之前必须要有数字,E之后数字必须为整数。e12 4.4e1.5 .e5 都是不合法的。对于123.456有以下几种表示方法:123.456e012.3456e11.23456e20.123456e30.0123456e40.00123456e5等等。其中1.23456e2为“规范化的指数形式”。 4、字符型常量 (1)在C语言中字符常量的定义是: 用一对单引号括起来的单个字符,称为字符常量。 例如,A、等。 (2)转义字符 C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符。 注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、。 表(1-2) 转义字符及其作用 书 表(1-2)中列出的字符称为“转义字符”,表示将反斜杠()后面的字符转换成特殊的意义。如 n 中的“n”不代表字母n ,而是代表“换行”的意思。r代表回车符号;101代表ASCII代码(十进制)为65的大写字母“A”,012ASCII代码(十进制)为10代表“换行”,x20ASCII代码(十进制)为32代表“空格”字符。 【例1.6】转义符的应用 main( ) printf(abctderftgn); printf(htibbjk); 程序中“”符号代表空格的意思,第一个printf函数先在第一行开始位置输出“abc”,然后遇到“t”的作用是“跳格”,即跳到下一个“制表单位”,在我们所应用系统中一个“制表区”占8列。下一个“制表位置”从第9列开始,故在911列上输出“ed”。接着遇到“r”,它的作用是“回车”(不换行),即返回到本行最左端第一列,输出字符“f”,接着又遇到“t”再使当前输出位置移到第9列,输出“g”。最后遇到“n”,使当前输出位置移到下一行开头。第二个printf函数,先在第一列输出字符“h”,遇到“t”是使当前输出位置移到第9列,输出字母“i”,然后移到下一列(第10列)准备输出下一个字符。接着遇到两个“b”,“b”作用是“退一格”,因此“bb”的作用是使当前输出位置退回到第8列,输出字符“jk”。 程序运行结果(在打印机纸张上)为: fabcgde printf(abctderftgn); printf(htibbjk); hjik 注意程序运行后(在显示屏上)打印结果为: fgde hjk源程序 这是由于“r”使当前位置回到本行开头,此输出的字符将取代原来屏幕上该位置显示的字符。所以原有的“abc”被新的字符“fg”代替,其后的“de”未被新字符取替。下一行先输出“hi”,退两格后再输出“jk”,j后面的“”将原有的字符“i”取代,因此屏幕上看不到“i”。 5、字符串型常量(1)在C语言中字符串常量的定义是:字符串常量是由 双引号括起来的字符序列。(2)字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示: CHINA0 最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。 如:“how do you do”,“CHINA”,“a”,“$134323.54”(3)综上所述,字符常量A与字符串常量A是两回事: 定界符不同:字符常量使用单引号,而字符串常量使用双引号; 长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; 存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。 “a”和a是有本质的区别的,究竟区别在哪里呢?a在内存中只占一个字节的宽度,而字符串型常量“a”在内存中占两个字节的宽度。每一个字符串的结尾都有一个字符的结束标志:0,它占一个字节的宽度。1.4.2 变量1、变量的定义 在程序运行过程中,其值能被改变的量。一个变量有一个名字,占一定的存储单元,在该存储单元中存储变量的值。(1)每个变量都有两个特点:任一变量都有一个名字;任一变量都占据一块内存单元。 例如:我们的教室,就象一个变量,二教二合教室是变量的名字,全体的学生就是变量的当前值,而教室的房间号(301)就是该内存变量的地址。如下节课是计算机系学生在这里上课,那么该变量的当前值就改变了。(2)变量起名原则: 变量所起的名字不可与32个保留字重名。 必须以字母或下划线开头,由字母、数字或下划线组成的长度为小于等于8的字符序列。(Turbo C允许有32个字符) 应本着见名知义的原则。常见初学者有起名为a10,b,a22等等,虽不影响程序的运行,但可读性不好,或起名为app_num,可以猜到是表示苹果数。 大写字母与小写字母意义不同,被认为是两个不同的字符。一般变量名一般用小写字母表示。如:year、Day、a_12、_abcdef等为合法的变量名。 #123、.com、$100、1999Y、a=b、1_2_3、-abcedfghi等为不合法的变量名变量命名的良好习惯,即见名知意。所谓“见名知意”是指通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)(3)变量的定义与初始化在语言中,要求对所有要用到的变量,必须先对其进行定义,才可以使用。如果是未经定义的变量,在编译时会检查出来。 变量定义的一般格式存储类型 数据类型 变量名, 变量名2; 例如,float radius, length, area;定义变量时指定变量的类型,在编译时好为其分配相应的存储单元。另外,还可在编译时检查该变量所做运算是否合法。一般称在定义变量的同时进行赋初值的操作为变量初始化。 变量初始化的一般格式存储类型 数据类型 变量名=初值,变量名2=初值2,; 例如,float rs=2.5, leng, area; (4)变量小结了解了变量特性后,应有这样的习惯,一遇到一变量时,应想到: 该变量是否定义过?是哪种类型?在内存中占几个字节?可以表示数的范围是多少?2、整型变量(1)整型变量在内存中的存放形式在计算机导论中应该学过,数值在内存中应以其补码形式存放的。而正数的补码和其原码相同。负数的补码是反码加1。 例如10、-10:10的编码和-10的编码: 十进制数10 的二进制形式为1010见下表: 基本类型分为: 1)基本整型 2)短整型 3)长整型 在C中,为了更精确描述整型数据,又进一步分为六种类型,区别主要是在表示整数的范围不同。具体见下表:(3)整型变量的定义 定义格式应为: 变量1,变量2,变量3; 例如:int a,b;(定义两个整型变量a和b)unsigned short c,d,f;(定义三个整型变量c、d、f)long e;(定义一个长整型变量)一般应在函数一开始就进行定义。 【例1.7】类型定义程序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=%dn,c,d);源程序 程序运行结果:a+u=22,b+u=-14(4)整型数据的溢出在运算的过程中,若变量的值超过该类型的范围,则会产生溢出。 【例1.8】整型数据的溢出现象。main( )int a,b;a=32767;b=a+1;printf(%d,%d,a,b); 程序运行结果为:32767,-32768源程序3、实型变量(1)实型数据在内存中的存放形式 实型数据与整型数据不同,实型数据是按照指数形式存储的。一般实型数据占4个字节(32位),其中多少位存放小数部分,多少位存放指数部分不确定,但存放小数部分的位数越多,有效数字越多。而存放指数部分的位数越多,能表示数值的范围越大。(2)实型变量的类型与分类语言的实型变量,分为三种: 单精度型:类型关键字为float,一般占字节(32位),提供位有效数字。表示范围为: 10-3710+38 双精度型:类型关键字为double,一般占个字节、提供1516位有效数字。表示范围为: 10-30710+308 长双精度型:类型关键字为 long double,一般占16个字节、提供1819位有效数字。表示范围为: 10-493110+4932实型变量的分类(3)实型数据的舍入误差 【例1.9】实型数据的舍入误差现象。源程序 main( ) main( ) float a,b; float x; a=123456.789e5; x=7.1234567890; b=a+20; printf(x=%20.18f,x); printf(b=%fn,b); 程序运行结果为:x=7.123456954956054690 程序运行结果为:b=12345678848.000000(4)实型常量的类型有否必要区分其常量的类型,但事实上是有区别的。【例1.10】实型常量的应用。main( )float x;double y;x=123456.789;y=123456.789;printf(x=%fny=%fn,x,y); 结果为:x=123456.789062源程序y=123456.789000这就说明,一个实型常量赋值给一个实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据。Float型的变量只能保存七位有效数字,double型的变量只能保存1516位有效数字。4、字符变量C语言规定一个字符变量只能存放一个字符常量。字符数据在内存中的存储形式:系统在表示一个字符数据时,并不是将字符本身的形状存入内存,而只是将字符的ASCII码存入内存。在内存中所有的数据又是以二进制的形式存放的。例如字符a的ASCII码为97,b的ASCII码为98,所以使得在C语言有效的范围中字符数据和整型数据之间通用(0255)。【例1.11】字符变量的使用。源程序main( ) char c1,c2; c1=97;c2=98; printf(“%c,%cn”,c1,c2); 结果为:a,b printf(“%d,%dn”,c1,c2); 结果为: 97,98 【例1.12】字符变量和整型变量可以相互赋值。main( )int i;char c;c=97;i=c;printf(%c,%dn,c,c); printf(%c,%dn,i,i); 程序运行结果为:a,97源程序 a,97 说明:TC中将字符变量中的最高位作为符号位,其取值范围是-128127(一个字节),在用%d格式输出时,ASCII码在0127之间的会输出一个整数。如ASCII码在128255之间的字符,则会得到一个负数。 【例1.13】main()源程序char c=130;printf(%d,%c,c,c); 结果为:-126,在C语言中没有变量来存放字符串常量,须用字符数组来存放。(待到数组一章时在讨论)5、变量赋初值(1)什么是对变量赋初值(允许在定义同时赋初始值)。变量赋初值就是在定义变量的同时,给变量赋一个值。这个值变量产生后第一次被赋值,所以叫赋初值。如:int a=3; float x=5.56; char c1=a;(2)如何进行赋初值对变量赋初值只要在定义的时候用赋值运算符赋给该变量一个值就行。 例如:int x=3; float y=4.6; char z=a;(3)在赋初值过程中的问题 int x,y,z=3; 注意:此时只有z=3,而x,y没有初值,其初值也不是0,而是一个不确定的值,这个值在该变量所能表示的数值范围内,具体是多少我们不知道。如果此时使用该变量,系统不会检查、提示,而直接使用其中那个不确定的值,会出错的。 如:int a,b,c=5;相当于如下两个语句: int a,b,c; c=5; int a=b=c=3;这种写法是正确的。表示a、b、c的初值都是3。也可写成int a=3,b=3,c=3; 或者写成:int a,b,c; a=b=c=3; 注意:初始化不是在编译阶段完成的,而是在运行时赋予初值的。1.5 运算符和表达式在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。1.5.1 算术运算符和表达式1.五种基本算术运算符 + 加法运算符或正值运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符 % 模运算符或称求余运算符 注意:(1)关于除法运算/使用“/”时注意:如果运算符两边的数据为整型,那么得到的结果也必是整型,小数部分被舍弃。5/2=2,1/5=0,而不是0.2,1.0/5=0.2。另外,如果其中一数是负数,舍入的值不固定,得到的值也不固定。如:-5/3可以得到-1和-2两值,TC2.0采取“向零取整”法得到-1。(2)关于求余数运算使用“%”时注意:该运算符的两边只能是整型数据。且得到的结果也只可能落在从0到%右边的数减1这个范围内。如:7%4的数值为3。2.表达式和算术表达式(1)表达式的概念用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子,称为表达式。 单个常量、变量或函数,可以看作是表达式的一种特例。将单个常量、变量或函数构成的表达式称为简单表达式,其它表达式称之为复杂表达式。(2)算术表达式的概念表达式中的运算符都是算术运算符。 例如:3 + 6 * 9、(x + y) / 2 1、3+4.5*a-b*4/3、a*b/c-1.5+a等都是算术表达式。3.运算符的优先级与结合性(1)语言规定了运算符的优先级和结合性。所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性。反之,称为右结合性。结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。(2)表达式求值C语言规定,对表达式求值时,按运算符的优先级别高低,从高到低进行运算。 按运算符的优先级高低次序执行。例如,先乘除后加减。 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。 例如,算术运算符的结合方向是“自左至右”,即:在执行“a b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。1.5.2 赋值运算符和赋值表达式1. 赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算表达式的一般形式为: 变量=赋值表达式 如:a=b=c=5 /*a=5,b=5,c=5*/a=5+(c=6) /*a=11,c=6*/x=(y=4)+(z=3) /*x=7,y=4,z=3*/x=(y=4)/(z=3) /*x=1,y=4,z=3*/ 例:x=6 x+=x*=x/=3 结果 x=8 例:a=12a+=a-=a*a结果 a=-264 例:b=3 printf(“%d”,a=b)输出应为3 如果 x = 5 y = (float)5 / 2 可见表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。2. 复合赋值运算符复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。复合赋值运算的一般格式为: 变量 双目运算符 = 表达式 复合赋值运算符它等价于:变量 = 变量 双目运算符 (表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。 例如:x += 3 /* 等价于x=x+3 */ y *= x + 6 /* 等价于y=y*(x+6),而不是y=y*x+6 */A+=B解释为:将“A+”移到“=”右侧得到“=A+B”,然后在左侧添上“A”就得到了“A=A+B”。C语言规定的10种复合赋值运算符如下:+=,-=,*=,/=,%=;/*复合算术运算符(5个)*/&=,=,|=,=;/*复合位运算符(5个)*/ 其中后五种是位运算的运算符,在位运算那章介绍。3. 赋值表达式由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。(1)一般格式: 变量 (复合)赋值运算符 表达式(2)赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。例如,“a = 5”这个赋值表达式,变量a的值“”就是它的值。4. 自增、自减运算符(+、-)这是C语言特有的运算和运算符(1)作用自增运算使单个变量的值增,自减运算使单个变量的值减。(2)用法与运算规则自增、自减运算符都有两种用法。a)前置运算运算符放在变量之前:变量、变量先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减,后运算。b)后置运算运算符放在变量之后:变量、变量变量先参与其它运算,然后再使变量的值增(或减),即先运算,后增减。 例如: k=1; k=1;演示 j=+k; j=k+; 左边: k先变成2 , j=2 右边: k为1,j=1然后k为2。 使用中的问题说明:(1) 这两种、运算符只能用于变量,而不能用于常量或表达式。(2) +、-运算符的优先相同,但比算术运算符优先级要高。其结合性是“从右至左”的。i=3; j=-(i+);i=3; j=+(+i);printf(“%d,%d”,i,j); printf(“%d,%d”,i,j); 结果是:,-3 结果是:,4(3)要避免发生歧义i=3;i=3;j=(i+)+(i+)+(i+);k=(+i)+(+i)+(+i);在某些C中是i=6 j=12 k=15而在TC、MSC中i=6 j=9 k=18(4)如何组合多个运算符i+j应理解为:(i+)+j而不是i+(+j)(5)注意程序的写法i=3;i=3;j=i+;Printf(“%d,%d”,i,i+);printf(“%d,%d”,j,i);结果为:,结果为,练习:i=3;p=3;求3+5*8%2+10/5-i+p-的值:结果应为5+是自增运算符。+k或k+都是让变量k的值加1。-是自减运算符。-k或k-都是让变量k的值减1。+k含义:先执行k=k+1,再使用k值。k+含义:先使用k值后,再执行 k=k+1。 说明: 自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。 自增、自减运算符,不能用于常量和表达式。 例如,5+、-(a+b)等都是非法的。 在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。 【例1.14】自增、自减运算的应用。 main() int x=6, y; printf(x=%dn,x); /*输出x的初值*/ y = +x; /*前置运算*/ printf(y=+x: x=%d,y=%dn,x,y); y = x-; /*后置运算*/ printf(y=x-: x=%d,y=%dn,x,y); 程序运行结果:源程序x=6y=+x: x=7,y=7y=x-: x=6,y=7 1.5.3 逗号运算符和逗号表达式语言提供一种逗号运算符“,”。用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。1.一般形式:表达式, 表达式, , 表达式n2.求解过程:自左至右,依次计算各表达式的值,“表达式n” 的值即为整个逗号表达式的值。例如,逗号表达式“a=3*5,a*4”的值=60,先求解a=3*5,得a=15;再求a*4=60,所以逗号表达式的值=60。 又例如,逗号表达式“(a=3*5,a*4),a+5”的值=20,先求解a =3*5,得a=15;再求a * 4=60;最后求解a+5=20,所以逗号表达式的值=20。 例如:x=8*2,x*4 值为:64 x=16x=(z=5,5*2) 值为:10 z=5(x=8*2,x*4),x*2 值为:32 x=16 逗号表达式用的地方不太多,一般情况是在给循环变量赋初值时才用得到。或应用于只允许放一个表达式,但要做许多运算的地方。所以程序中并不是所有的逗号都要看成逗号运算符,尤其是在函数调用时,各个参数是用逗号隔开的,这时逗号就不是逗号运算符。并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。 如:printf(%d,%d,%d,x,y,z);1.5.4 类型转换在C语言中有两种形式的类型转换(且只有两种),一种是系统自动进行的类型转换,另一种是强制类型转换。1、自动类型转换为什么各类型的数据可以进行混合运算?我们前面已经讲过,字符型数据在内存中是按数值方式存放的。而整型数据和实型数据肯定也是按数值方式存放的。在这种前提下,这三种类型的数据实际上是可以进行混合运算的。就象生活中,3块5再加2块一样(这里说的是人民币3.5元加2元)。但是应该有一个运算原则。首先转换成同一类型,然后运算。我们已经知道,不同类型的数据可以进行混合运算,但是还要遵循一个原则:在类型转换图中,

温馨提示

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

评论

0/150

提交评论