1、C语言程序设计谭浩强第四版期末复习重点第一章程序设计和C语言1.1.什么是计算机程序程序:一组计算机能识别和执行的 指令。只要让计算机执行这个程序,计算机就会 自动地、有条不紊地 进行工作计算机的一切操作都是由 程序控制的,离开程序,计算机将一事无成。1.2什么是计算机语言计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。计算机语言发展阶段: 机器语言(由0和1组成的指令) I符号语言(用英文字母和数字表示指令)高级语言(接近于人的自然语言和数学语言)面向过程的语言(非结构化的语言、结构化语言) ;面向对象的语言1.3C语言的发展及其特点C语言是一种用途广泛、功能强大、使用灵活的过程
2、性编程语言,既可用于编写应用软件,又能用于编写系统软 件。因此C语言问世以后得到迅速推广。C语言主要特点:语言简洁、紧凑,使用方便、灵活。 (只有37个关键字、9种控制语句;程序书写形式自由,源程序短)运算符丰富。(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达式类型多样化)数据类型丰富。(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型; C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。 )具有结构化的控制语句。 (如ifelse语句、while语句、dowhile语句、switch语句、for语句用函
3、数作为程序的模块单位,便于实现程序的模块化; C语言是完全模块化和结构化的语言)语法限制不太严格,程序设计自由度大。 (对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用; C语言允许程序编写者有较大的自由度,因此放宽了语法检查)允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。 (C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言)用C语言编写的程序可移植性好。 (C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代
4、码;几乎所有计算机系统都可以使用 C语言)生成目标代码质量高,程序执行效率高。 1.4.1最简单的C语言程序举例C语言允许用两种注释方式:/ :单行注释,可单独占一行,可出现在一行中其他内容的右侧。/*/:块式注释,可包含多行。1.4.2 C语言程序的结构C语言程序的结构特点:1、 一个程序由一个或多个源程序文件组成(小程序往往只包括一个源程序文件,一个源程序文件中可以包括三个部分:预处理指令、全局声明、函数定义。 )2、 函数是C 程序的主要组成部分 (一个C程序是由一个或多个函数组成的; 必须包含一个 main函数(只能有一 个);每个函数都用来实现一个或几个特定功能;被调用的函数可以是库
5、函数,也可以是自己编制设计的函数。 )3、 一个函数包括两个部分(函数首部、函数体(声明部分、执行部分) )4、 程序总是从 main函数开始执行5、 C 程序对计算机的操作由 (C程序书写格式是比较自由的:一行内可以写几个语句;一个语句可 以分写在多行上。)6、 数据声明和语句最后必须有分号 7、C语言本身不提供输入输出语句 8、程序应当包含注释,增加可读性1.6程序设计的任务1问题分析 2设计算法 3编写程序4对源程序进行编辑、编译和连接 5运行程序,分析结 6编写程序文档第二章算法一一程序的灵魂一个程序主要包括以下两方面的信息:(1)对数据的描述。 在程序中要指定用到哪些数据以及这些数据
6、的类型和数据的组织形式,这就是数据结构。(2)对操作的描述。即要求计算机进行操作的步骤,也就是算法。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法+数据结构=程序一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算 机语言表示。算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识。2.1什么是算法广义地说,为解决一个问题而采取的方法和步骤,就称为“ 算法”计算机算法可分为两大类别:数值运算算法(目的是求数值解);非数值运算算法(包括面十分广
7、泛,常见的是用于事务管理领域)2.3算法的特性一个有效算法应该具有以下特点:(1)有穷性。一个算法应包含有限的操作步骤,而不能是无限的。(2)确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。(3)有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。(4)有一个或多个输岀。算法的目的是为了求解, “解” 就是输出。没有输出的算法是没有意义的。(5)有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。 流程图是表示算法的较好的工具。2.4.3三种基本结构和改进的流程图三种基本结构:(1 )顺序结构 (2)选择结构 (3)循环结构 当型循环结构 直
8、到型循环结构2.4.5用伪代码表示算法伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。用伪代码写算法并无固定的、严格的语法 规则,可以用英文,也可以中英文混用。2.4.6用计算机语言表示算法要完成一项工作,包括 设计算法和实现算法1两个部分。设计算法的 目的是为了实现算法。2 3 4 99 100例2.19将例2.17表示的算法(求多项式 的值)用C语言表示。#i nclude int main() int sig n=1;double deno = 2.0,sum = 1.0, term;while (deno = 100) sig n = -sig n;term = sig
9、n/de no;sum = sum+term;deno = deno+1;printf (%fn,sum);return 0;2.5结构化程序设计方法第三章最简单的C程序设计3.1顺序程序设计举例(如(Ff,今要3求把它转换为以摄氏法表示的温度 (如C)。9 f 代表华氏温度,c代表摄氏温度例3.1有人用温度计测量出用华氏法表示的温度 解题思路:找到二者间的转换公式输曾-32)#i nclude int mai n ()定义f和c为单精度浮点型变量指定f的值计算c的值输出f和c的值float f,c;f=64.0;c=(5.0/9)*(f-32);prin tf(f=%fnc=%fn,f,c)
10、;return 0;例3.2计算存款利息。有1000元,想存一年。有三种方法可选: (1)活期,年利率为r1 一年期定期,年利活期存款一年后本息和为: 两次半年定期存款,一年后率为r2 (3)存两次半年定期,年利率为 r3,请分别计算出一年后按三种方法所得到的本息和。解题思路:确定计算本息和的公式。从数学知识可知:若存款额为 p0,则:p1=p0(1+r1);一年期定期存款,一年后本息和为: p2=p0(1+r2);本息和为:p3=p0 (1+r3/2) (1+r3/2)输入 pO,r 1 ,r2,r3 的 讣 rZpl-pO(1+rl) 计算|*2=p0(l hr2)讣專餐pon+ mi-f
11、 算法: #in clude int mai n ()rl);r2);r3/2) * (1 + r3/2);,p1, p2, p3);float p0=1000, r1=0.0036,r2=0.0225,r3=0.0198, p1, p2, p3;p1 = p0 * (1 +p2 = p0 * (1 +p3 = p0 * (1 +printf(” %fn%fn%fn ”return 0;3.2.1常量与变量1.-345;实型常量:十进制小103);字符常量:如?,转义常量:在程序运行过程中,其值不能被改变的量。 整型常量:如1000, 12345 , 0,数形式:如 0.34 -56.79 0
12、.0,指数形式:如 12.34e3 (代表12.34字符:如n;字符串常量:如” boy”;符号常量:#define PI 3.14162变量:在程序运行期间,变量的值是可以改变的。变量必须 先定义,后使用,定义变量时指定该变量的 名字和类型。变量名 和变量值是两个不同的概念,变量名实际上是以一个名字代表的一个 存储地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。3.常变量:const int a=3;4. 标识符:一个对象的名字。C语言规定标识符只能由 字母、数字和下划线3种字符组成,且 第一个字符必须为字母或下划线合法的标识符:如 sum, average
13、, _total, Class, day, BASIC, li_ling不合法的标识符: M.D.John ,Y 123, # 33, 3D64 , a b322数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度 (占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。C语言允许使用的数据类型:整型类型:基本整型(int型):占2个或4个字节短整型(short int) : VC+6.0中占2个字节长整型(long int) : VC+6.0中占4个字节基本类型 双长整型(long long int) : C99新增的字符型布尔型浮点类型(单精度浮点型、双精度浮点
14、型、复数浮点型)-枚举类型空类型派生类型(指针类型、数组类型、结构体类型、共用体类型、函数类型)3.2.3整型数据整型变量的符号属性:整型变量的值的范围包括负数到正数;可以将变量定义为“无符号”类型;扩充的整形类型:有符号基本整型 sig ned int;无符号基本整型 un sig ned int;有符号短整型 sig ned short in t;无符号短整型 un sig ned short i nt;有符号长整型 sig ned lo ng in t;无符号长整型 un sig ned long int有符号双长整型 sig ned lo ng long in t;无符号双长整型 un
15、 sig ned long long int3.2.3字符数据类型字符是按其代码(整数)形式存储的,C99把字符型数据作为整数类型的一种。1.字符与字符代码:大多数系统采用 ASCII字符集字母:A Z, a z数字:09专门符号:29个:! ” # & ( ) * 等空格符:空格、水平制表符、换行等不能显示的字符:空(null)字符(以0 表示)、警告(以a 表示)、退格(以b 表 示)、回车(以 r 表示)等字符1和整数1是不同的概念:字节0 0 1 1 0 0 0 1 ;整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节0 0 0 0 0 0 0 0 |0 0 0 0 0
16、0 0 12、 字符变量:用类型符char定义字符变量3.2.5浮点型数据浮点型数据是用来表示具有小数点的实数。float型(单精度浮点型):编译系统为float型变量分配4个字节;数值以规范化的二进制数指数形式存放。 double型(双精度浮点型):编译系统为double型变量分配8个字节;15位有效数字long double( 长双精度)型3.2.6怎样确定常量的类型字符常量:由单撇号括起来的单个字符或转义字符。整型常量:不带小数点的数值。系统根据数值的大小确定 int型还是long型等。浮点型常量:凡以小数形式或指数形式出现的实数。 C编译系统把浮点型常量都按双精度处理;分配 8个字节3
17、.2.7运算符和表达式3、 算术表达式和运算符的优先级与结合性:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式运算对象包括常量、变量、函数等C语言规定了运算符的优先级和结合性4、 不同类型数据间的混合运算:(1) +、-、*、/运算的两个数中有一个数为 float或double型,结果是double型。系统将float型数据都先 转换为double型,然后进行运算(2) 如果int型与float或double型数据进行运算,先把 int型和float型数据转换为double型,然后进行 运算,结果是double型(3) 字符型数据与整型数据进行运算
18、,就是把字符的 ASCII代码与整型数据进行运算例3.3给定一个大写字母,要求用小写字母输出。#i nclude int mai n ()char c1,c2;c1= A;c2=c1+32;prin tf(%c n ,c2);printf( ” dn” ,c2);return 0;5、 强制类型转换运算符强制类型转换运算符的一般形式为: (类型名)(表达式)(double)a (将a转换成 double类型)(int) (x+y) (将x+y的值转换成int型)(float)(5%3) (将 5%3的值转换成 float 型)有两种类型转换:系统自动进行的类型转换;强制类型转换3.3.1C语句
19、的作用与分类C语句分为以下5类:(1) 控制语句: if、switch、for、while、do while、continue、break、return、goto 等(2)函数调用语句(3)表达式语句(4)空语句(5)复合语句在C程序中,最常用的语句是:赋值语句;输入输出语句。其中最基本的是赋值语句。例3.4给出三角形的三边长,求三角形面积。#i nclude #in elude int mai n () double a,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2;area=sqrt(s*(s_a)*(s_b)*(s_c);prin tf(a=%f
20、tb=%ft%fn,a,b,c);prin tf(area=%fn,area);return 0;3.4.1数据的输入输出举例例3.5求ax2 + bx + c = 0 方程的根。a、b、c由键盘输入,设b2 -4ac 0#i nclude #in clude int mai n ()double a,b,c,disc,x1,x2,p,q;sca nf(%lf%lf%lf, &a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q; x2=p_q;prin tf(x 仁7.2* nx2=%7.2fn,x1,x2);ret
21、urn 0;3.4.2有关数据输入输出的概念几乎每一个C程序都包含输入输出,输入输出是程序中最基本的操作之一。(1)所谓输入输出是以计算机主机为主体而言的:从计算机向输出设备(如显示器、打印机等)输出数据称为输出 从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入 C语言本身不提供输入输出语句,输入和输出操作是由 C标准函数库中的函数来实现的。 printf 和scanf不是C语言的关键字,而只是库函数的名字在使用输入输出函数时,要在程序文件的开头用预编译指令 #include 或#泊clude stdio.h 3.4.3用printf函数输出数据在C程序中用来实现输出和输入的
22、,主要是 printf 函数和scanf函数。这两个函数是格式输入输出函数,用这 两个函数时,必须指定格式。1.printf 函数的一般格式,printf (格式控制,输出表列)例如: printf( ” i=%d,c=%cn ” ,i,c);2.常用格式字符:d格式符:用来输出一个有符号的十进制整数。可以在格式声明中指定输出数据的域宽printf( ” %5d%5dn ,12,-345) ; %d输出 int 型数据;%ld 输出 long 型数据。c格式符。用来输出一个字符, char ch= a; printf( ” %c ,ch);或 printf( ” %5c ,ch)s格式符。用来
23、输出一个字符串, printf (” S , ” CHINA);f格式符。用来输出实数,以小数形式输出。1不指定数据宽度和小数位数,用 f;2指定数据宽度和小数位数。用 %m. nf;3输出的数据向左对齐,用 %-m. nfe格式符。指定以指数形式输出实数。 %e VC+合出小数位数为6位,指数部分占 5列,小数点前必须有而且只有 1位非零数字。printf( ” e”,123.456);输出:1.234560e+002。%m.ne printf( ” 13.2e” ,123.456); 输出: 1.23e+002 ( 前面有 4个空格)3.4.4用scanf函数输入数据1.scanf函数的一
24、般形式:scanf (格式控制,地址表列)2.scanf函数中的格式声明:与 printf 函数中的格式声明相似;以开始,以一个格式字符结束,中间可以插入附加的字符,scan f(a=%f,b=%f,c=%f,&a,&b,&c) ;3.使用scanf函数时应注意的问题3.4.5字符数据的输入输出1.用putchar函数输出一个字符,从计算机向显示器输出一个字符, putchar函数的一般形式为:putchar(c)例3.8先后输出BOY三个字符。#i nclude int mai n ()char a=B,b=O,c=Y:putchar(a);putchar(b); putchar(c);pu
25、tchar (n);return 0;2.用getchar函数输入一个字符,向计算机输入一个字符, getchar函数的一般形式为:getchar()例3.9从键盘输入BOY三个字符,然后把它们输出到屏幕。#i nclude int mai n () char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a); putchar(b); putchar(c);putchar(n);return 0;第四章选择结构程序设计4.1选择结构和条件判断C语言有两种选择语句:(1)if 语句,实现两个分支的选择结构; (2)switch 语句,实现多
26、分支的选择结构例4.1在例3.5的基础上对程序进行改进。题目要求是求 ax 2 + bx + c = 0 方程的根。2 2 由键盘输入a,b,c。假设a,b,c的值任意,并不保证 b - 4ac0。需要在程序中进行判别,如果 b - 4ac0,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。#i nclude #in clude int mai n ()double a,b,c,disc,x1,x2,p,q;sca nf(%lf%lf%lf, &a,&b,&c);disc=b*b-4*a*c;if (disc0)printf( “has not real rootsn ” );el
27、se p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf( “ real roots:nx1=%7.2fnx2=%7.2fn ”,x1,x2);return 0;4.2.1用if语句处理选择结构举例例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。#i nclude int mai n() float a,b,t;scan f(%f,%f, &a,&b);if(ab) t=a;a=b;b=t;prin tf(%5.2f,%5.2fn,a,b);return 0;例4.3输入3个数a, b, c,要求按由小到大的顺序输出。#i n
28、clude int mai n() float a,b,c,t;scan f(%f,%f,%f, &a, &b, &c);if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; prin tf(%5.2f,%5.2f,%5.2fn,a,b,c);return 0;4.2.2if 语句的一般形式if (表达式)语句1else语句2 最常用的3种if语句形式:1. if (表达式)语句1 (没有else子句)2. if (表达式)语句1else语句2 (有else子句)3. if(表达式1 ) 语句1else if(表达式
29、2)语句2else if(表达式3)1语句3else if1(表达式m)语句melse语句m+1( 在else部分又嵌套了多层的if语句)说明:(1)整个if语句可写在多行上,也可写在一行上,但都是一个整体,属于同一个语句;(2) “语句1”“语句m是if中的内嵌语句,内嵌语句也可以是一个 if语句;(3) “语句1”“语句m可以是简单的语句,也可以是复合语句。4.3.1关系运算符及其优先次序关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符: V (小于)V =(小于或等于)大于)=大于或等于)【优先级相同(高)】=(等于)!=(不等于)【优先级相同(低)】关系、算术、赋值运算符的优先级:算数运算符 关系运算符 赋值运算符4.3.2关系表达式关系表达式:用关系运算符将两个数值或数值表达式连接起来的式子;关系表达式的值是一个逻辑值,即“真”或“假”;在C的逻辑运算中,以“1”代表“真” ,以“ 0”代表“假”4.4.1逻辑运算符及其优先次序3种逻辑运算符:& (
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1