1、C语言程序设计单元1 C程序设计基础内容摘要pC语言的书写格式和结构语言的书写格式和结构pC语言的编写语言的编写p流程图流程图学习目标学习目标p初步初步认识认识C语言语言p了解了解C语言的发展过程及特点语言的发展过程及特点p正确正确掌握掌握C语言的编译工具语言的编译工具p编写编写简单的顺序结构的简单的顺序结构的C语言程序语言程序任务任务1 了解程序设计过程 任务1:任务引导 C语言是一门非常优秀的结构化计算机编程语言,它适合于作为系统描述语言,即用来编写系统软件,也可以编写应用软件.它因为具有简洁性、易用性以及强大的功能性而受到程序员的高度评价。本任务首先简单介绍C语言的产生和发展、特点、使用
2、的版本,C语言的基本结构,C库函数。任务1:知识点介绍 1、程序设计程序设计 为了让计算机完成某一任务,人们需要为计算机编制一组有序的命令,这组有序命令的集合被称为“程序”。任务1:知识点介绍2、计算机程序计算机程序设计语言设计语言 计算机和人都能识别的语言,就是计算机语言。从计算机问世以来,计算机语言伴随着计算机技术的发展而不断变化,分为机器语言、汇编语言和高级语言。(1)机器语言 机器语言是最早产生和使用的编程语言。(2)汇编语言 用助记符表示的语言成为汇编语言。(3)高级语言 高级语言使用一种接近于人类自然语言的数学语言的方式来描述计算机的操作,不再需要人们熟悉计算机内部的硬件结构。图2
3、 存放地址的指针变量示意图任务1:指针操作符 3、C语言的特点语言的特点(1)C语言既有高级语言的程序思想与设计方法,又有低级语言的操作能力。所以它也被称为“中级语言”;(2)C语言具有结构化的体系结构。层次清晰,便于按模块化方式组织程序,易于调试和维护;(3)非常强的处理能力,不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址;(4)广泛的可移植性,可以方便地移植到不同的软、硬件环境;(5)代码效率高;任务1:指针操作符 4、算法及算法的表示、算法及算法的表示算法是对解决某一特定问题的操作步骤的具体描述。广义的说,算法就是为解决一个问题而采取的方法和步
4、骤。程序算法十数据结构。算法的描述算法的描述 用用流程图表示流程图表示算法算法 结构化流程图结构化流程图 用用N-S图表示算法图表示算法 伪代码表示的算法伪代码表示的算法任务任务2 C语言编译器的操作过程并编语言编译器的操作过程并编程实现第一个程序:在显示器显示程实现第一个程序:在显示器显示“This is a c program!”信息。信息。任务2:任务引导任务引导 Visual C+6.0,简称VC或者VC6.0,是微软推出的一款C+编译器。目前,全国计算机等级考试二级c语言的上机模拟软件和考试用的软件均是VC+6.0。本任务首先介绍VC+6.0的使用方法,然后通过一个简单的程序讲述运行
5、C程序的步骤和方法。任务2:知识点介绍 (1)VC+6.0的简介和启动的简介和启动任务2:知识点介绍 (2)运行运行C程序的步骤与方法程序的步骤与方法(1)编辑)编辑 生成C源程序文件,扩展名为.c(2)编译)编译 生成目标文件,扩展名为.obj(3)连接)连接 将目标程序和库函数及其他目标程序连接起来,生成可执行文件,文件扩展名为.exe(4)运行)运行 运行程序,得到结果本章小结本章小结 本单元主要介绍了C语言的产生和发展、特点及算法的表示方法。并详细介绍了VC+6.0开发环境的使用,在VC+6.0中新建、编辑、调试和运行一个C程序的具体步骤和方法,以及C语言程序的构成和书写格式。通过本单
6、元的学习,读者应该初步了解C语言的产生、特点、版本等,初步掌握C程序的构成和书写格式,并能对简单的C程序进行编辑、调试和运行。C语言程序设计单元2 数据的定义和运算内容摘要p基本数据类型p常量和变量p标识符命名p常用运算符和表达式p运算符的优先级与结合性学习目标学习目标 理解常量和变量的含义 熟悉基本数据类型int、char、float 和 double 使用算术运算符 理解类型转换任务任务1常量和变量常量和变量 任务1:任务引导 在程序设计中,所有的程序都会涉及到待处理的数据。不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。C语言既提供了丰富的数据类型对不同的数据加以描述,又提
7、供了丰富的运算符和表达式对数据进行加工。根据数学知识,学生的平均成绩和总成绩都可以利用公式来求,如果我们用sum代表学生的总成绩,用avg代表学生的平均成绩,用N代表学生课程数量。这里N是固定不变的,而总成绩和平均成绩是可变的,这些元素如何在C语言里进行定义?这就是本任务要重点讲述的内容。任务1:知识点介绍 1、数据类型数据类型 在本任务中,我们只介绍数据类型说明。其它说明在以后各单元中陆续介绍。所谓数据类型是按被说明量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。任务1:知识点介绍 2、常量常量(直接常量
8、、符号常量直接常量、符号常量)在程序执行过程中,其值不发生改变的量称为常量。C程序设计中的常量分为直接常量和符号常量两类。(1)直接常量 直接常量分为算术型运算常量和字符型常量两种:(2)符号常量用一个标识符代表一个常量,这样的标识符称为符号常量。程序中使用符号常量可提高程序的易读性、可修改性,便于调试程序,减少出错机会。任务1:指针操作符 3、变量(变量的定义、变量的赋值、)、变量(变量的定义、变量的赋值、)变量是指其值可以改变的量。一个变量应该有一个名字(标识符)存储单元,在该存储单元中存放变量的值。变量名就是这个量的代号。如每个人都有名字一样,而变量值是这个量的取值。所有的C语言变量必须
9、先定义,后使用。任务任务2数据类型任务2:任务引导任务引导 计算机有各种各样的程序,每个程序需要处理的信息类型也各不相同,包括文字、数字、图形、声音、动画等,这些信息在程序中可以通过不同的数据类型进行定义,因此使用各种数据类型实现常量、变量数据的定义是程序设计的基本能力。任务2:知识点介绍 1、整型数据、整型数据(1)整型常量的表示方法 (2)整型变量 (3)整型变量的定义:(4)整型数据的溢出 (5)整型常量的类型任务2:知识点介绍 2、浮点型数据、浮点型数据 带有小数点的数称之为浮点型数据,也叫实型数据。任务2:知识点介绍3、字符型数据、字符型数据(1)字符常量)字符常量(2)字符变量)字
10、符变量(3)字符数据在内存中的存储形式及其使用方法)字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。(4)字符串常量)字符串常量字符串常量是一对双撇号括起来的字符序列。规定以字符作为字符串结束标志。语言规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。任务2:知识点介绍 (1)语言允许在定义变量的同时使变量初始化如:int a=3;/指定为整型变量
11、,初值为 float f=3.56;/指定为浮点型变量,初值为.56 char c=a;/指定为字符变量,初值为a(2)可以使被定义的变量的一部分赋初值。如:int a,b,c=5;表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示、的初值都是。不能写成 int a=b=c3;注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。任务任务3运算符与表达式任务3:任务引导任务引导 几乎每一个程序都需要进行运算,对数据进行加工处理。完成对程序中不同类型的数据定义之后,可以通过运算符将数
12、据连接组成表达式,实现对数据的计算。C语言运算符非常丰富,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。任务3:知识点介绍 1、语言运算符简介、语言运算符简介(1)用来表示各种运算的符号称为“运算符”。有些运算符只需要一个运算对象,这种运算符称为“单目运算符”,有的需要两个运算对象,称为“双目运算符”,最多的则需要3个运算对象,称为“三目运算符”。用运算符把运算对象连接在一起所组成的式子,称为“表达式”。根据表达式中运算符的不同,在C语言里分为算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式和逗号表达式等。每种表达式按照运算符所规定的运算规则进行运算,最终都会得到
13、一个结果,它称为表达式的值。任务3:知识点介绍1、语言运算符简介、语言运算符简介(2)语言的运算符有以下几类:算术运算符算术运算符(+-*/%)关系运算符关系运算符(!)(!)逻辑运算符逻辑运算符(!(!|)位运算符位运算符 (|)赋值运算符赋值运算符(及其扩展赋值运算符)(及其扩展赋值运算符)条件运算符条件运算符(?:)(?:)逗号运算符逗号运算符 (,),)指针运算符指针运算符(*和)和)求字节数运算符()求字节数运算符()强制类型转换运算符(强制类型转换运算符((类型)类型))分量运算符(分量运算符(-)任务3:知识点介绍 1、语言运算符简介、语言运算符简介运算符含 义运算对象个数示 例
14、-取负单目-a+取正单目+a*乘法双目a*b/除法双目a/b%整除取余双目a%b+加法双目a+b-减法双目a-b+自加1单目a+a-自减1单目a-a2 2、算术运算符和算术表达式、算术运算符和算术表达式(1)算术表达式是由算术运算符把数值型运算对象连接在一起构成的表达式,如表2-4所示列出了C语言中的算术运算符及其含义。表2-3-1 基本算术运算符及其含义任务3:知识点介绍 3、赋值运算符和赋值表达式、赋值运算符和赋值表达式 4、关系运算符与关系表达式、关系运算符与关系表达式 5、逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式 6、条件运算符与条件表达式条件运算符与条件表达式 由“?”和“:”两
15、个符号组合成条件运算符,它是C语言里唯一的三目运算符。使用时的一般格式为:表达式1?表达式2:表达式3;任务3:知识点介绍7、逗号运算符与逗号表达式逗号运算符与逗号表达式逗号运算符就是把逗号(,)作为运算符,利用它来把若干个表达式“连接”在一起。这样构成的表达式整体,称为“逗号表达式”。逗号表达式的一般格式为:表达式1,表达式2,表达式3,表达式n逗号表达式的执行过程是:从左到右顺序计算各个表达式的值,并且把最右边表达式的值作为该逗号表达式的最终取值。也就是说,“表达式n”的值是整个逗号表达式的值。关于逗号表达式,要注意以下几点。逗号表达式是可以嵌套的。程序中使用逗号表达式,通常是分别求逗号表
16、达式内各表达式的值,并不一定要求整个逗号表达式的值。并不是所有出现逗号的地方都组成逗号表达式,如在变量说明中、函数参数表中逗号只是用作各变量之间的间隔符。任务3:知识点介绍8、位运算符位运算符(1)C语言中的位逻辑运算符,除了“位非”外,都是双目的。由于它都是按照二进制的相应位一位一位地进行运算,所以称它们是位逻辑运算符。由位逻辑运算符和运算对象构成的表达式,称为“位逻辑表达式”。本章小结本章小结 本单元主要讲述了C语言的常量与变量、数据类型、运算符和表达式等。在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。其中基本数据类型包括整型数据、实型数据和字符型数据。在程
17、序执行过程中,其值不发生改变的量称为常量。变量是指其值可以改变的量。在学完本单元后,要求学生能够熟练地在程序中应用以上知识点来解决实际问题。C语言程序设计单元5 循环结构内容摘要pwhile语句pdo-while语句pfor语句的应用p循环结构的嵌套pbreak语句在循环结构中的用法学习目标学习目标 熟练掌握while语句、do-while语句和for语句的基本格式 理解while语句、do-while语句和for语句的执行过程 掌握循环嵌套的应用 掌握循环结构的常用算法任务任务1 while语句 任务1:任务引导 循环结构是结构化程序设计的三种基本结构之一,它们分别是while语句、do-w
18、hile语句及for语句。这三种循环语句主要用于完成程序中需要重复执行的操作。例如:求数的阶乘、累加求和、求x的n次方等问题。任务1:知识点介绍 1、while语句的形式语句的形式 while语句是实现“当型”结构循环的语句,其一般形式为 while(表达式)循环体语句;其中,while是C语言的关键字,语句中的表达式为循环条件,循环体语句即循环体。任务1:知识点介绍 2、while语句的执行过程语句的执行过程 while语句的执行过程是先判断条件表达式,后执行循环体语句。其流程图如图5-1所示。具体执行过程如下:(1)计算表达式的值,当值为非0时,执行(2);当值为0时,执行(3)。(2)执
19、行循环体语句,转去执行(1)。(3)退出while循环。任务任务2 do-while语句任务2:任务引导任务引导 前面我们用while语句求2+4+6+100的值,学会 了while语句的使用方法。除了while语句以外,C语言还提供了do-while语句来实现循环结构。对同一个问题可以用while语句处理,也可以用do-while语句处理。while语句结构可以转换成do-while结构任务2:知识点介绍 1、do-while语句的形式语句的形式 do-while语句的特点:先执行循环体,然后判断 循环条件是否成立。其一般形式为:do 循环体语句 while(表达式);任务2:知识点介绍2、
20、do-while语句的执行过程语句的执行过程 do-while语句的执行过程是先执行一次指定的循环体语句,然后判断表达式的值。其流程图如图5-3所示。具体执行过程如下:执行do后面的循环体语句。计算while后面括号中的表达式的值,当表达式的值为非0时,返回执行过程(1);如此反复,直到表达式的值等于0时,退出do-while循环。说明:(1)do-while语句的特点是:先执行语句,后判断表达式的值。因此,do-while循环至少要执行一次循环语句。(2)如果do-while语句的循环体部分是多个语句组成,则必须用左右大括号括起来,使其形成复合语句。(3)while圆括号后面有一个分号“;”
21、,书写时不要忘记。任务任务3 for 语句语句任务3:任务引导任务引导 前面我们分别用while语句和do-while语句求1+2+3+100的值,除此之外,C语言还提供for语句来实现循环结构。而且for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while和do-while语句。任务3:知识点介绍 1、for语句的形式语句的形式 其一般形式为:for(表达式1;表达式2;表达式3)语句任务3:知识点介绍 2、for语句的执行过程语句的执行过程 for语句的流程图如图5-4所示。具体执行过程如下:(1)先求解表达式1。(
22、2)求解表达式2,若其值为真(值为非0),则执 行for语句中指定的内嵌语句,然后执行下 面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。图5-3-1 (4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句任务任务4 goto、break和和continue语句语句任务4:任务引导任务引导 程序中的语句通常总是按照顺序方向,或按照语句功能所定义的方向执行的。如果需要改变程序的正常流向,可以使用转移语句。在c语言中提供了4个跳转语句return、goto、break、continue。其中return、goto可以应用到程序的任何地方,b
23、reak、continue和循环语句一起使用。在第二单元我们已经了解了return语句的用法,在函数单元中会重点讲述。本任务主要讲述goto、break和continue语句。任务4:知识点介绍 1、goto语句 goto语句也称为无条件转移语句。通常与条件语句配合使用,可实现条件转移,构成循环,跳出循环体等功能。goto语句的一般形式:goto 语句标号;语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto语句配合使用。注意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。任务4:知
24、识点介绍 2、break语句 用break语句可以结束switch结构和三种循环。break语句的一般形式:break;功能:该语句可以使程序运行时中途跳出循环体,即强制结束循环,接着执行循环下面的语句。任务4:知识点介绍 3、continue 语句continue语句的一般形式:continue;功能:结束本次循环。也就是说,不管在该语句的后面是否还有其他执行语句,遇到continue;语句,本次循环到此结束,接着进行下一次循环的判断。Continue语句只能用在循环体中。本章小结本章小结 本单元详细介绍了while、do-while、for三种循环结构的一般形式和执行过程、循环的嵌套,以及
25、break语句、continue语句和goto语句的功能。通过本单元的学习,读者应该能够熟练地掌握相关循环结构的基本概念及构成,并能利用循环进行相关的程序设计。C语言程序设计第第8章章 指针指针内容摘要p指针的概念指针的概念p指针与数组指针与数组p指针与字符串指针与字符串p指针与函数指针与函数学习目标学习目标p理解指针的基本概念理解指针的基本概念p熟练掌握利用指针引用数组的方法熟练掌握利用指针引用数组的方法p熟练掌握利用指针引用字符串的方法熟练掌握利用指针引用字符串的方法p理解指向函数的指针的使用方法理解指向函数的指针的使用方法任务任务1 掌握指针的基本概念掌握指针的基本概念 任务1:任务引导
26、 变量是内存中的存储单元,对内存单元的访问可以通过对变量的操作来实现,还可以通过对内存单元的地址操作来实现。在程序中,一个变量实质上是代表了“内存中的某个存储单元”。那么C程序是怎样存取这个存储单元的内容的呢?任务1:知识点介绍 (1)变量的地址和指针 如图1所示:系统为c分配1个字节的存储单元,为i分配2个字节的存储单元,为f分配4个字节的存储单元,图中的数字只是示意的字节地址。每个变量的地址是指该变量所占存储单元的第一个字节的地址。在这里,我们称c的地址为2001,i的地址为2002,f的地址为2004。图1 变量在内存中所占字节的地址示意图任务1:知识点介绍 每个变量与具体地址的联系由C
27、编译系统来完成。程序中我们对变量进行存取操作,实际上也就是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式成为“直接存取”方式。如图2(a)所示,假设我们定义了一个这样的变量p,它也有自己的地址(2000),若将变量a的内存地址(3000)存放到变量p中,这时要访问变量a所代表的存储单元,可以先找到变量p的地址(2000),从中取出a的地址(3000),然后再去访问以3000为首地址的存储单元。这种通过变量p间接得到变量a的地址,然后在存取变量a的值的方式称为“间接存取”方式。这种用来存放地址的变量称为“指针变量”,上述变量p就是指针变量。图2 存放地址的指针变量示意图任务1
28、:指针操作符 (2)指针操作符 指针操作符有*与&两个,分别实现取变量和取地址的操作。程序中就是通过这两个操作符实现指针的定义与访问的。“&”可以实现取一个变量的地址的功能。取出的变量地址可能是一个很复杂的数据类型,但是操作时并不关心数值的多少,只需要保存到一个变量上面。“*”实现取一个指针所指向的变量的功能。例如下面的代码,就是通过一个变量的指针来访问变量。任务任务2 利用指针引用数组的方法利用指针引用数组的方法任务2:任务引导任务引导 指针和数组有着密切的关系,任何能由数组下标完成的操作也都可以用指针来实现。在程序中使用指针变量指向数组后,就可以通过该指针变量来引用数组元素,是数组的处理更
29、加灵活,程序代码也更紧凑。任务2:知识点介绍 (1)指针与数组 数组与指针的联系非常紧密。除了可以用下标访问数组元素以外,也可以用数组的指针访问数组变量。定义一个数组的时候,就是定义这个数组的头指针,然后分配若干个存储单元。定义的数组名称是可以直接赋值给一个指针的,而这个指针可以指向这个数组的第一个元素。任务2:知识点介绍 (2)指针与二维数组 如果数组的每一个元素是一个一维数组,则这个数组就是一个二维数组。在二维数组中,变量可以理解成行和列的关系。用同样的方法,可以构造出多维数组。二维数组可以理解成一个多行多列的表格,每一个单元格中存储了一个变量。可以同一维数组一样定义二维数组。任务任务3
30、利用指针引用字符串的方利用指针引用字符串的方法法任务3:任务引导任务引导 由于字符串是存放在字符数组中的,因此,为了对字符串操作,可以定义一个字符数组,也可以定义一个字符指针,通过指针的指向来访问所需的字符。任务3:知识点介绍 (1)字符串指针变量 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的,只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如:char c,*p=&c;表示p是一个指向字符变量的指针变量,而:char*s=”ZhongZhou University”;则表示s是一个指向字符串的指针变量,把字符串的首地址赋予s;任务任务4 向向
31、函数的指针的使用函数的指针的使用方法方法任务4:任务引导任务引导 通过对函数的学习可知,如果不使用全局变量,在一次函数调用后最多只能得到一个返回值(即函数值),普通的形式参数是不能带回结果的。如果用指针变量作为函数参数,则可以通过函数调用带回多个处理结果。任务4:知识点介绍 (1)函数指针变量 在C语言中规定,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。可以把函数的这个首地址(或称函数入口地址)赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为:类型说明符
32、(*指针变量名)(形参类型1,形参类型2);其中“类型说明符”表示被指向函数的返回值的类型;“(*指针变量名)”表示“*”后面的变量是定义的指针变量;最后的括号和括号内的形参,表示指针变量所指的是一个函数。任务4:知识点介绍 (2)指针型函数 所谓函数类型是指函数返回值的类型。在语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。定义指针型函数的一般形式为:类型说明符*函数名(形参表)/*函数体*/其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。通过本章对指针的学习,了解指针的感念和使用方法。在
33、运用指针的过程中,应注意以下几点:(1)指针是一个特殊的变量,它的值是其他变量的地址。(2)变量使用前必须先声明,为了区别指针变量与一般变量,变量名称前加指针运算符“*”。运算符“*”称为“间接引用运算符”,它返回指针所指向的对象的值。(3).用地址运算符(&)返回变量的地址。地址运算符的操作数必须是一个变量,不能把地址运算符用于常量、表达式或用存储类别register声明的变量。(4)指向数组元素的指针变量和指向普通变量的指针变量二者定义相同,C语言规定数组名代表数组的首地址,即第一个数组元素地址。要使指针变量指向数组a首地址,可执行语句“p=&a0;”或“p=a”。本章小结本章小结本章小结
34、本章小结 (5)对于数字元素ai,可以用指针这样引用:*(a+i),或定义一个指针变量p,将数组a的首地址赋给p,即执行语句“p=a;”,然后用*(p+i)引用。注意:如果指针变量p指向数组a首地址,则p+指向数组a的下一元素地址,即a1的地址。(6)使用指针变量时,通常用以下两种程序段引用数组的每个数组元素:(7)C语言中字符串有两种表示形式:一种是字符数组,一种是字符指针。(8)利用指针变量作函数参数传入变量地址,使函数可以直接改变变量的内容,从而为函数间的数据传递又提供一条途径。(9)用数组名作函数参数将整个数组传递到函数中,其实质是将数组的首地址传给函数的数组形参,使得形参数组和实参数组共用同一段内存。根据数组与指针的关系,也可用指针变量作函数形参接受实参数组的地址,使用这个指针就可以对数组中所有数据进行处理。