1、第二章 算法和最简单的 C 程序设计,本章要点: 掌握了解算法的基本概念与特征 掌握熟悉结构化程序设计的基本概念 掌握算法的表示方法,2.1 算法 一、算法的概念Nikiklaus Wirth 公式程序 = 数据结构 + 算法数据结构:对数据的描述,在程序中指定数据的类型和数据的组成形式。算法:对操作的描述,即解决问题的方法和步骤。程序 = 数据结构 + 算法+ 程序设计方法 + 语言工具 + 环境,2.1 算法二、算法的特性1. 有穷性一个算法包含的操作步骤应当是有限的。2. 确定性一个算法的含义应当是唯一的,算法中的每一个步骤应当是确定的,不应产生 “ 歧义性 ”。3. 有零个或多个输入4
2、. 有一个或多个输出5. 有效性算法中的每一步都应当能有效地执行,并得到正确的结果。,三、简单算法举例1. 求 12 3 4 5 ( 即 5! )算法一: 步骤1: 12 得 2 ;步骤2: 23 得 6;步骤3: 64 得 24 ; 步骤4: 245 得 120 ;,2.1 算法,算法二: 设 p 为被乘数, i 为乘数,采用循环算法。S1 : 使 p = 1 ; S2 : 使 i = 2 ; S3 : 使 p i p S4 : 使 i + 1 i S5: 如果 i 不大于5 则返回重新执行 S3 , S4 ,S5 ; 否则, 算法结束。,2.1 算法,三、简单算法举例1. 求 12 3 4
3、 5 ( 即 5! ),2. 对一个大于或等于3的正整数,判断它是不是一个素数。 算法一:将 n 作为被除数,将 2 到 ( n 1 )各个整数轮流作为除数,如都不能被整除,则 n 为素数。,2.1 算法,三、简单算法举例,算法二:将 n 作为被除数,将2到n/2(或者是 2 到 n1/2 ) 各个整数轮流作为除数,如都不能被整除,则n为 素数。S1: 输入 n 的值 S2: i = 2 ( i 作为除数 ) S3: n 被 i 除,得余数 r S4: 如r= 0,则输出“不是素数”,反之执行 S5 S5: i + 1 iS6: 如果 i n 1 , 返回 S3 ; 否则输出 “是素数 ”结束
4、。,2.1 算法,三、简单算法举例,自然语言 传统流程图 结构化流程图 伪代码 PDA图。,2.1 算法,四、算法的表示方法,1. 传统流程图特点: 用一些规定的图框表示各种操作。 直观形象,易于理解。常用的ANSI规定图形符号如图:,起始或结束框,输入输出框,判断框,处理框,流程线,连接点,注释框,2.1 算法,四、算法的表示方法,用传统流程图来表示求 5!。,2. 程序的三种基本结构一个程序只能由三种基本结构(或由它们派生出来的结构)组成,这三种结构为:(1) 顺序结构 (2) 选择结构 (3) 循环结构,A,顺序结构 选择结构 循环结构,3. 用 N S 流程图表示算法N S 结构化流程
5、图是根据美国学者 I . Nassi和 B.Shneiderman 1973年提出的算法来描述的,属于无流线的流程图,简称 N S 图。,真 P1 假当 P2 为真 真 P3 假 A B C,一般情况,N S 图的特点:比自然语言描述更直观、形象、易于理解。比传统流程图紧奏易画。图中的上下顺序就是执行时的顺序,符合“自顶向下,逐步细化”的结构化程序设计要求。,求 5!的 N S 流程图,判断素数的 N S 流程图,表达式语句: 表达式;,2.2 C 语句概述 C语句包括:,控制语句 ( 9 ) 种 if ( ) else ;for ( ) ; while ( ) ; do while ;con
6、tinue ;break ; switch ; goto ; return,控制语句,1,函数调用 语句 例如:y = cos(0.5);y = sin(cos(0.5);printf(“Hello”);,函数调用语句,2,复合语句 格式 语句1; 语句 n ;,复合语句,5,空语句: ;,2.3 赋值语句赋值语句由赋值表达式加上分号构成。 如: a = b ; C语言中将赋值表达式和赋值语句分开来,其目的是增加表达式的种类和使用范围。如: (1) if ( x 0 ) (2) if ( (a = b ) 0 ) t = a ;,2.4 字符数据的输入输出 C 程序的输入和输出完全依靠调用标准
7、输入和输出函数来完成。常用的 4个I/O 函数为 :scanf ( ) getchar ( )printf ( ) putchar ( ),输出单个字符,输出转义字符,3.4 字符数据的输入输出 一、putchar 函数 (字符输出函数 )作用: 向终端(即系统隐含指定的输出设备,如显示器,打印机) 输出一个字符。格式: putchar ( ch ) ; 其中: ch 代表一个字符型或整型变量,也可以是一个字符常量或整型常量。,输出单个字符 # include /* 包含I/O库有关变量定义和宏定义 */ main ( ) char a , b , c ; a = B ; b = O ; c
8、= Y ;putchar ( a ) ;putchar ( b ) ; putchar ( c ) ; 输出结果: BOY,例如,输出单个转义字符 # include main( ) putchar ( 101 ) ;putchar ( ) ; putchar (n ) ; 输出结果: A,重点,输出单个字符,输出转义字符,3.4 字符数据的输入输出 一、putchar 函数 (字符输出函数 )作用: 向终端(即系统隐含指定的输出设备,如显示器,打印机) 输出一个字符。格式: putchar ( ch ) ; 其中: ch 代表一个字符型或整型变量,也可以是一个字符常量或整型常量。,输出单个字
9、符 # include /* 包含I/O库有关变量定义和宏定义 */ main ( ) char a , b , c ; a = B ; b = O ; c = Y ;putchar ( a ) ;putchar ( b ) ; putchar ( c ) ; 输出结果: BOY,重点,输出单个转义字符 # include main( ) putchar ( 101 ) ;putchar ( ) ; putchar (n ) ; 输出结果: A,重点,3.4 字符数据的输入输出,二、 getchar 函数 (字符输入函数),作用: 从终端(即系统隐含指定的输入设备( 如键盘),输入一个字符。,
10、说明: 1. 执行时,输入字符并按回车键后,才将其输入到缓冲区,只读取一个字符给变量。 getchar 函数接收的一个字符,可以赋给char型或 int 型变量,也可不赋给任何变量。 3.使用 putchar 和 getchar 函数需用预编译命令#include 将 “stdio.h” 包括进去。,例3.2:从键盘输入一个字符再输出。,从键盘输入一个字符再输出。 #include “stdio.h”main ( ) char c ; c = getchar( ) ;putchar ( c ) ; 若输入 : a 则输出 : a,实例,示例2,示例1,格式控制,输出表列,3.5 格式输入与输出
11、 一、printf 函数 (格式化输出函数 ) 1. 格式: printf( , );作用: 向系统终端(或隐含的输出设备) 输出若干个指定类型的数据。,2. 格式字符(共 9 种)作用:控制不同类型数据的不同格式输出。 (1) d格式符:用于输出十进制整数 %d:按整型数的实际长度输出。 %md:m为指定的输出数据宽度,若数据位数 m 则左补空格,反之则将数据全部输出。 %md:左靠齐,右补空格。% ld:输出长整型数据。,格式控制: 由双引号括起来的字符串表示,包括格式说明和普通字符两部分。,输出表列: 需要输出的数据,可以是: 常量,变量,表达式 ,函数,字符串常量 。,使用示例: ma
12、in( ) int a=3, b=2;printf(“%d,%d”, a , b);printf(“sum is%d”, a+b); printf(“%d”, 123) ;printf(“%c”, getchar( ); ,main() int a=123,b= 12345 ;long c = 135790 ; printf(“%4d,%4dn”, a, b);printf(“%4dn”, a) ; printf(“%ldn”, c) ;printf(“%8ld”, c) ; 输出:123 , 12345 123135790135790,格式控制,输出表列,printf 函数使用示例: mai
13、n( ) int a=3, b=2;printf(“%d,%d”, a , b);printf(“sum is%d”, a+b); printf(“%d”, 123) ;printf(“%c”, getchar( ); ,举例,main() int a=123,b= 12345 ;long c = 135790 ; printf(“%4d,%4dn”, a, b);printf(“%4dn”, a) ; printf(“%ldn”, c) ;printf(“%8ld”, c) ; 输出:123 , 12345 123135790135790,格式控制: 由双引号括起来的字符串表示,包括格式说明
14、和普通字符两部分。,重点,输出表列:需要输出的数据,可以是: 常量,变量,表达式 ,函数,字符串常量 。,重点,3.5 格式输入与输出 一、printf 函数 (格式化输出函数 ) 1. 格式: printf( , );作用: 向系统终端(或隐含的输出设备) 输出若干个任意类型的数据。,2. 格式字符(共 9 种)作用:控制不同类型数据的不同格式输出。 (1) d格式符:用于输出十进制整数 %d:按整型数的实际长度输出。 %md:m为指定的输出数据宽度,若数据位数 m 则左补空格,反之则将数据全部输出。 %md:左靠齐,右补空格。% ld:输出长整型数据。,格式控制: 由双引号括起来的字符串表
15、示,包括格式说明和普通字符两部分。,输出表列: 需要输出的数据,可以是: 常量,变量,表达式 ,函数,字符串常量 。,使用示例: main( ) int a=3, b=2;printf(“%d,%d”, a , b);printf(“sum is%d”, a+b); printf(“%d”, 123) ;printf(“%c”, getchar( ); ,main() int a=123,b= 12345 ;long c = 135790 ; printf(“%4d,%4dn”, a, b);printf(“%4dn”, a) ; printf(“%ldn”, c) ;printf(“%8ld
16、”, c) ; 输出:123 , 12345 123135790135790,示例,格式控制,输出表列,示例1,printf 函数使用示例: main( ) int a=3, b=2;printf(“%d,%d”, a , b);printf(“sum is%d”, a+b); printf(“%d”, 123) ;printf(“%c”, getchar( ); ,重点,示例2,main() int a=123,b= 12345 ;long c = 135790 ; printf(“%4d,%4dn”, a, b);printf(“%4dn”, a) ; printf(“%ldn”, c)
17、;printf(“%8ld”, c) ; 输出:123 , 12345 123135790135790,格式控制,格式控制: 由双引号括起来的字符串表示,包括格式说明和普通字符两部分。,重点,输出表列,输出表列:需要输出的数据,可以是: 常量,变量,表达式 ,函数,字符串常量 。,重点,示例,d格式符说明: 在指定输出数据宽度,且实际宽度和指定宽度不等时,系统默认补空格。但可以改为补零。, 如希望数据输出宽度随计算结果而定,则可在 % 和格式字符之间加一个 号,且数据宽度由紧跟在 “控制字符串”后面的常量或变量的值确定。,如: int a = 123 ; printf ( “% 05d ” ,
18、 a ) ; 输出: 00123,如:int i = 15 printf ( “ % d n ” , 8 , i ) ;输出为: 15 又如: printf ( “ % d n ” ,k ,x ) ; 又如: int x , k ; printf ( “ % d n ” , k , x ) ;,补零或是补空格?,补零或是补空格? main() int a=123 ;printf(“%05d”, a ); 输出: 00123,提问,数据输出宽度的动态控制 main() int i = 15, k; printf (“%d n”, 8, i ) ;k = i 10;printf(“%dn”, k,
19、 i ) ; 输出为:1515,了解,d格式符说明: 在指定输出数据宽度,且实际宽度和指定宽度不等时,系统默认补空格。但可以改为补零。, 如希望数据输出宽度随计算结果而定,则可在 % 和格式字符之间加一个 号,且数据宽度由紧跟在 “控制字符串”后面的常量或变量的值确定。,如: int a = 123 ; printf ( “% 05d ” , a ) ; 输出: 00123,如:int i = 15 printf ( “ % d n ” , 8 , i ) ;输出为: 15 又如: printf ( “ % d n ” ,k ,x ) ; 又如: int x , k ; printf ( “
20、% d n ” , k , x ) ;,补零或是补空格?,补零或是补空格? main() int a=123 ;printf(“%05d”, a ); 输出: 00123,提问,示例,数据输出宽度的动态控制 main() int i = 15, k; printf (“%d n”, 8, i ) ;k = i 10;printf(“%dn”, k, x ) ; 输出为:1515,了解,域宽控制,s 格式符,(2) c 格式符: 用于输出一个字符 %c 控制字符常量或字符变量的输出。,(3) s 格式符: 输出一个字符串 %s %ms:规定输出字符串占的列宽。字符串长度 m 时,全部输出。反之则
21、右靠齐,左补空格或左靠齐,右补空格。 %m.ns:规定输出字符串所占列宽,只取字符串中左端 n个字符。输出右靠齐,左补空格或左靠齐,右补空格。当 n m 时, 则 m自动取 n 的值以保证 n 个字符正输出。, %mc:指定输出数据宽度,右靠齐,左补空格%mc:左靠齐,右补空格。,例 3.3 void main ( ) char c = a ; int i = 97 ;printf(“%c”,a);printf(“%c,%dn”, c, c);printf(“%c,%dn”, i, i); ,如: char c = a ; printf (“ %3c ” , c ) ; 输出: a又如: pr
22、intf ( “ %3c %3c ” , a , b ) ;输出: a b,例 3.4void main ( ) printf (“%3s ,%7.2s ,% .4s,% 5.3s n” ,“CHINA” “CHINA”, “CHINA”, “CHINA”) ; 输出:CHINA , CH , CHIN , CHI,例 3.3,c 格式符 用于输出一个字符 例 3.3 void main ( ) char c = a ; int i = 97 ;printf(“%c”,a);printf(“%c,%dn”, c, c);printf(“%c,%dn”, i, i); ,重点,c 格式符域宽控制
23、 main( ) char c = a ; printf(“%3cn” , c ) ;printf(“%3c%3c”, a, b ); 输出: a a b,重点,s 格式符输出一个字符串 void main ( ) printf(“%3s,%7.2s,%.4s,%5.3s n”,“CHINA” “CHINA”, “CHINA”,“CHINA”) ; 输出: CHINA , CH , CHIN , CHI,示例,(2) c 格式符: 用于输出一个字符 %c 控制字符常量或字符变量的输出。, %mc:指定输出数据宽度,右靠齐,左补空格%mc:左靠齐,右补空格。,例 3.3 void main (
24、) char c = a ; int i = 97 ;printf(“%c”,a);printf(“%c,%dn”, c, c);printf(“%c,%dn”, i, i); ,如: char c = a ; printf (“ %3c ” , c ) ; 输出: a又如: printf ( “ %3c %3c ” , a , b ) ;输出: a b,(3) s 格式符: 输出一个字符串 %s %ms:规定输出字符串占的列宽。字符串长度 m 时,全部输出。反之则右靠齐,左补空格或左靠齐,右补空格。 %m.ns:规定输出字符串所占列宽,只取字符串中左端 n个字符。输出右靠齐,左补空格或左靠齐
25、,右补空格。当 n m 时, 则 m自动取 n 的值以保证 n 个字符正输出。,例 3.4void main ( ) printf (“%3s ,%7.2s ,% .4s,% 5.3s n” ,“CHINA” “CHINA”, “CHINA”, “CHINA”) ; 输出:CHINA , CH , CHIN , CHI,例 3.3,c 格式符 用于输出一个字符 例 3.3 void main ( ) char c = a ; int i = 97 ;printf(“%c”,a);printf(“%c,%dn”, c, c);printf(“%c,%dn”, i, i); ,重点,域宽控制,c
26、格式符域宽控制 main( ) char c = a ; printf(“%3cn” , c ) ;printf(“%3c%3c”, a, b ); 输出: a a b,重点,s 格式符,s 格式符输出一个字符串 void main ( ) printf(“%3s,%7.2s,%.4s,%5.3s n”,“CHINA” “CHINA”, “CHINA”,“CHINA”) ; 输出: CHINA , CH , CHIN , CHI,示例,域宽控制,(4) f 格式符: 用于输出实数( 包括单,双精度 ) %f系统自动指定宽度,整数部分全部输出并输出6位小数。但并非全部数字都是有效数字。一般 单精
27、度实数有效位为7 位。双精度实数为16位。, %mf %m.nf 规定输出实数占的列宽,且有n位小数如果数值长度 m ,则输出右靠齐,左补空格 或左靠齐,右补空格。,例 3.5 void main ( ) float x , y ; x = 111111.111 ; y = 222222.22 ; printf ( “ %f ” , x + y ) ;输出: 333333.328125,例 3.7 main ( ) float f = 123.456 ;printf(“%f%10fn”, f, f);printf (“%10.2f%.2f%10.2f”, f, f, f); 输出: 123.
28、55994123.455994 123.46123.46123.46,例 3.7,例 3.5 111111.111+222222.222=?,浮点数丢失 精度,浮点数丢失 精度void main ( ) float x , y ; x = 111111.111 ; y = 222222.22 ; printf ( “ %f ” , x + y ) ;输出: 333333.328125,重点,实型数据域宽控制 main ( ) float f = 123.456 ;printf(“%f%10fn”, f, f);printf(“%10.2f%.2fn”, f, f);printf(%10.2f”
29、, f); 输出: 123. 55994123.455994 123.46123.46 123.46,重点,(4) f 格式符: 用于输出实数( 包括单,双精度 ) %f系统自动指定宽度,整数部分全部输出并输出6位小数。但并非全部数字都是有效数字。一般 单精度实数有效位为7 位。双精度实数为16位。,例 3.5 void main ( ) float x , y ; x = 111111.111 ; y = 222222.22 ; printf ( “ %f ” , x + y ) ;输出: 333333.328125,例 3.7 main ( ) float f = 123.456 ;pri
30、ntf(“%f%10fn”, f, f);printf (“%10.2f%.2f%10.2f”, f, f, f); 输出: 123. 55994123.455994 123.46123.46123.46,例 3.7, %mf %m.nf 规定输出实数占的列宽,且有n位小数如果数值长度 m ,则输出右靠齐,左补空格 或左靠齐,右补空格。,例 3.5 111111.111+222222.222=?,浮点数丢失 精度,浮点数丢失 精度void main ( ) float x , y ; x = 111111.111 ; y = 222222.22 ; printf ( “ %f ” , x +
31、y ) ;输出: 333333.328125,重点,域宽控制,实型数据域宽控制 main ( ) float f = 123.456 ;printf(“%f%10fn”, f, f);printf(“%10.2f%.2fn”, f, f);printf(%10.2f”, f); 输出: 123. 55994123.455994 123.46123.46 123.46,重点,浮点数丢失 精度,域宽控制,例程执行及分析,例 3.2,(5) u 格式符: 用于按十进制形式输出unsigned 型数据。 说明:有符号int 型与unsigned 型数据可以相互赋值,故 int 型可以用%u格式输出;u
32、nsigned 型也可以用 %d 格式输出。unsigned 型还可以用%o和 %x格式输出。,例 3.2 void main ( ) unsigned int a = 65535 ;int b = 2 ;printf(“a =%d,%o,%x,%un ” ,a ,a ,a ,a) ;printf(“b=%d ,%o,%x,%un ”,b, b, b, b) ;输出结果: a = 1 , 177777 , ffff , 65535b = 2 , 177776 , fffe , 65534,a = 65535,b = 2,u 格式符用于按十进制形式 输出unsigned型数据 例 3.2 voi
33、d main ( ) unsigned int a = 65535 ;int b = 2 ;printf(“a =%d,%o,%x,%un ” ,a ,a ,a ,a) ;printf(“b=%d ,%o,%x,%un ”,b, b, b, b) ;,重点,例 3.2 输出结果: a = 1 , 177777 , ffff , 65535b = 2 , 177776 , fffe , 65534a = 65535b = 2,重点,例程执行及分析,例 3.2,(5) u 格式符: 用于按十进制形式输出unsigned 型数据。 说明:有符号int 型与unsigned 型数据可以相互赋值,故 i
34、nt 型可以用%u格式输出;unsigned 型也可以用 %d 格式输出。unsigned 型还可以用%o和 %x格式输出。,例 3.2 void main ( ) unsigned int a = 65535 ;int b = 2 ;printf(“a =%d,%o,%x,%un ” ,a ,a ,a ,a) ;printf(“b=%d ,%o,%x,%un ”,b, b, b, b) ;输出结果: a = 1 , 177777 , ffff , 65535b = 2 , 177776 , fffe , 65534,a = 65535,b = 2,u 格式符用于按十进制形式 输出unsign
35、ed型数据 例 3.2 void main ( ) unsigned int a = 65535 ;int b = 2 ;printf(“a =%d,%o,%x,%un ” ,a ,a ,a ,a) ;printf(“b=%d ,%o,%x,%un ”,b, b, b, b) ;,重点,例 3.2 输出结果: a = 1 , 177777 , ffff , 65535b = 2 , 177776 , fffe , 65534a = 65535b = 2,重点,(6) e 格式符: 用于按指数形式输出实数 %e 由系统自动指定给出 6 位小数,指数部分占5 位(如 e + 002)。,例如: f
36、loat f = 123.456 ;printf(“%e%10e%10.2e%.2e 10.2e ” , f , f , f , f , f ) ;输出:1.234560e+0021.234560e+0021.23e+0021.23e+0021.23e+002, %m . ne 规定输出实数占的列宽,且有 n 位小数。 如果数值长度 m ,则输出右靠齐,左补空格或左靠齐,右补空格。,例如,e 格式符: 用于按指数形式 输出实数 main( ) float f = 123.456 ; printf(“%e%10en”, f, f);printf(“%10.2e%.2e%10.2e”, f, f,
37、 f ) ;输出: 1.234560e+0021.234560e+002 1.23e+0021.23e+0021.23e+002,重点,(6) e 格式符: 用于按指数形式输出实数 %e 由系统自动指定给出 6 位小数,指数部分占5 位(如 e + 002)。,例如: float f = 123.456 ;printf(“%e%10e%10.2e%.2e 10.2e ” , f , f , f , f , f ) ;输出:1.234560e+0021.234560e+0021.23e+0021.23e+0021.23e+002, %m . ne 规定输出实数占的列宽,且有 n 位小数。 如果数
38、值长度 m ,则输出右靠齐,左补空格或左靠齐,右补空格。,例如,例如,e 格式符: 用于按指数形式 输出实数 main( ) float f = 123.456 ; printf(“%e%10en”, f, f);printf(“%10.2e%.2e%10.2e”, f, f, f ) ;输出: 1.234560e+0021.234560e+002 1.23e+0021.23e+0021.23e+002,重点,1. 输出项与格式符必须按照从左至右的顺序在类型上一一匹配。 2. 格式字符要小写。如: %f %F 3. 如果格式字符的个数少于输出项数时,多余的输出项不予输出。反之若格式字符的个数大
39、于输出项数时,各系统的处理不同。,printf函数使用的注意事项:,4. 注意常规 d e f o x u c s e g 等字符在“%”后面与一般情形的区别。如: print (“c=%c,f=%f,s=%s”, c, f, s) ; 5. 可以输出“%”号例如: printf ( “ %f % % ” , 1.0/3 ) ;输出: 0.333333%,了解,例如:Turbo C中对于缺少项输出不定值,而VAX C则输出 0 值。例如:printf ( “ %d , %f , %un ” , x ,y ,z ,t) ; printf ( “ %d ,%f,%u , %e n ” , x ,
40、y , z ) ;,格式字符的个数少于 输出项数 例如:Turbo C中对于缺少项输出不定值,而VAX C则输出 0 值。 例如:printf(“%d,%f,%un”, x, y, z, t) ; printf(“%d,%f,%u,%en”, x, y, z); 请自行编程验证!,了解,1. 输出项与格式符必须按照从左至右的顺序在类型上一一匹配。 2. 格式字符要小写。如: %f %F 3. 如果格式字符的个数少于输出项数时,多余的输出项不予输出。反之若格式字符的个数大于输出项数时,各系统的处理不同。,printf函数使用的注意事项:,4. 注意常规 d e f o x u c s e g 等
41、字符在“%”后面与一般情形的区别。如: print (“c=%c,f=%f,s=%s”, c, f, s) ; 5. 可以输出“%”号例如: printf ( “ %f % % ” , 1.0/3 ) ;输出: 0.333333%,了解,了解,例如:Turbo C中对于缺少项输出不定值,而VAX C则输出 0 值。例如:printf ( “ %d , %f , %un ” , x ,y ,z ,t) ; printf ( “ %d ,%f,%u , %e n ” , x , y , z ) ;,格式字符的个数少于 输出项数 例如:Turbo C中对于缺少项输出不定值,而VAX C则输出 0 值
42、。 例如:printf(“%d,%f,%un”, x, y, z, t) ; printf(“%d,%f,%u,%en”, x, y, z); 请自行编程验证!,重点,二、scanf 函数 (格式化输入函数) 作用: 用于输入任何类型的多个数据1. 格式: scanf ( 格式控制 , 地址表列 ) ; 格式控制同 printf 函数的格式控制含义一样。地址表列由多个输入项的地址构成。可以是变量的地址或字符串的首地址或数组元素的地址等。 例 3.9 void main ( ) int a , b , c ;scanf ( “ %d %d %d ” , 输入: 输出: 3 , 4 , 5,345
43、,关于&,注意: 2.在输入数据时,两个数据之间可以用一个或多个 空格,也可用回车键或跳格键( Tab )。例如: 345 345 3(Tab键)45 均合法。而3 , 4 , 5 不合法。如果将 scanf ( “ %d %d %d ”, 则输入数据时只有 3 , 4 , 5 合法。,注意: 3.在输入数据时,并非输入完一个数据就被读入并送给一个变量,而是在键入一行字符并按回车键后才将该行字符输入缓冲区,然后scanf 函数从缓冲区按规定格式要求从缓冲区读取数据。,scanf函数 注意(1)“,重点,scanf函数注意(2)在输入数据时,两个数据之间可以用一个或多个 空格,也可用回车键或跳格
44、键 例如: scanf(“%d%d%d”, 则输入数据时只有 3 , 4 , 5 合法。,重点,scanf函数注意(3) 回车确认输入在输入数据时,并非输入完一个数据就被读入并送给一个变量,而是在键入一行字符并按回车键后才将该行字符输入缓冲区,然后scanf 函数从缓冲区按规定格式要求从缓冲区读取数据。,重点,注意(1)“,二、scanf 函数 (格式化输入函数) 作用: 用于输入任何类型的多个数据1. 格式: scanf ( 格式控制 , 地址表列 ) ; 格式控制同 printf 函数的格式控制含义一样。地址表列由多个输入项的地址构成。可以是变量的地址或字符串的首地址或数组元素的地址等。
45、例 3.9 void main ( ) int a , b , c ;scanf ( “ %d %d %d ” , 输入: 输出: 3 , 4 , 5,注意: 2.在输入数据时,两个数据之间可以用一个或多个 空格,也可用回车键或跳格键( Tab )。例如: 345 345 3(Tab键)45 均合法。而3 , 4 , 5 不合法。如果将 scanf ( “ %d %d %d ”, 则输入数据时只有 3 , 4 , 5 合法。,注意: 3.在输入数据时,并非输入完一个数据就被读入并送给一个变量,而是在键入一行字符并按回车键后才将该行字符输入缓冲区,然后scanf 函数从缓冲区按规定格式要求从缓冲
46、区读取数据。,关于&,scanf函数 注意(1)“,重点,345,scanf函数注意(2)在输入数据时,两个数据之间可以用一个或多个 空格,也可用回车键或跳格键 例如: scanf(“%d%d%d”, 则输入数据时只有 3 , 4 , 5 合法。,重点,scanf函数注意(3) 回车确认输入在输入数据时,并非输入完一个数据就被读入并送给一个变量,而是在键入一行字符并按回车键后才将该行字符输入缓冲区,然后scanf 函数从缓冲区按规定格式要求从缓冲区读取数据。,重点,345,关于&,注意(1)“,程序找错,抑制字符,指定输入数据宽度,关于%u的说明,2.格式说明 (1) 标准C中scanf 函数不使用 %u格式,Turbo C中可用。 (2) 可以指定整型变量输入数据宽度。(3) 可以使用抑制字符 %* (4) 不能规定输入数据的精度(与 printf 函数不同),