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