2015软考程序设计知识点(8)

时间:2015-04-02 15:47:00   来源:开云网页版     [字体: ]
格式输出函数

  格式输出函数printf()的作用是将输出项接指定的格式排版输出到标准设备上(通常是终端显示屏)。调用printf()函数的一般形式为

  printf(格式控制字符串,表达式,表达式,……)

  其中格式控制字符率是字符串表达式,通常是由用一对双引号括起来的字符串常量。它包含三类字符:普通字符、转义字符和格式转换说明,它们的作用分别如下:

  (l)普通字符,要求按原样输出。

  (2)转义字符,要求技转义字符的意义输出,如‘\n’,表示输出时回车换行,‘\b’表示退格等。

  (3)格式转换说明,以字符%开头至格式符结束的字符列组成,其一般形式为

  %[-」「+」「」[#」「W][。p][h/l/L]输出格式符

  其中用方括号括住的内容是格式修饰说明,可以缺省(不出现),如“%d”、“% 7.5f”等。每个格式转换说明对应一个输出项,输出项可以是常量、变量或表达式。格式转换说明的作用是将对应输出项的内容按格式符要求产生出字符列,并按格式修饰说明排版输出。

  输出格式符共有16个,有12种不同的格式,考试大纲只要求九种。

  常用输出格式符表

  格式符 意 义

  d或i 整型数据以十进制形式输出

  o 无符号整型数据以八进制形式输出

  X 无符号整型数据以十六进制形式输出

  U 元符号整型数据以十进制形式输出

  C 字符的ASCll码数据,输出对应的字符

  S 输出字符串

  f 以“整数部分。小数部分”形式输出实型数据

  e 以[-]n.nnnnne±xx输出实型数据

  g 以f或e格式输出

  说明:(1)x格式符同。格式符一样,把符号位作为数的一部分输出。对于x格式,用字符a、b、c、d、e、f(或A、B、C、D、E、F)表示9之后的六个十六进制数字符。

  (2)一个整数,只要它的位在0-255范围内,也可以用字符形式输出,输出以该整数为ASCII代码的字符。反之,一个字符数据也可以用整数形式输出,输出该字符的ASCII代码值。

  (3)f、e和g格式符用于输出实型数据,格式转换时有四舍五人处理。对于f格式,小数点后的数字个数可由格式修饰说明p指定,若p为0,不显示小数点。用e格式输出时,对于非0实数,小数点前有一位非零数字,输出格式中的有效位数可由格式修饰说明p指定;字符e(或E)之后是指数,指数部分至少包含两个数字。若输出值的绝对值不小于 1E+100,则指数部分多于两位数字。

  g格式能根据表示数据所需字符的多少自动选择f格式或e(或E) 格式输出实数,选择是以输出时所需字符数多少为标准。

  格式修饰说明有七种,教材只介绍其中四种,它们的意义分别说明如下:

  (1)W域宽说明,W是一个十进制整数,表示输出字段的字符数。若转换后需要的字符个数比给出的W多,则以实际需要为准;若转换后需要的字符数比W少,就在左边用填充字符补足(若给出左边对齐标志(-),则在右边补填充字符人通常用空白符作填充字符,若十进制整数W之前有前导0(此0不表示以八进制数给出字段宽度),则以字符0作填充字符。

  (2)- 左对齐标志,当转换后字符个数少于W时,在W所限定的字段宽度内,转换所得字符列左对齐,右边补填充符。缺省时,右对齐,左边补填充符。

  (3)。p,其中p也是十进制整数。

  对于g或e格式输出,p指明输出精度(有效数字位数),可以缺省,缺省值依赖于系统的规定(下面的例子设p的缺省值为6)。

  对于f格式输出,p指明输出字符列的小数点之后的数字个数,可以缺省。

  对于S格式输出,p指明最多输出字符率的前p个字符,多余截断。缺省时,字符串的内容全部输出。

  对于d.i、O、u、x和X,表示至少出现的数字个数。

  同域宽说明一样,p也可以是字符*,而实际值由后面一个输出项的整数值给出,若该值为负值,相当于没有给出p.

  (4) l指明输出项的类型。

  长度修饰符l用于格式符d、i、o、u、X,表示对应的输出项是长整型或无符号长整型。

  以下是格式输出的一些例子。例如,int i=1234; long j=1234567L;

  printf(“%d,%+6d,%06d,%-6d, %5ld”,i,i,i,i,j)

  将输出:1234,+1234,00l234,1234,1234567

  注意:对于long型数据输出,必须在格式符之前有长度修饰符l,表明输出long型数据。

  若 int k=045;long p=-1L;printf(“%#o,%4o,%6lo”,k,k,p)

  将输出:045, 45, 37777777777

  而printf(“%#x,%4x,%6lx”,k,k,p)将输出:0x25, 25, FFFFFFFF

  若 unsigned int u= 65535u;prinif(“%d,%4u,%ln‘,u,u,p)

  将输出:-l, 65535, 4294967295

  若 char ch1= 045, ch2=‘a’;printf(“%c,%-3c,%2c”,ch1,ch2,ch2)

  将输出:%,a, a

  若 char s[]==“ABCDEF‘;printf(”%3s,%4.2s,%-7.4s,%.5s“,s,s,s,s)

  将输出:ABCDEF, AB, ABCD, ABCDE

  若 float f=123.4567f; double d=123.456789;

  printf(“%。4f,%8.3f,%-7.2f,%。7f”,f,f,f,d)

  将输出:123.4567, 123.457, 123.46, 123.4567890

  而 printf(“%。6e,%10.2e,%-10.2e,%.2e,%.9e”,f,f, f,f,d)

  将输出:1.23457e+02, 1.2e+02,1.2e+02,l.2e+02, 1.23456789e+02

  注意:实型数据的有效位数,不要以为凡是打印(显示)的数字都是准确的。一般地,float型只有7位有效数字,double型有15位有效数字。实际上,因计算过程中的误差积累,通常不能达到所说的有效位数。]

  另外,要注意%g格式的特殊性,当它选择“整数部分。小数部分”形式时,因格式修饰说明。p在e格式中的意义是指明精度,所以p的值是整数部分位数与小数部分位数之和(不是f格式中的小数位数)。如有

  float g1=12.34f,g2=0.0f;

  double d=123.456789, g=123456.789;

  printf(“%g,%G”,g1,g2);

  printf(“%f,%g,%g,%g,%.8g”‘,g1,g1,d,g,g)

  将输出:

  12.34,0

  12.340000,12.34,123.457,123457,123456.79
选择结构

  选择结构有单分支选择结构、双分支选择结构和多分支选择结构。C语言提供相应的if语句和switCh语句分别用来描述这些选择结构。

  1.单分支选择语句

  单分支选择语句有以下形式:

  if(表达式)

  语句

  这种形式的语句执行过程是:

  (l)计算表达式的值;

  (2)测试表达式的值。若表达式的值非0,则执行它的成分语句,并结束单分支选择的执行;若表达式的值为0,则立即结束单分支选择的执行。

  2.双分支选择语句

  汉分支选择语句有以下形式:

  if(表达式)

  语句1

  else

  语句2

  双分支选择语句根据给定的选择条件表达式值为非0或为0两种情况,从两个供选择的成分语句中自动选取一个成分语句执行。双分支选择语句的执行过程是:

  (1)计算表达式的值;

  (2)测试表达式的值并选择执行语句。若表达式的值非0,则执行语句1,并结束双分支选择语句;否则执行语句2,并结束双分支选择语句。

  注意;无论条件表达式的值为何值,只能执行语句1或语句2中的一个。当双分文选择语句中的else之后的语句2为空语句时,就变成单分支选择语句。

  单分文选择语句和双分支选择语句统称且语句。在if语句中的语句、语句1和语句2可以是任何语句。当它们中的某一个需用语句序列描述时,必须将这语句序列写成复合语句。当它们中的某一个又是if语句时,就呈现嵌套的if语句形式。这时应注意else与if的对应关系。C语言约定else总是与它前面最接近的if对应。

  为正确书写if语句,特别说明以下几点:

  (1)若if语句中的语句、语句1、语句2是一个简单语句,则这些简单语句之后会有一个分号,这是C语言对这些简单语句的要求。

  (2)若if语句中的语句、语句l、语句2要用语句序列(即为顺序结构)来实现,则必须将它们改写成复合语句,即逻辑上把它们变成一个语句。

  (3) 在if语句中,每个else总要与它前面的if对应,不可能出现没有对应if的else.