全书配套课件:C语言程序设计_第1页
全书配套课件:C语言程序设计_第2页
全书配套课件:C语言程序设计_第3页
全书配套课件:C语言程序设计_第4页
全书配套课件:C语言程序设计_第5页
已阅读5页,还剩1032页未读 继续免费阅读

下载本文档

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

文档简介

1、 C C语言的发展及主要特点语言的发展及主要特点1.1 C C程序设计相关知识程序设计相关知识1.2 C C语言上机过程语言上机过程1.3 教学目标 了解C语言的发展及主要特点; 掌握C语言的结构; 熟练掌握C语言的运行及其运行环境Turbo C的使用。1.1 C语言的发展及主要特点 1.1.1 C语言的发展史 1963年 将ALGOL60发展成PCL 1967年将CPL改写成BCPL; 1970年将BCPL修改成B语言 1972年将B语言改成了C语言。 1987年,Borland公司首次推出了Turbo C 1.0, 1988年,ANSI公布了标准ANSI C。 1.1.2 C语言的主要特点

2、 (1)C语言基本组成部分紧凑简洁。 (2)C语言运算符丰富,表达能力强。 (3)C语言数据结构丰富,结构化好。 (4)C语言具有结构化的控制语句。 (5)C语言提供了某些接近汇编语言的功能,有利于编写系统软件。 (6)C语言程序所生成的目标代码质量高。(7)C语言程序可移植性好。1.2 C程序设计相关知识 1.2.1 程序设计的基本概念 1计算机语言和程序 计算机语言分成机器语言、汇编语言和高级语言三大类。 机器语言:计算机能直接识别的语言,由0和1构成的代码。非常难于记忆和识别。 汇编语言:直接对硬件操作,助记符,更容易识别和记忆,执行速度快。冗长、复杂,容易出错,需要有计算机专业知识。

3、高级语言:不能直接被计算机识别,经过转换才能被执行。 按转换方式分为两类: 解释类:执行一条解释一条。效率比较低,不能生成可独立执行文件,方式比较灵活。 编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),使用比较方便,效率较高。修改很不方便。 2算法和算法设计 所谓算法,是指为解决某一特定的问题,所给出的一系列确切的、有限的操作步骤。 3程序设计 程序设计一般按以下步骤进行。 (1)确定数据结构 (2)确定算法 (3)编程 (4)调试 (5)整理源程序并总结资料。 1.2.2 C程序结构 1C语言程序的结构特点 (1)C语言程序是由函数构成的,一个源程序可以包

4、含若干个函数,但必须有且只有一个函数为主函数main()。 (2)由大括号括起来的部分为函数体,函数体可以包含若干条C语言。每条语句必须以分号“;”结束。 (3)C语言一般用小写字母书写。 (4)程序可以加注释以增加可读性,其内容必须用/*/。 (5) 除主函数外,C语言系统还提供一些可直接使用的库函数,例如printf(),scanf()等。用户也可以根据需要,自己定义函数。 C程序的结构形式如下: C程序=预编译命令+外部定义+C函数1+C函 数2+C函数n C函数=类型 函数名(参数表) 参数说明 说明部分 C语句 2C语句格式分类 C语句按形式可分为如下3种。 (1)单语句: 即一条可

5、执行语句,以分号“;”结束。 例如:i-; (2)复合语句(也称为分程序): 整体上用一对花括号括起来,语法等效于一个单语句。 其一般形式为 说明语句 语句1 语句n 例如: int x=100; x-; printf(&dn, x): (3)空语句: 只有一个分号的语句,无语句内容。 例如: ; 3C语句构造分类 C语句按构造可分为如下两种。 (1)表达式语句: 由表达式加分号“;”构成。 例如: x=100; (2)控制语句: 既可以是单语句,也可以是复合语句,主要有以下几种。 If else for while do while continue break switch goto re

6、turn 这些语句的作用是控制C程序的流程,即决定C语句的执行顺序。 通过下面的例子可以了解C语言的基本程序结构。 【例1-1】简单的C语言程序。 main() /*主函数*/ int x, y, s; /*定义变量*/ x=3:b=7:s=(x+y)/2; /*赋值语句*/ printf(s=%d, s): /*输出语句*/ 运行结果为 s=5 【例1-2】一个复杂的C程序。 #include /*inclue为文件包含命令*/ #include main() /*主函数*/ double a, b; /*定义变量*/ printf(input number :); /*输入字符串“inpu

7、t number :”*/ scanf(%lf, & a); /*输入变量a的值*/ b=sqrt( a ); /*求a的平方根,并把它赋给变量b*/ printf(sqrt of %lf is %lf n, a , b); /*显示程序运算结果*/ 这个程序的功能是求从键盘上输入一个数的a(a不能小于0)的平方根值,然后输出结果。 运行结果为 input number :4 sqrt of 4.00000 is 2.0000 1.2.3 标准库简介 标准库函数提供了用户与操作系统之间的接口。 例:#include 函数printf()就是在stdio.h中说明的一个库函数。 编译时,当遇到一

8、个不是用户定义的函数时,编译器就到头文件中去查找,如果找到了,连接时就将该函数对应库中的代码段加到调用它的函数中,形成可执行文件。1.3 C语言上机过程 源程序(.C)编译目标程序(.OBJ)连接可以执行程序(.EXE)。 开发一个C程序要经过编辑、编译、连接和运行4个步骤。 1编辑 编辑是指C语言源程序的输入和修改。 2编译 源程序翻译成可重定位的二进制的目标程序。 3连接 目标程序和程序中用到的库函数连接装配在一起,形成可执行的目标程序。 4运行 连接后生成的可执行文件装入内存即可以运行,并输出运行结果。 如果在运行程序的过程中得不到预期的结果,就要重复进行编辑、编译、连接和运行 4个步骤

9、。 1.3.1 Turbo C集成环境的使用 1.3.2 程序调试方法 1设置和使用观察变量 2单步执行程序 3设置和使用断点 设置断点的步骤如下。 (1)在编辑窗口将光标移到欲设置断点一行上。 (2)选择“Break/Watch”“Toggle breakpoint”命令或按Ctrl+F8组合键,被设置断点的一行呈高亮度显示。 (3)要设多个断点,可以重复步骤(1)、(2),断点所在的行均呈高亮度显示。 (4)如果要删除断点,将光标移到欲删除断点所在行,选择“Break/Watch”“Toggle breakpoint”命令或按Ctrl+F8组合键即可。 标识符、常量和变量标识符、常量和变量

10、2.1简单数据类型简单数据类型2.2运算符和表达式运算符和表达式2.3案案 例例 分分 析析2.4 教学目标 掌握C语言的各种数据类型; 掌握常量、变量的定义; 掌握运算符及其各种运算,学会构建各种C语言表达式; 理解运算符及表达式的含义。2.1 标识符、常量和变量 2.1.1 标识符 标识符可用作变量名、符号名、函数名和数组名、文件名以及一些具有专门含义的名字。 组成:字母、数字和下划线。 合法的:pear,PI,sum,a_array,s2,P10 非法的标识符:365t,cade-y,www.,a&b 说明: 1、C语言中是区分大小写; 2、一般的计算机系统标识符的长度8个字符有效。 3

11、、不能和用户已编制的函数或C语言库函数同名。 C语言的标识符可以分为以下3类。 1关键字 2预定义标识符 3用户标识符 2.1.2 常量和变量 1常量常常量量类类型型整型整型实型实型 字符行字符行 字符串字符串 符号符号 【例2-1】计算圆面积。 #include stdio.h #define PI 3.14159 /*定义符号名PI为3.14159*/ main() float r, s; r=5.0; s=PI*r*r; printf(s=%fn, s); 运行结果为 s=78.539749 2变量 变量:其值可以改变的量。 变量名:以字母或下划线开头,由数字、字母、下划线构成。最多8个

12、字符 变量先定义、后使用,这样做的目的如下: (1)凡是未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。 (2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。 (3)每一变量属于一个类型,便于在编译时据此检查该变量所进行的运算是否合法。2.2 简单数据类型 2.2.1 整型数据 1整型常量 在C语言中,整型常量可以用十进制、八进制和十六进制形式来表示。 (1)十进制整数。 (2)八进制整数(数字0开头)。例如,010,011,016。 (3)十六进制整数。(数字0 x或大写字母X开头)。例如,0 x10,0 xde,0 xf。 2整型变量 (1)整型变量的分

13、类。 类型说明符类型说明符数数 的的 范范 围围分配字节数分配字节数intint327683276832767327672 2short intshort int327683276832767327672 2signed intsigned int327683276832767327672 2unsigned intunsigned int0 065535655352 2long intlong int21474836482147483648214748364721474836474 4unsigned longunsigned long0 0429496729542949672954 4表表

14、2-12-1 C C语言中整型量的内存字节数及表示范围语言中整型量的内存字节数及表示范围 (2)整型变量的定义。 int a, b;/*指定变量a,b为整型*/ 【例2-2】整型变量示例。 main() int a, b, c, d;/*指定a, b, c, d为整型变量*/ unsigned u;/*指定u为无符号整型变量*/ a=12; b=24; u=10; c=a+u; d=b+u; printf(a+u=%d, b+u=%dn, c, d); 运行结果为 a+u=22, b+u=14 2.2.2 实型数据 1实型常量 (1)十进制数形式。 (2)指数形式: 2.3026可以表示为0.

15、2306E1,2.3026e0,23.026e1。字母e(或E)之前必须要有数字,且e或E后面的指数必须为整数,在字母的前后以及数字之间不得插入空格。 2实型变量 float a, b, c;/*a,b,c为单精度实型量,4个字节,10381038,7位有效位*/ double x, y, z;/*x,y,z为双精度实型量,8个字节,1030810308,1516位有效位*/ 2.2.3 字符型数据 1字符常量 字符是按其所对应的ASCII值来存储的,一个字符占一个字节。例如,字符ASCII值(十进制)A为65,B为66,a为97,b为98。 字符常量是指用一对单引号括起来的一个字符,如a,8

16、,!。 a32;/*执行结果9732=65*/ A+32;/*执行结果65+32=97*/ 99;/*执行结果579=48*/ “转义字符”:是将反斜杠()后面的字符转变成其他意义。 字字 符符 形形 式式功功 能能字字 符符 形形 式式功功 能能nn换行换行ff走纸换页走纸换页tt横向跳格(即跳到下一横向跳格(即跳到下一个输出区)个输出区)反斜杠字符反斜杠字符“ ”vv竖向跳格竖向跳格单引号(撇号)字符单引号(撇号)字符bb退格退格dddddd1 13 3位八进制数所代表位八进制数所代表的字符的字符rr回车回车xhhxhh1 12 2位十六进制数所代位十六进制数所代表的字符表的字符表表2-2

17、2-2 C C语言中常用的转义字符语言中常用的转义字符 2字符串常量 字符串常量是一对双引号括起来的字符序列。例如: How are you?,TOM,¥23.45 a和a究竟有什么区别:a是字符常量,a是字符串常量。0字符是系统自动加上的。 “a” a0a a a00a a 3字符变量 形式如下: char c1, c2; 它表示c1和c2为字符变量,各放一个字符。因此可以用下面的语句对c1,c2赋值: c1=a; c2=b; 【例2-3】字符变量示例1。 main() char c1, c2; c1=97; c2=98; printf(%c, %c, c1, c2); 运行结果为 a, b

18、 【例2-4】字符变量示例2。 main() char c1, c2; c1=a; c2=b; c1=c132; c2=c232; printf(%c%c, c1, c2); 运行结果为 A B 它的作用是将两个小写字母转换为大写字母。a的ASCII值为97,而A的ASCII值为65,b的ASCII值为98,B的ASCII值为66。从ASCII表中可以看到每一个小写字母比大写字母的ASCII值大32,即a=A+32。2.3 运算符和表达式 2.3.1 算术运算符及其表达式 1基本的算术运算符 +、*、/、% 说明: (1)双目运算符两边运算数的类型必须一致才能进行操作。所得结果的类型与运算数的

19、类型一致。例如1.0/2.0,其运算结果为0.5;1/2,其运算结果为0。 (2)如果双目运算符两边运算数的类型不一致,如一边是整型数,一边是实型数时,系统将自动把整型转换为实型数,使运算符两边的类型达到一致后,再进行运算。 (3)在C语言中,所有实型数的运算均以双精度方式进行。若是单精度数,则在尾数部分补0,使之转化为双精度数。 2运算符的优先级、结合性和算术表达式 (1)算术运算符的优先级。 ()、+(单目)、(单目)、*、/、%、+、 (2)算术运算符和圆括号的结合性。 以上所列的运算符中,只有单目运算符“”和“+”的结合性是从右到左,其余运算符的结合性都是从左到右。 (3)算术表达式。

20、 用算术运算符和一对圆括号将运算量(或称操作数)连接起来的,符合C语法的表达式称为算术表达式。 在计算机语言中,算术表达式求值规律与数学中的四则运算的规律类似,其运算规则和要求如下。 在算术表达式中,可使用多层圆括号,但左右括号必须配对。运算时从内层圆括号开始,由内向外依次计算表达式的值。 在算术表达式中,若包含不同优先级的运算符,则按运算符的优先级别由高到低进行,若表达式中运算符的级别相同,则按运算符的结合方向进行。例如表达式a+bc,因为加号和减号的优先级相同,它们的结合性为从左到右,因此先计算a+b,然后把所得结果减去c。 2.3.2 自加、自减运算符 1自加运算符(+)和自减运算符()

21、i+, + i 相当于i=i+1;i,-i相当于i=i1。 +i和i是在使用i之前,先使i的值加1或减1;而i+和i则是在使用i之后,使i的值加1或减1。 j=+i; j的值为6 j=i+; j的值为5,然后i变为6。 2+和在表达式中使用说明 (1)n=(m+)+(m+)+(m+)先对m进行相加,然后m三次自加 q=(+p)+(+p)+(+p)先对p进行三次自加,然后相加 (2)单目运算右结合性 s=q+p: 即s=(q+)+p,q运行后加1 2.3.3 赋值运算符与赋值表达式 1简单赋值运算符和表达式 x=10/*将10赋给变量x*/ y=3*x+5*a/*将表达式之值赋给变量y*/ a=

22、b=c=5 等价 a=(b=(c=5) x=y=3*z/w 型换成左边的类型。具体规定如下。 (1)实型赋予整型: 舍去小数部分。 (2)整型赋予实型: 数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。 (3)字符型赋予整型: 由于字符型为一个字节,而整型为两个字节,故将字符的ASCII值放到整型量的低8位中,高8位为0。 (4)整型赋予字符型: 只把低8位赋予字符量。 赋值运算符优先级低于算术运算符、关系运算符和逻辑运算符,例如: x=6y 先求关系表达式6y的值0或1,再将其值赋给变量x。 2复合赋值运算符 复合的运算符:在赋值符“=”之前加上其他运算符。C有10种。 它

23、们是: +=、=、*=、/=、%=(与算术运算符组合) =(与位移运算符组合) &=、=、|=(与位逻辑运算符组合) 例如: x+=a+y*3 等价于 x=x+(a+y*3) 若a的初值为12,则a+=a=a*a 的求解步骤是怎样的呢?其求解过程如下。 (1)先进行a=a*a的运算,它相当于a=aa*a=12144=132。 (2)再进行a+=132的运算,它相当于a=a+(132)= 132132=264。 2.3.4 关系运算符和逻辑运算符 关系运算符是比较两个操作数大小的符号。逻辑运算符是对逻辑量进行操作的运算符。使用关系或逻辑运算符的表达式结果只有“真”和“假”,它们分别用“1或非0”

24、和“0”表示。 1逻辑运算符 操作符操作符作用作用操作符操作符作用作用&逻辑与逻辑与!逻辑非逻辑非|逻辑或逻辑或表表2-32-3逻辑运算符逻辑运算符 2关系运算符操作符操作符作用作用操作符操作符作用作用大于大于= =小于等于小于等于= =大于等于大于等于=等于等于小于小于!= =不等于不等于表表2-42-4关系运算符关系运算符 2.3.5问号运算符及表达式 是三元运算符,其一般形式为 e1? e2 :e3 规则是:当表达式e1的值为“真”时,结果取e2的值;否则,结果取e3的值。注意冒号的用法和位置。例如: x=10; y=x9?100:200; 例中,赋给y的数值是100,如果x被赋给比9小

25、的值,y的值将为200 2.3.6 不同类型数据间的转换 强制类型转换表达式的形式如下: (类型名) (表达式) 例如: (int)3.234 把3.234转换成整数3。 【例2-5】强制类型转换示例。 main() char c1, c2; c1=a; c2=b; c1=c132; c2=c232; printf(%c%c, c1, c2); 运行结果为 x=3.140000, i=3 x类型仍为float型,值仍等于3.14。 2.3.7 逗号运算符及其表达式 形式为 表达式1, 表达式2, , 表达式n 它按从左到右的顺序执行组成逗号表达式的各表达式,而将最后一个表达式(即表达式 n)的

26、值作为逗号表达式的值。 【例2-6】逗号运算符示例。 main() int x, y; x=50; y=(x=x5, x/5); printf(x=%d, y=%d, x, y); 运行结果为 x=45, y=9 说明: (1)逗号运算符的结合性为从左到右,例如(i=5, i+, +i, i+5),这个逗号表达式的值是12,i的值为7。 (2)在所有运算符中,逗号运算符的优先级别最低。 因此,下面两个表达式的作用是不同的: x=(a=3, 6*3) x=a=3, 6*a printf(%d, %d, %d, (a, b, c), b, c); 2.3.8 运算符的优先顺序 优先级优先级运算符运

27、算符名称或含义名称或含义使使 用用 形形 式式结结 合合 方方 向向说明说明1 1()()圆括号圆括号(表达式)(表达式)/ /函数名(形函数名(形参表)参表)左到右左到右负号运算符负号运算符表达式表达式右到左右到左单目运算符单目运算符+自增运算符自增运算符+变量名变量名/ /变量名变量名+单目运算符单目运算符 自减运算符自减运算符 变量名变量名/ /变量名变量名 单目运算符单目运算符* *取值运算符取值运算符* *指针变量指针变量单目运算符单目运算符!逻辑非运算符逻辑非运算符!表达式!表达式单目运算符单目运算符按位取反运算按位取反运算符符表达式表达式单目运算符单目运算符表表2-5 2-5 常

28、用运算符优先顺序常用运算符优先顺序 优先级优先级运算符运算符名称或含义名称或含义使使 用用 形形 式式结结 合合 方方 向向说明说明/ /除除表达式表达式/ /表达式表达式左到右左到右双目运算符双目运算符* *乘乘表达式表达式* *表达式表达式双目运算符双目运算符% %余数(取模)余数(取模)整型表达式整型表达式/ /整型表达式整型表达式双目运算符双目运算符+ +加加表达式表达式+ +表达式表达式左到右左到右双目运算符双目运算符减减表达式表达式表达式表达式双目运算符双目运算符大于大于表达式表达式表达式表达式左到右左到右双目运算符双目运算符= =大于等于大于等于表达式表达式= =表达式表达式双目

29、运算符双目运算符小于小于表达式表达式表达式表达式双目运算符双目运算符= =小于等于小于等于表达式表达式= =表达式表达式双目运算符双目运算符续表续表 =等于等于表达式表达式=表达式表达式左到右左到右双目运算符双目运算符!= =不等于不等于表达式!表达式!= = 表达式表达式双目运算符双目运算符7 7& &按位与按位与表达式表达式& &表达式表达式左到右左到右双目运算符双目运算符8 8 按位异或按位异或表达式表达式 表达式表达式左到右左到右双目运算符双目运算符9 9| |按位或按位或表达式表达式| |表达式表达式左到右左到右双目运算符双目运算符1010&逻辑与逻辑与表达式表达式&表达式表达式左到

30、右左到右双目运算符双目运算符1111|逻辑或逻辑或表达式表达式|表达式表达式左到右左到右双目运算符双目运算符1212?:?:条件运算符条件运算符表达式表达式1 1?表达式?表达式2 2:表达:表达式式3 3右到左右到左三目运算符三目运算符1313,逗号运算符逗号运算符表达式表达式, , 表达式表达式, , 左到右左到右续表续表2.4 案 例 分 析 【案例1】若给出以下程序和,判断它们的输出为 。 #include main() int a=4, b=7; printf(%dn, (a=a+1, b+a, b+1); #include main() int a=1, b=2; printf(%

31、dn, a=a+1, a+b, b+1); A输出5 B输出8 输出2 输出2 C输出5 中printf函数调用语句的输出项包含了a=a+1形式,不合法 D中printf函数调用语句的格式描述符不够,输出无定值 输出2 分析:通过本例,读者应当弄清C语言中逗号运算符和逗号表达式的特点。 在C语言中,允许用逗号运算符把两个或多个表达式连接起来形成一个逗号表达式,表达式的求值顺序是自左至右,并以最右边表达式的结果作为整个逗号表达式的结果。需要注意的是,并非在C程序中任何地方出现的逗号都是作为逗号运算符。 例如,本题程序1中的printf语句的输出项(a=a+1, b+a, b+1)是一个逗号表达式

32、,它的值应当等于最后一个表达式b+1的结果,即等于8。而程序中printf语句的输出项a=a+1, a+b, b+1不是逗号表达式,而是以逗号分隔的3个表达式,其中第一个表达式a=a+1称做赋值表达式。 由于本语句中只给出了一个格式描述符%d,因此只能输出第一个表达式a=a+1的值,即输出2。 由以上分析可知,本题的正确答案为B。 【案例2】已知字母a的ASCII十进制代码为97,则执行以下语句后的输出为 。 char a=a; a-; printf(%d, %cn, a+20, a+3 0); Ab, c Ba-运算不合法,故有语法错 C98,c D格式描述和输出项不匹配,输出无定值 分析:

33、C语言规定,所有字符常量都可以作为整型常量来处理,因而字符常量也可参与算术运算。本题中字符变量a的初值为字符a,其对应的整数值就是a的ASCII十进制代码97。 经过自减运算a 后,变量a所对应的整数值为96。虽然题中未给出字符2和0的ASCII值,但读者应当知道20是将字符2转换成整数2的表达式,故a+2 0的值为98。 同理可知,第二个输出项相当于算术表达式96+3,其值为99。按照题中所给定的格式描述符,第一个输出项应当以%d格式输出98;第二个输出项应当以%c格式输出字符,已知a的ASCII值为97,故不难推出99的对应字符应该是字母c。 【案例3】以下程序的输出为 。 #includ

34、e main() int m=7, n=4; float a=38.4, b=6.4, x; x=m/2+n*a/b+1/2; printf(%fn, x); A27.000000 B27.500000 C28.000000 D28.500000 分析:本题的关键是正确计算混合类型运算表达式的值。题中表达式m/2+n*a/b+1/2的运算顺序为:进行整除运算,计算出m/2(即7/2)的值是3;计算n*a,先把n值转换成实型,然后求出乘积为153.6; 将该乘积与b相除,得到的运算结果为实型数24.0;得到1/2的整除结果为0;整数3被转换成3.0,与24.0相加,结果为27.0; 将整数0转换

35、成0.0与27.0相加,得到表达式的最终结果为27.0。 因此,本题答案是A。 【案例4】分析下列程序的输出结果。 # include void main() int y=6; printf(%dn, +y); printf(%dn, y); printf(%dn, y+); printf(%dn, y); printf(%dn, y+); printf(%dn, y); 分析:输出语句1中的+y,是在y=6的基础上先自加1后输出,即y=7;输出语句2中的y,是在y=7的基础上先自减1后输出,即y=6;输出语句3中的y +,是在y=6的基础上先输出后自加1,即输出时y=6,输出后y=7; 输出

36、语句4中的+y,是在y=7的基础上先输出后自减1,即输出时y=7,输出后y=6;输出语句5中的y+,负号运算符优先于自加运算符+,先输出取负之后的值,再将其值自加,即输出时y=6,输出后y=7; 输出语句6中的y,负号运算符-优先于自减运算符,先输出取负之后的值,再将其值自减,即输出时y=7,输出后y=6。 运行结果为 7 6 6 7 6 7 算法算法3.1结构化程序设计结构化程序设计3.2案案 例例 分分 析析3.5 C C语言中数据的输入输出语言中数据的输入输出3.4 C C语言基本语句语言基本语句3.3 教学目标 了解算法的有关知识; 掌握C语言的基本语句; 熟练输入输出函数的使用; 掌

37、握顺序结构。3.1 算法 3.1.1算法的概念 【例3-1】输入3个数,求其最大值。 问题分析:设num1,num2,num3存放3个数,max存放其最大值。 为求最大值,就必须对3个数进行比较,可按如下步骤进行。 (1)输入3个数num1,num2,num3。 (2)先把第1个数num1的值赋给max。 (3)将第2个数num2与max比较,如果num2max,则把第2个数num2的值赋给max(否则不做任何工作)。 (4)将第3个数num3与max比较,如果num3max,则把第3个数num3的值赋给max(否则不做任何工作)。 (5)输出max的值,即最大值。 算法特性: (1)有穷性。

38、 (2)确定性。 (3)有效性。 (4)有零个或多个输入。 (5)有一个或多个输出。 3.1.2 算法的描述 自然语言、传统流程图、N-S结构图、伪代码、PAD图等。 1自然语言 自然语言就是人们日常使用的语言。 2传统流程图 符号符号符符 号号 名名 称称含义含义起止框起止框表示算法的开始和结束表示算法的开始和结束输入输入/ /输出框输出框表示输入表示输入/ /输出操作输出操作处理框处理框表示对框内的内容进行处理表示对框内的内容进行处理表表3-13-1 传统流程图常用的符号传统流程图常用的符号 判断框判断框表示对框内的条件进行判断表示对框内的条件进行判断流程线流程线表示流程的方向表示流程的方

39、向连接点连接点表示两个具有同一标记的表示两个具有同一标记的“连连接点接点”应连接成一个点应连接成一个点注释框注释框表示注释说明表示注释说明 3N-S结构图 1973年提出一种新的结构化流程图形式,即简称为N-S结构图。 特点:是完全取消了流程线,不允许有随意的控制流,全部算法写在一个矩形框内,该矩形框以3种基本结构(顺序、选择和循环)描述符号为基本,复合而成。3.2 结构化程序设计 3.2.1 基本结构 结构化程序由如下3种基本结构组成。 1顺序结构图3-1 顺序结构 图3-1(a)传统流程图表示的顺序结构 图3-1(b)N-S结构图表示的顺序结构 (a) 处理 A 处理 B 处理 A 处理

40、B (b) 图图3-1 3-1 顺序结构顺序结构 2选择结构 如图3-2所示。 条件 处理 A 处理 B 条件 成立 不成立 处理 A 处理 B (a) (b) 图图3-2 3-2 选择结构选择结构 3循环结构 循环结构一般分为当型循环和直到型循环。 (1)当型循环。 在当型循结构中,当逻辑条件成立时,就反复执行处理A(称为循环体),直到逻辑条件不成立时结束,如图3-3所示。 真 假 条件 处理 A 当条件成立时继续 处理 A (a) (b) 图图3-3 3-3 当型循环当型循环 (2)直到型循环。 在直到型循环结构中,反复执行处理A,直到逻辑条件不成立时结束,如图3-4所示。 真 假 条件

41、处理 A (a) (b) 处理 A 直到条件不成立时结束 图图3-4 3-4 直到型循环直到型循环 3.2.2 程序设计举例 【例3-3】用传统流程图和N-S结构图来描述例3-1,求3个数中最大值的算法。 用N-S结构图来描述如图3-5所示。 用传统流程图描述如图3-6所示。 图图3-5 3-5 例例3-3N-S3-3N-S结构图结构图 图图3-6 3-6 例例3-33-3传统流程图传统流程图 【例3-4】求5!的值(即12345的值),设计一个算法,分别用自然语言、传统流程图及N-S结构图来表示出来。 为了解决该问题,可以设两个变量,变量p代表被乘数,变量i代表乘数,用循环算法来求结果。用自

42、然语言表示该算法如下。 (1)使p=1。 (2)使i=2。 (3)使pi,乘积仍放在变量p中,可表示为pip。 (4)使i的值加1,即i+1i。 (5)如果i不大于5,返回重新执行步骤(3)以及其后步骤(4)、(5);否则,算法结束。 最后得到p的值就是5!的值。 此算法用传统流程图表示如图3-7所示,用N-S结构图表示如图3-8所示。 图图3-7 3-7 例例3-43-4传统流程图传统流程图 图图3-8 3-8 例例3-4N-S3-4N-S结构图结构图 3.3 C语言基本语句 分为4类,分别是声明语句、表达式语句、复合语句和流程控制语句。 1声明语句 int x; char ch15; vo

43、id fun(int n); 注意:声明语句写在其他语句的前面。 2表达式语句 表达式; 表达式语句可分为赋值语句、函数调用语句和空语句3种基本类型。 (1)赋值语句: a=3; (2)函数调用语句: printf(This is a C program.); (3)空语句: “;”。 3复合语句 x=y+z; a=b+c; printf(%d %d, x, a); 4控制语句 语句语句名称名称语句语句名称名称If()If()elseelse条件语句条件语句breakbreak中止执行中止执行switchswitch或循环语句或循环语句For()For()循环语句循环语句switchswitc

44、h多分支选择语句多分支选择语句while()while()循环语句循环语句gotogoto转向语句转向语句dodowhile()while()循环语句循环语句returnreturn从函数返回语句从函数返回语句continuecontinue结束本次循环语句结束本次循环语句表表3-23-2 C C语言的控制语句语言的控制语句3.4 C语言中数据的输入输出 3.4.1 格式输入与输出 1printf函数(格式输出函数) (1)形式为 printf(格式控制字符串, 输出表列) 【例3-5】printf函数的一般形式示例。 int a=88, b=89; printf(%d %dn, a, b);

45、 printf(%d, %dn, a, b); printf(%c, %cn, a, b); printf(a=%d, b=%d, a, b); 运行结果为 88 89 88, 89 X, Y a=88, b=89 (2)格式字符串。 在C中格式字符串的一般形式为 %修饰符格式符 格格 式式 字字 符符意义意义举例举例输输 出出 结结 果果d d以十进制形式输出以十进制形式输出带符号整数(正数带符号整数(正数不输出符号)不输出符号)int a=567;int a=567;printf(%d, a);printf(%d, a);567567o o以八进制形式输出以八进制形式输出无符号整数(不输无

46、符号整数(不输出前缀出前缀0 0)int a=65;int a=65;printf(%o, a);printf(%o, a);101101X X(或(或X X)以十六进制形式输以十六进制形式输出无符号整数(不出无符号整数(不输出前缀输出前缀0 x0 x)int a=255;int a=255;printf(%x, a);printf(%x, a);ffffu u以十进制形式输出以十进制形式输出无符号整数无符号整数int a=567;int a=567;printf(%u, a);printf(%u, a);567567表表3-33-3 printf printf格式符格式符 f f以小数形式输

47、出单、双以小数形式输出单、双精度实数精度实数float a=567.789;float a=567.789;printf(%fprintf(%f, a);, a);567.789000567.789000E E(或(或E E)以指数形式输出单、双以指数形式输出单、双精度实数精度实数float a=567.789;float a=567.789;printf(%eprintf(%e, a);, a);5.677890e+025.677890e+02g g,G G以以%f%f或或%e%e中较短的输出中较短的输出宽度输出单、双精度实宽度输出单、双精度实数数float a=567.789;float

48、a=567.789;printf(%gprintf(%g, a);, a);567.789567.789c c输出单个字符输出单个字符char a= A;char a= A;printf(%cprintf(%c, a);, a);A As s输出字符串输出字符串printf(%sprintf(%s, , abcdeabcde););abcdeabcde% %输出输出% %printfprintf(%);(%);% % (3)修饰符。 不能单独使用,必须与格式符连用,对输出格式进行修饰。 标志标志意义意义结果左对齐,右边填空格结果左对齐,右边填空格+ +输出符号(正号或负号)输出符号(正号或负号

49、)# #对对o o类,在输出时加前缀类,在输出时加前缀o o;对对x x类,在输出时加前缀类,在输出时加前缀0 x0 x表表3-43-4修饰符及其作用修饰符及其作用 标志标志意义意义l l在在d d,o o,x x,u u前,指定输出精度为前,指定输出精度为longlong型型在在e e,f f,g g前,指定输出精度为前,指定输出精度为doubledouble型型m m输出数据域宽,数据长度输出数据域宽,数据长度m m,左补空格,否则,左补空格,否则按原样输出按原样输出.n.n对实数指定小数点后的位数,多则四舍五入对实数指定小数点后的位数,多则四舍五入对字符串指定输出位数对字符串指定输出位数

50、续表续表 【例3-6】修饰符示例。 main() int a=15; float b=123.1234567; double c=12345678.1234567; char d= p; printf(a=%d, %5d, %o, %xn, a, a, a, a); printf(b=%f, %lf, %5.4lf, %en, b, b, b, b); printf(c=%lf, %f, %8.4lfn, c, c, c); printf(d=%c, %8cn, d, d); 运行结果为 a=15, 15, 17, f b=123.123459, 123459, 123.1235, 1.231

51、23e+02 c=12345678.123457, 12345678.123457, 12345678.1235 d=p, p 【例3-7】printf函数输出表列求值顺序1。 main() int i=8; printf(%dn%dn%dn%dn%dn%dn, +i, i, i+, i, i+, i); 运行结果为 8 7 7 8 7 8 【例3-8】printf函数输出表列求值顺序2。 main() int i=8; printf(%dn, +i); printf(%dn, i); printf(%dn, i+); printf(%dn, i); printf(%dn, i+); prin

52、tf(%dn, i); 运行结果为 9 8 8 9 8 9 2scanf函数(格式输入函数) (1)形式为 scanf(格式控制字符串, 地址表列); 地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。 例如: &a, &b /*分别表示变量a和变量b的地址。*/ 【例3-9】scanf函数的一般形式示例。 main() int a, b, c; printf(input a, b, cn); /*在输入前,输出一个提示*/ scanf(%d%d%d, &a, &b, &c); printf(a=%d, b=%d, c=%d, a, b, c); 7 8 9 或 7 8 9

53、 (2)格式字符串形式为 %*输入数据宽度长度格式符 格式符:表示输入数据的类型,其格式符和意义如表3-5所示。 格式格式字字 符符 意意 义义格式格式字字 符符 意意 义义d d输入十进制整数输入十进制整数F F(或(或e e)输入实型数(用小输入实型数(用小数形式或指数形式)数形式或指数形式)o o输入八进制整数输入八进制整数c c输入单个字符输入单个字符x x输入十六进制整数输入十六进制整数s s输入字符串输入字符串u u输入无符号十进制输入无符号十进制整数整数表表3-53-5scanfscanf格式符格式符 修饰符: “*”符:例如: Scanf(%d %*d %d, &a, &b);

54、 当输入为1 2 3时,把1赋予a,2被跳过,3赋予b。 宽度: scanf(%5d, &a); 当输入为12345678时,只把12345赋予变量a,其余部分被截去。 scanf(%4d%4d, &a, &b); 当输入为12345678时,将把1234赋予a,而把5678赋予b。 长度: l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。 例如: long x;double y; scanf(%ld%lf, &x, &y); 使用scanf函数注意以下问题 (1)scanf函数中没有精度控制, scanf(%5.2f, &a);是非法的。 (2)scanf中要求给出变量地址,如给

55、出变量名则会出错。例如 scanf(%d, a);是非法的,应改为scnaf(%d, &a);才是合法的。 (3)在输入多个数值数据时,若格式控制串中没有非格式字符作为输入数据之间的间隔则可用空格键、TAB键或Enter键作为间隔。C编译在碰到空格键、TAB、Enter键或非法数据(例如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 (4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 例如: scanf(%c%c%c, &a, &b, &c); 输入为 d e f 则把d赋予a, 赋予b,e赋予c。 只有当输入为 def 才能把d赋予a,e

56、赋予b,f 赋予c。 如果在格式控制中加入空格作为间隔,例如: Scanf (%c %c %c, &a, &b, &c); 则输入时各数据之间可加空格。 【例3-10】scanf函数应用示例1。 main() char a, b; printf(input character a, bn); scanf(%c%c, &a, &b); printf(%c%cn, a, b); 由于scanf函数的“%c%c”中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符。 【例3-11】scanf函数应用示例2。 main() char a, b; printf(input char

57、acter a, bn); scanf(%c %c, &a, &b); printf(n%c%cn, a, b); 本例表示scanf格式控制串“%c %c”之间有空格时,输入的数据之间可以有空格间隔。 (5)如果格式控制串中有非格式字符则输入时,也要输入该非格式字符。 scanf(%d, %d, %d, &a, &b, &c); 输入时应为 5, 6, 7 (6)如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。 【例3-12】scanf函数应用示例3。 main() int a; printf(input a numbern); scanf(%d, &a); printf

58、(%ld, a); 运行结果为 input a number 123 8061051 【例3-13】scanf函数应用示例4。 main() long a; printf(input a long integern); scanf(%ld, &a); printf(%ld, a); 运行结果为 input a long integer 1234567890 1234567890 本例当输入数据改为长整型后,输入输出数据相等。 【例3-14】scanf函数应用示例5。 main() char a, b, c; printf(input character a, b, cn); scanf(%c

59、%c %c, &a, &b, &c); printf(%d, %d, %dn%c, %c, %cn, a, b, c, a32, b32, c32); 本例输入3个小写字母,输出其ASCII值和对应的大写字母。 【例3-15】scanf函数应用示例6。 main() int a; long b; float f; double d; char c; printf(nint:%dnlong:%dnfloat:%dndouble:%dnchar:%dn, sizeof(a), sizeof(b), sizeof(f), sizeof(d), sizeof(c); 本例输出各种数据类型的字节长度。

60、3.4.2 字符数据的输入输出 1putchar 函数(字符输出函数) 形式为 putchar(字符变量) 例如: putchar(A); (输出大写字母A) putchar(x); (输出字符变量x的值) 使用本函数前必须要用文件包含命令: #include或#include stdio.h 【例3-16】输出单个字符。 #include main() char a=B, b=o, c=k; putchar(a);putchar(b);putchar(b);putchar(c);putchar(t); putchar(a);putchar(b); putchar(n); putchar(b)

温馨提示

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

评论

0/150

提交评论