C语言程序设计谭浩强第四版期末复习重点.docx
《C语言程序设计谭浩强第四版期末复习重点.docx》由会员分享,可在线阅读,更多相关《C语言程序设计谭浩强第四版期末复习重点.docx(66页珍藏版)》请在冰豆网上搜索。
C语言程序设计谭浩强第四版期末复习重点
第一章程序设计和C语言
1.1.什么是计算机程序
程序:
一组计算机能识别和执行的指令。
只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作
计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。
1.2什么是计算机语言
计算机语言:
人和计算机交流信息的、计算机和人都能识别的语言。
计算机语言发展阶段:
机器语言(由0和1组成的指令);
符号语言(用英文字母和数字表示指令)-
高级语言(接近于人的自然语言和数学语言)
面向过程的语言(非结构化的语言、结构化语言);面向对象的语言
1.3C语言的发展及其特点
C语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软
件。
因此C语言问世以后得到迅速推广。
C语言主要特点:
语言简洁、紧凑,使用方便、灵活。
(只有37个关键字、9种控制语句;程序书写形式自由,源程序短)
运算符丰富。
(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达式类型多样化)
数据类型丰富。
(包括:
整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了
复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。
)
具有结构化的控制语句。
(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序
的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言)
语法限制不太严格,程序设计自由度大。
(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型
量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查)
允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。
(C语言具有高级语言的功能和低级语言的
许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言)
用C语言编写的程序可移植性好。
(C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译
“标准链接库”中的大部分功能,不需要修改源代码;几乎所有计算机系统都可以使用C语言)
生成目标代码质量高,程序执行效率高。
1.4.1最简单的C语言程序举例
C语言允许用两种注释方式:
//:
单行注释,可单独占一行,可出现在一行中其他内容的右侧。
/*……*/:
块式注释,可包含多行。
1.4.2C语言程序的结构
C语言程序的结构特点:
1、一个程序由一个或多个源程序文件组成(小程序往往只包括一个源程序文件,一个源程序文件中可以包括三
个部分:
预处理指令、全局声明、函数定义。
)
2、函数是C程序的主要组成部分(一个C程序是由一个或多个函数组成的;必须包含一个main函数(只能有一个);每个函数都用来实现一个或几个特定功能;被调用的函数可以是库函数,也可以是自己编制设计的函数。
)
3、一个函数包括两个部分(函数首部、函数体(声明部分、执行部分))
4、程序总是从main函数开始执行
5、C程序对计算机的操作由C语句完成(C程序书写格式是比较自由的:
一行内可以写几个语句;一个语句可以分写在多行上。
)
6、数据声明和语句最后必须有分号7、C语言本身不提供输入输出语句8、程序应当包含注释,增加可读性
1.6程序设计的任务
1•问题分析2•设计算法3•编写程序4对源程序进行编辑、编译和连接5•运行程序,分析结6•编写程序文档
第二章算法一一程序的灵魂
一个程序主要包括以下两方面的信息:
(1)对数据的描述。
在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。
(2)对操作的描述。
即要求计算机进行操作的步骤,也就是算法。
数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
著名计算机科学家沃思(NikiklausWirth)提出一个公式:
算法+数据结构=程序
一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。
算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识。
2.1什么是算法
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”计算机算法可分为两大类别:
数值运算算法
(目的是求数值解);非数值运算算法(包括面十分广泛,常见的是用于事务管理领域)
2.3算法的特性
一个有效算法应该具有以下特点:
(1)有穷性。
一个算法应包含有限的操作步骤,而不能是无限的。
(2)确定性。
算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。
(3)有零个或多个输入。
所谓输入是指在执行算法时需要从外界取得必要的信息。
(4)有一个或多个输出。
算法的目的是为了求解,“解”就是输出。
没有输出的算法是没有意义的。
(5)有效性。
算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
流程图是表示算法的较好的工具。
2.4.3三种基本结构和改进的流程图
三种基本结构:
(1)顺序结构
(2)选择结构(3)循环结构①当型循环结构②直到型循环结构
2.4.5用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。
2.4.6用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法两个部分。
例2.19将例2.17表示的算法(求多项式1--
23
#include
intmain()
{intsign=1;
doubledeno=2.0,sum=1.0,term;
while(deno<=100)
{sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;
}
printf("%f\n",sum);
return0;
}
2.5结构化程序设计方法
设计算法的目的是为了实现算法。
丄11的值)用C语言表示。
499100
(2)逐步细化;(3)模块化设计;(4)结构化编码。
采取以下方法保证得到结构化的程序:
(1)自顶向下;
第三章最简单的C程序设计
3.1顺序程序设计举例
例3.1有人用温度计测量出用华氏法表示的温度(如F,今要求把它转换为以摄氏法表示的温度(如C)
解题思路:
找到二者间的转换公式c—(f32)代表华氏温度,C代表摄氏温度
9
定义f和c为单精度浮点型变量
指定f的值
计算c的值
输出f和c的值
#include
intmain()
{
floatf,c;
f=64.0;
c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);
return0;
}
例3.2计算存款利息。
有1000元,想存一年。
有三种方法可选:
(1)活期,年利率为r1⑵一年期定期,年利
率为r2(3)存两次半年定期,年利率为r3,请分别计算出一年后按三种方法所得到的本息和。
#includeintmain()
{floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
p1=p0*(1+r1);
p2=p0*(1+r2);
p3=p0*(1+r3/2)*(1+r3/2);
printf(”%f\n%f\n%f\n”,p1,p2,p3);
return0;
}
3.2.1常量与变量
1.常量:
在程序运行过程中,其值不能被改变的量。
整型常量:
如1000,12345,0,-345;实型常量:
十进制小
数形式:
如0.34-56.790.0,指数形式:
如12.34e3(代表12.34103);字符常量:
如’?
’,转义
2•变量:
在程序运行期间,变量的值是可以改变的。
变量必须先定义,后使用,定义变量时指定该变量的名字和
类型。
变量名和变量值是两个不同的概念,变量名实际上是以一个名字代表的一个存储地址。
从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
3.常变量:
constinta=3;
4.标识符:
一个对象的名字。
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为
字母或下划线
合法的标识符:
如sum,average,_total,Class,day,BASIC,li_ling
不合法的标识符:
M.D.John,Y123,#33,3D64,a>b
3.2.2数据类型
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。
不同的类
型分配不同的长度和存储形式。
C语言允许使用的数据类型:
「整型类型:
基本整型(int型):
占2个或4个字节
短整型(shortint):
VC++6.0中占2个字节长整型(longint):
VC++6.0中占4个字节广基本类型<双长整型(longlongint):
C99新增的
字符型
布尔型
浮点类型(单精度浮点型、双精度浮点型、复数浮点型)
J枚举类型
空类型
派生类型(指针类型、数组类型、结构体类型、共用体类型、函数类型)
3.2.3整型数据
整型变量的符号属性:
整型变量的值的范围包括负数到正数;可以将变量定义为“无符号”类型;扩充的整形类型:
有符号基本整型[signed]int;
无符号基本整型unsignedint;
有符号短整型[signed]short[int];
无符号短整型unsignedshort[int];
有符号长整型[signed]long[int];
无符号长整型unsignedlong[int]
有符号双长整型[signed]longlong[int];
无符号双长整型unsignedlonglong[int]
3.2.3字符数据类型
字符是按其代码(整数)形式存储的,C99把字符型数据作为整数类型的一种。
1.字符与字符代码:
大多数系统采用ASCII字符集
字母:
A~Z,a~z
数字:
0〜9
专门符号:
29个:
!
”#&'()*等
空格符:
空格、水平制表符、换行等
不能显示的字符:
空(null)字符(以’\0'表示)、警告(以’\a'表示)、退格(以’\b'表示)、回车(以‘\r'表示)等
字符’1'和整数1是不同的概念:
字符’1'只是代表一个形状为’1'的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个
字节[00110001];
整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节[00000000|00000001]
2.字符变量:
用类型符char定义字符变量
3.2.5浮点型数据
浮点型数据是用来表示具有小数点的实数。
float型(单精度浮点型):
编译系统为float型变量分配4个字节;数值以规范化的二进制数指数形式存放。
double型(双精度浮点型):
编译系统为double型变量分配8个字节;15位有效数字longdouble(长双精度)型
3.2.6怎样确定常量的类型
字符常量:
由单撇号括起来的单个字符或转义字符。
整型常量:
不带小数点的数值。
系统根据数值的大小确定int型还是long型等。
浮点型常量:
凡以小数形式或指数形式出现的实数。
C编译系统把浮点型常量都按双精度处理;分配8个字节
3.2.7运算符和表达式
3、算术表达式和运算符的优先级与结合性:
用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式运算对象包括常量、变量、函数等
C语言规定了运算符的优先级和结合性
4、不同类型数据间的混合运算:
(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。
系统将float型数据都先转换为double型,然后进行运算
(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型
(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算
例3.3给定一个大写字母,要求用小写字母输出。
#include
intmain()
{
charc1,c2;
c1='A';
c2=c1+32;
printf("%c\n",c2);
printf(”%d\n”,c2);
return0;
}
5、强制类型转换运算符
强制类型转换运算符的一般形式为:
(类型名)(表达式)
(double)a(将a转换成double类型)
(int)(x+y)(将x+y的值转换成int型)
(float)(5%3)(将5%3的值转换成float型)
有两种类型转换:
系统自动进行的类型转换;强制类型转换
3.3.1C语句的作用与分类
C语句分为以下5类:
(1)控制语句:
if、switch、for、while、do…while、continue、break、return、goto等
(2)函数调用语句(3)表达式语句(4)空语句(5)复合语句
在C程序中,最常用的语句是:
赋值语句;输入输出语句。
其中最基本的是赋值语句。
例3.4给出三角形的三边长,求三角形面积。
#include
#includeintmain(){doublea,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));printf("a=%f\tb=%f\t%f\n",a,b,c);
printf("area=%f\n",area);return0;
}
3.4.1数据的输入输出举例
例3.5求ax+bx+c=0方程的根。
a、b、c由键盘输入,设b-4ac>0
#include
#includeintmain()
{doublea,b,c,disc,x1,x2,p,q;scanf("%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;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
return0;}
3.4.2有关数据输入输出的概念
几乎每一个C程序都包含输入输出,输入输出是程序中最基本的操作之一。
(1)所谓输入输出是以计算机主机为主体而言的:
从计算机向输出设备(如显示器、打印机等)输出数据称为输出从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入
⑵C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。
printf和scanf不
是C语言的关键字,而只是库函数的名字
⑶在使用输入输出函数时,要在程序文件的开头用预编译指令#include或#泊elude"stdio.h"
3.4.3用printf函数输出数据
在C程序中用来实现输出和输入的,主要是printf函数和scanf函数。
这两个函数是格式输入输出函数,用这两个函数时,必须指定格式。
1.printf函数的一般格式,printf(格式控制,输出表列)例如:
printf(”i=%d,c=%c\n”,i,c);
2.常用格式字符:
d格式符:
用来输出一个有符号的十进制整数。
可以在格式声明中指定输出数据的域宽
printf(”%5d%5d\n‘,12,-345);%d输出int型数据;%ld输出long型数据。
c格式符。
用来输出一个字符,charch='a';printf(”%C,ch);或printf(”%5c,ch)
S格式符。
用来输出一个字符串,printf(”%S',”CHINA');
f格式符。
用来输出实数,以小数形式输出。
1不指定数据宽度和小数位数,用%f;
2指定数据宽度和小数位数。
用%m.nf;
3输出的数据向左对齐,用%-m.nf
e格式符。
指定以指数形式输出实数。
%eVC++合出小数位数为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函数的一般形式:
scanf(格式控制,地址表列)
2.scanf函数中的格式声明:
与printf函数中的格式声明相似;以%开始,以一个格式字符结束,中间可以插
入附加的字符,scanf("a=%f,b=%f,c=%f",&a,&b,&c);
3.使用scanf函数时应注意的问题
3.4.5字符数据的输入输出
1.用putchar函数输出一个字符,从计算机向显示器输出一个字符,putchar函数的一般形式为:
putchar(c)
例3.8先后输出BOY三个字符。
#include
intmain()
{
chara='B',b='O',c='Y';
putchar(a);putchar(b);putchar(c);
putchar('\n');
return0;
}
2.用getchar函数输入一个字符,向计算机输入一个字符,getchar函数的一般形式为:
getchar()例3.9从键盘输入BOY三个字符,然后把它们输出到屏幕。
#include
intmain()
{chara,b,c;
a=getchar();b=getchar();
c=getchar();putchar(a);putchar(b);putchar(c);
putchar('\n');
return0;
第四章选择结构程序设计
4.1选择结构和条件判断
C语言有两种选择语句:
(1)if语句,实现两个分支的选择结构;
(2)switch语句,实现多分支的选择结构例4.1在例3.5的基础上对程序进行改进。
题目要求是求ax2+bx+c=0方程的根。
由键盘输入a,b,c。
假设a,b,c的值任意,并不保证b2-4ac》0。
需要在程序中进行判别,如果b2-4ac
>0,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。
#include
#include
intmain()
{
doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf(“realroots:
\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);
}
return0;
}
4.2.1用if语句处理选择结构举例
例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。
#include
intmain()
{floata,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{t=a;
a=b;
b=t;
}
printf("%5.2f,%5.2f\n",a,b);
return0;
}
例4.3输入3个数a,b,c,要求按由小到大的顺序输出。
#includeintmain()
{floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b)
{t=a;a=b;b=t;}if(a>c)
{t=a;a=c;c=t;}if(b>c)
{t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;
}
4.2.2if语句的一般形式
if(表达式)语句1
[else
语句2]
最常用的3种if
语句形式:
1.if(
表达式)
语句1(
没有else子句)
2.if(
表达式)
语句1
else
语句
2(
有else子句)
3.if(
表达式1
)语句1
elseif
(表达式2)
语句2
elseif
(表达式3)
1
语句3
elseif
1
(表达式m)
语句m
else
语句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种逻辑运算符:
&&(逻辑与)||(逻辑或)!
(逻辑非)
&&和||是双目(元)运算符
!
是一目