版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、出品人:蒋东明 主 编:叶东毅 责 编:眭 蔚 制作人:洪晓婧,第一章 程序设计概述 第二章 C语言概述 第三章 数据类型、运算符与表达式 第四章 程序控制结构 第五章 数组 第六章 指针 第七章 函数,第八章 用户自定义数据类型 第九章 文件,第一章 程序设计概述,主要内容: 第一节 程序和程序设计语言 第二节 算法概述 第三节 结构化程序设计方法 本章小结 习题,第一节 程序和程序 设计语言,一、程序与程序设计的概念,作为一种能自动计算的机器,计算机通过执行一系列指令来完成给定的计算工作。因此,要让计算机完成某项任务,就必须将完成这项 任务的方法和具体步骤编写成计算机可以直接或间接执行的一
2、系列指令,使之执行这些指令后,就可以完成给定的任务。这样的一系列 指令的集合就称为计算机程序或简称程序, 编写这些指令就是程序设计。,第一章第一节,二、程序设计语言,程序设计语言是一组用来定义计算机程序的 语法规则,用来向计算机发出指令。人们借助程序设计语言来编写程序,解决不同的问题。程序设计语言按照语言级别可以分为低级语言和高级语言。,第一章第一节,二、程序设计语言,低级语言有机器语言和汇编语言,主要由机器基本指令集构成。它依赖于所使用的计算机硬件,即与特定的机器有关。它具有运行效率高的特点,但编写复杂、费时,容易出差错,而且程序修改维护困难。 高级语言的表示方法比较接近于自然语言,在一定程
3、度上与具体的计算机硬件无关,相对来说易于学习和使用,而且也便于维护,但是运行效率不如低级语言。,第一章第一节,二、程序设计语言,下面对程序设计语言做进一步的解释。 1.第一代程序设计语言(1GL):机器语言 2.第二代程序设计语言(2GL):汇编语言 3.第三代程序设计语言(3GL):高级语言 4.第四代程序设计语言(4GL):面向问题语言,第一章第一节,第二节 算法概述,一、算法的概念,一般来说,为解决一个问题而采取的方法和步骤,就称为算法。计算机算法则是用计算机求解一个具体问题或执行特定任务的一组有序的操作步骤(或指令),是构成计算机程序的核心部分。著名瑞士计算机科学家 N.Wirth曾经
4、提出一个公式: 程序=数据结构+算法 其中,数据结构主要是数据的类型和数据的组织形式,是对程序中数据的描述。算法 则是对程序中操作的描述,也就是操作步骤。,第一章第二节,一、算法的概念,需要注意的是,算法一般只是对处理问题 思想的一种描述,不是计算机可以直接执行的程序代码。因此算法本身是独立于计算机的,算法的具体实现则由计算机完成。从 这个意义上说,程序设计的本质就是要将 算法转化为计算机程序。 处理一个问题,可以有不同的算法。 设计和选择算法是至关重要的。不仅要保证算法正确,还要考虑算法的质量和效率。,第一章第二节,二、算法的表示方法,描述一个算法可以有不同的方式,常见的有以下三种: (1)
5、使用自然语言描述算法; (2)使用流程图描述算法; (3)使用伪代码描述算法。,第一章第二节,二、算法的表示方法,下面仍以求1到100之间所有偶数的和(记为 sum)为例说明算法的3种描述方法。假设采用前面提到的最后一种算法,即先求出1到50的和再乘以2。,第一章第二节,二、算法的表示方法,第1种:使用自然语言描述求sum的算法。 假设初始值i为1; 假设变量sum初始值为0; 如果i50时,执行,否则转出执行; 计算sum加上i的值后,重新赋值给sum; 计算i加1,然后将值重新赋值给i; 转去执行; 计算sum乘以2的值,输出sum的值,算法结束。 使用自然语言描述算法的方法比较容易掌握,
6、但是有些操作不易表述清楚,例如循环操作。另外,还可能造成歧义,使他人对相同的一句话产生不同的理解。,第一章第二节,第2种:使用流程图描述求sum的算法 传统的流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能明确地表示算法的 运行过程。表1-1给出流程图中所使用的图形的 含义。,第一章第二节,表1-1 流程图的图形解释,二、算法的表示方法,第2种:使用流程图描述求sum的算法。 用流程图描述的算法如图1-1所示。从图1-1中,可以比较清晰地看出算法的执行过程。,第一章第二节,图1-1 求sun的算法流程图,二、算法的表示方法,第2种:使用流程图描述求sum的算法。 传统流程图的一个主
7、要不足是流程线的用法缺乏规范。由于流程线可以转移流程的执行方向,如果使用不当或流程控制转移不明晰,容易导致程序的混乱和出错。为此,人们(I.Nassi和B.Schneiderman,1973年)设计了一种新的流程图,它没有使用流程线,而是把整个算法写在一个大框图内,这个大框图由若干个小的基本框图构成,算法按照从上到下、从左到右的顺序执行。这种流程图简称N-S流程图。,第一章第二节,二、算法的表示方法,第2种:使用流程图描述求sum的算法。,第一章第二节,图1-2 求sun算法的 N-S流程图,二、算法的表示方法,二、算法的表示方法,第3种:使用伪代码描述sum的算法 伪代码是一种用来书写程序或
8、描述算法时使用的 非正式表述方法,主要采用自然语言、数学公式和符号来描述算法的操作步骤,同时采用计算机高级语言(如C、Pascal、VB、C+、Java等)的基本 控制结构来描述算法步骤的执行顺序。,第一章第二节,二、算法的表示方法,第3种:使用伪代码描述sum的算法。 下面是用伪代码描述sum的算法,并附有注释行。 BEGIN/*算法开始*/ i1;/*为变量i赋初值*/ sum0;/*为变量sum赋初值*/ while i=50/*当变量i=50时,执行下 面的环体语句*/ sumsum+i; ii+1; sum2*sum; 输出sum的值 END/*算法结束*/,第一章第二节,第三节 结
9、构化程序 设计方法,一、结构化程序基本控制结构,结构化程序设计方法由著名的计算机科学家 E.W.Dijkstra和N.Wirth等人在20世纪60年代后期提出并逐渐发展起来,其基本思想是采用“自顶向下、逐步求精、分而治之”的原则,将一个较为复杂的原问题分解成若干相对独立的小问题,依次细化,直至各个小问题获得解决为止。,第一章第三节,一、结构化程序基本控制结构,按照结构化程序设计的观点,任何算法功能都可以通过三种基本控制结构以及它们的嵌套 组合来实现,这三种结构就是顺序结构、选择(分支)结构和循环结构。,第一章第三节,1.顺序结构 顺序结构是依次执行指令的结构。即,程序中的 指令按照顺序依次执行
10、,每条指令都必须执行,且只执行一次,如图1-3所示,图1-4是相应的N-S流程图。,第一章第三节,图1-3 顺序结构,图1-4 顺序结构N-S图,一、结构化程序基本控制结构,2.选择(分支)结构 选择(分支)结构根据逻辑判断的结果,做不同的处理。一种典型的选择(分支)结构是双分支 结构,如图1-5所示,图1-6是相应的N-S流程图。,第一章第三节,图1-3 双分支结构,图1-4 双分支结构N-S图,一、结构化程序基本控制结构,3.循环结构 在循环结构中,当条件满足时,反复执行某条件语句或语句组的操作,直到条件不满足时为止。循环结构也称重复结构。根据条件设置方式和 执行方式的不同,可以有两种不同
11、的循环结构,分别为当型循环结构和直到型循环结构,如图1-7和图1-8所示,图1-9和图1-10分别是相应的N-S 流程图。,第一章第三节,一、结构化程序基本控制结构,3.循环结构,第一章第三节,图1-7 当型循环语句,图1-8 直到型循环结构,一、结构化程序基本控制结构,图1-9 当型循环语句,图1-10 直到型循环结构,二、结构化程序设计的原则和步骤,要利用计算机语言设计一个结构化的程序,一般应遵循以下几个原则: (1)使用语言中的顺序、选择、循环等基本控制结构表示程序逻辑。 (2)选用的控制结构只准许有一个入口和一个 出口。 (3)程序语句组成容易识别的块,每块只有一个入口和一个出口。 (
12、4)复杂结构应该用基本控制结构进行组合嵌套来实现。 (5)尽量避免使用跳转语句(如GoTo、Break等 语句)。,第一章第三节,二、结构化程序设计的原则和步骤,结构化程序设计通常包括以下6个主要步骤。 1.问题分析 2.建立数学模型 3.算法设计 在设计算法时,要采用清晰的逻辑结构,同时充分 考虑到算法的复杂性问题,即算法的计算时间和占有的空间应尽可能地少。 4.程序编码 5.测试 6.建立程序文档,第一章第三节,作为开篇,本章的主要目的是概要性地介绍程序设计的基本知识,共包含3个小节的内容。第一节简要说明了什么是程序、程序设计和程序设计语言,并对程序设计语言的分类进行了介绍。第二节对算法的
13、概念、其与程序设计的关系以及 三种基本的算法表示方法进行了简单描述。第三节介绍了结构化程序设计的基本思想、基本控制结构以及主要步骤。,本章小结,1.1 什么是程序设计? 1.2 低级语言和高级语言的主要区别是什么? 1.3 为什么说算法是程序设计的灵魂? 1.4 结构化程序设计的基本思想是什么?,习题,第二章 C语言概述,主要内容: 第一节 C语言的发展历史和特点 第二节 C语言程序的结构 第三节 C语言程序的编译和运行 本章小结 习题,第一节 C语言的发展 历史和特点,一、C语言的发展历史,C语言是一种高效的编译型结构化程序设计 语言,最早由美国贝尔实验室的Dennis M.Ritchie在
14、B语言的基础上开发出来,并于 1972年在一台DECPDP-11计算机上首次实现。 最初的C语言只是为描述和实现Unix操作系统提供一种工作语言而设计的。1973年,Ken Thompson和Dennis M.Ritchie两人合作,把 Unix系统90%以上的内容用C语言改写,即 Unix的第5版。,第二章第一节,一、C语言的发展历史,随后几年,贝尔实验室又对C语言进行了多次的改进,但仍局限在内部使用。直到1975年 Unix第6版公布后,C语言的突出优点才引起 人们的普遍注意。 1977年出现了不依赖于具体机器的C语言编译文本可移植C语言编译程序,它使 C语言移植到其他机器时所需做的工作大
15、大 简化,同时也推动了Unix系统迅速地在各种 机器上实现。,第二章第一节,一、C语言的发展历史,1978年,Brian W. Kernighan和Dennis M. Ritchie出版了名著C程序设计语言(The C Programming Language),现在此书已被翻译成多种语言,成为C语言最权威的教材之一。 1983年,美国国家标准化协会(ANSI)根据C 语言问世以来各种版本对语言的发展和 扩充,制定了一套ANSI标准,称为ANSI C。 1987年,ANSI又公布了新标准87ANSI C。1990年,国际标准化组织ISO接受87ANSI C为 ISO C的标准(ISO98991
16、990)。,第二章第一节,二、C语言的特点,语言之所以风靡全球、被广泛使用,是因为它具有以下优点: (1)可移植性强。 (2)语言简洁紧凑,使用方便灵活。 (3)数据类型和运算符丰富多样。 (4)生成的目标代码质量好,程序执行效率高。,第二章第一节,二、C语言的特点,当然,C语言也不是完美无缺的,在盛行的 同时也暴露出了它的局限性: (1)C语言类型自检机制较弱,使得程序中的一些错误不能在编译时被发现。 (2)C语言本身缺乏支持代码重用的机制,使得 各个程序的代码很难为其他程序所用。,第二章第一节,第二节 C语言程序 的结构,一、C语言程序的构成,为了说明语言程序结构的特点,先看下面 几个例子
17、,这些例子体现了语言程序在组成结构上的特点。 例2.1 一个简单的例子。 #include void main(void) printf(Welcome to C program!n); 将上述程序输入计算机,进行编译、连接、运行后在屏幕上输出: Welcome to C program!,第二章第二节,一、C语言程序的构成,通过这个例子,我们可以初步看到: C的程序结构包含预处理部分“#include ”,它的功能是提供标准输入输出函数有关的信息。在使用标准函数库中的函数时,C编译系统要求程序通过预处理命令#include将提供所使用函数有关的信息(如对函数的声明)的头文件“包含”进程序。s
18、tdio.h是C编译系统 提供的一个头文件名,stdio是 “standard input ,它的作用是将双引号内的字符串按原样输出,“n”是换行符,即在输出“Welcome to C program!”后换行,分号表示该语句结束。,第二章第二节,一、C语言程序的构成,例2.2 求矩形的面积。 /*求矩形的面积*/ #include /*编译预处理命令*/ void main() int x,y,area;/*声明部分,定义变量x、y、area 为整型*/ /*以下3行为C语句*/ x=8;y=6;/*分别将8、6赋值给变量x、y*/ area=x*y;/*计算变量x和y的积,并将其值赋 给变
19、量area*/ printf(area is %dn,area); /*输出结果*/ ,第二章第二节,一、C语言程序的构成,以上程序的作用是求长、宽分别为x和y的矩形面积area。程序中的/*/是注释部分。注释可以用汉字或英文字符表示,是对程序的解释和说明,用于提高程序的可读性,在程序的 编译和运行时不起作用。注释可以出现在一行中的最右侧,也可以单独成为一行,如果 需要,程序中的任意一行都可以加上注释。 第5行是声明部分,可以用来声明函数或变量,本例中的声明部分定义了两个变量x和y,int表示指定x和y为整型变量(有关变量的定义详见第3章)。,第二章第二节,一、C语言程序的构成,第8行求积,使
20、area的值为xy。第9行中“%d”是输入输出的“格式控制符”,用来指定输入 输出时的数据类型和格式。本例中“%d” 表示“以十进制整数形式”输出对应输出项的值。 双引号括起来的部分为“格式控制字符串”, 本例中,格式控制字符串中的 “area is”按原样输出,“%d”则在该位置上以十进制整数形式 输出括号内逗号右端变量area的值,即8与6的积,“n”是换行符,实现换行。因此程序运行时输出以下信息: area is 48,第二章第二节,一、C语言程序的构成,例2.3 基本程序结构例子:主函数与自定义函数及调用。 void main()/*主函数*/ int a,b,c;/*变量声明,定义整
21、型变量a、b、c*/ int add(int x, int y); /*函数声明,声明本函数要 调用的add函数*/ scanf(%d, %d, /*输出c的值*/ ,第二章第二节,一、C语言程序的构成,int add(int x,int y)/*定义函数值为整型,形式参数x、 y为整型的add函数*/ int z;/*add函数中的声明部分,定义本 函数中用到的整型变量z*/ z=x+y; return (z);/*返回z的值到该函数被调用处*/ 当运行程序时输入:123 321(代表Enter键,全书同),程序输出如下: add=444,第二章第二节,一、C语言程序的构成,本程序包括两个函
22、数:主函数main和被调用的函数add。add函数的作用是求两个变量的和,并返回求和结果,return语句将z的值返回到 主调函数main中。返回值z通过函数名add带回到main函数中调用add函数的位置。 程序第4行是对被调用函数add的声明,为了使编译系统能够正确识别和调用add函数,必须在调用add函数之前对add函数进行声明。有关函数声明将在第7章进一步介绍。,第二章第二节,一、C语言程序的构成,通过以上几个例子,可以看到: (1)C语言程序是由函数构成的,函数是C语言程序的基本单位。 每一个C语言程序都必须有且只能有一个主函数,还 可以包含任意多个不同名的函数。一个C语言程序总是从
23、主函数开始执行,C语言规定必须用main作为主函数名。被调用的函数可以是系统提供的库函数(如printf和scanf函数),也可以是用户根据需要自己编制的函数(如例2.3中的add函数)。main后的一对圆括号中间 可以是空的,但这一对圆括号不能省略。程序中的main()是主函数的起始行,也是C语言程序执行的起始行。,第二章第二节,一、C语言程序的构成,(2)一个函数由两部分组成:函数的首部和函数体。 函数的首部,即函数的第一行,包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。函数参数可以省略,如main()就省略了函数参数。 函数体,即函数首部下面的大括弧内的部分。函数体内一般
24、有声明部分和执行部分。声明部分用于定义所 用到的变量。执行部分由若干个语句组成,称为执行 语句,必须放在声明部分之后,语句的数量不限。 (3)每个C语言程序都是从main函数开始执行的,不论main函数是放在程序最前头,还是放在程序最后,或在一些函数之前,在另一些函数之后。,第二章第二节,一、C语言程序的构成,(4)C语言本身没有输入输出语句。输入和输出的 操作都是由库函数scanf和printf等函数来完成的。 (5)可以用/*/对C语言程序中的任何部分作注释。加上必要的注释可以帮助人们阅读和理解程序。,第二章第二节,二、C语言程序的书写格式,C语言程序所有语句都必须以分号“;”结束,函数的
25、最后一个语句也不例外。程序行书写 格式比较自由,既允许一行内写几条语句,也允许一条语句分写在几行上,而且C语言程序没有行号。 在注释部分中,所有“/*”和“*/”必须成对使用,且“/”和“*”以及“*”和“/”之间不能有空格,否则都会出错。,第二章第二节,二、C语言程序的书写格式,针对C语言程序的构成及书写格式,在编写C 语言程序时要注意如下技巧: (1)为避免遗漏,必须配对使用符号,如注释 符号、函数体的起止标识符(大括号)、圆括号等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。 (2)注释的位置,可以单占一行,也可以跟在 语句的后面。 (3)一个语句或注释如果
26、一行写不下,可另起 一行继续写。 (4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。,第二章第二节,第三节 C语言程序的 编译和运行,一、C语言程序的编译过程简介,1.编辑C语言程序 当确定了解决问题的方案后,可以用C语言系统 提供的编辑功能编写一个C语言源程序,源程序的扩展名为.c。 2.编译C语言程序生成目标程序 由于计算机只能识别和执行由0和1组成的二进制 文件,而不能识别和执行用高级语言编写的源 程序,所以必须先用C语言系统的编译程序(即 编译器)对其编译,以生成以二进制代码形式表示的目标程序,目标程序的扩展名为.obj。,第二章第三节,一、C语言程序的
27、编译过程简介,3.连接生成可执行程序文件 将目标程序与系统的函数库以及其他目标程序进行连接装配,才能形成可执行程序文件,可执行文件的扩展名为.exe。 4.运行可执行程序文件 将可执行程序文件(扩展名为.exe)调入内存并 运行,得到程序的结果。,第二章第三节,二、Turbo C+3.0环境中运行C语言程序的步骤,Turbo C+3.0开发环境是一个集成编辑、编译、连接、调试的C语言开发环境。以下介绍在 Turbo C+3.0环境中运行C语言程序的步骤。 1.启动Turbo C+3.0环境 假设Turbo C+3.0安装在C盘的tc3子目录下。 方法一: 从“开始”菜单选择“运行”,输入:cm
28、d 再输入cd c:tc3bin 再输入tc,出现如图2-2所示的Turbo C+3.0主菜单界面。 方法二: 进入tc.exe文件所在的子目录(如c:tc3bin),双击tc.exe文件,或直接双击桌面上tc.exe文件的快捷方式图标,也出现如图2-2所示的主菜单界面。,第二章第三节,第二章第三节,图2-2 进入Turbo C+3.0主菜单界面,二、Turbo C+3.0环境中运行C语言程序的步骤,2.编辑源程序文件 从File菜单选择New(如图2-3所示),进入新建C语言程序环境(如图2-4所示),即可输入源程序,输入的源程序如下: #include void main() int i,
29、sum=0; for (i=1; i=100; i+) if (i%2!=0) sum=sum+i; printf (%d,sum); 这是一个求1100之间所有奇数的和的程序。,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,图2-3 进入新建C语言程序环境,图2-4 编辑C语言程序,3.保存源程序文件 从File菜单选择Save或者直接按F2键,选取路径并起 文件名,如起名为example.c,如图2-5所示。,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,图2-5 保存C语言程序
30、,4.编译与连接源程序文件 从Compile菜单选择Compile或者直接按快捷键Alt+F9,即可对源程序(如example.c)进行编译,生成目标程序文件(.obj),如图2-6所示;再从Compile菜单选择 Link,进行连接,得到一个可执行文件(.exe),如图 2-7所示。也可将编译与连接合并为一个步骤进行,操作方法是从Compile菜单选择Make或者直接按 F9键。,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,图2-6 编译C语言程序生成目标程序,图2-7 连接生成可执行程序,5.运行程
31、序 从Run菜单选择Run或者直接按快捷键Ctrl+F9,运行 程序并输出结果。从Window菜单选择User Screen或者 直接按Alt+F5,切换到用户屏幕,可查看程序的运行 结果,如图2-8所示。,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,图2-8 程序的执行结果,6.退出Turbo C 从File菜单选择Quit或者直接按Alt+X键,退出Turbo C+3.0环境。,二、Turbo C+3.0环境中运行C语言程序的步骤,第二章第三节,本章介绍C语言的发展历史、特点,C语言程序的基本结构,C语言程序的基本组成以及C语言程序的编译与执行。 C 语言是功能强大
32、的计算机高级语言,它既是系统描述语言,又是通用的程序设计语言。C语言有自己规定的基本字符集、标识符、关键字、语句和标准库函数等。,本章小结,C程序的基本结构是:程序由函数组成,函数由语句组成。一个完整的语言程序必须有且只能有一个主函数main,可以有零个或若干个子函数。这些子函数可以是用户自定义的函数,也可以是C编译系统提供的标准库函数。每个函数都由函数说明和函数体两部分组成,函数体必须用一对大括弧括起来。 C语言程序中的每个语句都以分号作为结束标志。,本章小结,一个语言程序需要经过编译和连接后才能 运行。对语言程序编译后生成目标文件 (.obj),对目标文件和库文件连接后生成可执行文件(.e
33、xe)。,本章小结,2.1 试述C语言的特点。 2.2 举例说明C语言程序的基本构成和书写 格式。 2.3 参照例题,编写一个C语言程序,输出 以下信息: = Hello,World! =,习题,2.4 编写一个C语言程序,输入两个数,输出其中大的数。同时编程实现求三个数中的 最大者。 2.5 输入并运行例题中的程序,熟悉调试C 语言程序的方法与步骤。,习题,第三章 数据类型、运算符与表达式,主要内容: 第一节 C语言的数据类型 第二节 常量 第三节 简单变量 第四节 库函数 第五节 运算符和表达式 本章小结 习题,第一节 C语言的 数据类型,一、C语言的数据类型,在使用计算机程序处理实际问题
34、时,可能遇到各种类型的数据,例如在处理学生信息时, 可能遇到这样一些数据:年龄20岁,它是 整数;身高1.75米,它是实数;姓名“张三”,它是一串字符。由此可见,我们编写的程序 应该具有处理多种类型数据的能力。 图3-1列出了C语言的数据类型。,第三章第一节,一、C语言的数据类型,第三章第一节,一、C语言的数据类型,C语言的基本数据类型可以直接用于定义常量或变量,而构造数据类型需要由用户根据自己要表达的数据形式自行构造,然后才能使用。 C语言在处理常量和变量时,都是使用内存中具有特定属性的存储单元来存放数据,但两者的差别是,存储常量的内存单元,其值在程序运行中是不能被改变的;而存储变量的内存
35、单元,其值在程序运行中是允许改变的。,第三章第一节,第二节 常量,一、整型常量,整型常量用于表达一个确定的整数,如32。它有以下三种形式: 1.十进制整数 2.八进制整数 以0(零)开头,由07的数字序列构成,如0123表示八进制数123,其值为182+281+380=83,即十进制的83。 3.十六进制整数 以0 x或0X开头(0 x中的0是数字零),可以由数字09和字母AF或af构成,AF字母用于表示数字1015。例如,0 x2F表示2161+15160=47,即十进制的47。,第三章第二节,一、整型常量,4.整数的后缀 一个整型常量的尾部加上字母L或l,则表示该整数为长整型常量。例如,2
36、3L是十进制的长整型常量,0 x23L是十六进制的长整型常量。 也可以用后缀U或u表示无符号整型常量。例如,234U是十进制无符号整型常量,023U是八进制无符号整型常量。 后缀L和U可以同时使用,例如78LU,表示无符号长 整型,并且L和U两种后缀的顺序任意。 5.整数在机内的存储形式 我们知道,数据在计算机中是以二进制形式进行处理的。在大多数机器中,整数采用补码的形式来存储。 对于C语言编译系统,Turbo C使用2个字节存储一个 整数,而Visual C+ 6.0采用4个字节存储一个整数。,第三章第二节,二、浮点型常量,C语言中的浮点型常量也就是实数,有两种 表示形式。 1.十进制小数形
37、式 2.指数形式 它由数字09、字母e(或E)和+、-号组成,它的形式为aEn,意为a10n,其中a为十进制整数或小数,n为十进制整数。例如:2.5e3(表示2.5103),-3.5e-2(表示 -3.510-2)。,第三章第二节,二、浮点型常量,在表示浮点型常量时,需要注意以下几点: (1)以指数形式表示实数时,a和n都不能省略,n必须为整数。例如,e5、3e、3e2.5等都是不合法的。 (2)以十进制小数形式表示实数时,整数和小数部分可省略其中任一个。例如,35、26.都是合法的。 (3)浮点型常量默认的是double型(双精度),如果在后面加上F或f,则其类型为float(单 精度),如
38、2.45F、3.5e2F。 (4)如果在一个浮点型常量后面加上一个L或l,则表示为long double型,如2.4e2L。,第三章第二节,二、浮点型常量,实数在机内是以指数形式存储的,以float类型为例,大多数C编译系统使用4个连续的字节(即32位)存储float类型数据。 由实数的存储形式可以看出,小数部分占的 位数越多,所能表示的精度越高,指数部分 占的越多,所能表示的数值范围越大。,第三章第二节,三、字符常量,字符常量是属于ASCII码字符集中的一个 字符,包括英文大小写字母、数字、标点符号以及特殊符号。字符常量的表现形式有两种: (1)使用单引号括起来的一个字符。例如,a、 7、?
39、都是字符常量。 (2)使用转义字符表示方法表示的字符。转义 字符是以反斜杠“”开头,后面跟字符或数字,并用单引号括起来表示字符常量。例如,n表示 一个换行符(ASCII码值为10)。换行符是一种 控制符,在屏幕上不能显示,用于在输出时进行 换行控制。表3-1给出了常用的转义字符及其含义。,第三章第二节,三、字符常量,第三章第二节,三、字符常量,实际上,C语言在内存中存放字符时是用字符数据的ASCII码值存储的。例如,字符a的 ASCII码值为97,它在内存中的存储形式与 整数97是一样的。也就是说在C语言中,在 ASCII码 范围内的整数与字符可以通用。一个字符可以以字符形式输出,也可以以整数
40、形式输出。 此外,字符数据也可以参加算术运算,即相当于使用其ASCII码值进行运算。,第三章第二节,四、字符串常量,字符串常量是由一对双引号括起来的字符 序列,字符串中可以包含任何字符,如空格、转义符,甚至汉字。例如,How do you do.、$24.5、中国n都是合法的字符串。双引号不属于字符串,而是起界定作用。 在C语言中没有提供字符串类型,而是使用 字符数组来存储字符串。字符串在机内存储时,所占的字节数等于字符串常量中的字符 个数加1。增加的一个字节用于存放0(空 字符,ASCII码为0),它作为字符串的结束 标志。,第三章第二节,五、符号常量及其定义,C语言提供了一种利用一个标识符
41、来代表一个常数的方法,即定义符号常量,这样可以更 确切表明其含义。 C语言中使用#define定义符号常量,即给常量起一个名字。其语法格式为: #define标识符常量 例如: #define PI 3.14 #define PRICE 30,第三章第二节,五、符号常量及其定义,在上面例子中,PI和PRICE称为符号常量。在C 语言中,define称为宏定义,#是预处理命令的开始标志。一旦定义了符号常量,当编译程序对程序进行预处理时,在程序中所有使用这些符号常量的地方都会被该常量值取代。,第三章第二节,五、符号常量及其定义,例3.2符号常量的使用。 #include #define PI 3.
42、14/*定义符号常量PI*/ void main() double r,s; r=20.0; s=PI*r*r;/*使用符号常量PI*/ printf(s=%fn,s); ,第三章第二节,程序运行结果为: s=1256.000000 以上的s=PI*r*r;语句在编译预处理后产生如下的语句: s=3.14*r*r;,五、符号常量及其定义,使用符号常量是一种好的编程风格,它的好处在于: (1)程序便于维护。如果常量在程序中多处出现,当需要改变其值时,要修改多个地方。如果使用符号常量,只要在程序开头的宏定义部分修改一次,就能做到一改全改。这就减少了工作量,并且不易出错。 (2)提高程序可读性。从例
43、3.2就可以看出,当我们阅读程序时看到PI,就可以知道它代表圆周率。,第三章第二节,第三节 简单变量,一、变量的命名,变量代表计算机内存中的一个存储单元,与 常量相反,变量的值在程序运行过程中是可以改变的。变量有以下特性:变量名、变量值、变量类型、变量的存储地址、变量的存储属性。 高级语言的编译器在编译连接时会给每一个 变量分配一个内存单元,变量的值就存储在该内存单元中。访问变量的值,实际上是通过 变量名找到相应的内存地址,然后对其中存储的数据进行访问。,第三章第三节,一、变量的命名,C语言中变量的命名是有特殊限制的。在C语言中,对变量、符号常量、函数、宏、标号、 文件名等的命名的有效字符序列
44、称为标识符(ide-ntifier)。C语言规定,标识符可以由字母、数字和下划线构成,且必须由字母或下划线开头,其中字母是指英文26个字母,可以是 大写或小写。,第三章第三节,一、变量的命名,C语言规定,关键字不能作为变量名使用(这是将关键字也称为保留字的原因)。例如,int、if、typedef等。此外,C语言中有些标识符是系统预定义的,它们在程序中有特殊的含义,例如,printf、open、ctype等,虽然可以对它们进行重新定义,但建议不要作为变量名使用。 以下是合法的标识符,可以作为变量名。 n, i2, str_len, g_iMax, month, _number 以下是不合法标识
45、符: 3d, ye#, xy, $25, int,第三章第三节,一、变量的命名,C语言严格区分大写和小写字母,因此STUDENT、student、Student是三个不同的标识符。一般使用小写字母表示变量名,大写字母表示符号常量名,这样的区分有利于增加程序的可读性。,第三章第三节,二、变量的基本数据类型,变量的数据类型决定了该变量的取值类型、 取值范围、所占的内存空间的大小以及所能 参加的运算方式等。 一个变量的数据类型可以是图3-1所列出的C 语言的数据类型中的一种。C语言基本数据 类型有以下几类:整型int及其相关类型、浮点型float及其相关类型、字符型char及其相关 类型。表3-2列
46、出了Turbo C的基本数据类型及相关属性。,第三章第三节,二、变量的基本数据类型,第三章第三节,三、变量的类型定义,在C语言中规定必须对所有用到的变量先定义后使用。定义变量的语法格式如下: 数据类型名 变量名表; 变量名表是一个或多个标识符,每个标识符之间用逗号“,”分隔开,例如: int i, j, k; 以上语句定义了三个整型变量i、j、k。其中int与i之间至少要留一个空格,语句最后要以分号“;”结尾,这是因为变量定义是一条语句而不是一条 命令(C语言规定一个语句的终结符是分号)。,第三章第三节,四、变量的初始化,一个变量被定义后,它是否就有值了呢?答案是它不是没有值,而是它的值未被确
47、定。 因此,在使用一个变量时,必须要确保其有 确定的值,这就需要对该变量指定初值,即对变量进行初始化。 以下例子演示了对变量进行初始化的方法: double d1=3.35,d2; 也可以用赋值语句给变量指定值,以上语句相当于:double d1,d2; d1=3.35; 其中,d1的值被赋予23.35,而d2的值是不确定的。,第三章第三节,四、变量的初始化,注:C编译器对静态局部变量和全局变量会 自动赋给初值,如果是数值类型的静态局部 变量和全局变量,编译器通常赋给初值0, 如果是字符类型的静态局部变量和全局变量,编译器通常赋给初值空字符,即ASCII码为0的值(有关静态变量和全局变量的相关
48、知识将在第7章中介绍)。,第三章第三节,第四节 库函数,一、库函数的使用方式,C语言提供的每一个库函数都在对应的某个 头文件中声明其函数原型,在使用某个库函数前都应在程序开始处包含相应的头文件。 文件包含可以用预处理命令#include来实现,例如,数学函数的原型都在文件math.h中 声明,因此要调用数学函数abs(x)求整数x的 绝对值,就应在程序开始位置使用如下预处理命令: #include 或 #include math.h,第三章第四节,预处理命令不是C语句,因此结尾不加分号“;”,这一点在编程时要注意。,一、库函数的使用方式,在包含了与某个库函数对应的头文件后,就 可以在程序中调用
49、该函数。 C语言函数调用的语法格式为: 函数名(实参列表); 如果是调用无参函数,则“实参列表”可以没有,但括号不能省略。,第三章第四节,二、常用数学函数,C语言中预先定义了丰富的数学函数,用于 进行常见的数学运算。这些数学函数可以分为以下几类:三角函数(trigonometric functions)、双曲函数(hyperbolic functions)、指数与对数函数(exponential and logarithmic function-s)、幂与绝对值函数(power and absolute val-ue functions)以及其他函数。 C语言提供的数学函数的原型在头文件mat
50、h.h中声明,使用时应在程序头部包含math.h文件: #include 或 #include math.h,第三章第四节,二、常用数学函数,1.三角函数sin、cos、tan 函数原型: double sin(double x); double cos(double x); double tan(double x); 功能:函数sin、cos、tan用于计算正弦、余弦和 正切值,这三个函数的参数都是代表弧度值的 double型数据。,第三章第四节,二、常用数学函数,2.绝对值函数abs、fabs、labs 函数原型: int abs(int x); double fabs(double x)
51、; long labs(long x); 功能:abs、fabs和labs函数分别适用于求整数、 浮点数和长整型数的绝对值,这三个函数返回参数x的绝对值。 例如,abs(-10)等于10,fabs(-5.6)等于5.6,labs (-9999)等于9999。,第三章第四节,二、常用数学函数,3.exp和pow函数 函数原型: double exp(double x); double pow(double x, double y); 功能:exp函数返回以e为底,参数x为幂的指数值 ex;pow函数返回x的y次幂xy。 例如,exp(2.0)等于7.389056,pow(2.0,3.0)等于8.
52、0。,第三章第四节,二、常用数学函数,4.log和log10函数 函数原型: double log(double x); double log10(double x); 功能:log函数返回以e为底,参数x的自然对数值 lnx;log10函数返回以10为底,参数x的对数值 log10 x。 例如,log(7.389056)等于2.0,log10(100.0)等于2.0。,第三章第四节,二、常用数学函数,5.sqrt函数 函数原型: double sqrt(double x); 功能:sqrt函数返回参数x的平方根。 例如:sqrt(4.0)等于2.0。 6.随机函数rand、srand ran
53、d和srand函数的原型在头文件stdlib.h中定义, 使用时应在程序开头包含stdlib.h文件。 函数原型: int rand(void); void srand(unsigned int seed);,第三章第四节,二、常用数学函数,功能:rand函数返回一个值在0RAND_MAX之间的伪随机(pseudorandom)整数,ANSI C要求 RAND_MAX至少为32767。srand函数用参数seed来设置一个伪随机数序列的开始点,以便调用rand函数时产生一个新的伪随机数序列。参数seed称为随机数种子。,第三章第四节,三、字符输入输出函数,C语言提供的字符输入输出函数的原型在
54、头文件stdio.h中声明,在使用时应在程序头部包含stdio.h文件: #include 或 #include stdio.h 1.字符输出函数putchar 函数原型: int putchar(int c); 功能:putchar函数把一个字符输出到标准输出设备(通常是显示器)上,其中参数c可以是字符变量或常量,也可以是一个代表ASCII码的整数。,第三章第四节,三、字符输入输出函数,例3.7利用getchar函数输入一个字符。 #include void main() char ch;/*定义字符型量ch*/ ch=getchar();/*等待键盘输入字符并按回车, 并把第一个字符赋给c
55、h*/ putchar(ch);/*输出字符*/ ,第三章第四节,三、字符输入输出函数,执行以上程序,运行到ch=getchar()语句时,程序等待输入字符,从键盘输入一个字符并按回车键后,getchar函数得到输入的字符,并赋给字符型变量ch,程序接着输出该字符。 注意:getchar只接收一个字符,如果输入多个字符再按回车键,也只有第一个字符被getchar函数接收。,第三章第四节,四、格式化输入输出函数的一般使用,格式化输入输出函数是C语言提供的库函数,其声明包含在头文件stdio.h中,因此在程序中若要使用格式化输入输出函数,也需要在源程序的开头包含该头文件。 1.格式化输出函数pri
56、ntf 在C语言中提供了格式化输出函数printf,该函数的功能是将数据按指定的格式输出到标准输出流中。 调用printf函数的语法格式为: printf(格式控制字符串,输出列表);,第三章第四节,四、格式化输入输出函数的一般使用,格式控制字符串是使用双引号括起来的用于表示 输出格式的字符串,它包括两部分:一部分为普通字符和转义字符,另一部分为输出格式控制符。 (1)普通字符在输出时按原样输出,转义字符则输出它所代表的字符(通常为控制字符)。 (2)输出格式控制符:以%号开始,后面跟格式字符,用于以指定的格式输出数据。例如,输出int型数据用 %d,输出float型和double型数据用%f
57、,输出字符型数据用%c,输出字符串用%s等。 输出列表是若干要输出的数据项,它可以是常量、变量或表达式,各参数之间以逗号“,”隔开。 输出项的类型、个数、顺序应与格式控制符一一 对应。,第三章第四节,四、格式化输入输出函数的一般使用,例3.8 用printf函数输出数据。 #include void main() int i=100; double d=35.5; printf(Integer Number=%dnDouble Number=%fn,i,d); 程序运行结果为: Integer Number=100 Double Number=35.500000,第三章第四节,四、格式化输入输
58、出函数的一般使用,上面例子中的格式控制字符串包括两个格式控制符(%d和%f),以及一些普通和转义字符。输出时,在两个格式控制字符的位置上,依次用i和d的值替换。Turbo C默认浮点型数据输出6个小数位数。 由于i和d分别是整型和浮点型数据,因此分别用 格式控制符%d和%f与之对应。,第三章第四节,四、格式化输入输出函数的一般使用,关于printf()函数的其他说明: (1)如果要输出字符串,可以用格式控制符%s。 (2)在printf函数中,可以控制输出数据的宽度。 整型数据输出:%md,其中m是非负整数,表示以m列宽度输出数据,若数据本身不足m位,则左补空格(数据右对齐)。若 数据的实际宽
59、度超过m列,则按实际宽度输出。 浮点型数据输出:%m.nf,指定数据输出总的宽度占m列,小数部分占n列。若数据本身小于m位,则左补空格。 字符串数据输出:%ms,表示字符串输出占m列。,第三章第四节,四、格式化输入输出函数的一般使用,2.格式化输入函数scanf scanf函数的功能是从标准输入流中按指定格式 接收输入的数据。 调用scanf函数的语法格式为: scanf(格式控制字符串,地址列表); 其中“格式控制字符串”用于指定输入的格式,它由格式控制符和普通字符两部分构成。地址列表是若干输入数据项的内存地址,它通常是变量的 地址,各地址之间用逗号“,”分隔。“格式控制字符串”中的格式控制符数量和类型要与输入数据项从左到右一一对应。,第三章第四节,四、格式化输入输出函数的一般使用,在“格式控制字符串”中包含两种类型的字符: 格式控制符和普通字符。 (1)格式控制符: 以%号开始,后面跟格式字符,用于以指定的格式输入数据。例如,输入int型数据用%d,输入char型数据用%c,输入float型数据用%f,输入double型数据用%lf。(注:%lf中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年陕西省足球协会招聘(10人)模拟试卷附参考答案详解【能力提升】
- 2026云南玉溪美年大健康体检中心就业见习岗位招募7人备考题库附答案详解【综合卷】
- 2026浙江台州市中医院招聘后勤保障部-保安编外人员2人备考题库附参考答案详解AB卷
- 2026年铜陵市阳光学校选调教师4人考前冲刺密卷及完整答案详解(夺冠系列)
- 2026四川泸州市纳溪区考核招聘教师1人的考前冲刺密卷含完整答案详解(夺冠系列)
- 2026年福建厦门市财政审核中心招聘财政专才3人考前冲刺密卷附参考答案详解(突破训练)
- 2026山西大同市浑源县人力资源和社会保障局征集就业见习岗位和招募见习人员考前冲刺密卷【典优】附答案详解
- 2026四川遂宁安居区部分卫生事业单位考核招聘农村订单定向医学毕业生3人考前冲刺试卷(网校专用)附答案详解
- 2026湖南永州市宁远县直单位选调17人笔试题库【满分必刷】附答案详解
- 2026上海城建职业学院招聘15人考前冲刺密卷及答案详解【夺冠】
- GB/T 25085.6-2026道路车辆汽车电缆第6部分:交流600 V或直流900 V和交流1 000 V或直流1 500 V单芯铝导体电缆的尺寸和要求
- 2025年(第三届)电力行业智能巡检技术大会:变电室内简易机器人技术探索与实践
- 2025年数控车工职业技能鉴定考试(高级技师一级)历年题库及答案
- 2025年医保知识考试题库及答案:医保信息化建设应用试题及答案
- CFG桩复合地基承载力及变形计算表
- 合同审核检查表风险点提醒及审查流程模板
- 2025北京市交通发展年度报告
- 信用卡部培训大纲
- 代建公司代建管理制度
- 滚针美容治疗技术解析
- 2025黑龙江七台河辰能生物质发电有限公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论