资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章,顺序结构程序设计,3.1 顺序结构程序的基本操作,3.2 格式输出函数,3.3 格式输入函数,3.4 字符输出函数,3.5 字符输入函数,3.6 习题,3.1 顺序结构程序设计的基本操作,如何在程序中给变量赋值,如何进行数据的输入输出?,数据的输入与输出应包括以下几项:,用于输入或输出的设备。,输入或输出数据的格式。,输入或输出的具体内容。,在C语言中,提供了用于输入与输出的函数,在这些函数中,键盘,是标准输入设备,显示器是标准输出设备。,输出设备,输入设备,教学进程,另外要注意,如果在程序中要使用C语言所提,供的输入函数或输出函数,则在使用前(即在程序,的开头)应该使用包含命令将C语言中输入与输出,的库函数包含进来。,#include stdio.h,3.2,格式输出函数,printf(“格式控制”,输出表);,教学进程,C,格式控制部分要用一对双撇号括起来,它用于说明输出项目所采,用的格式。输出表中的各项目指出了所要输出的内容。在格式控制中,,用于说明输出数据格式的格式说明符总是以开头,后面紧跟的是具,体的格式。,用于输出的常用格式说明符有以下几种。,十进制形式,教学进程,d 或 md 用于基本整型,ld 或 mld 用于长整型,u 或 mu 用于无符号基本整型,lu 或 mlu 用于无符号长整型,八进制形式,o 或 mo 用于基本整型,lo 或 mlo 用于长整型,十六进制形式,x 或 mx 用于基本整型,lx 或 mlx 用于长整型,m表示输出的整型数据所占总宽度(即列数),当实际数据的位数不,到m位时,数据前面将用空格补满。如果在格式说明符中没有用m来说明,数据所占的宽度,则以输出数据的实际位数为准。如果在格式说明符中说,明了宽度m,但实际输出的数据位数大于m,则也以输出数据的实际位数,为准进行输出。,整型格式说明符,实型格式说明符,十进制数形式,教学进程,指数形式,e 或 m.ne,f 或 m.nf,在输出实型数据时,格式说明符中的m表示整个数据所占的,宽度,n表示小数点后面所占的位数。,如果在小数点后取n位后,所规定的数据宽度m不够输出数据,前面的整数部分(包括小数点),则按实际的位数进行输出。,需要指出的是,在C语言中,用于输出单精度实型数据与双精,度实型数据格式说明符是一样的。,输出表中可以有多个输出项目,但各输出项目之间要用“,”,分隔。各输出项目可以是常量、变量以及表达式。,格式说明符为c 或 mc,其中m表示输出的宽度,即在这种情况下,,在输出字符的前面将要补m-1个空格。,字符型格式说明符,格式输出函数中的“格式控制”是一个字符串,其中每一个,后面的字符是格式说明符,用于说明相应输出数据的输出格式,,而每一个格式说明符的结束符分别为d(整型)、f(实型)、,c(字符型)、s(字符串,将在节中介绍)。而格式控制中,除格式说明符外的其他字符将按原样输出。,教学进程,下面对各种基本类型数据的格式输出作几点说明:,【例,3-1,】,P54,【例3-1】设有以下程序:,#include stdio.h,main(),int a,b;,float x,y,s;,a=34;b=-56;,x=2.5;y=4.5;s=x*x+y*y;,printf(a=d,b=dn,a,b);,printf(x=6.2f,y=6.2f,s=6.2fn,x,y,s);,这个程序经编译连接后,运行输出的结果为(表示空格),a=34,b=-56,x=2.50,y=4.50,s=26.50,教学进程,字符型格式说明符,字符型格式说明符,格式输出函数的执行过程如下:,教学进程,首先,在计算机内存中开辟一个输出缓冲区,用于存放输出项,目表中各项目数据。,然后,依次计算项目表中各项目(常量或变量或表达式)的值,并,按各项目数据类型应占的字节数依次将它们存入输出缓冲区中。,最后,根据“格式控制”字符串中的各格式说明符依次从输出缓冲区,中取出若干字节的数据(如果是非格式说明符,则将按原字符输出),,转换成对应的十进制数据进行输出。其中从输出缓冲区中取多少个字节,的数据是按照对应格式说明符说明的数据类型。,在“格式控制”的格式说明符中,如果带有宽度说明,则在左边没,有数字的位置上用空格填满(即输出的数字是右对齐)。但如果在宽度,说明前加一 个负号(-),则输出为左对齐,即在右边补空格。,【例3-2】设有如下C程序:,#include stdio.h,main(),long int xx,yy,zz;,xx=1;yy=-255;zz=1;,printf(xx=ld,yy=ld,zz=ldn,xx,yy,zz);,printf(xx=d,yy=d,zz=dn,(int)xx,(int)yy,(int)zz);,printf(xx=d,yy=d,zz=dn,xx,(int)yy,(int)zz);,该程序运行的结果如下:,xx=1,yy=-255,zz=1,xx=1,yy=-255,zz=1,xx=1,yy=0,zz=-255,教学进程,【例3-3】设有如下C程序:,#include stdio.h,main(),double x=34.567;,printf(x=fn,x);,printf(x=dn,x);,printf(x=dn,(int)x);,这个程序的实际运行结果为,x=34.567000,x=27263,x=34,显然,这个程序中的,第二个格式输出语句输出,的结果是错误的,这是因,为在第二个格式输出语句,中,格式说明符d是基本,整型格式说明符,而输出,项目是双精度型的数据,,它们是不匹配的。,教学进程,格式输入函数,3.3,教学进程,scanf(格式控制,内存地址表);,其中scanf()是C编译系统提供的格式输入函数。格式控制部分要用,一对双撇号括起来,它用于说明输入数据时应使用的格式。内存地址,表中的各项目指出各输入数据所存放的内存地址。,与格式输出一样,在格式控制中,用于说明输入数据格式的格式,说明符总是以开头,后面紧跟的是具体的格式。用于数据输入的常,用格式说明符有以下几种。,C,整型格式说明符,教学进程,十进制形式,d 或 md 用于一般整型,ld 或 mld 用于长整型,u 或 mu 用于无符号基本整型,lu 或 mlu 用于无符号长整型,八进制形式,o 或 mo 用于一般整型,lo 或 mlo 用于长整型,十六进制形式,x 或 mx 用于一般整型,lx 或 mlx 用于长整型,由此可以看出,用于输入与输出整型数据的格式说明符是完全一样的。,m表示输入数据时的宽度(即列数)。,与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要,用于输入无符号整型的数据。,实型格式说明符,教学进程,单精度实型,双精度实型,lf,f 或 e,由此可以看出,与输出不同,在用于输入时,,无论是单精度实型还是双精度实型,,都不能用m.n来指定输出的宽度和小数点后的位数。,用于输入的字符型格式说明符为c 或 mc,字符型格式说明符,教学进程,下面是用到格式输入的一个程序:,#include stdio.h,main(),int a;,float b;,char c;,scanf(dfc,&a,&b,&c);,下面对格式输入作几点说明:,在格式输入中,内存地址表中的各项目必须是变量地址,而不能,是变量名,且彼此间用“,”分隔。为此,C语言专门提供了一个取,地址运算符&。例如,&a表示变量a在内存中的首地址。,字符型格式说明符,教学进程,当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入,数据时分为以下两种情况:,如果各格式说明符之间没有其他字符,则在输入数据时,两个数据,之间用空格、或Tab、或回车来分隔。,如果各格式说明符之间包含其他字符,则在输入数据时,应输入与,这些字符相同的字符作为间隔。,例如,设有如下说明 int a,b;,float c,d;,现要利用格式输入函数输入a=12,b=78,c=12.5,d=7.6。,采用不同的格式说明,其输入数据的形式也是不同的。,字符型格式说明符,教学进程,输入语句为 scanf(ddff,&a,&b,&c,&d);,(即格式说明符中没有宽度说明,各格式说明符之间也没有其他字符。),则输入数据的形式应为 12 78 12.5 7.6,(两个数据之间用空格来分隔,当然也可用“Tab”或“回车”来分隔。),输入语句为 scanf(d,d,f,f,&a,&b,&c,&d);,(格式说明符中没有宽度说明,但各格式说明符之间有其他字符,即逗号),则输入数据的形式应为 12,78,12.5,7.6,(即在输入的两个数据之间同时要输入逗号。),输入语句 scanf(“a=d,b=d,c=f,d=f”,&a,&b,&c,&d);,(即格式说明符中没有宽度说明,但各格式说明符之间有其他字符。),输入数据的形式应为 a=12,b=78,c=12.5,d=7.6,(即在输入的两个数据之间同时要输入这些非格式说明符的字符。),字符型格式说明符,教学进程,当整型或字符型格式说明符中有宽度说明时,按宽度说明截取数据。,一个字符型变量只能存放一个字符,【例3-4】设有以下程序:,#include stdio.h,main(),int a,d;,char b,c;,printf(input a,b,c,d:);,scanf(3d3c2c2d,&a,&b,&c,&d);,printf(a=d,b=c,c=c,d=dn,a,b,c,d);,若从键盘输入如下(其中“input a,b,c,d:”为输出的字符串):,input a,b,c,d:,1 2 3,4 5 6,7 8,9 0,1 2 3 4 5 6,3d 3c 2c 2d,则它们与各格式说明符之间的对应关系如上,最后赋给各变量的值为,a=123,b=4,c=7,d=90,教学进程,在用于输入的实型格式说明符中不能用m.n来指定输出的宽度和小数,点后的位数(这是与输出的不同之处)。,例如,下列用法是错误的:scanf(7.2f,&a);,为了便于程序执行过程中从键盘输入数据,在一个C程序开始执行时,,系统就在计算机内存中开辟了一个输入缓冲区,用于暂存从键盘输入,的数据。开始时该输入缓冲区是空的。当执行到一个输入函数时,就,检查输入缓冲区中是否有数据:,如果输入缓冲区中已经有数据(上一个输入函数剩下的),则依次,按照“格式控制”中的格式说明符从输入缓冲区中取出数据转换成计算机,中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。,字符型格式说明符,如果输入缓冲区中没有数据(即输入缓冲区位空),则等待用,户从键盘输入数据并依次存放到输入缓冲区中。当输入一个,或符后,将依次按照“格式控制”中还未用过的格式说明符从,输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最,后存放到内存地址表中指出的对应地址中。,字符型格式说明符,教学进程,在上述两种中的任一种情况下,从输入缓冲区中取数据,如果遇到,或字符,则将输入缓冲区清空。此时如果“格式控制”中的,格式说明符还未用完,则继续等待用户从键盘输入数据并依次存放到输,入缓冲区中,直到输入一个或符后,再依次按照“格式控,制“中还未用过的格式说明符从输入缓冲区中取出数据转换成计算机中,的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。,这个过程直到“格式控制”中的格式说明符用完为止。此时如果输入缓冲,区中的数据还未取完,则将留给下一个输入函数使用。,字符型格式说明符,教学进程,与格式输出一样,格式输入的格式控制中的各格式说明符与内存地,址表中的变量地址在个数、次序、类型方面必须一一对应。,从以上输入函数的执行过程可以看出,从键盘输入数据是以,或作为结束的。当输入的数据一行不够时,可以在下一行继续输,入;当一行上的数据用不完时,可以留给下一个输入函数使用。,需要注意的是,由于或是作为键盘输入数据的结束符,,因
展开阅读全文