C语言程序设计 (C Programming 上)ppt.ppt_第1页
C语言程序设计 (C Programming 上)ppt.ppt_第2页
C语言程序设计 (C Programming 上)ppt.ppt_第3页
C语言程序设计 (C Programming 上)ppt.ppt_第4页
C语言程序设计 (C Programming 上)ppt.ppt_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计 (C Programming),辽宁科技大学,上,C语言程序设计 (C Programming),第1章 C语言概述 第2章 数据描述与基本操作 第3章 C语言的控制结构,第1章 C语言概述,C语言程序设计 (C Programming),辽宁科技大学,4,程序、程序文件、程序设计及基本概念。 算法的概念及其特征,熟悉常用的描述算法的方法。 C语言程序的基本结构。 C程序应用开发环境。,本章学习目标,5,1.1 C语言的发展与特点,1.2 程序设计基础,1.3 C语言程序的结构,1.4 C语言程序的开发与环境,6,1.1 C语言的发展与特点,语言的原型是ALGOL 60语言。1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言中的精华提炼出来。并且他用B语言写了第一个UNIX操作系统。1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他用BCPL的第二个字母作为这种语言的名字,即C语言。,1. C语言的发展,2. C语言的特色,7,1.1 C语言的发展与特点,随着微型计算机的日益普及, 出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方,为了改变这种情况,美国国家标准研究所(ANSI)于1983年成立了专门定义C语言标准的委员会,花了6年时间使C语言迈向标准化。随着C语言被广泛关注与应用,ANSI C标准于1989年被采用,该标准一般称为ANSI/ISO Standard C,成为现行的C语言标准,而且成为最受欢迎的语言之一。许多著名的系统软件都是由C 语言编写的。 到了1995年,在ANSI C的基础上增加了一些库函数,出现了初步的C+。 C+进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。,1. C语言的发展,2. C语言的特色,8,1.1 C语言的发展与特点,(1) C语言具有结构语言的特点,程序之间很容易实现段的共享。 (2) C语言的主要结构成分是函数,函数作为C程序的模块单位,便于实现程序的模块化,而且便于模块间相互调用及数据传递。 (3) 运算符丰富。有34种运算符和15个等级的运算优先顺序,使表达式类型多样化,可以实现在其它语言中难以实现的运算。 (4) 数据类型丰富。数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型及枚举类型,能用来实现各种复杂的数据结构运算。,2. C语言的特色,1. C语言的发展,9,1.1 C语言的发展与特点,(5) 比较接近硬件:允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。 (6) 语法限制少和程序设计自由度大。 (7) 生成目标代码质量高、程序执行效率高。只比汇编程序生成的目标代码效率低1020。 (8) 可移植性好。基本上不做修改就能用于各种型号的计算机和各种操作系统。,2. C语言的特色,1. C语言的发展,10,1.2 程序设计基础,1.程序设计,2. 算法,3. 数据结构,程序设计主要包括两个方面: 一是行为特征的设计; 二是结构特性的设计; 行为特征的设计是指将解决问题过程中的每一个细节准确地加以定义,并将全部的解题过程用某种工具完整地描述出来。这一过程称为算法的设计。 结构特性的设计是指为问题的解决确定合适的数据结构。数据结构与算法之间有着密切的关系。特别是对于数据处理问题,算法的效率通常与数据结构在计算机中的表示有着直接的关系。,11,1.2 程序设计基础,算法是指对解题方案的准确而完整的描述。 1算法的基本特征 (1) 有穷性:一个算法必须保证执行有限步之后结束,并且每一步都在合理的时间内完成。 (2) 确切性:算法的每一步骤必须有确切的定义,不允许有模棱两可的解释,也不允许有多义性。 (3) 可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 (4) 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件。 (5) 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。,2.算法,1.程序设计,3. 数据结构,12,1.2 程序设计基础,2算法设计的要求 一个算法的设计需要注意以下几方面: (1)正确性: (2)可读性: (3)健壮性: (4)高效率和低存储量:,2.算法,1.程序设计,3. 数据结构,13,1.2 程序设计基础,3算法的描述 (1)用自然语言描述算法 【例1-1】对于一个正整数,判断它是否为素数。所谓素数,是除了1和它本身之外不能被任何数整除的数。 算法如下: S1: 输入n的值 S2: i=2(i作为除数) S3: n被i除,得余数r S4: 如果r=0,表示n能被i整除,则输出n“不是素数”,算法结束;否则执行S5 S5: i+1i S6: 如果i=n-1,返回S3,否则输出n“是素数”,然后结束。 在实际运算时,不必被2到n-1整除,到2/n或之间的数整除即可。,2.算法,1.程序设计,3. 数据结构,14,1.2 程序设计基础,3算法的描述 (2)用传统流程图描述算法 用流程图表示算法,能够直观、形象的描述算法,更易于理解。 【例1-2】求矩形面积,2.算法,1.程序设计,3. 数据结构,求矩形面积流程图,15,1.2 程序设计基础,3算法的描述 (3)用N-S图描述算法 1973年美国学者提出了一种新的流程图形式N-S流程图,N-S流程图去掉了所有的流程线,算法写在一个矩形内,在该矩形框内还可以包括其他矩形框。 【例1-3】求n!,2.算法,1.程序设计,3. 数据结构,求N!的 N-S图,16,1.2 程序设计基础,3算法的描述 (4)用程序设计语言描述算法 【例1-4】求5! #include main() int i,jc; jc=1; for(i=1;i=5;i+) jc=jc*i; printf(“5!=%d“,jc); ,2.算法,1.程序设计,3. 数据结构,17,1.2 程序设计基础,3.数据结构,1.程序设计,2.算法,数据结构是指相互之间存在一种或多种特定关系的数据元素集合。是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。数据元素具有广泛的含义,一般来说,现实世界中客观存在的一切个体都可以是数据元素。例如,描述一年四季的季节名春、夏、秋、冬可以作为季节的数据元素;表示家庭成员的各成员名父亲、儿子、女儿可以作为家庭成员的数据元素。,18,1.2 程序设计基础,数据结构主要研究以下3个方面的问题: (1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; (2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; (3)对各种数据基于某种数据结构进行的运算。,3.数据结构,1.程序设计,2.算法,19,1.3 C语言程序的结构,【例1-5】求矩形面积。 #include /* 调用输入输出库函数 */ void main() /* 主函数 */ float a,b,m; /* 定义变量 */ a=3;b=4; /* 变量赋值 */ m=a*b; /* 求面积 */ printf(“m=%fn“,m); /* 输出面积 */ ,1.C程序结构,2.C程序元素,20,1.3 C语言程序的结构,程序说明: (1) main是主函数的函数名,表示这是一个主函数。 (2) 每一个C源程序都必须有,且只能有一个主函数(main函数)。 (3) 函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。 (4) printf函数是一个由系统定义的标准函数,可在程序中直接调用。 (5) #include称为文件包含命令。 (6) 扩展名为.h的文件称为头文件。,1.C程序结构,2.C程序元素,21,1.3 C语言程序的结构,1语言源程序的结构特点 (1)一个语言源程序可以由一个或多个源文件组成。 (2)每个源文件可由一个或多个函数组成。 (3)一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。 (4)源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。 (5)每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“”之后不能加分号。 (6)标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。,1.C程序结构,2.C程序元素,22,1.3 C语言程序的结构,2书写程序时应遵循的规则 C程序的书写格式比较自由,从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则。 (1) 一行内可以书写一条或多条语句,一条语句也可以分多行书写。 (2) 用 括起来的部分,通常表示了程序的某一层次结构。一般与该结构语句的第一个字母对齐,并单独占一行。 (3) 根据语句的层次结构进行缩进层次书写,以便看起来更加清晰,增加程序的可读性,1.C程序结构,2.C程序元素,23,1.3 C语言程序的结构,1语言的字符集 字符是组成语言的最基本的元素。由字母,数字,空格,标点和特殊字符组成。在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。 (1)字母:小写字母az共26个,大写字母AZ共26个 (2)数字:09共10个 (3)空白符:空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略不计。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。 (4)标点和特殊字符,2.C程序元素,1.C程序结构,24,1.3 C语言程序的结构,2语言词汇 在语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。 (1)标识符:在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。,2.C程序元素,1.C程序结构,25,1.3 C语言程序的结构,在使用标识符时还必须注意以下几点: 标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。 在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。 标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便于阅读理解,尽量作到“见名知意”。,2.C程序元素,1.C程序结构,26,1.3 C语言程序的结构,(2)关键字:由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。语言的关键字分为以下几类: 类型说明符:用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的int,double等。 语句定义符:用于表示一个语句的功能。如例1.3中用到的if else就是条件语句的语句定义符。 预处理命令字符:用于表示一个预处理命令。如前面各例中用到的include。 (3)运算符:运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。,2.C程序元素,1.C程序结构,27,1.3 C语言程序的结构,(4)分隔符:有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误,例如把int a;写成 inta;编译器会把inta当成一个标识符处理,其结果必然出错。 (5)常量:分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。在后面章节中将专门给予介绍。 (6)注释符:以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。,2.C程序元素,1.C程序结构,28,第2章 数据描述与基本操作,C语言程序设计 (C Programming),辽宁科技大学,29,1、基本数据类型。 2、常量与变量的概念、定义及应用。 3、各类运算符及其运算规则。 4、输入输出函数的用法,运用输入输出函数进行简单程序设计。,本章学习目标,30,2.1 C语言的数据类型,2.2 变量与常量,2.3 运算符与表达式,2.4 输入和输出函数,31,2.1 C语言的数据类型,的数据类型如下: 基本类型 整型 字符型 实型 单精度 双精度 数据类型 枚举型 构造类型 数组类型 结构体 共用体 指针类型 空类型,32,2.2 常量与变量,1. 常量与变量,2. 整型数据,3. 浮点型数据,4. 字符型数据,5.变量的初始化,1常量 常量又称常数,是指在程序运行的过程中,其值不能被改变的量。常量分为普通常量和符号常量。 普通常量: 即常数,有整型常量、浮点型常量、字符型常量、字符串常量。如20、-10、123.456、a, “abc“等。 符号常量: 用一个标识符代表一个常量,这样的标识符称为符号常量。如用PI代表3.1415926。注意:符号常量的值在其作用域内不能改变,也不能再被赋值。如在程序中,对PI重新赋值: PI2;这样是不允许的。,33,2.2 常量与变量,1. 常量与变量,2. 整型数据,3. 浮点型数据,4. 字符型数据,5.变量的初始化,【例2-1】符号常量的使用。 # define PI 3.1415926 # include void main() float r,s,m; scanf(“%f“, 程序中用# define PI 3.1415926来定义符号常量PI,PI值代表3.1415926,以后在程序中出现的PI都代表3.1415926,可以和常量一样进行运算,并且在程序运行过程中不可以改变PI值,因为PI在本程序中代表常量,常量是不能被赋值的。,34,2.2 常量与变量,1. 常量与变量,2. 整型数据,3. 浮点型数据,4. 字符型数据,5.变量的初始化,2变量 在程序运行的过程中,其值可以改变的量称为变量。变量代表内存中一个具有特定属性的一个存储单元,用来存放数据,也就是变量的值。在程序运行期间,这些值是可以改变的。一个变量应该有一个名字,以便被引用。 变量名实际上是一个以名字对应的地址。在C语言中用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列称为标识符(identifier),也就是说标识符就是一个名字。标识符只能由字母、数字和下划线3种字符组成,并且第一个字母必须是下划线或字母。变量名区分大小写,如“sum“和“SUM“是不同的变量名。,35,2.2 常量与变量,1. 常量与变量,2. 整型数据,3. 浮点型数据,4. 字符型数据,5.变量的初始化,在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。这样做的目的如下。 (1) 凡是未被事先定义的,系统不认为是合法变量名,在编译程序时就会出现错误提示,这样,保证变量名的正确应用。例如,在声明部分有语句: int student; 而在执行时语句中错误的写成stvdent,在编译时就会检查出stvdent未经定义,不作为合法变量。 (2)每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元。如指定a,b为int型,系统就会为变量a,b分配相应的存储空间,不同的编译系统分配存储空间占用内存的字节数不同。 (3)每一个变量在定义时确定了类型,在编译时就会根据类型检查运算是否合法。例如,进行求余运算时,要求参与运算的变量必须是整型。,36,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,1整型常量的表示方法 整形常量即是常数。C语言整型常数可用以下三种形式表示: (1) 十进制整数:数码直接开头的十进制数,如123,-456等。 (2) 八进制整数:以0开头的常量是八进制数,如0123,-0456等。 (3) 十六进制整数:以0x开头的数是16进制数,如0x123,-0x456等。,37,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,2整型变量的分类 整型变量可分为:基本型、短整型、长整型和无符号型四种,其定义的关键字如下: (1) 基本型,以int表示。范围为-3276832767,即-215(215-1)。 (2) 短整型,以short int或short表示。范围与基本型相同。 (3) 长整型,以long int或long表示。若一个整型常量后面加上一个字母l 或 L,则认为是long int型常量。范围为-2147483648214783647即-231(231-1) (4) 无符号型,在实际应用中变量的值常常是正的,如年龄、工资、成绩等,因此可以将变量定义为“无符号”类型。,38,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,3. 整型变量的定义 整型变量的定义格式为:类型标识符 变量列表; 若定义多个同类型的变量,则用逗号分开。 例: int a,b;(指定变量a,b为整型) unsigned short c,d;(指定变量c,d为无符号短整型) long e,f;(指定变量e,f为长整型),39,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,4. 整型数据的输入 整型变量键盘输入,是通过scanf函数实现的,scanf函数是数据输入函数, 格式为:scanf (格式控制字符串,地址表列); 例如:scanf (“%d%d“,&a,&b); 格式控制是用双引号括起来的字符串,由“%“和格式字符组成,作用是将输入数据转换为指定的格式输入。 格式字符,对于不同的数据用不同的格式字符。d格式符是用来输入十进制整数的。因为变量a,b是整型变量,所以输入时用d格式符。 &a,&b中的“&”是“地址运算符”,&a是指a在内存中的地址。上面scanf函数的作用是:将a、b的值放到a,b在内存的地址单元中去。所以,在该问题中,若输入:1 2,则将1和2分别存入a和b的内存单元中。,40,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,5. 整型数据的输出 整型数据的输出用printf函数来实现。 如int x=5; printf(“%d“,x); printf函数的格式为: printf(格式控制字符串,输出表列); (1) 格式控制字符串和输入函数scanf的格式控制字符串基本一致。 (2) 输出表列是需要输出的数据或表达式。 (3) 在输出整型数据时,格式字符如下: %d,按整型数据的实际长度输出。 %md,m为输出字段的宽度,如果输出数据的位数小于m则左端补以空格,若大于m,则按实际位数输出。 %ld,输出长整型数据。 %u,输出unsigned型数据,即无符号类型。,41,2.2 常量与变量,2. 整型数据,1. 常量与变量,3. 浮点型数据,4. 字符型数据,5.变量的初始化,6. 整型数据的存储 数据在内存中是以二进制形式存放的,数值是以补码表示的。正数用二进制原码(补码与原码相同)表示,负数用二进制补码形式(二进制原码按位取反加1)表示,即负数的补码是将该数的绝对值的二进制形式,按位取反再加1。 例如,求-10的补码的方法是: 取-10的绝对值10; 10的绝对值的二进制形式为1010; 对1010按位取反,结果为:1111111111110101(一个整数占32位,前16位数据均为1); 再加1得111111111110110 10的原码0000000000001010取反1111111111110101再加11111111111110110得-10的补码 在存放整数的存储单元中,最左面的一位表示符号的,该位为0,表示数值为正,该位为1则表示数值为负。,42,2.2 常量与变量,3. 浮点型数据,1. 常量与变量,2. 整型数据,4. 字符型数据,5.变量的初始化,1浮点型常量 (1)十进制数形式。由数字和小数点组成。 (2)指数形式。如123e3代表123103 。注意字母e(或E)之前必须有数字,且e后面指数必须为整数。 2浮点型变量 一个浮点型数据一般在内存中占4个字节(32位)。与整形数的存储方式不同,浮点型数据是按照指数形式存储的。 浮点型变量分为: (1) 单精度型浮点型(float型) 一个float型数据在内存中占4个字节(32位),单精度实数的范围约为 -10381038之间并提供78位有效位;小于10-38的数被处理成0值。 (2) 双精度型浮点型(double型) 一个double型数据在内存中占8个字节,双精度实数的数值范围约为 -1030810308。并提供1516位有效位,具体精确多少位与机器有关;小于10-308的数被处理成零值。,43,2.2 常量与变量,3. 浮点型数据,1. 常量与变量,2. 整型数据,4. 字符型数据,5.变量的初始化,3浮点型数据的输入和输出 (1)浮点型数据的输入 用scanf函数实现的,格式符使用的是f字符,以小数的形式输入数据,也可以使用e字符,以指数的形式输入数据。单精度浮点型数据用%f格式输入,双精度浮点型数据用%lf格式输入。 (2)浮点型数据的输出 用printf函数实现,格式符使用f字符,以小数形式或指数形式输出数据。有以下几种格式: %f:不指定字段宽度,整数部分全部输出,并输出6位小数,有效位为7或8位。 %m.n:指定输出数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。 %-m.n:指定输出数据共占m列,其中有n位小数。如果数值长度小于m,则右端补空格。 若是双精度型变量输出时应用%lf格式控制,有效位为15或16位。 如 double f;输出时应使用语句: printf (“%lf“,f)。,44,2.2 常量与变量,4. 字符型数据,1. 常量与变量,2. 整型数据,3. 浮点型数据,5.变量的初始化,1字符常量 C语言的字符常量是用一对单引号括起来的单个字符。如:a、b、A、B、? 、$ 等都是字符常量。 除了这样的字符常量外,C语言还允许用一种特殊形式的字符常量,就是以一个开头的字符序列。,45,2.2 常量与变量,4. 字符型数据,1. 常量与变量,2. 整型数据,3. 浮点型数据,5.变量的初始化,2. 字符变量 设置两个字符型变量c1和c2。定义形式如下: char c1,c2; 它表示 c1和 c2为字符型变量,各可以放一个字符。可以用下面语句对 c1,c2赋值: c1a;c2b;一个字符变量在内存中只占一个字节。 3. 字符数据的存储形式 字符在内存中存储的不是字符本身,而是它的ASCII码,例如字符 a 的ASCII码为97,b 的ASCII码为98。那么字符的存储形式与整数的存储形式是类似的。因此C语言中字符型数据和整型数据是通用的,但应该注意字符数据只占一个字节,它只能存放0255范围内的整数。,46,2.2 常量与变量,4. 字符型数据,1. 常量与变量,2. 整型数据,3. 浮点型数据,5.变量的初始化,【例2-2】观察如下程序输出结果。理解%c与%d的区别。 #include void main() char a1,a2; a1=97;a2=98; printf (“%c %cn“,a1,a2); printf (“%d %dn“,a1,a2); ,47,2.2 常量与变量,4. 字符型数据,1. 常量与变量,2. 整型数据,3. 浮点型数据,5.变量的初始化,【例2-6】大小写字母的转换。 分析:数据存储是存储字符的ASCII码值,大小写字符的ASCII码值相差32,小写字符比大写字符ASCII码值大32,所以在程序中利用此特点转换。 #include void main() char a1,a2; a1=a; a2=b; a1=a1-32; a2=a2-32; printf (“%c %cn“,a1,a2); ,48,2.2 常量与变量,4. 字符型数据,1. 常量与变量,2. 整型数据,3. 浮点型数据,5.变量的初始化,4. 字符串常量 字符串常量是用双引号括起来的若干个字符序列。如: “How do you do“,“CHINA“,“a“ 等都是字符串常量。 可以输出一个字符串,如 printf (“How do you do. “); 注意: 不要将字符常量与字符串常量混淆。a是字符常量,“a“是字符串常量,二者不同。 C规定:在每个字符串的结尾加一个“字符串结束标志”以便系统据此判断字符串是否结束。以0 作为字符串结束标志。0 是ASCII码为0的字符,从ASCII码表中可以看到ASCII码为0的字符是“空操作字符”不引起任何操作。,49,2.2 常量与变量,5.变量的初始化,1. 常量与变量,2. 整型数据,3. 浮点型数据,4. 字符型数据,1先定义后赋值 int a,b,c; a10; b20; c30; 2定义和赋值同时进行 int a10; short b20; char cv; float d8.8; 3对几个变量同时赋一个初值 int a110,a210,a310;,50,2.3 运算符与表达式,1。算术运算符,5。逗号运算符,2. 赋值运算符,3. 关系运算符,4. 逻辑运算符,1. 基本的算术运算符 、/、 注意: 为模运算符或称求余运算符。要求两侧均为整型数据。 如74的值为3,82的值为0。做整数除法时结果为整数。 如:5/3结果为1 2. 算术表达式 用算术运算符和括号将操作数连接起来的,符合C语法规则的式子,称为算术表达式。在表达式求值时,按运算符的优先级别高低次序执行。 例如: 10+a+1.58765.12*b 在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。,51,2.3 运算符与表达式,1。算术运算符,5。逗号运算符,2. 赋值运算符,3. 关系运算符,4. 逻辑运算符,3. 强制类型转换 可以用强制类型转换运算符将一个表达式的值转换成所需类型后进行各项运算。 一般形式为: (类型名)(表达式) 注意: (1)类型名和表达式应用括号括起来。如(int)(x+y)。如果写成(int)x+y,则是对x的值转换为整型,而不是对x+y的值转换。 (2)在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。例如已知float x; 对于(int)x,x仍然是float类型,而整个表达式(int)x为整型。,52,2.3 运算符与表达式,2. 赋值运算符,5。逗号运算符,1。算术运算符,3. 关系运算符,4. 逻辑运算符,1. 赋值符号 赋值符号“=“就是赋值运算符,将一个数据赋给一个变量。如“a=3“。 2. 类型转换 如果赋值运算符两侧的类型不一致,要进行类型转换。 (1)将浮点型数据赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56“的结果是使i的值为3。 (2)将整型数据赋给浮点型变量时,数值不变,但以浮点数形式存储到变量中。 3. 复合的赋值运算符 常用的赋值运算符有以下几种: +=,-=,*=,/=,%= x*=y+8 等价于 x=x*(y8),53,2.3 运算符与表达式,2. 赋值运算符,5。逗号运算符,1。算术运算符,3. 关系运算符,4. 逻辑运算符,4. 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。 a=b=c=5 (赋值表达式值为5,a、b、c值均为5) a=5+(c=6) (表达式值为11,a值为11,c的值为6) a=(b=4)+(c=6) (表达式值为10,a值为10,b等于4,c等于6) 5. 自增、自减运算符 运算符: + - 作用:其操作数必须为简单变量,使操作数的自身增1或减1运算。可以置于操作数前面,也可以放在后面。,54,2.3 运算符与表达式,2. 赋值运算符,5。逗号运算符,1。算术运算符,3. 关系运算符,4. 逻辑运算符,(1)+ 、-运算符的对象只能是简单变量,不能是常量或带有运算符的表达式。如5+,5-或+(a=5)都是错误的。 (2)+ 、-运算符的结合方向为“从右至左”。如:-n+相当于 -(n+)。 (3)使用+ 、-运算符可以提高程序的执行效率、速度快。因为+n运算只需要一条及其指令就可以完成,而n=n+1则要对应三条机器指令。 (4)当n为基本数据类的变量时,+或-表示加1或减1,55,3. 关系运算符,5。逗号运算符,1。算术运算符,2. 赋值运算符,4. 逻辑运算符,关系运算:实际上是比较运算,将两个值进行比较,看结 果是否符合给定条件。 语言提供种关系运算符: 小于; 小于等于;大于; 大于等于;等于; !不等于。 关于优先次序: (1)前4种关系运算符(“, “=“)的优先级别相同,后两种也相同。前4种高于后2种。 (2)关系运算符与算术运算符、赋值运算符的优先级关系如下: 算术运算符(高) 关系运算符(中)赋值运算符(低) (3)关系运算符的结合方向是”自左向右”。,2.3 运算符与表达式,56,3. 关系运算符,5。逗号运算符,1。算术运算符,2. 赋值运算符,4. 逻辑运算符,关系表达式 用关系运算符将两个表达式连接起来的式子称关 系表达式。表达式包括:算术表达式、关系表达式、 逻辑表达式、赋值表达式、字符表达式。 如:ab, a3等均是关系表达式 a=bc 等效于a=(bc) 关系表达式的值是一个逻辑值即“真”或“假”,以 代表“真”,以代表“假”。 例如:a=3,b=2,c=1 则 (ab)=c 的值为“真”,表达式值为 b+cb d的值为 f=abc的值为0,2.3 运算符与表达式,57,4. 逻辑运算符,5。逗号运算符,1。算术运算符,2. 赋值运算符,3. 关系运算符,、 a&b 的值为真。 a&c 的值为假 逻辑或:两个运算量只要有一个为真时,结果就为真, 只有两个运算量均为假时结果才为假。 如: a|b的值为真,a|c的值也为真,而c|d的值为假。 逻辑非:当运算量a为真时,则!a为假,否则为真。,2.3 运算符与表达式,58,4. 逻辑运算符,5。逗号运算符,1。算术运算符,2. 赋值运算符,3. 关系运算符,2逻辑运算符的优先次序: (1)逻辑运算符的优先次序如下: !(非)&(与)|(或),即“!”为三者中最高的。 (2)逻辑运算符中的“&”和“|”低于关系运算符,“!”高于算术运算符。例如: (a=b)&(xy) 可写成:a=b&xy (a= =b) | (x= =y) 可写成:a= =b|x= =y (3)逻辑运算的结合方向是“自左向右”。 逻辑表达式: 在逻辑表达式中作为参加逻辑运算的操作数可以是0或任何非0 数值。结果只有0和两个数。 在逻辑表达式求解中,并不是所有的逻辑运算符都被执行 a&b&c,只有a为真时,才需判别b的值,只有a,b都为真时,才需判别c 的值,只要a的值为假,就不必判别b和c的值。 a|b|c,只要a为真,就不判别b和c的值。,2.3 运算符与表达式,59,5.逗号运算符,4. 逻辑运算符,1。算术运算符,2. 赋值运算符,3. 关系运算符,逗号运算符将两个表达式连接起来。逗号运算符是所有运算符中优先级最低的运算符。格式如下: 表达式1,表达式2 功能:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。 例如逗号表达式: a3*5,a*4,先求解a3*5,得a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。,2.3 运算符与表达式,60,思考题: 1、一个C语言程序至少应包含的函数个数是()。 A) 0 B) 2 C) 3 D) 1 2、下列数据中,为字符串常量的是( ) A)a B)”house” C) how do you do D)$abc 3、若x,i,j 和k都是int型变量,则执行表达式x=(i=4,j=6,k=32)后,x的值为( ) A)4 B)16 C)32 D)52 4、下列各组字符序列中,可用作c语言程序标识符的一组字符序列是 ( ),s.b sum avefge _above,B) class dny lotus 2day,C) #md &12x month studt_n1,D)d56 r_1_2 name st_l,61,5、下列说法正确的是: A) int型占24个二进制位 B) char型占16个二进制位 C) float型占4个字节 D) double型占10个字节 6、以下符合C语言语法的实型常量是: A) 1.2E0.5 B) 3.14159E C) .5E-3 D) E15 7、 若以下选项中的变量已正确定义,则正确的赋值语句是: A) x1=26.8%3 B) 1+2=x2 C) x3=0x12; D) x4=1+2=3; 8、若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 A)1 B)2 C)2.0 D)2.5 9、 表达式 12+b+1.25的结果类型是: A) int B) float C) char D) double 10、若已定义a和b为float类型,则表达式:a=2,b=a+5/2的值是 A)2 B)4 C)4.0 D)4.5,62,第3章 C语言的控制结构,C语言程序设计 (C Programming),辽宁科技大学,63,1、结构化程序设计的特点 2、选择结构程序设计思想 简单选择、多分支选择、选择嵌套 3、循环结构程序设计思想 for循环 while循环 do循环 循环嵌套,本章学习目标,64,3.1 结构化程序设计,3.2 顺序结构程序设计,3.3 选择结构程序设计,3.4 循环结构程序设计,65,3.1 结构化程序设计,1. 特点,2. 方法,3. 步骤,结构化程序设计支持自顶向下、逐步求精的结构化分析方法。对于一个较复杂的问题一般不能立即写出详细的算法或程序,但可以很容易写出一级算法,即求问题解的轮廓,然后对一级算法逐步求精,把它的某些步骤扩展成更详细的步骤,细化过程中,一方面加入详细算法,一方面明确数据,直到根据这个算法可以写出程序为止。 一个结构化程序应当具有以下特点: (1) 有一个入口、一个出口; (2) 没有死语句(永远执行不到的语句),每一个语句都至少应当有一条从入口到出口的路径通过它; (3) 没有死循环(无限制的循环)。,66,3.1 结构化程序设计,2.方法,1.特点,3. 步骤,1.模块化 (1) 把一个较大的程序划分为若干子程序,每一个子程序总是解决一个独立的问题,成为一个模块; (2) 每一个模块又可继续划分为更小的子模块; (3) 程序具有一种层次结构。 2.自顶向下 (1) 先设计第一层(即:顶层),然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述出来为止。 (2) 特点:先整体后局部,先抽象后具体。 3.自底向上 (1) 即先设计底层,最后设计顶层; (2) 优点:由表及里、由浅入深地解决问题; (3) 不足:在逐步细化的过程中可能发现原来的分解细化不够完善; (4) 注意:该方法主要用于修改、优化或扩充一个程序。,67,3.1 结构化程序设计,3.步骤,1.特点,2.方法,1.分析问题 对要解决的问题,首先必须分析清楚,明确题目的要求,列出所有已知量,找出题目的求解范围、解的精度等。 2.建立数学模型 对实际问题进行分析之后,找出它的内在规律,就可以建立数学模型。只有建立了模型的问题,才可能利用计算机来解决。 3.选择算法 建立数学模型后,还不能着手编程序,必须根据数据结构,解决问题的算法。一般选择算法要注意: (1) 算法的逻辑结构尽可能简单; (2) 算法所要求的存贮量应尽可能少; (3) 避免不必要的循环,减少算法的执行时间; (4) 在满足题目条件要求下,使所需的计算量最小。,68,3.1 结构化程序设计,3.步骤,1.特点,2.方法,4.编写程序 把整个程序看作一个整体,先全局后局部,自顶向下,一层一层分解处理,如果某些子问题的算法相同而仅参数不同,可以用子程序来表示。 5.调试运行 将整个程序编译、调试后运行程序得出结论。 6.分析结果 根据运行结果分析程序,通过几组数据验证程序的正确性。 7.写出程序的文档: 主要是对程序中的变量、函数或过程作必要的说明,解释编程思路,画出框图,讨论运行结果等。,69,3.2 顺序结构程序设计,1.顺序结构特点,2.C语句详解,【例3-1】键盘输入任意3个数据,求其平均值。 算法设计: (1) 求平均值,故变量应定义实型数比较合适; (2) 输入数据,求平均值; (3) 输出平均值。 程序代码: #include void main() float a,b,c,d; /*变量的定义*/ scanf(“%f%f%f“, /*输出函数后面加一个分号*/ 程序说明: (1)本程序所有语句按照书写顺序逐条执行。 (2)所有语句都是以分号结尾,这种语句成为表达式语句。,3.例题,70,3.2 顺序结构程序设计,2.C语句详解,1.顺序结构特点,表达式语句:表达式语句由表达式加上分号“;”组成。 其一般形式为: 表达式; 执行表达式语句就是计算表达式的值。 例如: a=b+c; 赋值语句; a+b; 加法运算语句,但计算结果不能保留,无实际意义; i+; 自增1语句,i值增1,与 i=i+1;等价。 函数调用语句:由函数名、实际参数加上分号“;”组成。 其一般形式为: 函数名(实际参数表); 执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值 (在后面函数中再详细介绍)。 例如: printf(“C Program“); 调用库函数,输出字符串。,3.例题,71,3.2 顺序结构程序设计,2.C语句详解,1.顺序结构特点,控制语句:控制语句用于控制程序的流程, 以实现程序的三种结构方式。语言有9种控制语句。按其功能可以分成以下三类: 条件判断语句:if语句、switch语句; 循环执行语句:do while语句、while语句、for语句; 转向语句:break语句、goto语句、continue语句、return语句。 复合语句:把多个语句用括号括起来组成的一个语句称复合语句。 空语句:只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。,3.例题,72,3.2 顺序结构程序设计,3.例题,1.顺序结构特点,【例3-2】输入两个数,互换并输出。 算法设计: 输入两个数据分别存入变量a,b中; a,b互换时需要中间变量t作为临时数据存储; 输出互换后数据。 【例3-3】键盘输入任意3位数,求其各位数字之和。 【例3-4】输入三角形的三边长,求三角形面积。(假设输入数据能够成三角形) 已知三角形的三边长a,b,c,求三角形的面积公式为: ,其中s = (a+b+c)/2,2.C语句详解,73,3.3 选择结构程序设计,1.If语句,3.条件运算符,if语句是用来判定给定的条件是否满足,根据判定结果决定执行给出的两种操作之一。 if语句的三种形式 (1)简单 if语句 格式:if (表达式) 语句 功能:首先计算表达式的值,若表达式的值为“真”(非0),则执行语句,若表达式的值为“假”(0),不执行语句。其流程图如图所示。 如:if (ab) printf (“%d“,a);,2.Switch语句,74,3.3 选择结构程序设计,1.If语句,3.条件运算符,【例3-7】输入三个整数,输出其最大值。 #include void main() int a,b,c,max; scanf(“%d %d %d“, 【例3-8】键盘输入3个数,按由大到小顺序输出。,2.Switch语句,75,3.3 选择结构程序设计,1.If语句,3.条件运算符,if-else语句 格式:if (表达式) 语句1 else 语句2 功能:首先计算表达式的值,若表达式的值为“真”(非0),则执行语句1,若表达式的值为“假”(0),则执行语句2。 例如: if (xy) printf (“%d“,x);else printf (“%d“,y); 输出x,y中大的数值。,2.Switch语句,76,3.3 选择结构程序设计,1.If语句,3.条件运算符,【例3-9】输入三条线段a,b,c的长,若a,b,c能够构成三角形,求此三角形的面积,否则输出“not”。 程序代码: #include #include void main() float a,b,c,l,s; scanf(“%f %f %f“, ,2.Switch语句,77,3.3 选择结构程序设计,1.If语句,3.条件运算符,3if-else-if语句 前面两种if语句一般都用于两个分支的选择结构。对于多个分支选择时,可采用if-else-if语句。 格式: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else if (表达式n-1) 语句n-1 else 语句n 功能:首先计算表达式1的值,若

温馨提示

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

评论

0/150

提交评论