版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计技术,林晓钢 光电工程学院,课程介绍,课程性质 本课程是非计算机专业理工科学生的一门重要的专业(技术)基础课 。 课程任务 引导学生进入计算机程序设计的领域 培养学生的抽象能力和逻辑思维能力 培养学生基本的计算机程序设计能力 课程主教材 程序设计技术(第三版)重庆大学出版社,2008,课程介绍,课程参考教材 The C Programming Language,清华大学出版社 程序设计方法,人民邮电出版社 C程序设计的抽象思维,机械工业出版社 C算法:第一卷,人民邮电出版社 C语言,电子科技大学出版社 C语言程序设计,北京大学出版社 C语言的科学和艺术,机械工业出版社 课程的实践性教学
2、环节 本课程实践性教学环节学时数为32 实验环境为: WINDOWS 9X/2000/XP操作系统环境; Microsoft Visual C+ 6.0 集成环境; 实验内容参照程序设计技术课程实验教学大纲执行。,课程介绍,学时分配: 本课程理论教学学时数为40,各部分学时分配如下: (一)C语言数据描述和C程序设计初步(3h) (二)结构化程序设计基础和C语言的控制结构(5h) (三)数组及其应用基础(4h) (四)C程序结构与C函数(5h) (五)指针及其应用基础(8h) (六)字符串数据处理及其应用(4h) (七)结构体类型和联合体类型(4h) (八)C语言的文件处理及其应用(4h) (
3、九)位运算与枚举类型(3h),课程介绍,考试方式: 本课程考试由笔试和实践环节考试(考查)组成。 笔试为闭卷考试,占课程总成绩的70。试题类型为: 单项选择 程序填空 阅读程序题 根据算法写程序或者根据程序写出算法描述 按要求编写程序 实验成绩共计30分,占课程总成绩的30%。 第一部分,对上机出勤和学习态度给予成绩; 第二部分,对实验报告给予评价并计成绩。,循序渐进,1、什么是算法? 2、什么是程序? 3、什么是程序设计? 4、什么是程序设计语言? 5、为什么需要程序设计语言? 6、什么是计算机软件?,循序渐进,如何求任意圆的面积? C语言描述的程序 main() /程序开始 float r
4、, s; printf(“Please enter the radius of a circle:”); scanf(“%f”, end.,循序渐进,一个计算机程序主要描述两部分内容: 一是描述问题的每个对象和对象之间的关系数据和数据结构,如上述程序中半径r、面积s和圆周率3.14及其之间的关系; 二是描述对这些对象作处理的处理方法和处理步骤求解的算法。即描述对需要处理的对象“做什么处理”和“如何处理”。 瑞士计算机科学家尼克劳斯-沃思(Niklaus Wirth)曾著过一本著名的书数据结构+算法=程序,对三者的关系进行了描述。由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命
5、性概念而获得了1984年的图灵奖。,图灵奖(Turing Award),图灵奖(Turing Award),是美国计算机协会(ACM)于1966年设立的,又叫“A.M. 图灵奖”,专门奖励那些对计算机事业作出重要贡献的个人。其名称取自计算机科学的先驱、英国科学家阿兰图灵,这个奖设立目的之一是纪念这位科学家。获奖者的贡献必须是在计算机领域具有持久而重大的技术先进性。大多数获奖者是计算机科学家。 图灵奖是计算机界最负盛名的奖项,有“计算机界诺贝尔奖”之称。图灵奖对获奖者的要求极高,评奖程序也极严,一般每年只奖励一名计算机科学家,只有极少数年度有两名以上在同一方向上做出贡献的科学家同时获奖。目前图灵
6、奖由英特尔公司以及Google公司赞助,奖金为250,000美元。 每年,美国计算机协会将要求提名人推荐本年度的图灵奖候选人,并附加一份200到500字的文章,说明被提名者为什么应获此奖。任何人都可成为提名人。美国计算机协会将组成评选委员会对被提名者进行严格的评审,并最终确定当年的获奖者。,循序渐进,什么是算法?用计算机解决实际问题的方法和步骤,是一组明确的可执行步骤的有序集合。 程序,是现在最吃香的提法。 什么是程序?程序是数据和对数据进行加工处理的描述。通常可划分为四个组成部分: (1)定义数据部分:定义程序中要处理数据的数据结构,包括数据的类型和数据之间的相互关系等; (2)获取数据部分
7、:从输入设备或文件中获取要处理的数据; (3)处理数据部分:对获取数据根据问题要求,按一定规则进行加工处理; (4)输出结果部分:将经过处理后所获得的结果从输出设备输出出来或写入文件中去。,循序渐进,什么是程序设计(Programming) ?对要解决的问题进行分析,用合理的数据结构描述问题所涉及的对象,找出解决问题的算法,并将解决问题的算法用计算机语言记录下来称为编码(coding)。 程序设计包括三个方面的任务: 数据结构设计 算法设计 编码 算法设计解决的问题“做什么”和 “怎么做”。 “做什么”是指对问题的认识、分析和判断, “怎么做”则是要找出具体的、正确的和有效的解决问题的方法和步
8、骤。,循序渐进,程序设计的主要步骤: 认识问题,找出要处理的数据及其相互关系; 设计合理的数据结构; 设计解决问题的算法; 按算法编写程序; 调试(debug)和测试(test)程序给出若干组数据,找出程序的错误。,循序渐进,什么是程序设计语言(Programming Language) ? 用于编写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。 程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成程序的各个记号之间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示
9、程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但也不涉及使用者。语用表示程序与使用的关系。 程序设计语言的基本成分有:数据成分,用于描述程序所涉及的数据;运算成分,用以描述程序中所包含的运算;控制成分,用以描述程序中所包含的控制;传输成分,用以表达程序中数据的传输。,循序渐进,计算机软件(Computer Software)是指计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机
10、系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。,程序设计技术,1 C语言数据描述和C程序设计初步 2 结构化程序设计基础和C语言的控制结构 3 数组及其应用 4 函数与C程序结构 5 指针与函数 6 指针与数组 7 字符串及其应用 8 结构体类型和联合体类型 9 C语言的文件处理及其应用 10 位运算与枚举类型,1 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.1 C程序的基本结构,语言的由来与发
11、展 语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT main是主函数的函数名,表示这是一个主函数。 每一个C源程序都必须有,且只能有一个主函数(main函数)。 函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。 printf函数是一个由系统定义的标准函数,可在程序中直接调用。,世界,您好!,1.1.1 C源程序的组成成分,【例1.2】 #include /*include称为文件包含命令*/ #include /*扩展名为.h的文件称为头文件*/ void main() double x,s; /*定义两个实数变量,以被后面程序使用*/ printf(i
12、nput number:n); /*显示提示信息*/ scanf(%lf, /*显示程序运算结果*/ /* main函数结束*/,sine of 0.523000 is 0.499481,1.1.1 C源程序的组成成分,键盘输入:scanf()函数 格式:scanf(“%lf”, (结果将使 r 等于某个随机值) 通常与printf()函数组合使用,实现“人机对话”功能。,1.1.1 C源程序的组成成分,屏幕输出:printf()函数 格 式:printf (“圆面积S=%fn”,s); 头文件:stdio.h 功 能:将运算结果送到显示器屏幕显示出来。 printf()函数通常包括两个参数:
13、 格式字符串和变量列表。 例:若 r =1,s=3.14 printf (“半径R=%f 时,面积S=%fn”,r,s); 输出结果: 半径R=1 时,面积S=3.140000 常用格式字符串: 字符型:%c 单字符 %s 字符串 数值型:%d 整数(十进制) %f 实数(小数形式,默认为6位小数) 注意C语言本身没有输入、输出语句,其功能要借用有关函数来实现。,1.1.1 C源程序的组成成分,【例1.3】 int max(int a, int b) /*定义max函数*/ if(ab)return a; else return b; /*把结果返回主调函数*/ void main() /*主
14、函数*/ int x,y,z; /*变量说明*/ int max(int a, int b); /*函数说明*/ printf(input two numbers:n); scanf(%d%d, /*输出*/ ,1.1.1 C源程序的组成成分,1.C程序是函数型程序结构。 2.函数的基本结构。函数由函数头和函数体组成。函数头给出了函数的名字、类型以及参数的个数。函数体总是从花括号“”开始。以反花括号“”结束。 3.一个C程序总是从main函数开始执行 4.语句以分号;结束。不同的语句引起不同的计算机动作,是计算机执行程序的最小单位。 5.以/*开头到*/结束的部分叫注释行。即注解。不是语句,可
15、以在程序中的任何位置,结尾不要分号“;”,不引起计算机任何动作。 6.源程序中可以有预处理命令(include命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。 7.书写格式自由。,【例1.3】 int max(int a, int b) if(ab)return a; else return b; void main() int x,y,z; int max(int a, int b); printf(input two numbers:n); scanf(%d %d, ,1.1.1 C源程序的组成成分,1、编辑 生成C源程序文件,扩展名为.c 2、编译 生成目标文件,扩展名
16、为.obj 3、连接 将目标程序和库函数及其他目标程序连接起来,生成可执行文件,文件扩展名为.exe 4、执行 运行程序,得到结果。,开始,可执行程序 hello.exe,不正确,1.1.2 C语言的基本元素,1C语言的字符集 小写英文字母(26个)a b c z 大写英文字母(26个) A B C Z 数字 (10个) 0 1 2 3 9 特殊字符+ = - _ ( ) * : “ / ? 空白符空格、换行、制表符等,空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略不计。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白
17、符将增加程序的清晰性和可读性。,1.1.2 C语言的基本元素,2标识符 标识符是给程序中处理的数据对象(如变量、常量、函数、数据类型等)取的名字 . 标识符取名规则 组成标识符的字符为字母、数字和下划线 标识符中第一个字符必须是字母或下划线 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号) 多数C编译系统在构成标识符时都要区分字母的大小写,即book和BOOK是不相同的标识符 构成标识符的字符个数(标识符长度)与所使用的环境相关 保留字 操作系统或编译系统或其他系统已经用了的名字,用户不得再用关键字给变量等命名。 例如 d
18、ouble else enum extern float for goto if _Imaginary* inline* int long register restrict* define undef include ifdef ifndef endif line error elif pragma,1.1.2 C语言的基本元素,用户标识符 用户自己取的名字 程序员(用户)在程序中自定义标识符时,除了避免使用保留字和必须遵守标识符的命名规则外,还需要注意以下两个方面:一是要将标识符取得既有意义,又便于阅读;二是要注意避免含义上或书写时引起混淆。例如 下面是一些合法用户自定义标识符的例子: a
19、 b1file_name _buf 下面是不合法的用户自定义标识符例子及错误原因: 123abc/*不是以英文字母开头*/ float /*与系统保留字同名*/ up.to/*标识符中出现了非法字符“.”*/ zhang san/*标识符中间出现了非法字符空格*/,1.1.2 C语言的基本元素,3函数 函数是构成程序的基本模块,每个函数具有相对独立的功能。 函数有三种:主函数(即main()函数)、C语言编译系统提供的标准库函数和用户自定义的函数 。 主函数是C程序执行的入口,即程序总是从主函数中的第一条可执行的语句开始执行;一般情况下也是程序执行的出口。 标准库函数是语言处理系统提供的常用功
20、能的处理程序代码,在程序中如要使用标准库函数,则需要在程序中合适的地方(调用标准库函数之前)用文件包含预处理语句将与所使用库函数相应的头文件包含到程序中来。 如例前面例题中的“#include ” 用户自定义函数即程序员根据所设计应用程序的功能自己编写的函数。,1.1.2 C语言的基本元素,4C程序书写的基本要点 C程序习惯上使用小写英文字母。为了清晰起见,在C程序中往往使用大写英文母来表示宏定义或其它具有特殊意义的标识符。 C程序中不强调程序行的概念。一行中可以有多条语句,一个语句也可以写在多行上,但语句与语句之间要用分号(;)分隔。 C程序为了增强程序的可读性,可以使用适量的空格、空行和适
21、当的行间缩进结构。但要注意,程序中的变量名、函数名以及C语言本身使用的单词(如保留字、语句结构等),不能在其中插入空格。,1 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.2 C语言的基本数据类型,数据和数据类型 在C语言源程序中能直接书写的、需要被处理的符号只有数和字符两种,这种符号称为C语言的数据。 计算机系统的内存是按字节编址的,在内存里存放一个数据所需要的内存字节数称为一个数据所需要的内存空间,程序中不同的数据在系统内存中所要求的存储空间大小也不一样,因而在程序设计中需要区分所处理数据的数
22、据类型。 数据类型是指对数据按某种规则进行分类的类别。 数据类型将决定变量的某些运算是否合法,如,double型变量a作a5和a其中“int ”类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回值为双精度浮点型,因此在赋值语句s=sin (x);中,s 也必须是双精度浮点型,以便与sin函数的返回值一致。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。,1.2 C语言的基本数据类型,常量和变量 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。 常量数据在源程序中给定后,在程序的
23、整个执行过程中保持不变。而变量在程序的执行过程中是一个其值可以被程序修改的量,是一个变化的量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。 变量是由变量名(标识符)来区别的。变量值是通过引用变量名来引用的,是数据。所以,常量和变量在程序中表现的都是数据。,常量和符号常量,在程序执行过程中,其值不发生改变的量称为常量。 直接常量(字面常量): 整型常量:12、0、-3; 实型常量:4.6、-1.23; 字符常量:a、b。 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。 符号常量:用标
24、示符代表一个常量。在语言中,可以用一个标识符来表 示一个常量,称之为符号常量。 符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量 其中#define也是一条预处理命令(预处理命令都以#开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。,常量和符号常量,【例3.1】符号常量的使用。 #define PRICE 30 main() int num,total; num=10; total=num*
25、PRICE; printf(“total=%d”,total); ,用标识符代表一个常量,称为符号常量。 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 使用符号常量的好处是: 含义清楚; 能做到“一改全改”。,变量,其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。 变量的三要素: 变量的名字 变量的名字同标识符,即根据标识符的规定给变量起名,应该做到不用关键字或保留字,大写和小写字母有差别;尽量“见名知意”。 变量的类型 变量的类型包括数据类型和存储类
26、。 变量的值 变量在被说明或定义后,可以具有初值,也可以具有默认值,还可以具有无意义的值。变量在使用之前必须具有确定的有意义的值,否则不能对它进行赋值之外的其他操作。,1.2 .1 C语言的整型数据类型,整型量 1整型常量 C语言源程序能直接书写的整型常量可以有三种形式: 十进制整数。如888,-123,0等。 八进制整数。以0开头的整数是八进制整型常量,如0777,-011等。 十六进制整数。以0 x开头的整数是十六进制整型常量,如0 x123,0 xff等。 在C语言中整型数据用机器的一个字长来存储,所以整型数据的表示范围与计算机系统的软硬件环境有关。在字长为16位计算机系统中,整型数据表
27、示的范围为-3276832767(-215215-1);在字长为32位的计算机系统中,则表示的数据范围为-231231-1。,1.2 .1 C语言的整型数据类型,2整型变量 存放整型数据的内存空间称为整型变量,C语言提供了基本整型、短整型、长整型和无符号整型四种大小不同的单位空间来存放整形数据。,类型名 意 义 字节数 表示范围 short 短整型 2 -3276732768 int 基本整型 4 -21474836472147483648 long 长整型 4 -2147483647L2147483648L unsigned short 无符号短整型 2 065535 unsigned in
28、t 无符号基本整型 4 04294967295U Unsigned long 无符号长整型 4 04294967295UL,1.2 .1 C语言的整型数据类型,3.变量定义 整型变量定义的一般形式为: 类型名 ; 该语句的功能是:指定具有类型名定义的多个内存空间,取名为变量列表中的标识符(变量名),数量与变量列表中变量名的个数一致。 例如:int x1,x2;(定义变量x1,x2为整型变量) longx,y;(定义变量x,y为长整型变量) unsigned c,d;(定义变量c,d为无符号整型变量) 例1-2 整型变量的定义和输出示例。,1.2.2 C语言的实型数据类型,实型量 1实型常量 在
29、C语言源程序中能直接书写的实型数,称为实型常量。实型数在C语言中又称为浮点数,实型常数有两种表示形式: 实数形式:实数形式由数字和小数点组成。 如:888.88,0.88等。 指数形式:数据由数字09、小数点和表示阶码的标志“e”或“E”组成,其组成形式一般为: 整数部分.小数部分 E指数部分 指数形式对应于自然科学中的科学计数法,其中用字母“e”或“E”来表示幂的底,在“e”或“E”之后用整数表示数的指数。 如123e5表示123105,123e-5表示12310-5。,1.2.2 C语言的实型数据类型,在使用实型数的指数表示形式时应该注意下面两点: 指数部分只能是整数而不能用实数表示,如1
30、23E1.5是错误的表示方法。 字母“e”或“E”之前的尾数部分不能省略,如10-8不能只写为E-8,而应该写成为1E-8(或者1e-8). 2实型变量 C源程序文件中存放实型数据的数据对象称为实型变量。 C语言中的实型变量按其表示的数据范围不同和精度不同分为单精度型和双精度型,其类型名分别为float和double。,1.2.2 C语言的实型数据类型,3.变量定义 定义实型变量的一般形式为: 类型名 ; 功能意义与整形变量定义相同 例如:float x,y;(定义变量x,y为单精度实型变量) double z;(定义变量z为双精度实型变量) 例1-3 实型变量的定义和输出示例。,类型名 意
31、义 字节数 精度范围 float 单精度实型 4 1.175494e-0383.402823e+038 double 双精度实型 8 2.225074e-3081.797693e+308,1.2.3 C语言的字符型数据类型,字符量 在C语言源程序中直接书写的、需要被处理的字符就是字符常量。同样,用于存放这个字符的内存空间就是字符变量。 1.字符常量 普通字符:普通字符是由单引号括起来的一个可打印字符,如a、?、A等。 转义字符:转义字符是由反斜杠开头的字符序列,此时反斜杠字符后面的字符或字符序列不表示自己本身的含义而转变为表示另外的特定意义。(如表1.4),1.2.3 C语言的字符型数据类型,
32、2字符变量 字符类型变量用以存储和表示一个字符,占用一个字节。字符型变量的定义形式如下: char ; 例如:char ch;(定义变量ch为字符型变量) 在C语言中字符型变量和整型变量是兼容的,系统中存储的是对应字符的ASCII码值,因此在C语言中字符数据和整数之间可以通用,即字符型数据可以与整型数据一起参与运算,但在使用时要注意其表示的合理范围 (0255范围内的整数) 例如,若有C语句序列:char ch; ch=A; ch=ch+1;,则执行该语句序列后ch的内容是字符B。 例1-4 字符变量的定义和输出示例。,1.2.3 C语言的字符型数据类型,3字符串常量 字符串常量是由一对双引号
33、括起的字符序列。例如: CHINA , “C program” , $12.5 等都是合法的字符串常量。 字符串常量和字符常量是不同的量。它们之间主要有以下区别: 1) 字符常量由单引号括起来,字符串常量由双引号括起来。 2) 字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 3) 可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在语言中没有相应的字符串变量。这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。 4) 字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存
34、放字符0 (ASCII码为0)。这是字符串结束的标志。,字符常量a和字符串常量a虽然都只有一个字符,但在内存中的情况是不同的。 a在内存中占一个字节,可表示为:,a在内存中占二个字节,可表示为:,1.2.3 C语言的字符型数据类型,4符号常量 在C语言中,除了可以具体的各种类型常量外,还可以可以用符号代替常量,用以代替常量的符号称为符号常量(或称为宏常量)。符号常量在使用之前也必须预先定义。其定义的格式为: #define 标识符 被替代的常量,例如:#define PI 3.1415926 #define EOF -1 #define precision 1e-8,1.2.4 变量的初始化,
35、变量的初始化指的是为变量第一次赋值。 在C语言中变量初始化的方法有两种,一是在程序的执行过程中通过赋值运算符实现赋值;二是在定义变量的同时为变量赋初值。C语言中,定义变量的同时对其初始化的一般形式为: =; 例如 int a=5; long b, c=59; float c, x3=100.30; double z=100.5548; char ch1=A,ch2=P;,1 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.3 基本运算符和表达式,在完成数据存入内存后,需要对这些数据做相关的处理或运算
36、,以得到我们所需要的结果。C语言提供了多种运算符号,通过由这些运算符组合成表达式和表达式语句对数据进行处理。这些运算符是C语言规定的。各个运算符有各自的意义。 1. 算术运算符:用于各类数值运算。包括 +、-、*、/、%、 +、-。 2. 关系运算符:用于比较运算。包括、=、)六种。 5. 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值( printf(%f,%fn,20.0/7,-20.0/7); printf(%dn,100%3); 本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数
37、参与运算,因此结果也为实型。 100除以3所得的余数1,1.3.1 算术运算符和算术表达式,2. 算术表达式和运算符的优先级和结合性 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型, 它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。例子:a+b、(a*2)c、(x+r)*8-(a+b)7,数学式 - C表达式 s(s-a)(s-b)(s-c) (x+2)e2x,s*(s-a)*(s-b)*(
38、s-c),(x+2)*exp(2*x),1.3.1 算术运算符和算术表达式,运算符的优先级:语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。,单目 + - + - 双目 * / % 双目 + -,从右向左,-5+3%2 = (-5)+(3%2) = -4 3*5%3 = (3*5)%3 = 0 -i+,-(i+),1.3.1 算术运算符和算术表达式,运算符的结合性:语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运
39、算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。语言运算符中有不少为右结合性,应注意区别,以避免理解错误。 例1-5 算术运算符使用示例。,1.3.2 赋值运算符和赋值表达式,1.赋值运算符 简单赋值运算符和表达式:简单赋值运算符记为“=”。由“= ”连接的式子称为赋值表达式。 其一般形式为: 变量=表达式 例如:x=a+b、 w=s
40、in(a)+sin(b)、y=i+-j 赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。 因此 a=b=c=5 可理解为 a=(b=(c=5),1.3.2 赋值运算符和赋值表达式,在其它高级语言中,赋值构成了一个语句,称为赋值语句。 而在C中,把“=”定义为运算符,从而组成赋值表达式。 凡是表达式可以出现的地方均可出现赋值表达式。 例如,式子:x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x,故x应等于13。 在语言中也可以组成赋值语句,按照语言规定,任何表达式在其未尾加上分号就构成为语句。因此如x=8;a=b=c=5;都是
41、赋值语句,在前面各例中我们已大量使用过了。,1.3.2 赋值运算符和赋值表达式,2. 类型转换 如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下: 1)实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。 2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。 3) 字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。,1.3.2 赋值运算符和赋值表达式,main() int a,b=322; flo
42、at x,y=8.88; char c1=k,c2; a=y; x=b; a=c1; c2=b; printf(%d,%f,%d,%c,a,x,a,c2); a为整型,赋予实型量y值8.88后只取整数8。x为实型,赋予整型量b值322, 后增加了小数部分。字符型量c1赋予a变为整型,整型量b赋予c2 后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。,1.3.2 赋值运算符和赋值表达式,C语言程序中,能执行操作运算的只有语句。表达式的功能只能在语句里才能被实现。而单独的表达式是不合法和不被执行的。 赋值语句由赋值表达式加上C语句结尾符号分号“;”
43、构成,其一般形式为: ; 或 变量名=表达式; 例如:a=x+y是赋值表达式,而a=x+y;则是赋值语句 注意: 1. 赋值运算符的左边必须为变量,不能为常量或表达式。 2.赋值运算符的优先级低于逻辑运算符、关系运算符、算术 运算符。其结合性为从右至左(即:右结合性)。 3.在C语言中,赋值表达式可以作为一个对象出现在另外的表达式中。 例1-6 赋值运算符和赋值表达式使用示例。,1.3.3 自反运算符,复合赋值符:凡是双目运算符都可以与赋值运算符一起组成复合赋值符,其结合性为右结合性。这些复合赋值符共有10个,它们是: +=、-=、*=、/=、%=、=、 a+; /*试图对实型变量a施加自增运
44、算*/ 自增运算符和自减运算符不能作用于常量数据或者表达式。例如下面的语句序列存在着错误: int a=100; -(a+100); /*试图对表达式a+100施加自减 运算*/ 300+; /*试图对整型常数300施加自增运算*/,1.3.4 自增、自减运算符,自增、自减运算符的前缀形式 前缀形式即自增、自减运算符(+、-)出现在变量的左侧,如:+i、 -i。自增、自减运算符的前缀形式对变量实施的运算是“先增/减值后引用”。 自增、自减运算符的后缀形式 后缀形式即自增、自减运算符(+、-)出现在变量的右侧,如:i+、 i-。自增、自减运算符的后缀形式对变量实施的运算是”先引用后增/减值”。
45、例1-9 自增、自减运算符使用示例。 int a=10,k; k=+a; printf(a=%d,k=%dn,a,k); k=a+; printf(a=%d,k=%dn,a,k);,例,#include void main( ) int a, b, c; b=5; c=5; a=+b+c-; printf(%d,%d,%dn, a, b, c); a=b-c; printf(%d,%d,%dn, a, b, c); a=-b+c; printf(%d,%d,%dn, a, b, c); ,b=b+1, a=b+c, c=c-1,a=b-c, b=b-1,a=-(b+)+c,a=(b-)-c,a
46、=-b+c, b=b+1,1.3.5 逗号运算符和逗号表达式,逗号运算符是C语言中提供的一种特殊运算符。逗号运算符用于将两个以上的表达式连接成一个逗号表达式。逗号表达式的一般形式为: , 逗号运算符是C语言所有运算符中级别最低的运算符,其结合性为左结合性。逗号表达式在求值时,按从左到右的顺序分别计算各表达式的值,用最后一个表达式的值和数据类型来表示整个逗号表达式的值和数据类型。 例如,逗号表达式a=1,b=a-4,c=b+2;等价于以下3个有序语句:a=1;b=a-4;c=b+2; 例1-10 逗号运算符和逗号表达式使用示例。 需要注意的是,在C程序中并不是任何地方出现的逗号都是逗号运算符,逗
47、号在许多地方也作为分隔符用以分隔若干个对象,,1.3.6 sizeof运算符,sizeof运算符是C语言特有的一个运算符,运算符使用形式为: sizeof() 其中,数据对象既可以是某个具体的变量名,也可以是某种数据类型的常量,还可以是某种数据类型的名字,甚至于还可以使一个合法的C表达式。 sizeof运算符的功能是返回其所测试的数据对象所占存储单元的字节数。 例1-11 sizeof运算符使用示例。 例1-12 sizeof运算符使用示例。,1.3.7 运算符优先级别和结合性规则,将表达式中的各种运算符运算的先后顺序规定为15个由低到高的优先级别,同时还为运算符规定了结合性。 在表达式求值时
48、,若运算对象两边的运算符优先级不同,按优先级别从高到低运算。若运算对象两边的运算符优先级相同,则按其结合规则处理, 对于表达式而言同级运算并不是都遵从从左到右的原则。C运算符有两种结合性,即左结合性和右结合性。 运算符的优先级和结合性只有在表达式里才有实际意义,表明C语言表达式的计值规则。 例1-13 右结合性运算符使用示例。,1 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.4 不同类型数据混合运算及数据转换,不同数据类型隐式转换 隐式转换是系统的自动转换,数据类型转换的原则是向表达数据能力更强
49、的方向转换。即当在表达式运算过程中出现了不同数据类型的数据进行混合运算时,系统先自动按图1.4所示的规则将参加运算的数据对象转换成同一类型的数据再进行运算。 例1-14 表达式混合运算中的自动数据类型转换示例。,1.4 不同类型数据混合运算及数据转换,不同数据类型显式转换 在C程序设计中,如果有需要可以对数据进行显式类型转换。显式转换又称为强制类型转换。显式类型转换的一般形式是: (类型名)() 显式类型转换的功能是:在本次运算中,强迫表达式的值转换成指定的数据类型参加运算。注意,若被转换的对象是表达式,则需用括号将整个被转换对象括住;若被转换的对象是单个变量,则括号可以省略。例如,有如下语句
50、序列: float x=2.5; int a=10, m, n; m=a+(int)x; n=a+(int)(x+1.8); 特别注意:类型转换只对标注强制转换这一次起作用,在程序的其余地方,变量还保留其原有的值。 例1-15 表达式混合运算中的强制数据类型转换示例。,1 C语言数据描述和C程序设计初步,C程序的基本结构 C语言的基本数据类型 基本运算符和表达式 不同类型数据混合运算及数据转换 C程序设计初步,1.5 C程序设计初步,1.5.1 算法基本概念及算法描述 算法是符合计算机特征的、处理实际问题的计算机操作步骤的描述。 1 算法的基本概念和算法的特征 (1)算法必须准确反映了应用问题
51、的数学模型。 (2)算法的每一步最后都能用计算机高级语言描述。 (3)算法执行的步骤逻辑(即程序执行逻辑)应该与实际问题的处理逻辑一致。 例如,在计算机系统中实现任意两个数由大到小排序输出的算法设计如下: 第1步 算法开始 第2步 输入两数,取名 a和b 第3步 判断:如果ab,则先输出a然后再输出 b:;否则先输出b然后输出a; 第4步 算法结束,程序的灵魂算法,一个程序应包括: 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据 结构(data structure)。 对操作的描述。即操作步骤,也就是算法(algorithm)。 Nikiklaus Wirth提出的公式: 程序
52、=数据结构+算法 教材认为: 程序=算法+数据结构+程序设计方法+语言工具和环境 这4个方面是一个程序涉及人员所应具备的知识。,简单算法举例1,【例】求12345。 最原始方法: 步骤1:先求12,得到结果2。 步骤2:将步骤1得到的乘积2乘以3,得到结果6。 步骤3:将6再乘以4,得24。 步骤4:将24再乘以5,得120。 这样的算法虽然正确,但太繁。,求12345。 改进的算法: S1:使t=1 S2:使i=2 S3:使ti,乘积仍然放在在变量t中,可表示为tit S4:使i的值+1,即i+1i S5:如果i5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。 如果计算100!
53、只需将S5:若i5改成i100即可。 如果该求1357911,算法也只需做很少的改动: S1: 1t S2: 3i S3: tit S4: i+2t S5:若i11,返回S3,否则,结束。 该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。思考:若将S5写成:S5:若i11,返回S3;否则,结束。,简单算法举例2,有50个学生,要求将他们之中成绩在80分以上者打印出来。 如果,n表示学生学号,ni表示第i个学生学号;g表示学生成绩,gi表示第i个学生成绩; 则算法可表示如下: S1: 1i S2:如果gi80,则打印ni和gi,否则不打印 S3: i+1
54、i S4:若i50,返回S2,否则,结束。,简单算法举例3,判定2000-2500年中的每一年是否闰年,将结果输出。 润年的条件:1)能被4整除,但不能被100整除的年份;2)能被100整除,又能被400整除的年份; 设y为被检测的年份,则算法可表示如下: S1: 2000y S2:若y不能被4整除,则输出y“不是闰年”,然后转到S6 S3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到S6 S4:若y能被100整除,又能被400整除,输出y“是闰年”否则输出y“不是闰年”,然后转到S6 S5:输出y“不是闰年”。 S6:y+1y S7:当y2500时,返回S2继续执行,否则,
55、结束。,简单算法举例4,在丁巨算法中有一道题:“今有鸡兔一百,共足二百七十二只,只云鸡足二,兔足四,问二色各几何?” 所附解法:“置共一百,以四乘之,得四百,与总足相减,余一百二十八,折半得鸡数。反减得兔。倍一百得二百,减总足,余七十二,折半得兔。反减得鸡,亦通。” 以上解法讲了两种算法。 算法1: s1,用100乘以4得400; s2,用s1求得的结果400减去总足数272得128; s3,用s2求得的结果128除以2就得鸡的只数64; s4,再用100减去上步求得的鸡的只数64得36,即为兔的只数。 算法2: s1,用100乘以2得200; s2,用总足数272减去s1求得的结果200得7
56、2; s3,用s2求得的结果72除以2就得兔的只数36; s4,再用100减去上步求得的兔的只数36得64,即为兔的只数。,简单算法举例4,算法描述示例3:已知鸡兔同笼,总头数为H,总脚数为F,求鸡兔各有多少只? 问题分析 根据已知的条件,设鸡为X只,兔为Y只,可以列出如下关方程组: 解该方程组,有:,简单算法举例5,从键盘中输入100个整数,对其中的正整数进行累加,最后输出结果。 设x为从键盘输入的整数,如果x为正整数,则将其累加。 算法描述(自然语言) S1:输入一个数x; S2:如果x 0,累加它; S3:如果100个数没有输入完,转步骤(1); S4:输入完100个数后,输出累加和。,
57、算法描述 (流程图),开始,输入一个数x,x0,累加,输入完100个数,输出累加和,结束,起止框,处理框,判断框,流向线,Y,Y,N,N,算法描述(N-S流程图),处理,判断,重复,处理,处理,处理,算法的C语句实现,void main( ) int x; /* 存放输入数的单元 */ int count; /* 存放输入个数的单元 */ int sum; /* 存放累加和的单元 */ count = 0; sum = 0; /* 工作单元初值 */ do scanf (“%d” , /* 输出累加和 */ ,准备工作,算法步骤,1.5.1 算法基本概念及算法描述,算法必须同时具有以下5个特征
58、: (1)有穷性。一个算法必须能够在算法所涉及的每一种情况下,都能在执行有穷步操作之后结束。 (2)确定性。算法的每一步操作,其顺序和内容都必须精确地惟一确定,不能有任何的歧义性。 (3)可执行性。算法所描述的每一步操作都必须是可行的,即必须是可以付诸实施并能够具体实现的基本操作。 (4)有0个或多个输入。所谓输入是指在算法开始执行之前,对算法中的输入变量所给的初始值。 (5)有一个或多个输出。一个算法的目的就是为了求解。没有输出,这个算法也就没有意义了。一个或多个输出是对输入数据加工后的结果的反映。,1.5.1 算法基本概念及算法描述,2算法的描述方法,(1)顺序结构 (2)选择(分支)结构 (3)循环结构,1.5.2 C语句概述,语句按其功能可以分为两大类:用于描述计算机操作运算的操作运算表达式语句和控制操作的执行顺序的程序流程控制语句。 表达式语句 赋值语句 赋值语句由赋值表达式接一个分号组成。 例如y=x+1; 函数调用语句 函数调用语句由函数调用表达式后接一个分号组成。 例如printf(“Hello World!n”); 空语句 空语句只由一个分号组成,它不进行任何操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级信息技术下册 我的佳作我发表 2教学设计 泰山版
- 2026年教师资格考试小学教育教学知识与能力真题与答案
- 2026年中小学教师资格证笔试仿真题及答案
- 北师版数学三年级下册7《统计》(送教案)
- 2026年眼科白内障手术后护理常规操作考核试卷答案及解析
- 2026年四川省机关事业单位考调、选调工作人员考试(综合应用能力测试)模拟试题及答案
- 二年级数学下册 三 三位数的加减法(三位数减三位数的不退位减法)教案 西师大版
- 会议时间地点变更补充函3篇
- 2025-2026学年与人沟通 教学设计
- 立鸿鹄志筑梦想巢小学主题班会课件
- 小红书2025好势发生营销IP新版图通案
- 玉林市玉州区云森木业家具厂家具生产建设项目环评报告
- 昆明市花卉产业高质量发展三年行动方案(23-25)
- 宣讲员宣讲技巧培训课件
- 中国热带农业科学院院属单位2026年第一批公开招聘工作人员备考题库及一套参考答案详解
- 2026年石油工程师钻井技术方向面试要点与答案解析
- 2026年南昌市政公用集团公开招聘工作人员备考题库及参考答案详解
- 启示录概论课件
- 2025年郑州金水区招聘社区工作者200名(公共基础知识)测试题附答案解析
- 220kV输变电工程建议书
- 小儿消化道出血课件
评论
0/150
提交评论