C语言程序设计完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第1页
C语言程序设计完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第2页
C语言程序设计完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第3页
C语言程序设计完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第4页
C语言程序设计完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第5页
已阅读5页,还剩465页未读 继续免费阅读

下载本文档

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

文档简介

第1章

程序设计基础网络信息中心教研室大学计算机基础网络信息中心教研室2主要内容1.1程序设计语言的发展1.2算法与程序设计1.3C语言简介1.4C语言的结构与执行1.5C语言的运行与调试大学计算机基础网络信息中心教研室3教学目的和基本要求:要求学生了解程序语言及算法的概念,C语言特点,C程序开发过程,简单C程序结构。教学重点:算法的概念、C程序开发过程、简单C程序结构。大学计算机基础网络信息中心教研室41.1程序设计语言的发展机器语言:计算机可以直接识别、执行的二进制代码。其优点是执行速度快;但难写、难读、难理解和难修改。汇编语言:使用助记符来代替机器语言中复杂、繁琐的指令的语言。如Z-80机中加法指令为ADD。其特点是过分依赖于机器码,即仅适合某类相同或相似的计算机,因此不易移植。大学计算机基础网络信息中心教研室51.1程序设计语言的发展高级语言:独立于计算机硬件结构,让用户使用面向问题的形式,更加方便编程人员的语言。高级语言分为如下两类(1)编译型:“先编译后执行”,过程为:源代码->目标代码->机器代码,其执行与源程序相互独立。比如PASCAL,C等。(2)解释型:“边解释边运行”,程序执行离不开源代码的支持,不利于源程序的保护和保密。比如BASIC,FoxBASE+等。大学计算机基础网络信息中心教研室61.1程序设计语言的发展面向结构(面向过程)的设计语言有:BASIC,FORTRAN,COBOL:面向事务处理的高级语言,适合于编写管理信息系统方面的程序有:PASCAL,C语言,PROLOG,FoxBASE+等面向对象和可视化语言:C++,Java,VisualBASIC,VisualC++,VisualFoxpro,VisualJ++,Delphi,PowerBuilder等。网页(Web)/网络(Network)编程语言:HTML,DHTML,JavaScript/Jscript,VBScript,JavaApplet,Java等。大学计算机基础网络信息中心教研室71.2算法与程序设计1算法及其表示

2结构化程序设计与面向对象程序设计大学计算机基础网络信息中心教研室81.2.1、算法及其表示算法是计算机科学中的重要概念之一,它指明了问题的计算过程,是对给定问题解题方案的准确而完整的描述。计算机没有软件的支持将无法工作,软件是计算机的灵魂,而软件的核心是算法。用计算机解决问题的方法和步骤就是算法,计算机执行算法,用计算机解决各种数据处理问题的主要方式就是寻找和设计各种算法,将算法变成代码的过程即程序设计。

算法及其表示1大学计算机基础网络信息中心教研室91.2.1、算法及其表示算法具备如下5个特征:有穷性确定性输入输出可行性算法特征2大学计算机基础网络信息中心教研室101.2.1、算法及其表示算法可以用多种方法描述,常见的表示方法有:自然语言描述法、伪代码表示法、传统流程图表示法、N-S流程图表示法等。【例1-1】已经杯A中盛放的是油,杯B中盛放的是水,另有一个空杯C,三个杯容积相同,请用自然语言表示算法。【解答】第1步:将A中的油全部倒入C中,使A成为空杯;第2步:将B中的水全部倒入A中,使B成为空杯;第3步:将C中原在A中的油,倒入B中,完成A与B中液体的交换。算法的表示3大学计算机基础网络信息中心教研室111.2.1、算法及其表示符号符号名称含义起止框开始和结束输入/输出框输入/输出操作处理框内容进行处理判断框条件进行判断流程线流程的方向连接点使流程图清晰(1)使用传统流程图表示算法

大学计算机基础网络信息中心教研室12真给a和b赋值a<b?输出a和b输出a和b假操作A操作B【例1-1】用传统流程图表示对两个数按从小到大的顺序输出的算法。【解答】传统流程图如图1-1所示。大学计算机基础网络信息中心教研室131.2.1、算法及其表示在结构化程序设计中,流程图只包括3种基本结构:(1)顺序结构顺序结构是结构化程序设计中最简单的一种结构,这种结构有一个入口和一个出口,中间的若干操作按照顺序依次执行,如图1-2所示,先执行操作A,然后执行操作B。(2)选择结构选择结构与分支结构属同一结构,它由一个条件和两组语句组成,计算机根据条件的真假来选择执行的分支,如果判断成立则执行操作A,否则执行操作B。选择结构的流程图如图1-3所示。大学计算机基础网络信息中心教研室14真条件?操作A操作B假成立条件?循环体不成立图1-3选择结构图1-4“当型循环”结构大学计算机基础网络信息中心教研室151.2.1、算法及其表示(3)循环结构循环结构是指重复执行同一组程序段的结构。循环结构由两部分组成,其一是循环条件、其二是循环体。

被重复执行的程序段称为循环体。循环体能否继续执行由循环条件决定。根据循环条件出现的不同位置,循环结构又分为“当型循环”和“直到型循环”两类。大学计算机基础网络信息中心教研室161.2.1、算法及其表示

由于传统流程图存在不足,提出一种新的结构化流程图形式,这种形式的流程图的主要特点是取消了流程线,不再显示控制流,整个算法的流程写在一个矩形框内,这种形式的流程图称为N-S流程图。根据结构化程序的三种基本结构,N-S流程图有3种基本形式,其中循环结构N-S流程图又分为“当型循环”和“直到型循环”两种。N-S流程图表示的3种基本结构如下所示:(2)使用N-S流程图表示算法大学计算机基础网络信息中心教研室17操作A操作B是假条件执行循环当条件满足时执行循环体直到条件满足退出循环处理B处理A图1-1顺序结构图1-2选择结构图1-3“当型循环”结构图1-4“直到型循环”结构大学计算机基础网络信息中心教研室181.2.1、算法及其表示

伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。这种表示方式比较接近于计算机语言,如果结合相应的语法,即可以修改成为程序。【例1-3】使用伪代码描述数据A与数据B进行交换的算法,要求不引入临时数据。【解答】使用伪代码描述如下:(1)A=A+B,将A与B相加赋值给A,则A为原数据A+B的和;(2)B=A-B,原两数和减去B即A的值,现赋值给B;(3)A=A-B,原两数和减去最近更新的B即A的新值(原数据B)(4)两数A、B完成交换。由于伪代码不能直接执行,但表示算法方便,容易理解。

(3)使用伪代码表示算法大学计算机基础网络信息中心教研室191.2.2、结构化程序设计与面向对象的程序设计

目前,软件开发行业中有两种典型的程序设计方法,其一为结构化程序设计方法,其二为面向对象的程序设计方法。(1)结构化程序设计:它的主要观点是采用自顶向下、逐步求精的程序设计方法,使用3种基本结构构造程序(顺序、选择、循环)。“结构化程序设计”方法旨在提高程序的可读性,保证软件的质量,降低软件成本,提高软件开发和维护的效率。

结构化程序设计1大学计算机基础网络信息中心教研室201.2.2、结构化程序设计与面向对象的程序设计

所谓面向对象的程序设计,就是把面向对象的思想应用到软件工程中,并指导开发维护软件。对象是由数据和容许的操作组成的封装体,所谓面向对象,就是基于对象的概念,以对象为中心,类和继承为构造机制,认识了解刻画客观世界以及开发出相应的软件系统。“面向对象程序设计”就是通过数据抽象,将许多实例中共性的数据和为操作这些数据所需要的算法抽取出来,并进行封装和数据隐藏,形成一个新的数据类型————“类”类型。面向对象的程序设计2大学计算机基础网络信息中心教研室211.3C语言简介1C语言的产生与发展

2C语言的特点与应用领域大学计算机基础网络信息中心教研室221.3.1、C语言的产生与发展C语言是在70年代初问世,是目前国际上广泛流行的一种结构化的程序设计语言。当初的C语言是为开发UNIX操作系统而研制的,1983年美国国家标准学会(ANSI)将C语言标准化,随后C语言的广泛应用又不断推出新的C语言版本,其性能也越来越强。也从面向过程的编程语言发展到面向对象的程序设计语言。目前可在微机上运行的C语言版本主要有TurboC,QuickC,VisualC++等版本。C语言的产生与发展1大学计算机基础网络信息中心教研室231.3.2、C语言的特点与应用领域

C语言的主要特点有:(1)语言简洁,紧凑,使用方便,灵活。(2)运算符丰富。(3)数据结构丰富,具有现代化语言的各种数据结构。(4)具有现代化的控制语句。(5)语法限制不太严格,程序设计自由度大。(6)C语言能进行“位”(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。(7)生成目标代码质量高,程序执行效率高。(8)程序可移植性好。(9)绘图能力强,可完成图形图像相关的程序设计。C语言的特点与应用领域

1大学计算机基础网络信息中心教研室241.4C语言的结构与执行1C语言源程序的结构特点

2高级语言程序的执行过程3程序设计的开发期与开发习惯大学计算机基础网络信息中心教研室251.4.1、C语言源程序的结构特点C语言程序的一般形式如下:编译预处理部分全局变量定义main()/*主函数*/{ 全局定义序列语句序列}func1()/*自定义函数func1*/{ ……}

C语言源程序的结构1大学计算机基础网络信息中心教研室261.4C语言的结构与执行(1)一个C语言源程序可以由一个或多个源文件组成。(2)每个源文件可由一个或多个函数组成。(3)一个源程序不论由多少个文件组成,都有一个且只能有一个main()函数,即主函数。(4)源程序中可以有预处理命令。(5)每一个声明,每一条语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。(6)标识符,关键字之间必须至少加一个空格以示间隔。(7)可以用/*……*/对C语言程序中的任何部分进行注释。注释有利于增加程序的可读性和可维护性。特点1大学计算机基础网络信息中心教研室271.4.2、高级语言程序的执行过程高级语言程序的执行过程高级语言与具体计算机无关,是一种能方便描述算法过程的计算机程序设计语言。用高级语言编写的程序称为“源程序”。计算机不能直接执行,通常有“解释”和“编译”两种方法处理源程序。“解释”方式,即让计算机运行解释程序,解释程序逐句取出源程序中的语句,对它作解释执行,输入数据,产生结果。优点是计算机与人的交互性好;缺点是逐句解释执行,运行速度慢。“编译”方式,即先运行编译程序,从源程序一次性翻译产生计算机可直接执行的二进制程序(称为目标程序);然后让计算机将目标程序结合具体的计算机硬件产生相应的“可执行”程序,产生结果。优点是运行目标程序快,缺点是修改源程序后必须重新编译以产生新的目标程序。大学计算机基础网络信息中心教研室281.4.3、程序设计的开发期与开发习惯

第1阶段,分析问题,确定问题的需求。第2阶段,分析问题,建立数学模型。第3阶段,选择计算方法。第4阶段,设计算法,绘制流程图。第5阶段,代码编写。第6阶段,调试程序。第7阶段,整理资料和交付使用。

开发期与开发习惯1大学计算机基础网络信息中心教研室291.4C语言的结构与执行(1)程序所采用的算法要尽量简单,符合人一般的思维方式。(2)标识符的命名尽量采取“见名知义,常用从简”的原则。(3)采用“缩进”的方式书写程序。低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。(4)程序中可用/*……*/或//注释,以提高程序的可读性。(5)在输入数据前要有提醒用户输入什么样的数据。(6)编译预处理部分的语句,不能加分号。(7)每一行写一条语言。(8)用{}号括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。在书写程序时应遵循以下规则:2大学计算机基础网络信息中心教研室301.5C语言的运行与调试1C程序的执行过程

2C程序开发的实验方法3VC++6.0编写程序与调试程序大学计算机基础网络信息中心教研室311.5.1、C程序的执行过程C程序的执行过程:

C源程序的扩展名为*.c,经过编译程序处理后的源程序生成目标程序(*.obj),目标程序经过连接程序处理,生成可执行程序(*.exe),可执行程序能够直接运行。标准C程序的执行是从main()函数开始执行,如果main()函数中调用了其它函数,其它函数调用结束后,返回主函数继续执行。

大学计算机基础网络信息中心教研室321.5.2C程序开发的实验方法C程序开发的实验方法如下:下面分别介绍在VisualC++6.0集成开发环境下运行C语言程序的一般方法。第1步,安装MicrosoftVisualC++6.0;第2步,建议工作区;第3步,打开工作区,并在该工作区下建立工程;第4步,编写源程序;第5步,编译源程序;第6步,组建源程序;第7步,调试和执行源程序。大学计算机基础网络信息中心教研室331.5.3VisualC++6.0编写程序

与调试程序的方法VisualC++6.0编写程序与调试程序的方法:第1步,启动VisualC++6.0第2步,建立项目(Project工程)工作区第3步,建立工程文件第4步,建立、编辑、编译、运行C源程序文件大学计算机基础网络信息中心教研室341.5C语言的运行与调试

运行与调试整个过程如下图所示。编辑程序编译程序连接程序源程序目标程序可执行程序输出结果编辑.c编译.obj连接.exe运行

图1-10源程序的变化过程编辑程序编译程序连接程序源程序目标程序可执行程序输出结果编辑.c编译.obj连接.exe运行大学计算机基础网络信息中心教研室35本章内容结束!网络信息中心教研室

第2章

数据类型、运算符与表达式主要内容大学计算机基础网络信息中心教研室372.2标识符

2.3常量

2.4变量

2.5数据间的混合运算

2.6变量赋初值

2.1C语言的数据类型

2.7运算符和表达式

大学计算机基础网络信息中心教研室381.5C语言的运行与调试1C语言的数据类型

2基本数据类型在两种环境下的表示2.1C语言的数据类型一个程序应包含两个方面,即数据结构和算法:(1)为了方便对程序中的数据进行存储和运算,每个数据都要有指定的数据类型和组织形式,叫做数据结构。数据类型是按被定义变量的性质、表示形式、占据存储空间及构造特点进行划分,不同类型数据的数据表示形式、取值范围、占用内存空间的大小及可参与的运算种类也不同;(2)算法是指对操作的描述,一般会给出解决问题的操作步骤。大学计算机基础网络信息中心教研室392.1.1基本数据类型简介基本数据类型

C语言中,数据类型可分为:基本类型、构造类型、指针类型和空类型4大类,如下图2-1所示。大学计算机基础网络信息中心教研室40空类型

构造类型数组类型结构体类型共用体类型整型基本类型字符型实型(浮点型)枚举类型单精度型双精度型指针类型数据类型2.2标识符标识符

除了常量的直接使用方式以外,其它方式均要求这些数据有一个名字与之匹配,这个名字就是标识符。C语言中,变量名、符号常量、函数名、数组名、类型名、文件名等字符序列称为标识符。可用于标识符的字符集C语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符不允许为数字.大学计算机基础网络信息中心教研室41大学计算机基础网络信息中心教研室422.2标识符1可用于标识符的字符集

1可用于标识符的字符集

2标识符的分类2.2.1C语言的字符集C语言的字符集分以下几类。英文大写或小写字母:A~Z,a~z;数字:1、2、3、……、9特殊符号:+、-、*、/、%、=、_、!、(、)、#、$、^、&、[、]、\、’、”、{、}、|、.、>、<、?、等;转义字符:\n、\t、\v、\b、\r、\f、\0、\’、\”、\\、\ddd、\xhh等。大学计算机基础网络信息中心教研室432.2.2标识符的分类标识符可分如下几类:关键字亦称保留字,关键字在C语言中有特定的含义,用户在使用自定义的常量名、变量名、函数名、类型名、文件名时,要绝对避免使用关键字,C语言中的保留字32个,保留字用小写字母表示,大写的可以由用户自由使用,尽量不用,以免与系统保留字混淆.大学计算机基础网络信息中心教研室44关键字12.2标识符描述数据类型定义的有:typedef、void;描述存储类型的有:auto、extern、register、static、volatile;描述数据类型的有:char、int、float、double、long、short、signed、struct、union、unsigned、const、enum;描述语句:break、case、continue、default、if、else、switch、for、do、while、return、sizeof、goto。大学计算机基础网络信息中心教研室452.2标识符预定义标识符包括C语言中提供的一些库函数的名字(如printf,scanf,getchar,putchar等)和编译预处理命令(defineinclude等),建议用户在自定义常、变量时,也要避免与这些标识符冲突。

用户在程序设计过程中,会经常用到常量、变量、自定义函数、文件名、类型名等,这些要用户定义。大学计算机基础网络信息中心教研室46预定义标识符2用户定义标识符32.2标识符下面给出一些合法的标识符:sum,average,_total,temp,a_1,char1,Max,min下面这些是不合法的标识符:1a,$total,a<1>,a.next在使用标识符的时候尽量采取“见名识义、常用从简”的原则,保证变量具有可读性,又不要让变量名过长。大学计算机基础网络信息中心教研室472.3常量常量

程序执行过程中,其值不能被改变的量称为常量,C语言中出现的常量有如下类型:整型常量、实型常量、字符常量、字符串常量等。大学计算机基础网络信息中心教研室48大学计算机基础网络信息中心教研室492.3常量1整型常量

2实型常量

3字符常量

4字符串常量

5符号常量与预处理简介

2.3.1整型常量2.3.1整型常量整型常量在C语言中又分:十进制整数

八进制整数

十六进制整数

十进制整数以人们通常习惯的十进制整数形式给出.八进制整数必须以0开头,其数码取值范围为0~7.以下是合法的八进制数:012(对应十进制整数10),-012(对应十进制数-10),0177777(对应十进制数65535),0177777(对应十进制数-65535)。大学计算机基础网络信息中心教研室50十进制整数1八进制整数22.3常量以下是不合法的八进制整数:255(无前缀0),03A2(包含非法数码)【例2-1】输出八进制数。#include<stdio.h>/*在visualC++6.0下调试通过*/main(){intx,y; x=012; y=-0177777;

printf("x=%d,y=%d\n",x,y);}大学计算机基础网络信息中心教研室512.3常量

十六进制整数的前缀为0x或0X,其数码取值范围为0~9,A~F,a~f。

以下是合法的十六进制整数:0X12(十进制数18),-0x12(十进制数-18),0XA1,,0Xffff(十进制数为65535)以下各数不是合法的十六进制整数:6B(无前缀0x),0x5H(含有非法数码H)在整型数据的后边加上后缀“L”或“l”(小写字母l)来表示的该数据是一个长整型的数据。例如:大学计算机基础网络信息中心教研室52589L十进制012L八进制0X17L十六进制

十六进制整数32.3.2实型常量实型常量也称为浮点型。有两种形式:十进制小数形式和指数形式。十进制小数形式:由数码0~9和小数点组成。如下均为合法的实数:

0.12,1.23,-2.5145,125.0指数形式:,由十进制数,加上阶码标志“e”或“E”及阶码(只能为整数,可以带符号)组成。大学计算机基础网络信息中心教研室53如:指数值1.2E6等于1.2×1065.21E-2等于5.21×10-20.91E8等于0.91×108-1.8E-9等于-1.8×10-92.3.3字符常量字符常量是用西文半角单引号括起来的一个字符。在C语言中,字符常量有以下特点:(1)字符常量只能用单引号“’”括起来,不能用双引号或括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符,但数字被定义为字符型之后就不能参与数值运算。大学计算机基础网络信息中心教研室542.3.3字符常量除了以上形式的字符常量外,C语言还允许使用一种特殊形式的字符常量,即转义字符,它以一个反斜线“\”开头,后跟一个或几个字符的字符序列。转义字符

转义字符的意义

ASCII代码

\n换行10\t水平制表9\b退格8\r回车13\f换页12\\反斜线符92\’单引号符39\”双引号符34\ddd1~3位八进制数\xhh1~2位十六进制数大学计算机基础网络信息中心教研室552.3.3字符常量【例2-2】输出转义字符。【程序分析与解答】#include<stdio.h>/*visualC++6.0*/main(){ printf("abc\tde\rf\tg\n"); printf("1234567812345678\n");/*参照物*/ printf("h\ti\b\bjk"); printf("1234567812345678\n");/*参照物*/}大学计算机基础网络信息中心教研室56输出结果为:fgde1234567812345678hjk1234567812345678Pressanykeytocontinue2.3.4字符串常量字符串常量是由一对双引号括起的字符序列。例如,“211Project”,“Chinese”,“college”等都是合法的字符串常量。字符串常量和字符常量的数据结构不同,其主要区别如下:(1)字符常量由单引号括起来,字符串常量由双引号括起来;(2)字符常量只能是单个字符,字符串常量含一个或多个字符。

大学计算机基础网络信息中心教研室572.3.4字符串常量‘C’在内存中占一个字节,表示为:“C”在内存中占两个字节,表示为:可以把一个字符常量赋予一个字符变量,但是不能把一个字符串常量赋予一个字符量。字符串常量占的内存字节数等于字符串半角字符数加1,因为在增加的一个字节中存放字符“\0”(ASCII码值为0),这是字符串结束的标志。CC\0大学计算机基础网络信息中心教研室582.3.5符号常量与预处理在C语言中,可以用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量其中,#include也是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令,其功能是把该标识符定义为常量。一经定义,以后程序中所有的标识符都代表该常量,如果要修改这个常量,可以实现整个程序中“一改全改”。经常将符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。大学计算机基础网络信息中心教研室59大学计算机基础网络信息中心教研室602.4变量1整型变量

2实型变量

3字符变量

2.4变量变量是指在程序执行过程中可以被改变和赋值的量。程序中每一个变量有一个符合C语言标识符规范的名称,在内存中占据一定的存储单元。变量的使用方法是先声明(定义变量),后使用。变量名与变量值是有区别的,变量的“名”是指变量所代表的存储单元的标志,而“值”是指存储单元的内容.例:大学计算机基础网络信息中心教研室61A____变量——变量值32.4.1整型变量

如:shortintx;/*变量的声明,定义整型变量*/ x=10;/*变量赋值*/0000000000001010变量x在内存中的地址是0x0013ff70数据在内存中的二进制存储示意图

(1)基本型:类型说明符为int,在内存中占4个字节。(2)短整型:类型说明符为shortint或short,占2个字节。(3)长整型:类型说明符为longint或long,4个字节。(4)无符号型:类型说明符为unsigned,。无符号型又可与上述三种类型匹配而构成,不能表示负数:

大学计算机基础网络信息中心教研室62整型数据在内存中的存储形式

1整型变量的分类22.4.1整型变量【例2-3】测试当前C编译环境下数据类型占用的字节数。【程序分析与解答】#include<stdio.h>main(){printf(“int占%d字节。\n”,sizeof(int));printf(“longint占%d字节。\n”,sizeof(longint));printf(“shortint占%d字节。\n”,sizeof(shortint));printf(“unsignedint占%d字节。\n”,sizeof(unsignedint));printf(“unsignedlongint占%d字节。\n”,sizeof(unsignedlongint));printf(“unsignedshortint占%d字节。\n”,sizeof(unsignedshortint));}大学计算机基础网络信息中心教研室63输出结果为:int占4字节。longint占4字节。shortint占2字节。unsignedint占4字节。unsignedlongint占4字节。unsignedshortint占2字节。2.4.1整型变量变量定义的一般形式为:类型说明符变量名标识符1,变量名标识符2,……; 例如:

intx,y,z; /*x,y,z为整型变量*/ longintn,m; /*n,m为长整型变量,longint可简写为long*/ unsignedinta,b; /*a,b为无符号整型变量,unsignedint可简写为unsigned*/大学计算机基础网络信息中心教研室64注意:(1)允许在一次定义相同类型的多个变量(2)最后一个变量名之后必须以分号结尾。整型变量的定义32.4.2实型变量

实型数据一般占用4个字节(32位)的内存空间,按指数形式存储。例如,实数12.345在内存中的存储形式如图2-4所示:

图2-4实型数据的表示+/-,用0,1表示(数符)0.12345+/-,用0,1表示(阶符)2大学计算机基础网络信息中心教研室65实型数据在内存中的存放形式12.4.2实型变量

实型变量分为单精度(float型),长单精度型(longfloat),双精度(double型)和长双精度(longdouble型)4类,其中float型占用4个字节,其它数据类型均占用8个字节。

由于实型变量由有限的存储单元组成,因此能提供的数字是有限的,而在有效位以外的数字将被舍去。这样可能会产生一些误差,例如,a+20的显然就应该比a大。请分析下面的程序。大学计算机基础网络信息中心教研室66实型变量数据的分类

2实型数据的舍入误差32.4.2实型变量【例2-4】实型数据的舍入误差。【程序分析与解答】#include<stdio.h>main(){floata,b;a=123456.789e5;/*12345678900*/b=a+20;printf("%f\n",b);}大学计算机基础网络信息中心教研室67输出结果为:12345678868.0000002.4.3字符变量字符变量用来存储字符常量,其说明符是char.字符变量的赋值有如下方式:(1)若ch_a是一个字符变量,ch=ch_a;(2)将字符常量'a'赋值给ch,ch='a';(3)将某个字符的ASCII码赋给ch,ch=65,则ch的内容为‘A’,但由于整型变量在存储上均超过1个字节,如果将一个整型变量赋值给一个字符变量时,只会将其最低8个位赋值给ch。

而ch="A"则是错误的.

大学计算机基础网络信息中心教研室68如下字符变量的输出形式:printf("%c",ch);(2)printf("%d",ch);(3)putchar(ch);

大学计算机基础网络信息中心教研室692.5数据间的混合运算1各数据类型转换规则

2自动类型转换与强制转换

2.5.1各数据类型转换规则不同数据类型转换规则

整型、单精度型、双精度型数据可以混合运算。字符型数据可以与整型通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图所示

大学计算机基础网络信息中心教研室70double←float↑long

↑unsigned↑int←char,short2.5.2自动类型转换与强制转换变量的数据类型的转换方法有两种,一种是自动转换,一种是强制转换。自动转换遵循以下规则:若参与运算量的类型不同,则先转换成同一类型,然后进行运算。转换按照数据长度增加的方向进行,以保证运算精度不降低。所有的浮点运算都是以双精度进行的。char型和short型运算时,必须先转换成int型。赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。大学计算机基础网络信息中心教研室71自动类型转换12.5数据间的混合运算其一般形式为:

(类型说明符)(表达式)例如:(float)a/*把a转换为实型*/(int)(x+y)/*把x+y的结果转换为整型*/无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。大学计算机基础网络信息中心教研室72强制转换

22.5.2自动类型转换与强制转换【例2-5】数据类型的强制转换。【程序分析与解答】#include<stdio.h>main(){floatf=5.75;printf("(int)f=%d,f=%f\n",(int)f,f);}大学计算机基础网络信息中心教研室73输出结果为:(int)f=5,f=5.7500002.6变量赋初值变量预先设置初值可以有如下几种情况:

(1)对各变量分别赋初值inta=3;

floatpi=3.14159;

charch='a';

(2)定义变量时对部分变量赋值inta,b,c=5;(3)对几个变量赋相同的初值如:若对几个变量赋予初值3,应写成inta=3,b=3,c=3;大学计算机基础网络信息中心教研室742.6变量赋初值强制类型转换运算符()

自增、自减运算符如:++i,--i(在变量i使用之前,先使i的值加(减)1)i++,i--(在变量i使用之后,使i的值加(减)1)使用自增、自减运算符需要注意的若干问题:++或--运算符,只能用于变量,而不能用于常量或表达式。++和--的结合方向是“自右至左”。大学计算机基础网络信息中心教研室75大学计算机基础网络信息中心教研室762.7运算符和表达式1C语言运算符简介与表达式的类型

2表达式的求值规则

3算术运算符和算术表达式

4赋值运算符和赋值表达式

5逗号运算符和逗号表达式

6关系运算符和关系表达式

7逻辑运算符和逻辑表达式

2.7.1C语言运算符与表达式的类型C的运算符有以下几类:(1)算术运算符:+

-

*

/

%(2)关系运算符:>

<

==

>=

<=!=(3)逻辑运算符:!

&&

||(4)位运算符:<<

>>

|

&(5)赋值运算符:=(6)条件运算符:?

:(7)逗号运算符:,C语言表达式的类型赋值表达式;算术表达式;关系表达式;逻辑表达式;条件表达式;逗号表达式大学计算机基础网络信息中心教研室772.7.2表达式的求值规则这些运算符在C语言中规定了优先级和结合性,在求值时先按运算符的优先级别高低次序执行,如果某个运算对象左右两侧的运算符的优先级别相同,则按规定的“结合方向”处理,其中算术运算符的结合方向为“自左至右”,而对于赋值运算符则采用“自右至左”的结合方向。有关运算符的优先级别和结合性参看附录。大学计算机基础网络信息中心教研室782.7.3算术运算符和算术表达式(1)+(加法运算符,或正值运算符。如3+5、+3)(2)-(减法运算符,或负值运算符。如5-2、-3)(3)*(乘法运算符。如3*5)(4)/(除法运算符。如5/3,5.0/3)(5)%(模运算符,又称求余运算符,%两侧均应为整型数据,如7%4的值为3)。大学计算机基础网络信息中心教研室79基本的算术运算符12.7.3算术运算符和算术表达式(8)指针运算符:*&(9)求字节数运算符:sizeof(10)强制类型转换运算符:(类型)(11)分量运算符:.

->(12)下标运算符:[](13)其他:如函数调用运算符()大学计算机基础网络信息中心教研室802.7.3算术运算符和算术表达式++i,--i(在变量i使用之前,先使i的值加(减)1)i++,i--(在变量i使用之后,使i的值加(减)1)使用自增、自减运算符需要注意的若干问题:(1)++或--运算符,只能用于变量,而不能用于常量或表达式。(2)++和--的结合方向是“自右至左”。

大学计算机基础网络信息中心教研室81算术表达式和运算符的优先级与结合性2强制类型转换运算符()3自增、自减运算符42.7.4赋值运算符和赋值表达式赋值符号“=”就是赋值运算符使用“=”连接的式子称为赋值表达式,其一般形式为:变量=常量、变量或表达式赋值运算符具有右结合性。如:

a=b=c=3大学计算机基础网络信息中心教研室82赋值运算符和赋值表达式12.7.4赋值运算符和赋值表达式(1)将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。(3)将一个double型数据赋给float变量时,截取其前面7位有效数字,(4)将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位。(5)字符型数据赋给整型变量时,将字符数据(8位)放到整型变量低8位中。大学计算机基础网络信息中心教研室83类型转换

22.7运算符和表达式在赋值符“=”之前加上其他运算符可以构成复合的运算符。如,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。如:a+=2/*等价于a=a+2*/x*=y+8/*等价于x=x*(y+8)*/由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的一般形式为:变量赋值运算符表达式大学计算机基础网络信息中心教研室84复合的赋值运算符3赋值表达式42.7.5逗号运算符和逗号表达式逗号运算符是一种特殊的运算,用以连接两个表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为:表达式1,表达式2,……,表达式n

例如x=2*5,x*3,此时整个逗号表达式的值为30。注:赋值运算符的优先级别高于逗号运算符大学计算机基础网络信息中心教研室852.7.6关系运算符和关系表达式1.关系运算符在C语言中有以下关系运算符:(1)<小于(2)<=小于或等于(3)>大于(4)>=大于或等于(5)==等于(6)!=不等于2.关系表达式关系表达式的一般形式为:表达式1关系运算符表达式2大学计算机基础网络信息中心教研室862.7.7逻辑运算符和逻辑表达式逻辑运算符及其优先级C语言中提供了三种逻辑运算符:(1)&&与运算(2)||或运算(3)!非运算大学计算机基础网络信息中心教研室87高2.7运算符和表达式【例2-6】调试以下程序,理解逻辑表达式。#include<stdio.h>main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}大学计算机基础网络信息中心教研室88输出结果为:0,01,00,12.7.8条件运算符和条件表达式条件表达式的一般形式为:表达式1?表达式2:表达式3

求值规则:若表达式1的值为真,则表达式2的值为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。(1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。如:

max=(x>y)?x:y

(2)条件运算符“?”和“:”是一对运算符,不能分开单独使用。(3)条件运算符的结合性是自右至左。大学计算机基础网络信息中心教研室89例如:a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d)2.7运算符和表达式【例2-7】调试以下程序,理解条件表达式。#include<stdio.h>main(){intx,y,max;printf("g请输入两个整数,x,y:");scanf("%d,%d",&x,&y);printf("最大值=%d\n",x>y?x:y);}大学计算机基础网络信息中心教研室90输出结果为:请输入两个整数,x,y:3,5最大值=52.7.9位运算符和位运算位运算符和位运算分别是:(1)&按位与运算符(2)|按位或运算符(3)^按位异或运算符(4)~取反运算符(5)<<左移运算符(6)>>右移运算符大学计算机基础网络信息中心教研室912.7运算符和表达式若变量A的值为0xAA(10101010),B的值为0x55(01010101),则:(1)A&B=0x00(00000000b)按位与(2)A|B=0xFF(11111111b)按位或(3)A^B=0xFF(11111111b)按位异或(4)~A=0x55(01010101b)取反(5)A<<1=0x54(01010100b)左移(6)A>>1=0x2A(00101010b)右移以上运算符在第10章将会进行详细讲解。大学计算机基础网络信息中心教研室92大学计算机基础网络信息中心教研室93本章内容完结!第3章

顺序结构程序设计与编译预处理

网络信息中心教研室主要内容大学计算机基础网络信息中心教研室953.2赋值语句

3.3输入与输出

3.4常用函数举例

3.5编译预处理

3.1C语句概述

3.6顺序结构程序设计举例

3.1C语句概述C语言的语句用来向计算机系统发出指令,单独的一条语句或者是复合语句完成特定的操作,这些操作的不同组合,用来实现一系列数据处理功能。C语言程序是一个由main()体内的若干变量的声明、赋值等操作以及若干函数组成的,没有编译过的程序称为源程序。源程序的某些行称为语句,每个语句的最后有一个半角分号“;”,用来表示语句的结束。用“;”隔开的语句,可以写在同一行,也可以写成几行,但这些语句必须包含在函数体中。大学计算机基础网络信息中心教研室963.1C语句概述C语言的语句C语言的语句可以分为5类:表达式语句、函数调用语句、控制语句、复合语句和空语句。1.表达式语句

例如:

m=2;score=math+English; i++; x=10,y=12;2.函数调用语句

其一般形式为:函数名(实际参数表);大学计算机基础网络信息中心教研室973.1C语句概述3.控制语句(1)条件判断语句:

if()...else.../*分支语句*/ switch(表达式/变量).../*多分支语句*/(2)循环语句:

do...while(条件)/*“先执行,后判断”的“当”型循环*/ while(条件).../*“先判断,后执行”的“当”型循环*/ for(条件).../*for循环,循环次数相对确定下使用*/(3)流程转向语句

goto/*强制程序跳转,不推荐使用*/ break/*中止执行switch或者循环*/ continue/*结束循环体中的其中一趟*/ return/*从函数中返回*/大学计算机基础网络信息中心教研室983.1C语句概述4.复合语句

把多个语句用{语句1;语句2;...语句n}这种形式构成一个比较复杂的语句称为复合语句,又称为语句块。如两个变量之间数据的交换。此时,应把复合语句看成一个单条语句。例如:if(a>b){ temp=a; a=b; b=temp;}

大学计算机基础网络信息中心教研室993.1C语句概述5.空语句只有“;”号的语句称为空语句.如:for(i=0;i<32768;i++) ;/*空语句,注意它的意义*/大学计算机基础网络信息中心教研室1003.2赋值语句赋值语句的构成形式赋值语句是由赋值表达式再加上“;”构成,其一般形式为:

变量=表达式;例如:

sum=0; x=y+z; a=b=c=10;连续赋值与赋值运算符的右结合性而赋值语句允许给多个变量连续赋相同的值,例如: inta,b,c;/*必须在变量声明处定义a,b,c三个变量*/ a=b=c=3;/*连续赋值*/大学计算机基础网络信息中心教研室1013.3输入与输出

输入与输出是以计算机为主体而言的。信息从计算机的外部输入设备(键盘、鼠标、移动存储设备等)向计算机输入数据称为输入,计算机向外部设备(显示器、打印机、文件设备等)输出数据称为输出。在C语言中,没有输入/输出语句,所有数据的输入和输出功能是通过一组库函数来实现的,在调用这些输入或输出库函数的时候,需要使用预编译命令#include将有关“头文件”包含到源文件中,这些“头文件”的文件名格式为*.h。大学计算机基础网络信息中心教研室1023.4输入与输出使用标准输入/输出库函数时,要在main()函数所在源文件中包含“stdio.h”文件,因此,源文件的开头经常有以下预编译命令:

#include<stdio.h>或

#include"stdio.h“本小节主要介绍单个字符的输入和输出,格式输入和输出,并简单介绍一下文件操作中的输入和输出,这些函数分别是getchar()、putchar()、printf()和fscanf()、fprintf()。大学计算机基础网络信息中心教研室103大学计算机基础网络信息中心教研室1043.4输入与输出1字符数据的输入与输出

2格式输入与输出

3文件操作中的输入与输出简介

3.4.1字符数据的输入与输出函数的一般调用形式为:

putchar(ch);ch必须是一个整型变量或一个字符型变量,ch还可以是转义字符常量。例如:

putchar('A');/*输出大写字母A*/ putchar(97);/*输出小写字母a*/ putchar(ch);/*输出字符变量ch的值*/ putchar(\101);/*输出大写字母A*/ putchar(‘\n’);/*换行,(执行控制功能,*/大学计算机基础网络信息中心教研室105单个字符输出函数putchar13.4.1字符数据的输入与输出【程序分析与解答】#include<stdio.h>main(){ inti_ch;/*定义整型变量i_ch,这个变量用i代表整型,*/ i_ch=65;/*65是大写字母'A'的ASCII码*/ putchar(i_ch); putchar('\n'); i_ch=97;/*97是小写字母'a'的ASCII码*/ putchar(i_ch); putchar('\n');}大学计算机基础网络信息中心教研室1063.4.1字符数据的输入与输出一般调用形式为:

charch; ch=getchar();【程序分析与解答】#include<stdio.h>main(){ charch; printf("在此输入任意一个字符并回车:\n"); ch=getchar(); putchar(ch);/*回显刚才的输入*/ putchar('\n');}利用getchar(),手动控制程序暂停执行。大学计算机基础网络信息中心教研室107单个字符输入函数getchar()

23.4.2格式输入与输出

printf和scanf函数可以一次输出或者输入若干个任意类型数据,有效解决输入复杂数据的问题,使用时,可以不包含头文件stdio.h。

输出函数printf格式:printf("格式控制字符串",输出表列)①printf()函数参数的第一部分,由格式字符串和普通字符组成,格式字符串是以“%”开头,在输出表列中,必须有一个变量与这个格式字符相对应;普通字符在输出时按原样输出.大学计算机基础网络信息中心教研室108格式输出函数printf()13.4.2格式输入与输出例如:

printf(“总和=%d,平均值=%5.2f\n",sum,average);

格式字符串输出表列【程序分析与解答】#include<stdio.h>main(){ intch1=77,ch2=78; printf("ch1=%d,ch2=%d\n",ch1,ch2); printf("ch1=%c,ch2=%c\n",ch1,ch2); printf("%c%c\n",ch1,ch2);}大学计算机基础网络信息中心教研室1093.4.2格式输入与输出

格式控制是通过格式字符串来实现的,格式字符串的一般形式为:%[标志][输出最小宽度][.精度][长度修饰符]类型

其中,方括号[]内的项可选,也可以省略,下面就介绍以上6项的使用方法: ①%:格式字符串的起始符号,不可省。 ②标志:标志字符为+、-、#、空格4种,其意义如下所示:大学计算机基础网络信息中心教研室1103.4.2格式输入与输出标志为+时,输出值为正时在值前补“+”号,为负时值前补“-”号

标志为-时,输出结果左对齐,右边补空格;缺省则输出结果右对齐,左边填空格或零

标志为#时,输出8进制数时加前缀0;输出16进制数时加前缀0x。③输出最小宽度:通常用10进制整数来表示输出数据项的最小位数,若实际位数多于指定位数,则按实际位数输出,若实际宽度少于指定位数,则用空格或0填补。大学计算机基础网络信息中心教研室1113.4.2格式输入与输出④精度:精度格式以“.”开头,后跟10进制整数,用来指示保留几位小数。⑤长度修饰符:常用的长度修改符为h、l两种,英文字母h表示输出项按短整型数据输出,英文字母l表示输出项按长整型数据输出。 ⑥类型:类型字符用来表示待输出数据的类型,必须用半角英文字符。格式字符d(或i)ox(或X);u;c;s;f;lf;e(或E);g(或G);%%(输出一个%符号)。大学计算机基础网络信息中心教研室1123.4.2格式输入与输出【例3-1】数据在内存中的存储与8进制输出。【程序分析与解答】#include<stdio.h>main(){ unsignedshortinta=-1;

printf("%d,%o\n",a,a);}大学计算机基础网络信息中心教研室113输出结果为:65535,1777773.4.2格式输入与输出

输入函数scanf格式:scanf("格式控制字符串",地址表列)地址表列中给出各变量的地址,地址是由地址运算符“&”后跟变量组成,但对字符号串的输入例外。大学计算机基础网络信息中心教研室114格式输入函数scanf()23.4.3文件操作中的输入与输出fprintf(文件指针,格式字符串,输出表列);fscanf(文件指针,格式字符串,输出表列);大学计算机基础网络信息中心教研室1153.5常用函数举例1.求绝对值函数

(1)intabs(intx);(2)doublefabs(doublex);

2.求自然对数值函数

doublelog(doublex);

3.幂函数doublepow(doublex,doubley);

4.求平方根函数

doublesqrt(doublex);

5.产生随机数函数intrand(void);

大学计算机基础网络信息中心教研室1163.5常用函数举例【例3-2】产生10~100间的随机整数,并输出。#include<stdio.h>#include<math.h>#include<time.h>main(){inta,b;srand(time(0));/*时间作为随便数种子,每运行一次,随机值均不同*/a=rand()%91+10;/*rand()返回随机整数,该数对91求余,数据范围是0-90*/b=rand()%91+10;/*因为rand()是随机的,求余结果亦随机*/printf("a=%d,b=%d\n",a,b);}大学计算机基础网络信息中心教研室117大学计算机基础网络信息中心教研室1183.6编译预处理1宏定义

2文件包含

3.6.1宏定义

C语言中常用的预处理功能有两种,分别是宏定义和文件包含。合理使用编译预处理功能编写程序,便于程序阅读、修改、移植和调试,也便于开发小组协同开发程序。C语言中编译预处理命令以“#define”开头,且每行末尾不能加分号。宏定义

在C源程序中允许用一个标识符来表示一个字符串,称为“宏”。在C语言中,“宏”分为有参数和无参数两种。下面分别讨论这两种“宏”的定义和调用。

大学计算机基础网络信息中心教研室1193.6编译预处理不带参数的宏的一般定义方式为:

#define标识符字符串 说明:(1) “#define”为宏定义的关键字,“标识符”表示定义的宏名,“标识符”用大写字母,以便区分于变量名或函数名,也可以用小写字母;(2)宏定义的末尾不可以";"作为结束,如果不小心加了分号,会将分号一起替换;(3)“字符串”是一个字符系列,对于整型,实型常量可直接书写,对于字符型常量,需要添加单引号,对于字符串常量,需要添加双引号。“字符串”还可以是一个表达式。大学计算机基础网络信息中心教研室120不带参数的宏定义13.6编译预处理【例3-14】宏定义中的数据格式#defineCH'c'#defineSTRING"Programming"#defineR1/*这是数字1*/#definePI3.14159#defineL2*PI*R#defineSPI*R*R#include<stdio.h>main(){printf("%c,%s\n",CH,STRING);printf("L=%f,S=%f\n",L,S);}大学计算机基础网络信息中心教研室121输出结果:c,ProgrammingL=6.283180,S=3.1415903.6编译预处理带参数的宏定义不是进行简单的字符串替换,还要进行参数替换。其定义的一般形式为#define宏名(参数表)字符串字符串中包含在括弧中所指定的参数。如:#defineS(a,b)a*barea=S(3,2);定义矩形面积S,a和b是边长。在程序中用了S(3,2),把3、2分别代替宏定义中的形式参数a、b,即用3、2代替S(3,2)。因此赋值语句展开为area=3*2;大学计算

温馨提示

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

评论

0/150

提交评论