第二章数据输出与输入优秀PPT.ppt
第二章数据输出与输入第一页,本课件共有38页2.1 C语言的基本语句n一个实际的C程序是一系列语句的集合,每一条语句都用来完成一定的操作任务,C程序的每一条语句都要有分号结束,但变量声明部分不算严格意义上的C语句。main()int a,b;a=2;b=+a;printf(“%d,%dn”,a,b);严格说来,应不称为语句。C语句分为以下几类:(1)控制语句 (2)函数调用语句(3)表达式语句(4)空语句(5)复合语句第二页,本课件共有38页2.1 格式化输出n数据的“输入”和“输出”是相对于计算机主机而言的。nC语言本身不提供输入输出语句,输入输出操作是通过调用库函数来实现的,例如:printf和scanf就是c语言中用于实现数据输入、输出的库函数之一。n因为c语言的输入输出库函数都位于一个名为stdio.h的头文件中,所以,每一个c语言程序的开始都要用下面的编译预处理命令将该头文件包括到用户编辑的文件中去。#include “stdio.h”或#include 第三页,本课件共有38页n格式化输出函数printfn功能:向显示屏输出数据。n语法:printf(格式控制,输出列表);n例如:printf(“%d,%d”,x,y);2.1格式化输出第四页,本课件共有38页Printf函数说明:一、一、格式控制部分是用双引号括起来的字符串,用于描述输出时的格式要求,其中包含两种信息:其中包含两种信息:(1)普通字符和转义字符常量,普通字符原样输出,转义字符按所表示的字符含义输出;(2)格式说明:如%d,%c等形式的字符串,指定输出表列中相应的变量或表达式的值的输出形式。见P34表2-1例如:若已知整型变量a的值为2,整型变量b的值为3,程序中有输出语句:printf(“a=%d,b=%d”,a,b);输出结果为()。格式说明,规范数据说明信息,原样输出a=2,b=3第五页,本课件共有38页格式说明对应的输出数据格式格式说明输出数据格式%d或%i输出有符号的十进制整型数%f输出精度或双精度且小数点后有6位数%c输出一个字符%o输出八进制无符号整型数%x或%X输出十六进制无符号整型数%u输出无符号十进制整数%c或%E不常用第六页,本课件共有38页Printf函数举例例3 若有以下程序段int m=32767,n=032767;Printf(“%d,%on”,m,n);执行后输出的结果是:32767,32767例4 若有以下程序段int m=0 xabc,,n=0 xabc;m-=n;Printf(“%Xn”,m);执行后输出的结果是:0第七页,本课件共有38页Printf函数说明:二、二、输出数据列表包括需要输出的一些数据。各个数据间用逗号分隔开。输出数据的个数与输出控制中的格式说明个数相等,并且在顺序上要一一对应且类型匹配。例如:printf(“%d,%f”,3.89,6);三、三、在输出控制中,格式说明个数应与输出项的个数相同。如果说明个数少于输出项的个数,多余的输出项则不输出;如果格式说明的个数多于输出项个数,则对多余的格式说明输出不定值。第八页,本课件共有38页例1 有以下程序:Main()int i=2000;float j=2.71828;printf(“i=%d,j=%f,j*10=%f”,i,j,j*10);结果是:i=2000,j=2.718280,j*10=27.182800Printf函数举例:例2 有以下程序Main()int a=666,b=888;printf(“%dn”,a,b);结果是:666第九页,本课件共有38页Printf函数举例:例3:若有程序段 int m=32767,n=032767;printf(“%d,%on”,m,n);执行后输出结果是:32767,32767例4:若有程序段 int m=0 xabc,n=0 xabc;m-=n,printf(“%Xn”,m);执行后输出结果是:0例5:若变量a,b已定义为int 类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,完整的输出语句是 printf(“a=%d,b=%d”,a,b);函数说明二第十页,本课件共有38页nPrintf函数说明:(1)可以在%和格式字符间加入一个整数来控制输出数据宽度,如果整数指定宽度大于实际输出数据宽度,数据输出采用右对齐方式,左边自动补空格;反之,则以实际宽度输出。2.1 格式化输出输出语句输出结果Printf(“%d”,254);254Printf(“%2d”,254);254Printf(“%4d”,254);254Printf(“%f”,1.25);1.250000Printf(“%10f”,1.25);1.250000第十一页,本课件共有38页(2)当在%和格式字符f之间加入“整数1.整数2”来控制输出数据的格式时,“整数1”用于指定输出数据占的总宽度,“整数2”用于指定输出实数的小数部分的位数。2.1 格式化输出输出语句输出结果Printf(“%4.4f”,1.25);1.2500Printf(“%7.4f”,1.25);1.2500Printf(“%2.0f”,1.25);1第十二页,本课件共有38页(3)如果需要在输出的八进制数前添加0,或在输出的十六进制前添加0 x,可在%号和格式字符o和x之间插入一个#号。2.1 格式化输出输出语句输出结果Printf(“%o”,254);376Printf(“%#o”,254);0376Printf(“%#x”,254);0 xfe第十三页,本课件共有38页Printf函数举例:例如:main()int a,b;clrscr();/*清屏*/a=123,b=12345;printf(“%d,%2d,%d,%10dn”,a,a,b,b);结果:123,123,12345,12345第十四页,本课件共有38页n字符输出函数putcharn语法:putchar(字符常量或字符变量);n功能:将括号内的字符常量或字符变量的值显示在屏幕上。如:#include main()char c;c=A;putchar(c);putchar(n);putchar(c);cA 2.2字符数据的输出第十五页,本课件共有38页n格式化输入函数scanfn用于在程序运行时,由用户自行输入数值送入相应变量保存。n语法:scanf(格式控制,地址表列);n说明:格式控制含义与printf中的相同,地址表列一般是由若干个变量的地址组成的。2.3 格式化输入例:#define PI 3.14159 Main()float r,area;scanf(“%f”,&r);area=PI*r*r;Printf(“area=%f”,area);“&”是求地址运算符,&r表示取变量r的地址。第十六页,本课件共有38页2.3 格式化输入格式说明输入数据格式格式说明输入数据格式%d输入十进制整型数%x输入十六进制整型数%c输入一个字符%u输入无符号的十进制整数%o输入八进制整型数%f输入单精度或双精度数Scanf函数中格式说明说明:(1)当从键盘输入多个数值数据时,输入数值数据之间用分隔符(包括空格符、制表符和回车符;但不包括逗号)隔开。且格式说明类型与输入项类型一一对应匹配,个数相同。如:int x,y,z;scanf(“%d%d%d”,&x,&y,&z);则键盘输入格式:1020 30 例 如下输入语句 int x,y,z;scanf(“%d%d”,&x,&y,&z);如输入形式为 1020 30 则只能对x和y变量分别输入10和20.第十七页,本课件共有38页说明:(2)与printf相似,在scanf函数中的格式字符前可以用一个整数指定输入数据所占的宽度,但对实数不能指定小数的位数。例如:如下语句 int a,b;scanf(“%3d%2d”,&a,&b);printf(“%d,%d”,a,b);输入数据123456789,输出结果为123,45(3)路过输入数据的方法。可以在格式字符与%之间加入一个“*”使输入过程路过输入的数据。如:int x,y,z;scanf(“%d,%d,%d”,&x,&y,&z);如下输入:1020 30 40 则将会10赋给变量x,跳过20,30赋给变量y,40赋给变量z。2.3 格式化输入第十八页,本课件共有38页(4)、若在scanf函数的输入控制串中含有其他的字符,则在输入时要求一一对应的位置原样输入这些字符。如:int x,y,z;scanf(“%d,%d,%d”,&x,&y,&z);如下输入:1020 30 40 则将会10赋给变量x,跳过20,30赋给变量y,40赋给变量z。2.3 格式化输入例:执行以下程序时输入1234567,则输出结果是#include Main()int a=1,b;scanf(“%2d%2d”,&a,&b);printf(“%d%dn”,a,b);12 34第十九页,本课件共有38页小结:小结:1、scanf的输入分隔符不包含逗号,因此在使用键盘输入数据时,不能以逗号作为分隔符。如果需要以逗号作分隔符,则格式为:scanf(“%d,%d”,&a,&b);则输入为10,202、一般情况下,scanf的格式控制字符串中不要包含其他非格式控制符,否则往往容易混淆。3、使用scanf时,如果数据输入未能完成,则程序一直等待键盘输入,此时用户应该完成数据输入。4、使用scanf给变量赋值和直接使用赋值语句给变量赋值,都能使变量的值发生改变,但二者有本质区别。2.3 格式化输入第二十页,本课件共有38页n字符输入函数getcharn语法:getchar();注意:()内为空n功能:要求用户在程序执行时从键盘上输入一个字符,输入的字符先放在缓冲区中,等待用户按回车键确认,用户敲入回车键后,该函数才真正获得输入的字符,同时将输入的字符显示在屏幕上。n使用时,一般用一个字符变量接收getchar()获得的字符。例:#include main()char c;c=getchar();putchar(c);例:#include main()putchar(getchar();2.4 格式化字符输入第二十一页,本课件共有38页n说明:nc语言程序执行时,首先会找到main函数,然后按顺序执行main函数内部的每条语句,当遇到scanf语句时,程序会暂停,等待用户输入数据后按回车,才继续向下运行,运行到main函数的最后一条语句后,运行结束,可以看结果了。n用户输入时应按格式控制部分要求的格式输入,否则会出错。(1)格式控制部分若有普通字符,按原样输入。(注:scanf函数的格式控制部分中,不应该出现转义字符。)(2)格式控制部分若有格式说明符,如%d,%f等,要求输入相应格式的数据。第二十二页,本课件共有38页n思考:像上例的scanf(“%d%d”,&a,&b);语句,格式说明部分只要求输入两个十进制整数,并且两个%d相连,之间没有任何间隔符,那么在输入的时候是不是直接输入两个相连的整数呢?第二十三页,本课件共有38页2.5 顺序结构程序设计举例 例1:输入一个华氏温度,要求输出对应的摄氏温度(保留两位小数),转换公式为c=5/9(f-32)。n分析问题,找出求解问题的方法和步骤(简称问题求解的算法)。n该问题的求解步骤很简单,首先要从键盘输入一个华氏温度,存储在一个变量里,供以后做华氏温度向摄氏温度的转换用;接着,使用转换公式,将转换后的摄氏温度值保存在另一变量中,等待输出;然后输出该摄氏温度值。第二十四页,本课件共有38页n用c语言语句描述上面的算法,写成完整的程序。main()float f,c;scanf(“%f”,&f);c=5.0/9*(f-32);printf(“%.2fn”,c);书写程序时,注意:(1)首先,应考虑程序中要使用几个变量,每个变量的含义及类型(2)变量应在有了确定值后,才可以使用(3)数学表达式到c语言表达式的转换 2.5 顺序结构程序设计举例第二十五页,本课件共有38页 例2:输入两个整数,分别存放在变量a和b中,要求将这两个变量的值互换,输出它们的值。n分析:完成该问题的算法可分为以下几步:(1)输入两个数,分别存入a和b中(2)将a,b变量的值相互交换(3)输出交换后的a和b的值问题是:第(2)步如何具体实现?2.5 顺序结构程序设计举例第二十六页,本课件共有38页 main()int a,b,c;scanf(“%d,%d”,&a,&b);printf(“first:a=%d,b=%dn”,a,b);c=a;a=b;b=c;printf(“later:a=%d,b=%dn”,a,b);2.5 顺序结构程序设计举例第二十七页,本课件共有38页 例3:编写c程序,按下列公式计算并输出s的值,其中,a和b的值由键盘输入。s=2ab/(a+b)2n分析:求解该问题的算法分为以下几步(1)输入a和b的值(2)由公式计算出s的值(3)输出s2.5 顺序结构程序设计举例第二十八页,本课件共有38页 main()float a,b,s;scanf(“%f,%f”,&a,&b);s=2*a*b/(a+b)*(a+b);printf(“s=%fn”,s);2.5 顺序结构程序设计举例第二十九页,本课件共有38页 若程序如下,则不能实现题意要求的功能。为什么?main()int a,b;float s;scanf(“%d,%d”,&a,&b);s=2*a*b/(a+b)*(a+b);printf(“s=%fn”,s);2.5 顺序结构程序设计举例第三十页,本课件共有38页 思考:如果要求对上面的程序作修改,但不允许改变变量的类型,使程序仍能实现题意要求的功能,应该怎么办?第三十一页,本课件共有38页习题1、以下程序运行时若从键盘输入:10 20 30。输出结果是#include “stdio.h”Main()int i=0,j=0,k=0;Scanf(“%d%*d%d”,&i,&j,&k);Printf(“%d,%d,%d”,i,j,k);10,30,0第三十二页,本课件共有38页习题2已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33。输出结果是#include stdio.hmain()char a,b;a=getchar();scanf(%d,&b);a=a-A+0;b=b*2;printf(%c%c,a,b);1 B第三十三页,本课件共有38页习题3有以下程序 main()int m=0256,n=256;printf(%o%on,m,n);程序运行后的输出结果是256 400第三十四页,本课件共有38页习题4有以下程序main()int a=666,b=888;printf(%dn,a,b);程序运行后的输出结果是 666第三十五页,本课件共有38页习题5设有以下程序main()int x=102,y=012;printf(%2d,%dn,x,y);执行后输出结果是 102,10第三十六页,本课件共有38页习题6执行以下程序时输入1234567,则输出结果是_。#include main()int a=1,b;scanf(%2d%2d,&a,&b);printf(%d%dn,a,b);12 34第三十七页,本课件共有38页第三十八页,本课件共有38页