为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C1C2语言程序设计

2012-12-04 50页 ppt 448KB 13阅读

用户头像

is_863231

暂无简介

举报
C1C2语言程序设计nullC语言程序设计C语言程序设计任课教师:杜友福 Email:dyf@yangtzeu.edu.cn Tel: 8060425教材及学时安排教材及学时安排主教材 杜友福主编,《C语言程序设计(第2版)》,  科学出版社,2007年8月 辅教材 杜友福主编,《C语言程序设计导学(第2版) 》,  科学出版社,2007年8月 学时 72学时(理论教学52+课内上机20) ...
C1C2语言程序设计
nullC语言程序设计C语言程序设计任课教师:杜友福 Email:dyf@yangtzeu.edu.cn Tel: 8060425教材及学时安排教材及学时安排主教材 杜友福主编,《C语言程序设计(第2版)》,  科学出版社,2007年8月 辅教材 杜友福主编,《C语言程序设计导学(第2版) 》,  科学出版社,2007年8月 学时 72学时(理论教学52+课内上机20) 要求自主安排课外上机20学时以上。 教学进度安排教学进度安排第一章 C语言程序设计概述 (3学时) 第二章 数据类型、运算符与表达式 (5学时) 第三章 顺序结构程序设计 (4学时+ 2学时上机) 第四章 选择结构程序设计 (4学时+ 2学时上机) 第五章 循环结构程序设计 (6学时+ 4学时上机) 第六章 数组 (6学时+ 4学时上机) 第七章 函数 (6学时+ 4学时上机) 第八章 用户标识符的作用域和存储类 (4学时) 第九章 编译预处理 (2学时) 第十章 指针 (4学时+ 2学时上机) 第十一章 结构体、共用体和用户定义类型 (4学时+ 2学时上机) 第十二章 位运算 (2学时) 第十三章 文件 (2学时) 教学基本要求教学基本要求熟练掌握C语言的基本语法知识 掌握用C语言设计程序的基本方法与技巧 掌握C语言程序的上机及调试方法 能够阅读与C语言程序 课程学习要求课程学习要求英语学习的5个方面:听、说、读、写、背 程序设计学习的5个方面:听、阅、编、试、记 听:精力集中,跟上进度 阅:阅读程序,分析结果 编:编写程序,掌握方法 试:上机调试,学会技巧 记:理解记忆,加深印象课程学习要求课程学习要求勤思考、多练习,认真独立完成作业 所有作业必须独立并按时完成 编程作业必须经上机调试通过 重实践、多调试,有效利用上机时间 课内上机禁止玩游戏或上网(发现二次,按缺席一次处理) 上机考勤4次缺席,取消考试资格 第一章 C语言程序设计概述第一章 C语言程序设计概述教学目标 掌握程序及程序设计的基本概念,程序的运行过程、算法及其特点、算法的描述、C语言程序的基本结构。 熟悉设计程序时应遵循的基本原则。 了解利用计算机解决实际问题的过程、结构化程序设计方法并在以后的程序设计中应用和逐步熟练掌握。 基本要求 能将日常生活中解决一些简单问题的步骤用算法描述,掌握N-S图的算法表示方法。熟悉程序开发环境,学会上机基本操作。1.1 程序和程序设计语言1.1 程序和程序设计语言一、程序与程序设计 程序是控制计算机运行的指令序列。 程序设计就是设计、书写及检查程序的过程。 二、程序设计语言 程序设计语言是软件系统的重要组成部分。 程序设计语言是描述计算机指令的工具。 各种程序设计语言有自己的语法、词汇。 可分为机器语言、汇编语言和高级语言三类。1. 机器语言1. 机器语言由“0”和“1”组成的二进制表示的机器指令的集合。 例如某种类型的计算机规定以“10000000”表示一个“加法”操作,以“10010000”表示一个“减法”操作。 机器指令一般由操作码和操作数两个部分组成。 计算机硬件可以直接识别,执行的速度比较快。 针对一种计算机所编写的机器语言程序,一般不能在另一种类型的计算机上运行,而且程序的编写难度较大,修改、调试也不方便,容易出错,程序的直观性较差。 2. 汇编语言2. 汇编语言用能够帮助记忆的指令助记符来代替机器指令中的操作码,用地址符号或十进制数来代替操作数。 如用“ADD”表示加法操作,用“SUB”表示减法操作。 比机器语言直观,容易记忆和理解,编写的程序比机器语言程序易读、易检查、易修改。 不同类型的计算机,汇编语言源程序不能通用。 必须由一种专门的翻译程序(汇编程序)将汇编语言源程序翻译成机器语言程序,计算机才能执行。 3. 高级语言3. 高级语言面向问题的程序设计语言 与具体的计算机硬件无关,其表达方式接近于被描述的问题,接近于自然语言和数学语言,易为人们接受和掌握。 其显著特点是独立于具体的计算机硬件,通用性和可移植性好。 计算机高级语言已有上百种之多,得到广泛应用的也有十几种。C语言是其中之一。4. 程序运行过程4. 程序运行过程编辑处理 通过编辑程序将编写的源程序送入计算机。 语言处理 将用户编写的源程序转换成机器语言的形式,以便计算机能够识别和运行。 由翻译程序自动完成的,翻译程序除了要完成语言间的转换外,还要进行语法、语义等方面的检查。 装配链接处理 装入内存运行三、语言处理程序三、语言处理程序1. 汇编程序 由汇编程序(一种由专业的软件开发商提供的系统软件)将用汇编语言编写的源程序翻译成目标程序(某种类型计算机的机器语言程序),这一过程称为汇编。2. 编译程序2. 编译程序由编译程序将高级语言源程序翻译成目标程序。 3. 解释程序3. 解释程序 由解释程序将高级语言源程序一句一句地读入,每读入一个语句都要对它进行分析和解释,若有错误就即时中断其解释过程,并用户进行修改,若没有错误就按照解释结果执行所要求的操作。解释方式不产生目标程序。 三种语言处理程序的特点三种语言处理程序的特点汇编程序是将一条汇编语言指令翻译成一条机器语言指令。将汇编源程序整体翻译成目标程序。 编译程序是将一条高级语言的语句翻译成若干条机器语言指令。也是将高级语言源程序整体翻译成目标程序。 解释程序也是将一条高级语言的语句翻译成若干条机器语言指令。但翻译一句就执行一句,不生成完整的目标程序,因此在程序运行期间始终离不开翻译程序。 四. 程序设计基本原则四. 程序设计基本原则正确性 程序本身必须具备且只能具备设计的全部功能。它是判断程序质量的首要。 可靠性 程序在多次反复使用过程中不失败的概率。 简明性 要求程序简明易读。 有效性 程序在运行时要占用CPU的时间、存储器的存储空间。有效性就是要在一定的软、硬件条件下,反映出程序的综合效率。 可维护性 可分为校正性维护、适应性维护和完善性维护,直接关系到程序的可用性。 可移植性 程序主要与其所完成的任务有关,但也与它的运行环境有着一定的联系。软件的开发应尽可能远离机器的特征,以提高它的可移植程度。 五.用计算机解决问题的基本步骤五.用计算机解决问题的基本步骤一般由分析问题、建立数学模型、选择合适算法、编写程序、调试、运行程序直至得到正确的结果等几个阶段所组成。 设计步骤 确定要解决的问题。主要目的是搞清楚“做什么”。 算法设计与数据结构设计。主要任务是解决“如何做” 。涉及两个方面的,一是数据结构设计(解决数据的表示与存储),另一个是算法设计(描述操作步骤)。 编写程序和调试程序。 整理资料,交付使用。 1.2 算法1.2 算法计算机算法是为计算机解题设计的有明确意义的运算步骤的有限集合。 算法的特点 有穷性 确定性 有效性 有零个或多个输入 有一个或多个输出1.简单算法举例1.简单算法举例例1.1 给出求x1+x2+x3+x4+x5 的值的算法。 (1)手工计算算法 ① 求x1与x2的和,得到两个数之和; ② 将上一步的和与x3相加,得到三个数之和; ③ 将上一步的和与x4相加,得到四个数之和; ④ 将上一步的和与x5相加,得到五个数之和。 从手工计算过程中可知:其运算方法类似于用算盘计算该题的过程,每次仅求出两个数之和,其中一个加数为上一步所得的结果,另一加数为多项式中的一项,重复这个过程,直到加到最后一项为此。 (2)适合计算机处理的算法(2)适合计算机处理的算法 该算法能更加简洁地表达上述解题过程,并具有通用性。先定义几个变量:设置变量s表示多项式之和,其初值为零;设置变量a表示多项式中的一项,它的值可以为x1,x2,,x5;用i记录被加了几次,其初值为1。解题步骤为: ① s  0; ② i  1; ③ a  xi; (使a等于多项式中的第i项) ④ s  s+a; (求和,并将结果保留在s中) ⑤ i  i+1; (计数增值) ⑥ 若i≤ 5,则重复③、④、⑤各步;否则,计算结束; ⑦ 输出s。 2. 算法的表示2. 算法的表示(1) 自然语言 通俗易懂、直观、容易掌握,但算法的表达与计算机的高级语言形式差距较大,通常用在较简单的问题中。 (2) 伪代码 不在计算机上实际执行,仅仅用于程序员使用C等程序设计语言编写程序之前帮助其构思,而且与自然语言相似,非常方便和友好。 (3) 传统流程图 直观,设计者的思路表达得清楚易懂,便于检查修改。 传统流程图常用的符号传统流程图常用的符号例1.2 输入一个整数,将它倒过来输出例1.2 输入一个整数,将它倒过来输出用自然语言描述: ① 输入一个整数送给x; ② 求x除以10的余数,结果送给d,并输出d ; ③ 求x除以10的整数商,结果送给x; ④ 重复② ,③步,直到x变为零时终止。 用伪代码描述: ① 输入一个整数送x; ② while(x ≠ 0) {d=x%10; 输出d; x=x/10; }例1.3 求出这100个数的累加和、最大值和最小值例1.3 求出这100个数的累加和、最大值和最小值 从键盘输入100个数,求出这100个数的累加和,并找出它们的最大值和最小值。试用传统流程图描述解决这个问题的算法。(4) 用N-S流程图表示(4) 用N-S流程图表示N-S流程图由美国学者I.Nassi和B. Shneiderman提出的一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线,禁用程序的转向语句,将全部算法都写在一个矩形框内,因此,N-S流程图也叫盒图。 例1.4 从键盘输入一个整数,判别该数是否为素数例1.4 从键盘输入一个整数,判别该数是否为素数 素数,也称为质数,是指只能被1及其自身整除且大于1的正整数,如2、3、5、7等都是素数。用N-S流程图描述解决这个问题的算法如图1.9所示。                           (5)用计算机语言表示(5)用计算机语言表示例1.6 将例1.2的算法用C语言表示。 #include main ( ) { int x,d; x=12345; while (x<>0) {d=x%10; printf (“%d”, d); x=x/10; } }1.3 结构化程序设计方法1.3 结构化程序设计方法设计程序时只能使用顺序、选择、循环三种基本结构。 结构化程序设计强调程序设计风格和程序结构的化,提倡清晰的结构。 结构化程序设计方法的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。 (1)自顶向下; (2)逐步细化; (3)模块化设计;(4)结构化编码(限制使用GOTO语句 )。 例1.7 编程打印出3~5000之间的所有质数。 例1.7 编程打印出3~5000之间的所有质数。 分析:我们采用自上向下、逐步细化的方法来处理这个问题。即先把这个问题分解为二个相对较小的问题:  判别某数i是否为质数;  利用循环判别3~5000之间的所有的数是否为质数,若是就把它打印出来;1.4 C语言程序的基本结构1.4 C语言程序的基本结构 main ( ) /*求两数之和*/ { int a,b,sum; /*这是定义变量*/ a=123; b=456; sum=a+b; printf (“sum is %d\n”, sum); } 程序运行结果为: sum is 579 函数是C程序的基本单位。一个C源程序至少包含一个函数(main函数)。 为增加程序的可读性,源程序中应当加上必要的注释。C程序中可用 /* …… */对程序的任何部分作注释。注释对程序的执行没有任何影响。 例1.9 求两数之和C语言程序的基本结构2C语言程序的基本结构2 main ( ) /*主函数*/ { int a,b,c; /*定义变量*/ scanf (“%d,%d”,&a,&b); /*输入变量a和b的值*/ c=max ( a,b); /*调用max函数,将得到的值赋给c*/ printf (“max=%d”,c); /*输出c的值*/ } int max (int x, int y ) /*定义max函数,函数值为整型,x,y为形式参数*/ { int z; /*max函数中用到的变量z ,也要加以定义*/ if ( x > y ) z=x; else z=y; return ( z ); /*将z返回,通过max带回调用处*/ }例1.10 求2个数的大者C程序由若干个函数构成,其中必须有且只能有一个main()函数。 C程序执行时总是从main()函数开始,在main()函数中结束。 C程序中的main()函数与其它函数之间的位置可以随意安排。C语言程序的基本结构3C语言程序的基本结构3C程序的输入和输出操作是由库函数来完成的。 被调用的函数可以由系统提供(库函数),也可以根据需要自己编制。 函数由函数首部和函数体两个部分组成。 函数首部描述该函数的外观(即该函数的名字,该函数需要外部提供哪些信息,执行完毕后能为外部提供哪些信息等)。 函数体定义该函数的内涵(即该函数将对什么数据执行何种操作)。 C程序书写格式自由,一行可以有多个语句。建议采用缩进式。 分号是C语句的必要组成部分。上机基本操作指南与作业上机基本操作指南与作业教材P13 习题一 1、2、3、4题全做上机基本操作过程简介 《导学》后的“C语言上机指南”第二章 数据类型、运算符、表达式第二章 数据类型、运算符、表达式掌握数据及数据类型、算术运算符、赋值运算符、逗号运算符、自增(减)运算符及其上述运算符组成的表达式的基本概念; 熟悉运算规则(运算符的优先级和结合性)、表达式计算中的类型转换规则; 了解各种类型数据在计算机中的存储形式。教学目标基本要求 能正确地将数学公式用C表达式表示; 能分析各种表达式的运算结果。2.1 C语言的数据类型2.1 C语言的数据类型2.2 常量、变量与标识符2.2 常量、变量与标识符在源程序中明确指明,在程序运行前就知道,而且在程序运行过程中不会发生变化。 常量的类型: 整型常量,如:123、-321、0 实型常量,如:12.3、2.0 字符常量,如:’a’、’b’、’7’、’#’ 字符串常量,如:“student”、“a” 常量的形式: 字面常量(直接常量) 符号常量1. 常量符号常量符号常量符号常量是用户自己定义的,用标识符来代表某个需要多次使用的常量,其值在其作用域内不能改变,也不能被赋值。 符号常量必须先定义,后使用。 定义格式为: #define 常量名 字符串 习惯上用大写字母来标识符号常量。 特点:直观、书写方便、修改容易。 例2.1:符号常量的使用 #define PI 3.14159 main( ) { float r, l, area; r =3.5; l =2*PI*r; area=PI*r*r; printf(“l=%f, area=%f\n”, l, area); } 2. 变量2. 变量在程序运行过程中其值可以在一定范围内变化。 在计算机的内存中占据一定的存储单元,在相应的存储单元中存放着变量的值。 变量名:用来标识一个变量的标识符,也就是变量的名字。习惯上变量名用小写字母表示,以增加其直观性和可读性。 变量值:变量的值,即在变量的存储单元中存放的数值。 C语言规定在程序中所有要用到的变量在使用前必须先指定其类型,称为变量定义或变量说明。 3. 标识符3. 标识符C语言中,标识符可以用作变量名、符号名、函数名和后面将要学到的数组名、文件名以及一些具有专门含义的名字。 合法的标识符只能由字母、数字和下划线等三种字符组成,并且第一个字符必须为字母或下划线。 注意:字母是指英语字母。 在C语言的标识符中,大写字母和小写字母是两个不同的字符。 对于标识符的长度,一般的计算机系统规定取前8个字符有效,多余的字符将不被识别。有些系统允许取较长的名字。 标识符的分类标识符的分类C语言的标识符可以分为以下三类。 关键字 C语言规定的一批标识符,它们在程序中都代表着固定的含义,不能另作它用。 如:if,while等。 预定义标识符 在C语言中也都有特定的含义,如:sin。若另作它用,将使这些标识符失去系统规定的原意。 用户标识符 用户根据需要定义,一般用来给变量、函数、数组或文件等命名。除要遵循标识符的命名规则外,还应注意做到“见名知义”,即选择的用户标识符应具有相关含义,以增加程序的可读性。 注意:如果用户标识符与关键字相同,程序在编译时将给出出错信息;如果与预定义标识符相同,系统并不报错,只是该预定义标识符将失去原定含义,代之以用户确认的含义,可能会引发一些运行时的错误。 2.3 整型数据2.3 整型数据整型数据包括整型常量和整型变量。 1.整型常量(整数) (1) 十进制形式,如:100,0,-100 (2) 八进制形式,以数字0开头的八进制数 ,如:0157 ,即(157)8,其对应的十进制数值为:1×82+5×81+7×80,即111。八进制数中的数位符号只能有8 个,即0~7。 (3) 十六进制形式,以数字字母0x开头的十六进制数,如:0x157,即(157)16,其对应的十进制数值为:1×162+5×161+7×160,即343。十六进制数中的数位符号为数字字符0~9和英文字母A~F等16个字符。2.整型变量2.整型变量 整型变量可以分为: 基本整型(int)、短整型(short)、长整型(long)。 每一种类型又可分为: 无符号整型(unsigned)和有符号整型(signed)。 如: int k; /*定义变量k为基本整型变量*/ short int x1,x2,; /*定义变量x1, x2均为短整型变量*/ unsigned long l1; /*定义变量l1为无符号长整型变量*/ 变量一经定义,编译系统就会为每个变量分配相应的存储单元。 可以在定义变量时给变量赋初值(变量初始化) 如: int k=3,m=5; 注意:若未初始化,则变量的值为不确定值(随机值)。表2.1 ANSI标准定义的整数类型表2.1 ANSI标准定义的整数类型3.整型数据在内存中的存储形式 3.整型数据在内存中的存储形式 有符号整数 最高位为符号,0为正数,1为负数,其它位为数值。 采用补码形式,正数与原码相同,负数为反码+1。 十进制数+5的原码为:0000000000000101 十进制数-5的原码为:1000000000000101 十进制数-5的补码为:1111111111111011 2字节整数的取值范围为: 1000000000000000 — 0111111111111111 即:-32768 — 32767 整型数据在内存中的存储形式 无符号整数 所有位均为数值位。 2字节整数的取值范围为: 0000000000000000 — 1111111111111111 即:0 — 65535 存储特点: 精确存储、取值范围有限,若超出取值范围,称为“溢出”。整型数据在内存中的存储形式4.整型数据的溢出4.整型数据的溢出 在某个系统(如Turbo C)中,int型数据在内存占2个字节,则它的最大允许值为32767,如果再加上1,就会发生“溢出”。例2.2 整型数据的溢出。 # include main( ) { int a,b; a=32767; b=a+1; printf("%d, %d ", a,b); } 运行结果为:32767,-32768a: 0111 1111 1111 1111 b: 1000 0000 0000 00005.整型常量的类型 5.整型常量的类型 在程序中出现一个整型常量,也应该是上述6种类别当中的一种,C语言会自动按以下5种情况分别进行处理。 (1)数值在-32768~32767的范围内的常量是int型。 (2)超过上述范围,但在-2147483648~2147483647的范围内,则认为它是long int型。 (3)标准C语言的int与short int等同范围。 (4)一个整常量后面加上字符u(或U)表示一个无符号整型的数据,如:12345u,-12345u(转换成补码,按无符号数存储,即为53191)。 (5)一个整常量后面加上字符L(或l)表示一个长整型的数据,如:100L为十进制长整型常量,0X100L为十六进制长整型常量。2.4 实型数据2.4 实型数据1. 实型常量(实数) 十进制小数形式,如:100.0、0.5、-10.8等,注意实型常量中必须要有一个小数点 指数形式,如:100e5表示100×105,注意字母E(或e)之前必须有数字,且E(或e)后面的指数必须为整数,如E5、1.5e3.8、1e等都是不合法的指数形式 规范化的指数形式,字母E(或e)之前的小数部分,其小数点之前必须有且只能有一位非零的数值。 如:3.58759E2 2. 实型变量及其定义2. 实型变量及其定义 C语言中的实型变量分为单精度型和双精度型两种,分别用保留关键字float和double进行定义。 如: float x,y; /*定义变量x,y为单精度实型*/ double z; /*定义变量z为双精度实型*/ 表2.2 实型数据表2.2 实型数据3. 实型数据的存储 3. 实型数据的存储 实型数据在内存中是按照指数形式来存储,例如:358.00.358x103。系统把一个实数分成小数部分和指数部分,分别存放。 实型数据存储位数固定且有限,故实型数据的精度有限,会产生误差。 存储误差 有效位数以外的其它数字位被舍去 转换误差 十进制与二进制之间转换时产生误差4.实型数据的误差4.实型数据的误差main() { float x1, x2; x1=288.4; /*有效位数不多,但会产生转换误差*/ x2=1234567891.0; /*有效位数太多,会产生存储误差*/ printf("x1=%f\n", x1); printf("x2=%f\n", x2); } 程序运行结果为: x1=288.399994 x2=1234567936.000000例2.3 实型数据的误差 特点:  表示的数据范围比同等长度的长整型数要大得多,但也是有限的。 非精确存储。 在进行算术运算时的处理速度比较慢。5. 实型常量的类型5. 实型常量的类型 在大多数C编译系统中,将实型常量都作为双精度型来处理。 例如: float a; double b; a=111111.111; /*最后两位小数不起作用*/ b=111111.111;2.5 字符型数据2.5 字符型数据1. 字符常量 字符常量是用单引号(即撇号)括起来的单个字符。 如:‘A’、 ‘6’、‘a’ 转义字符: 就是一个反斜杠字符,后跟另一个普通字符或若干个数字字符,把它们作为一个整体,用来代替某一个特殊的字符,例如‘\n’ 代表一个“换行”符 控制字符 含义 控制字符 含义 \ a 铃声 \ v 竖向跳格 \ b 退格 \\ “\”字符 \ f 跳页 \ ’ “’”字符 \ n 换行 \ddd 八进制常量所代表的字符 \ r 回车 \xhh 十六进制常量所代表的字符 \ t 横向跳格 转义字符转义字符 ‘\ddd’ 或‘\ xhh’是一个转义字符的通用形式,可以用它表示ASCII码字符集里的每一个字符。其中的三位八进制常量或两位十六进制常量为某个字符在ASCII码字符集里的编号,即ASCII码值。 如:字符A的ASCII值为65, 则:‘A’, ‘\101’, ‘\x41’均表示单个字符A。 2. 字符变量2. 字符变量 用类型名char来定义。 如: char c1,c2; /*定义变量c1,c2为字符变量 */ 每个字符变量占用1个字节,用来存放一个字符(常量)。 如: c1=‘a’; c2= ‘\n’;3.字符型数据在内存中的存储形式3.字符型数据在内存中的存储形式将一个字符型的数据存放到一个字符变量中,实际上是将该字符的ASCII码值存放到字符变量所占用的内存单元中。 例如:字符变量c1的值为‘a’(ASCII码值为97),所以变量c1的内存单元中存放着整数值97,其二进制为01100001。 字符型数据的存储形式与整数的存储形式类似,所以在C语言中可以把字符型的数据当作整型数使用,其数值范围为-128~ 127。可以定义无符号的字符变量,其数值范围为:0~255。 如:unsigned char c; /*定义变量c为无符号字符型变量*/ 字符型的数据当成整型数据来使用字符型的数据当成整型数据来使用例2.4 字符型的数据当成整数来使用 #include main() { char ch1,ch2,ch3,ch4,ch5; ch1= 'a' ;ch2= 'b' ; ch3=32; ch4=ch1-ch3;ch5=ch2-ch3; printf( "%c,%d" ,ch4,ch4); printf( "%c,%d" ,ch5,ch5); } 程序运行结果为: A,65 B,664. 字符串常量4. 字符串常量用一对双引号括起来的字符序列。字符串常量中的字符序列可以由任意多个字符组成,如:"a"、"ab"、""、"250"、 "good morning" 字符串""称为空串,由两个连续的双引号组成 C语言规定在每一个字符串的结尾都加上一个字符'\0',作为字符串的结束标志 应注意空串与空格组成的字符串、字符常量与单个字符组成的字符串之间的差别 例2.5 字符串常量例2.5 字符串常量main() { printf( "%s" , "CHINA" ); } 程序运行结果为: CHINA 程序中字符串常量"CHINA"在内存中的存储形式为:2.6 算术运算符和算术表达式2.6 算术运算符和算术表达式1. 基本算术运算符 + 、―、*、/、% 注意事项 两个整型数据相除的结果只能为整型数值,如7/2的结果为3 ,-7/2的结果为-3(TC中规定,有的系统为-4)。 “+”或“-” 用作单目运算符时只能有一个运算量,如x=-5,则+x的值还是-5,而-x的值为+5。 求余运算只能在两个整型数据之间进行,如9%5的结果为4,17%-3结果为2,-19%4结果为-3(TC中规定) 9.5%3为非法的运算。 有实数参加运算,则结果为双精度类型。2. 算术表达式2. 算术表达式用算术运算符和圆括号将运算对象(如常量、变量、函数等)按一定的规则连接起来就可以构成一个算术表达式。 如:(a+b)*c+5.0、x*y+2*sin(z) 注意:不允许出现上标或下标 如:x2+y2是不合法的 表达式都有一个值,即运算结果。 3.算术运算符的优先级和结合性3.算术运算符的优先级和结合性(1)算术运算符的优先级 “优先级”用于决定运算过程中的运算顺序,即有多个运算符出现时,哪一个先计算,哪一个后计算。 ( ) → 单目+、单目– →*、 /、% → +、 – (2)算术运算符的结合性 “结合性”则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。 单目+、-是先右后左(右结合性) 其余均为先左后右(左结合性) 4. 算术运算中的类型转换4. 算术运算中的类型转换在C语言中要求参加运算的两个运算量是同一数据类型,而运算结果也是该数据类型。 对数据类型不一致的两个运算量,系统会进行数据类型转换,将其中的一个低级别类型的数据向另一个高级别类型的数据转换(按空间大小和数值范围),然后才进行相应的算术运算,运算的结果为其中高级别类型的数据。 算术运算中的类型转换算术运算中的类型转换 横向箭头表示必转,竖向箭头表示当运算符两侧的数据类型不一致时的转换规则。 设i为int,f为float,d为double, g为long, 分析:3*(‘a’+1)+i*f-d/g 的运算转换过程及结果类型。 注意:并非将整个表达式一次性地转换为某一类型,只有当运算符两侧的数据类型不一致时才进行相应的转换(除必转类型外)。 如:3/2+5.0的结果为6.0,而非6.5。 5.强制类型转换运算符5.强制类型转换运算符 当自动类型转换不能达到目的时,可以使用强制类型转换运算符。强制类型转换运算符就是用一对括号括起来的类型名标识符,其一般格式为: (类型名标识符)(表达式) 如:(double)i/5.3 /* i的类型并未变化 */ (int)(x+i)%3 /* 不同于(int)x+i%3 */ 1/(float)i /* 假定i为int型 等价于:1.0/i */ 2.7 赋值运算符与赋值表达式2.7 赋值运算符与赋值表达式 变量的值在程序的运行过程中能够发生变化主要是通过对变量进行赋值来完成的。 1.赋值运算符 赋值运算符(=)的作用是把一个数据或表达式的值赋给一个变量。例如:x=3 赋值运算符的左边只能是变量,不允许是算术表达式或常量。例如:x+1=3 赋值运算符与数学中的等号意义不同,赋值运算符求解以后能够得到一个运算结果。 2. 赋值表达式2. 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。 赋值表达式的一般形式为: 变量 = 表达式 例如:x=3*5 执行过程:先将赋值运算符右边表达式的值求出来,然后将该值赋给左边的变量,被赋值变量的值就是整个赋值表达式的值。3. 复合的赋值运算符3. 复合的赋值运算符复合的赋值运算符是在赋值运算符的前面加上其它的运算符组合而成的新运算符。 10种复合赋值运算符分别是: += -= *= /= %= &= ∧= != <<= >>= 例如: x+=3 等价于 x=x+3 /*复合赋值表达式*/ x%=3 等价于 x=x%3 注意:这些运算符都是由多个字符组合而成的,其字符之间不允许有空格。 4. 自加、自减运算符4. 自加、自减运算符自加(++)自减(--)运算符的作用是使变量的值自动加(减)1。自加、自减运算符是单目运算符。 i++、++i的作用等价于i=i+1 i--、--i的作用等价于i=i-1 执行过程 变量在自加自减运算符之前(k++或k--)时,先使用变量的值,然后自加或自减。 如:k=3;y=5+k++;结果y的值为8,k的值为4。 变量在自加自减运算符之后(++k或--k)时,先自加或自减,然后使用变量的值。 如:k=3;y=++k+5;结果y的值为9,k的值为4。 自加、自减运算符自加、自减运算符注意 自增自减运算只能用于简单变量。 如:5++,(a+b)++都是不合法的。 自增自减运算具有右结合性。    如:int i=3; printf(“%d”,-i++); 则:-i++等价于-(i++),先使用i的值取负号为-3进行输出,然后变量i进行自加变为4。 不能理解为(-i)++,这是不合法的。 5. 赋值运算中的类型转换5. 赋值运算中的类型转换 系统自动将赋值运算符右边的数据类型转换成赋值运算符左边变量的类型。 整型变量=实型数据,直接舍弃实数的小数部分。需注意数据溢出。 实型变量=整型数据,整数部分取整型值,小数部分的值为零。需注意转换时的存储误差(单实=长整,超过7位有效位时)。 单精度变量=双精度数据,截取其小数部分中前面的7位有效数字(十进制数),指数部分保持不变。需注意数据溢出。 双精度变量=单精度数据,数值不变,有效位扩展16位,在内存中以64位存储。 赋值运算中的类型转换(续)赋值运算中的类型转换(续)将整型数据赋值给取值范围更大的整型变量时,对于有符号数,用其符号位的值向前扩展。对于无符号数,则用0向前扩展。将整型数据赋值给取值范围更小的整型数据时,按所需的位数从低位直接截取。需注意数据溢出。 同等长度的整型数据和无符号整型数据之间的转换。主要是符号位的处理。2.8 逗号运算符与逗号表达式 2.8 逗号运算符与逗号表达式 逗号运算符(,)又称为顺序求值运算符 由逗号运算符把若干个独立的表达式连接起来构成逗号表达式,逗号表达式的一般形式为: 表达式1,表达式2,表达式3,… ,表达式n 求值顺序 从左至右,最后一个表达式的值就是整个逗号表达式的值 逗号运算符与逗号表达式逗号运算符与逗号表达式 如:x=2,y=x+4,z=x*y 其值为12 实际上,使用逗号表达式的主要作用是分别得到各个表达式的值。如上面经过求值,可得到x的值为2,y的值为6,z的值为12,整个逗号表达式的值为12。    一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式。  如:(a=3*5,a*4),a+5 整个逗号表达式的值是20(并非65),a的值为15。 2.9 求字节数运算符 2.9 求字节数运算符 得到一个变量或某种类型的量在计算机内存中所占的字节数 。 用于求得表达式计算结果所占内存的字节数。其一般形式为:sizeof 表达式 例如,如果x为整型变量,则sizeof x的值是2,表明整型变量x在内存中所占的字节数为2。 用于求得某种数据类型的量所占内存的字节数。其一般形式为:sizeof(类型名标识符) 例如,sizeof(char)的值为1 sizeof(double)的值为8 第二章 作业第二章 作业教材P32 习题二 一、选择题 二、填空题
/
本文档为【C1C2语言程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索