您的当前位置:首页正文

交换第3章

2024-08-21 来源:客趣旅游网
第3章顺序结构程序设计3.1 顺序结构程序的基本操作3.2 格式输出函数3.3 格式输入函数3.4 字符输出函数3.5 字符输入函数3.6 习题3.1 顺序结构程序设计的基本操作•如何在程序中给变量赋值•如何进行数据的输入输出?数据的输入与输出应包括以下几项:●用于输入或输出的设备。●输入或输出数据的格式。●输入或输出的具体内容。在C语言中,提供了用于输入与输出的函数,在这些函数中,键盘是标准输入设备,显示器是标准输出设备。输入设备输出设备另外要注意,如果在程序中要使用C语言所提供的输入函数或输出函数,则在使用前(即在程序的开头)应该使用包含命令将C语言中输入与输出的库函数包含进来。#include \"stdio.h\"教学进程3.2格式输出函数C●printf (“格式控制”,输出表) ;格式控制部分要用一对双撇号括起来,它用于说明输出项目所采用的格式。输出表中的各项目指出了所要输出的内容。在格式控制中,用于说明输出数据格式的格式说明符总是以%开头,后面紧跟的是具体的格式。用于输出的常用格式说明符有以下几种。教学进程3.2.1整型格式说明符%d 或%md 用于基本整型●十进制形式%ld 或%mld 用于长整型%u 或%mu 用于无符号基本整型%lu 或%mlu 用于无符号长整型●八进制形式%o 或%mo 用于基本整型%lo 或%mlo 用于长整型●十六进制形式%x 或%mx 用于基本整型%lx 或%mlx 用于长整型m表示输出的整型数据所占总宽度(即列数),当实际数据的位数不到m位时,数据前面将用空格补满。如果在格式说明符中没有用m来说明数据所占的宽度,则以输出数据的实际位数为准。如果在格式说明符中说明了宽度m,但实际输出的数据位数大于m,则也以输出数据的实际位数为准进行输出。教学进程3.2.2实型格式说明符●十进制数形式%f 或%m.nf●指数形式%e 或%m.ne在输出实型数据时,格式说明符中的m表示整个数据所占的宽度,n表示小数点后面所占的位数。如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。需要指出的是,在C语言中,用于输出单精度实型数据与双精度实型数据格式说明符是一样的。教学进程3.2.3字符型格式说明符■格式说明符为%c 或%mc其中m表示输出的宽度,即在这种情况下,在输出字符的前面将要补m-1个空格。下面对各种基本类型数据的格式输出作几点说明:●输出表中可以有多个输出项目,但各输出项目之间要用“,”分隔。各输出项目可以是常量、变量以及表达式。●格式输出函数中的“格式控制”是一个字符串,其中每一个%后面的字符是格式说明符,用于说明相应输出数据的输出格式,而每一个格式说明符的结束符分别为d(整型)、f(实型)、c(字符型)、s(字符串,将在9.3.3节中介绍)。而格式控制中除格式说明符外的其他字符将按原样输出。【例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=%d\\n\",a,b);printf(\"x=%6.2f,y=%6.2f,s=%6.2f\\n\",x,y,s);}这个程序经编译连接后,运行输出的结果为(a=34,b=-56x= 2.50,y= 4.50,s= 26.50教学进程表示空格)字符型格式说明符●格式输出函数的执行过程如下:首先,在计算机内存中开辟一个输出缓冲区,用于存放输出项目表中各项目数据。然后,依次计算项目表中各项目(常量或变量或表达式)的值,并按各项目数据类型应占的字节数依次将它们存入输出缓冲区中。最后,根据“格式控制”字符串中的各格式说明符依次从输出缓冲区中取出若干字节的数据(如果是非格式说明符,则将按原字符输出),转换成对应的十进制数据进行输出。其中从输出缓冲区中取多少个字节的数据是按照对应格式说明符说明的数据类型。●在“格式控制”的格式说明符中,如果带有宽度说明,则在左边没有数字的位置上用空格填满(即输出的数字是右对齐)。但如果在宽度说明前加一个负号(-),则输出为左对齐,即在右边补空格。教学进程【例3-2】设有如下C程序:#include\"stdio.h\"main(){longintxx,yy,zz;xx=1;yy=-255;zz=1;printf(\"xx=%ld,yy=%ld,zz=%ld\\n\",xx,yy,zz);printf(\"xx=%d,yy=%d,zz=%d\\n\",(int)xx,(int)yy,(int)zz);printf(\"xx=%d,yy=%d,zz=%d\\n\",xx,(int)yy,(int)zz);}该程序运行的结果如下:xx=1,yy=-255,zz=1xx=1,yy=-255,zz=1xx=1,yy=0,zz=-255教学进程【例3-3】设有如下C程序:显然,这个程序中的第二个格式输出语句输出的结果是错误的,这是因为在第二个格式输出语句中,格式说明符%d是基本整型格式说明符,而输出项目是双精度型的数据,它们是不匹配的。#include\"stdio.h\"main(){doublex=34.567;printf(\"x=%f\\n\",x);printf(\"x=%d\\n\",x);printf(\"x=%d\\n\",(int)x);}这个程序的实际运行结果为x=34.567000x=27263x=34教学进程3.3格式输入函数C●scanf(\"格式控制\",内存地址表);其中scanf()是C编译系统提供的格式输入函数。格式控制部分要用一对双撇号括起来,它用于说明输入数据时应使用的格式。内存地址表中的各项目指出各输入数据所存放的内存地址。与格式输出一样,在格式控制中,用于说明输入数据格式的格式说明符总是以%开头,后面紧跟的是具体的格式。用于数据输入的常用格式说明符有以下几种。教学进程3.3.1整型格式说明符%d 或%md 用于一般整型●十进制形式%ld 或%mld 用于长整型%u 或%mu 用于无符号基本整型%lu 或%mlu 用于无符号长整型●八进制形式%o 或%mo 用于一般整型%lo 或%mlo 用于长整型●十六进制形式%x 或%mx 用于一般整型%lx 或%mlx 用于长整型由此可以看出,用于输入与输出整型数据的格式说明符是完全一样的。m表示输入数据时的宽度(即列数)。与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要用于输入无符号整型的数据。教学进程3.3.2实型格式说明符●单精度实型%f 或%e●双精度实型%lf由此可以看出,与输出不同,在用于输入时,无论是单精度实型还是双精度实型,都不能用m.n来指定输出的宽度和小数点后的位数。教学进程3.3.3字符型格式说明符■用于输入的字符型格式说明符为%c 或%mc下面是用到格式输入的一个程序:#include \"stdio.h\"main(){ int a;float b;char c;scanf(\"%d%f%c\",&a,&b,&c);}下面对格式输入作几点说明:●在格式输入中,内存地址表中的各项目必须是变量地址,而不能是变量名,且彼此间用“,”分隔。为此,C语言专门提供了一个取地址运算符&。例如,&a表示变量a在内存中的首地址。教学进程字符型格式说明符●当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情况:①如果各格式说明符之间没有其他字符,则在输入数据时,两个数据之间用\"空格\"、或\"Tab\"、或\"回车\"来分隔。②如果各格式说明符之间包含其他字符,则在输入数据时,应输入与这些字符相同的字符作为间隔。例如,设有如下说明int a,b ;float c,d ;现要利用格式输入函数输入a=12,b=78,c=12.5,d=7.6。采用不同的格式说明,其输入数据的形式也是不同的。教学进程字符型格式说明符输入语句为scanf(\"%d%d%f%f\",&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(){inta,d;charb,c;一个字符型变量只能存放一个字符printf(\"inputa,b,c,d:\");scanf(\"%3d%3c%2c%2d\",&a,&b,&c,&d);printf(\"a=%d,b=%c,c=%c,d=%d\\n\",a,b,c,d);}若从键盘输入如下(其中“inputa,b,c,d:”为输出的字符串):inputa,b,c,d:12345678901234563d3ca=123,b=4,c=7,d=90教学进程2c2d则它们与各格式说明符之间的对应关系如上,最后赋给各变量的值为字符型格式说明符●在用于输入的实型格式说明符中不能用m.n来指定输出的宽度和小数点后的位数(这是与输出的不同之处)。例如,下列用法是错误的:scanf(\"%7.2f\",&a);●为了便于程序执行过程中从键盘输入数据,在一个C程序开始执行时,系统就在计算机内存中开辟了一个输入缓冲区,用于暂存从键盘输入的数据。开始时该输入缓冲区是空的。当执行到一个输入函数时,就检查输入缓冲区中是否有数据:如果输入缓冲区中已经有数据(上一个输入函数剩下的),则依次按照“格式控制”中的格式说明符从输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。教学进程字符型格式说明符如果输入缓冲区中没有数据(即输入缓冲区位空),则等待用户从键盘输入数据并依次存放到输入缓冲区中。当输入一个<回车>或<换行>符后,将依次按照“格式控制”中还未用过的格式说明符从输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。在上述两种中的任一种情况下,从输入缓冲区中取数据,如果遇到<回车>或<换行>字符,则将输入缓冲区清空。此时如果“格式控制”中的格式说明符还未用完,则继续等待用户从键盘输入数据并依次存放到输入缓冲区中,直到输入一个<回车>或<换行>符后,再依次按照“格式控制“中还未用过的格式说明符从输入缓冲区中取出数据转换成计算机中的表示形式(二进制),最后存放到内存地址表中指出的对应地址中。这个过程直到“格式控制”中的格式说明符用完为止。此时如果输入缓冲区中的数据还未取完,则将留给下一个输入函数使用。教学进程字符型格式说明符从以上输入函数的执行过程可以看出,从键盘输入数据是以<回车>或<换行>作为结束的。当输入的数据一行不够时,可以在下一行继续输入;当一行上的数据用不完时,可以留给下一个输入函数使用。需要注意的是,由于<回车>或<换行>是作为键盘输入数据的结束符,因此,在输入函数的\"格式控制\"中,最后不能加换行符'\\n'。●与格式输出一样,格式输入的格式控制中的各格式说明符与内存地址表中的变量地址在个数、次序、类型方面必须一一对应。【例3-5】P61教学进程【例3-5】设有C程序如下:#include\"stdio.h\"main(){doublex;printf(\"inputx:\");scanf(\"%f\",&x);printf(\"x=%f\\n\",x);}这个程序的运行结果为显然,输出语句输出的x值是错误的。这是因为,x定义为双精度型的实型变量(占8B),但它使用的是单精度实型的输入格式说明符。当输入一个实型数123.456后,将按照单精度输入格式说明符将它转换成计算机中的表示形式(只占4B),最后存放到为双精度实型变量x所分配的存储空间的低4B中,而为双精度实型变量x所分配的存储空间的高4B中的各位均是0,这(其中有下划线的部分为键盘输入)就造成双精度实型变量x的(阶码N-2)inputx:123.456的11位偏移码均位0,这是C语言中x=0.000000无法表示的一个绝对值很小的数(称为下溢),默认为实型数0.0。教学进程3.4字符输出函数●字符输出函数的形式为putchar(c)这个函数的功能是,在显示屏幕的当前光标位置处输出项目c所表示的一个字符。其中c可以是字符型常量、字符型变量、整型变量或整型表达式。字符输出函数的执行过程与格式输出函数的执行过程完全相同。教学进程【例3-6】设有如下C程序:【例3-7】设有C程序如下:#include\"stdio.h\"main(){intx=68;chary='B';#include\"stdio.h\"main(){intx=68;chary='B';putchar('A');putchar('\\n');ABCDputchar('A');putchar(y);putchar(67);putchar(y);putchar('\\n');putchar(67);putchar('\\n');putchar(x);putchar('\\n');putchar(34+25);putchar('\\n');}putchar(x);putchar(34+25);}该程序的输出结果为ABCD;在这个程序中,在输出每一个字符后,紧接着输出一个换行,最后输出结果为教学进程3.5字符输入函数在C语言中,字符输入函数的形式为getchar()这个函数的功能是接收从键盘输入的一个字符。例如,下面的程序执行过程中,将等待从键盘输入一个字符赋给字符型变量x:#include\"stdio.h\"main(){charx;x=getchar();}需要说明的是,在执行字符输入函数时,由键盘输入的字符(依次存放在输入缓冲区中)同时也在屏幕上显示,并且以<回车>结束,但一个字符输入函数只顺序接收一个字符,输入缓冲区中剩下的字符数据将留给下面的字符输入函数或格式输入函数使用。教学进程

因篇幅问题不能全部显示,请点此查看更多更全内容