表1-16sanf格式字符 格式字符 含义 来输入十进制整数 x(或%X) 来输入无符号十六进制整数(大小写作用相同) 用来输入无符号八进制整数 用来输入无符号十进制整数 r‰e‰%%G用来输入实数,可以用小数形式或指数形式输入(作用相同) 用来输入单个字符 用来输入字符串,并将字符串送到一个字符数组中。输入时以非 空白字符开始,以第一个空白字符结束,并在最后加一个W作 结束标志 表1-17 scanf I的附加格式说明符 附加格式说明符 含义 字母h 用于输入短整型数据(可用%hd,%ho,%hx) 字母1 用于输入长整型数据(可用%d,%lo,%x)以及 double型数据(可 用%f或%e) m(正整数)指定输入数据所占宽度(列数) 表示本输入项在读入后不赋给相应的变量 说明: (1)可以指定输入数据所占列数,系统自动按它截取所需数据 如: int a, b;cha canf("%3d%3c%3d",&a,&c,&b); 输入:123ABC456后,a=123,b=456,c=A (2)如果%后有附加格式说明符“*”,表示跳过它指定的列数 tu: scanf( "%3d%*3c%2d", &a, &b) 输入:123456789后,a=123,b=78(456被跳过)。 在利用现有的一批数据时,有时不需要其中某些数据,可用此方法“跳 过”它们 (3)输入实型数据时可以指定数据的宽度,但不能规定数据的精度 例如, scanf("%52f,&a),是不合法的 3.使用 scanf函数应当注意的问题 (1)如果在“格式控制”字符串中除了格式说明以外还有其它字符,则 在输入数据时在对应位置应输入这些字符。例如: scanf("od,%d,%d",&a,&b&c),应当输入3,4,5:不能输入345。 canf("%d:%d:%d",&h&m,&s)应当输入12:23:36
26 表 1-16 scanf 格式字符 格式字符 含 义 %d(或%i) 用来输入十进制整数 %x(或%X) 用来输入无符号十六进制整数(大小写作用相同) %o 用来输入无符号八进制整数 %u 用来输入无符号十进制整数 %f, %e, %E, %g, %G 用来输入实数,可以用小数形式或指数形式输入(作用相同) %c 用来输入单个字符 %s 用来输入字符串,并将字符串送到一个字符数组中。输入时以非 空白字符开始,以第一个空白字符结束,并在最后加一个'\0'作为 结束标志 表 1-17 scanf 的附加格式说明符 附加格式说明符 含 义 字母 h 用于输入短整型数据(可用%hd,%ho,%hx) 字母 l 用于输入长整型数据(可用%ld,%lo,%lx)以及 double 型数据(可 用%lf 或%le) m(正整数) 指定输入数据所占宽度(列数) * 表示本输入项在读入后不赋给相应的变量 说明: ⑴ 可以指定输入数据所占列数,系统自动按它截取所需数据。 如:int a,b; char c; scanf("%3d%3c%3d",&a,&c,&b); 输入:123ABC456↙后,a=123,b=456,c='A'。 ⑵ 如果%后有附加格式说明符“*”,表示跳过它指定的列数。 如:scanf("%3d%*3c%2d",&a,&b); 输入:123456789↙后,a=123,b=78(456 被跳过)。 在利用现有的一批数据时,有时不需要其中某些数据,可用此方法“跳 过”它们。 ⑶ 输入实型数据时可以指定数据的宽度,但不能规定数据的精度。 例如,scanf("%5.2f",&a); 是不合法的。 3. 使用 scanf 函数应当注意的问题 ⑴ 如果在“格式控制”字符串中除了格式说明以外还有其它字符,则 在输入数据时在对应位置应输入这些字符。例如: scanf("%d,%d,%d",&a,&b,&c); 应当输入 3,4,5;不能输入 3 4 5。 scanf("%d:%d:%d",&h,&m,&s); 应当输入 12:23:36
scanf("a=%db=%d,c=%od",&a&b&c),应当输入a=1,b=2,c=3(太罗嗦)。 因此建议在“格式控制”字符串不要使用其它字符 (2)在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符 输入。%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。 对于 scanf("%c%c%oc",&cl,&c2,&c3), 输入:abc后,cl=a',c2=',c3=b'。 (3)输入数据时,遇到下列情况之一认为该数据结束 ◇遇到空格,或回车键或跳格键(Tab) ◆满足指定的宽度 今遇到非法的输入。 如:inta, float b, char c; 输入:1234a1230.26<CR>后,a=1234,c=a,b=123.0(而不是希望的1230.26)。 总之,C语言的格式输入输出的规定比较繁琐,重点掌握最常用的一些 用法即可,其它部分可在需要时随时查阅 1.7算法 17.1算法的概念及特性 1.算法 前面我们已经介绍了算法的基本概念,现在我们对算法进行进一步的 讨论。一般来说,不同的工作,采用的方法和步骤也不同。对于同一个问题 可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而 言,应当选择简单的、运算步骤少的,运算快、内存开销小的算法。 2.算法的五大特性 (1)有穷性:一个算法应当“在合理范围之内”的有限步骤内结束,而 不能是无限的:同时应当在执行一定数量的步骤后,算法结束,不能死循环。 (2)确定性:算法中的每一个步骤都不应当产生歧义,其含义应当是确 定的。例如:“将成绩优秀的同学名单打印输出”就是有歧义的,“成绩优秀” 的含义不明确 (3)有0个或多个输入:所谓输入是指算法执行时从外界获取必要的 信息(可以是从键盘输入的数据,也可以是其它部分传递给算法的数据)。 一个算法可以没有输入,也可以有输入 4)有1个或多个输出:即算法必须得到结果,没有结果的算法是没有 意义的(结果可以显示在屏幕上,也可以传递给程序的其它部分或文件)。 (5)有效性:算法的每个步骤都应当能有效执行,并能得到确定的结果
27 scanf("a=%d,b=%d,c=%d",&a,&b,&c); 应当输入 a=1,b=2,c=3(太罗嗦)。 因此建议在“格式控制”字符串不要使用其它字符。 ⑵ 在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符 输入。%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔。 对于 scanf("%c%c%c",&c1,&c2,&c3); 输入:a b c 后,c1='a',c2=' ',c3='b'。 ⑶ 输入数据时,遇到下列情况之一认为该数据结束: 遇到空格,或回车键或跳格键(Tab)。 满足指定的宽度。 遇到非法的输入。 如:int a; float b; char c; scanf("%d%c%f",&a,&c,&b); 输入:1234a123o.26<CR>后,a=1234,c='a',b=123.0(而不是希望的 1230.26)。 总之,C 语言的格式输入输出的规定比较繁琐,重点掌握最常用的一些 用法即可,其它部分可在需要时随时查阅。 1.7 算法 1.7.1 算法的概念及特性 1. 算法 前面我们已经介绍了算法的基本概念,现在我们对算法进行进一步的 讨论。一般来说,不同的工作,采用的方法和步骤也不同。对于同一个问题 可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而 言,应当选择简单的、运算步骤少的,运算快、内存开销小的算法。 2. 算法的五大特性 ⑴ 有穷性:一个算法应当“在合理范围之内”的有限步骤内结束,而 不能是无限的;同时应当在执行一定数量的步骤后,算法结束,不能死循环。 ⑵ 确定性:算法中的每一个步骤都不应当产生歧义,其含义应当是确 定的。例如:“将成绩优秀的同学名单打印输出”就是有歧义的,“成绩优秀” 的含义不明确。 ⑶ 有 0 个或多个输入: 所谓输入是指算法执行时从外界获取必要的 信息(可以是从键盘输入的数据,也可以是其它部分传递给算法的数据)。 一个算法可以没有输入,也可以有输入。 ⑷ 有 1 个或多个输出:即算法必须得到结果,没有结果的算法是没有 意义的(结果可以显示在屏幕上,也可以传递给程序的其它部分或文件)。 ⑸ 有效性:算法的每个步骤都应当能有效执行,并能得到确定的结果
例如:b=0,则a/b是不能有效执行的。 172算法的表示方法 描述算法有很多种方法,一般有自然语言、流程图、N-S图、伪代码、 程序语言等。最常见的是流程图和NS图,下面进行简单的介绍 1.流程图表示算法 流程图用一些图框表示各种操作,用箭头表示算法流程。这种用图形 表示算法的方法,直观形象,易于理解。 美国标准化协会ANSI规定了一些 起止框 常用的流程图符号,如图1.5所示,已 为世界各国程序工作者普遍采用。 输入输出框 起止框:表示算法的开始和结束。 一般内部只写“开始”或“结束”。 处理框 输入输出框:表示算法请求输入需 要的数据或算法将某些结果输出。一般 判断框 内部常常填写“输入….”或“打印/显 流程线 处理框:表示算法的某个处理步骤 一般内部常常填写赋值操作。 连接点 菱形框(判断框):作用是对一个给 定条件进行判断,并根据给定的条件是 注释框 否成立来决定如何执行其后的操作。它 图15常用流程图符号 有一个入口,两个出口 连接点:用于将画在不同地方的流程线连接起来。同一个编号的点是 相互连接在一起的,实际上同一编号的点是同一个点,只是画不下才分开画。 注释框:注释框不是流程图中必须的部分,不反映流程和操作,它只 是对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的人更好 地理解流程图的作用 C语言是一种结构化程序设计语言,结构化程序设计是20世纪60年代 末被提出来的,主要采用自上而下、逐步细化的方法。结构化程序有三种基 本结构 (1)顺序结构:最简单的一种基本结构,自顶向下、自左向右顺序地执 行程序中的每一条语句 (2)选择结构:也称为分支结构,当判断表达式为真时,执行语句A; 否则执行语句B (3)循环结构:分为当型循环和直到型循环。当型循环结构的特点是, 当判断表达式为真时,执行循环体;否则退出循环。直到型循环结构的特点
28 例如:b=0,则 a/b 是不能有效执行的。 1.7.2 算法的表示方法 描述算法有很多种方法,一般有自然语言、流程图、N-S 图、伪代码、 程序语言等。最常见的是流程图和 N-S 图,下面进行简单的介绍。 1. 流程图表示算法 流程图用一些图框表示各种操作,用箭头表示算法流程。这种用图形 表示算法的方法,直观形象,易于理解。 美国标准化协会 ANSI 规定了一些 常用的流程图符号,如图 1.5 所示,已 为世界各国程序工作者普遍采用。 起止框:表示算法的开始和结束。 一般内部只写“开始”或“结束”。 输入输出框:表示算法请求输入需 要的数据或算法将某些结果输出。一般 内部常常填写“输入…”或“打印/显 示…”。 处理框:表示算法的某个处理步骤, 一般内部常常填写赋值操作。 菱形框(判断框):作用是对一个给 定条件进行判断,并根据给定的条件是 否成立来决定如何执行其后的操作。它 有一个入口,两个出口。 连接点:用于将画在不同地方的流程线连接起来。同一个编号的点是 相互连接在一起的,实际上同一编号的点是同一个点,只是画不下才分开画。 注释框:注释框不是流程图中必须的部分,不反映流程和操作,它只 是对流程图中某些框的操作做必要的补充说明,以帮助阅读流程图的人更好 地理解流程图的作用。 C 语言是一种结构化程序设计语言,结构化程序设计是 20 世纪 60 年代 末被提出来的,主要采用自上而下、逐步细化的方法。结构化程序有三种基 本结构: ⑴ 顺序结构:最简单的一种基本结构,自顶向下、自左向右顺序地执 行程序中的每一条语句。 ⑵ 选择结构:也称为分支结构,当判断表达式为真时,执行语句 A; 否则执行语句 B。 ⑶ 循环结构:分为当型循环和直到型循环。当型循环结构的特点是, 当判断表达式为真时,执行循环体;否则退出循环。直到型循环结构的特点 起止框 输入输出框 处理框 判断框 流程线 连接点 注释框 流程图符号 图 1.5 常用流程图符号
是,先执行循环体,直到判断条件表达式为假时,退出循环。 三种结构的流程图表示如图1.6所示 p选择条件 循环条件b 当型循环直到型循环 顺序结构 选择结构 循环结构 图1.6三种基本程序结构的流程图表示 由上述三种结构构成的程序称为结构化程序,也就是说,任何一个结 构化程序都可以分解为一个个基本结构。 用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑 关系,因此得到广泛使用。 2.NS流程图(盒图)表示算法 1973年美国学者 LAssi和B. Shneiderman提出了一种新的流程图形式, 称为N-S流程图。N-S图中,完全去掉了带箭头的流程线,每种结构用一个 矩形框表示 结构化程序设计的三种基本结构在N-S流程图中的表示方法如图17所 成立 成立 不成立 直到p成 当型循环 直到型循环 顺序结构 选择结构 循环结构 图17用NS流程图表达的三种基本程序结构 N-S流程图的符号含义如下: (1)顺序结构:先执行A操作,再执行B操作 (2)选择结构:当p条件成立时,执行A操作,当p条件不成立时,执 行B操作。A,B操作允许空操作,即什么都不做。注意选择结构是一个整 体,代表一个基本结构 (3)循环结构:a)当型循环:当条件p成立时,反复执行A操作,直 到p条件不成立为止。当型循环先判断,再决定是否执行循环体,所以在条 件p一次都不满足时,循环体A可能一次都不执行。b)直到型循环:当条 件p不成立时,反复执行A操作,直到p条件成立为止。直到型循环先执 行循环体A,然后再判断条件p,所以循环体至少执行一次
29 是,先执行循环体,直到判断条件表达式为假时,退出循环。 三种结构的流程图表示如图 1.6 所示。 由上述三种结构构成的程序称为结构化程序,也就是说,任何一个结 构化程序都可以分解为一个个基本结构。 用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑 关系,因此得到广泛使用。 2. N-S 流程图(盒图)表示算法 1973 年美国学者 I.Nassi 和 B.Shneiderman 提出了一种新的流程图形式, 称为 N-S 流程图。N-S 图中,完全去掉了带箭头的流程线,每种结构用一个 矩形框表示。 结构化程序设计的三种基本结构在N-S流程图中的表示方法如图1.7所 示。 图 1.7 用 N-S 流程图表达的三种基本程序结构 N-S 流程图的符号含义如下: ⑴ 顺序结构:先执行 A 操作,再执行 B 操作。 ⑵ 选择结构:当 p 条件成立时,执行 A 操作,当 p 条件不成立时,执 行 B 操作。A,B 操作允许空操作,即什么都不做。注意选择结构是一个整 体,代表一个基本结构。 ⑶ 循环结构:a) 当型循环:当条件 p 成立时,反复执行 A 操作,直 到 p 条件不成立为止。当型循环先判断,再决定是否执行循环体,所以在条 件 p 一次都不满足时,循环体 A 可能一次都不执行。b) 直到型循环:当条 件 p 不成立时,反复执行 A 操作,直到 p 条件成立为止。直到型循环先执 行循环体 A,然后再判断条件 p,所以循环体至少执行一次。 A B A B p 成立 不成立 当 p 成立 A 直到 p 成立 A 当型循环 直到型循环 顺序结构 选择结构 循环结构 A B 选择结构 p A B p A 顺序结构 p A 循环结构 p A N Y Y N 当型循环 直到型循环 a b a b a b a b a b p-选择条件 p-循环条件 Y N Y N 图 1.6 三种基本程序结构的流程图表示
般情况下,循环算法既可以用当型循环,也可以用直到型循环实现。 循环结构也是一个整体,同样也代表一个基本结构。 注意 种结构中的A、B框可以是一个简单的操作,也可以是3个基本结构 之一。也就是说基本结构可以嵌套, N-S流程图表示算法的优点 比文字描述更加直观、形象,易于理解:比传统的流程图紧凑易画 废除流程线,整个算法结构是由各个基本结构按顺序组成的。N-S流程图的 上下顺序就是执行时的顺序,N-S图表示的算法都是结构化的算法。 18c语言的产生、发展及特点 18.1C语言的产生及发展 C语言是国际上流行的、很有发展前途的计算机高级语言。C语言适合 于作为系统描述语言,它既可以用来编写系统软件,也可以用来编写应用软 件 以前操作系统等系统软件主要采用汇编语言编写。汇编语言依赖于计算 机硬件,程序的可读性、可移植性都比较差。为了提高可读性和可移植性 人们希望采用高级语言编写这些软件,但是一般的高级语言难以实现汇编语 言的某些操作,特别是针对硬件的一些操作(如:内存地址的读写,位操作 等)。人们设法寻找一种既具有一般高级语言特性,又具有低级语言特性的 语言,C语言就在这种情况下应运而生。 C语言的产生和发展经历了以下过程: ALGOL60→CPL→BCPC B→C→标准C→ ANSI C→ISOC (1) ALGOL60:一种面向问题的高级语言。 ALGOL60离硬件较远, 不适合编写系统程序 (2)CPL( Combined Programming Language,组合编程语言):CPL 是一种在 ALGOL60基础上更接近硬件的一种语言。CPL规模大,实现困 难 (3)BCPL( Basic Combined Programming language,基本的组合编程 语言):BCPL是对CPL进行简化后的一种语言。 (4)B语言:是对BCPL进一步简化所得到的一种很简单且很接近硬 件的语言。B语言取BCPL语言的第一个字母。B语言精练、接近硬件,但 过于简单,数据无类型。B语言诞生后,Unⅸx开始用B语言改写
30 一般情况下,循环算法既可以用当型循环,也可以用直到型循环实现。 循环结构也是一个整体,同样也代表一个基本结构。 注意: 三种结构中的 A、B 框可以是一个简单的操作,也可以是 3 个基本结构 之一。也就是说基本结构可以嵌套。 N-S 流程图表示算法的优点: 比文字描述更加直观、形象,易于理解;比传统的流程图紧凑易画; 废除流程线,整个算法结构是由各个基本结构按顺序组成的。N-S 流程图的 上下顺序就是执行时的顺序,N-S 图表示的算法都是结构化的算法。 1.8 C 语言的产生、发展及特点 1.8.1 C 语言的产生及发展 C 语言是国际上流行的、很有发展前途的计算机高级语言。C 语言适合 于作为系统描述语言,它既可以用来编写系统软件,也可以用来编写应用软 件。 以前操作系统等系统软件主要采用汇编语言编写。汇编语言依赖于计算 机硬件,程序的可读性、可移植性都比较差。为了提高可读性和可移植性, 人们希望采用高级语言编写这些软件,但是一般的高级语言难以实现汇编语 言的某些操作,特别是针对硬件的一些操作(如:内存地址的读写,位操作 等)。人们设法寻找一种既具有一般高级语言特性,又具有低级语言特性的 语言,C 语言就在这种情况下应运而生。 C语言的产生和发展经历了以下过程:ALGOL60 → CPL → BCPC → B → C → 标准 C → ANSI C → ISO C。 (1)ALGOL 60:一种面向问题的高级语言。ALGOL 60 离硬件较远, 不适合编写系统程序。 (2)CPL(Combined Programming Language,组合编程语言):CPL 是一种在 ALGOL 60 基础上更接近硬件的一种语言。CPL 规模大,实现困 难。 (3)BCPL(Basic Combined Programming Language,基本的组合编程 语言):BCPL 是对 CPL 进行简化后的一种语言。 (4)B 语言:是对 BCPL 进一步简化所得到的一种很简单且很接近硬 件的语言。B 语言取 BCPL 语言的第一个字母。B 语言精练、接近硬件,但 过于简单,数据无类型。B 语言诞生后,Unix 开始用 B 语言改写