C语言入门易错题第一弹——输入输出(另附输入输出格式详细说明)

        本文将盘点一些易错的输入输出问题,并附输入输出格式详细说明。为方便编写和浏览,以下输入部分以代表空格键和回车键。

目录

易错题

附录:

1.printf()函数的输出格式详细说明

表1 格式说明符及输出效果

表2 printf( )的修饰符

表3 printf()的标志

2. scanf( )函数的输入格式详细说明

表4 scanf( )函数的格式说明符

表5 scanf()函数的格式修饰符


易错题

1.程序段:int x=12;double y=3.141593;printf("%d%8.6f\n",x,y); 的输出结果是()。

        A.123.141593        B.12 3.141593        C.12,3.141593        D.123.1415930

----------------------------------------------------分割线------------------------------------------------------------

正确答案:A

解析:在printf()函数使用时,会严格按照引号内内容输出,%d和%f8.6中间是连续的,没有其他字符,故C错误;%8.6的意思是输出宽度为8,小数点后有六位,D超过小数位数,故错;而3.141593正好8位(小数点也算一位),无需左端补空格,B错。即A对。

2. 有以下程序:

 #include 
  void main()
{   char a,b,c,d;
⁤  scanf(″%c%c'',&a,&b);⁤
  c=getchar( );
  d=getchar( );
  printf("%c%c%c%c",a,b,c,d);
}


  当执行程序时,按下列方式输入数据
  12
  34

         则输出结果是  ()。
A.1234                     B.12                 

C.12 3          D.1234

                            

----------------------------------------------------分割线------------------------------------------------------------

正确答案:C

解析:程序根据用户输入分别给字符型变量a、b、c、d赋值为‘1’、‘2’、‘’、‘3’,因此输出到屏幕得到选项C中的格式。

3.已知int x;float y;执行:scanf("%3d%f",&x,&y);⁤⁤语句时,从键盘输入数据12345678后,y的值为 () 。 

A.无确定值          B.45.000000         C.678.000000    D.123.000000

----------------------------------------------------分割线------------------------------------------------------------

正确答案:B

解析:输入12345,本来是把这个值传递给整形的变量x的,但是因为%3d截断了3位传递给x,所以x的值就是123,剩下的45就传给了float类型的y。

4.以下叙述中正确的是( )。
A.输入项可以是一个实型常量,例如:scanf( “%f” ,3.5);  
B.只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf(“a=%d,b =%d” ); 
C.当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf( “%4.2f” ,&f); 
D.当输入数据时,必须指明变量地址,例如:scanf( “%f”,&f);
  

----------------------------------------------------分割线------------------------------------------------------------

正确答案:D

解析:A. scanf( )函数的功能是:从键盘读取输入的数据,所以不能直接输入常量或变量,故A错误。scanf()在参数列表里使用的是指向变量的指针,当输入数据时,必须指明变量地址,故B错,D对。scanf()仅能控制最大字段宽度,不能控制小数点后的位数,C错。

5.设a=12、b=12345,执行语句printf(“%4d,%4d”,ab)的输出结果为()。
A.12,123
B.12 12345
C.12,1234
D.12, 123456

  

----------------------------------------------------分割线------------------------------------------------------------

正确答案:B(易错选C)

解析:%4d仅能控制字段宽度的最小值。(不够补空格)而如果该字段不能容纳要输出的数或者字符串,系统就会使用更宽的字段。、

6.若输入12345和abc,以下程序的输出结果是()。

main()
{
int a;
char ch;
scanf(“%3d%3c”,&a,&ch);
printf(“%d,%c”,a, ch);
}


A.123,abc
B.123,4
C.123,a
D.12345,abc


  

----------------------------------------------------分割线------------------------------------------------------------

正确答案:B(易错选A)

解析:指定输入数据所占列数之后,系统自动按它截取所需数据,无须分界符。程序中指定整型变量a占3列,输入12345、abc后,系统自动将数据前3列123赋给变量a,而剩余的数据则根据具体情况赋给其他变量或作为多余数据处理。因程序中还需对字符变量ch输入数据,虽然指定输入3列字符,但字符型数据只能有一个字符,因此把剩余的“45、abc”中第1个数据4赋给变量ch,故正确答案为选项B。

附录

1.printf()函数的输出格式详细说明

表1 格式说明符及输出效果

格式说明符 

输出效果

%c 

一个字符

%d

有符号十进制整数

%f

浮点数,十进制记数法

%e

浮点数,e记数法

%E 

浮点数,E记数法

%g

根据数值不同自动选择%f或%e,%e格式在指数 < -4 或 >= 精度时使用

%G 

根据数值不同自动选择%f或%E,%E格式在指数 < -4 或 >= 精度时使用

%i

有符号十进制整数(与%d相同)

%o 

无符号八进制整数

%p 

指针

%s 

字符串

%u

无符号十进制整数

%x 

使用十六进制数字0~f的无符号十六进制整数

%X 

使用十六进制数字0~F的无符号十六进制整数

%%

输出一个百分号 

        此外,在控制字符串中,我们还可以在%和格式字符之间插入修饰符,对基本的格式说明加以修改。在表2和表3中,列举了可以插入的修符。

表2 printf( )的修饰符

修饰符

 意义

标志 

5种标志(-、+、空格、#、0)将在表3中描述。可以使用零个或者多个标志。示例: "%-10d"

digit(s) 

字段宽度的最小值。如果字段宽度不够,则左补空格。如果该字段不能容纳要输出的数或者字符串,系统就会使用更宽的字段。示例:"%4d"

.digit(s)

精度。

对于%e、%E、%f格式,是将要在小数点右边输出的数字位数。

对于%g和%G格式,是有效数字的最大位数。

对于%s格式,是将要输出字符的最大数目。

对于整数格式, 是将要输出数字的最小位数;

如果必要,要使用前导零来达到这个位数。只使用“.”表示其 后跟随一个零,所以%.f与%.0f相同。

示例:

"%5.2f"为输出一个浮点数,其宽度为5个字符,小数点后有2个数字。

"%5.3s"为输出一个字符串,其宽度为5个字符,但只取字符串中左端3个字符。这3个字符输出在5列的右侧,左补空格。

和整数格式说明符一起使用,表示一个short int或unsigned short int类型数值。示例: "%hu"、"%hx"、"%6.4hd"

和整数格式说明符一起使用,表示一个long int或unsigned long int类型数值。示例: "%ld"、"%8lu"

L

 和浮点数格式说明符一起使用,表示一个long double类型数值。示例:"%Lf"、"%10.4Le"

表3 printf()的标志

标志 

意义

左对齐。也就是说,将输出的数据置于字段的左侧开始处 。如果字段宽度不够,则左补空格。示例:"%-20s"

对有符号数,若为正数,则显示加号;若为负数,则显示减号 示例:"%+6.2f"

(空格)

 对有符号数,若为正数,则显示时带前导空格(但不显示正号);若为负数,则显示负号(空格) 示例:"%↵6.2f"

使用格式说明的可选形式。若为% o格式,则以0开始;若为%x或%X格式,则以0x或0X 开始。对于所有的浮点数形式,#保证了即使不跟任何数字,也输出一个小数点字符。对 于%g和%G格式,它防止尾随零被删除 示例:"%#o"、"%#8.0f"、"%+#10.3E"

对于所有的数字格式,用前导零填充字符宽度。如果出现了一标志或指定了精度(对于整数) 则忽略该标志 示例:"%010d"、"%08.3f"

2. scanf( )函数的输入格式详细说明

        scanf( )函数的功能是:从键盘读取输入的数据。它是printf( )函数的逆操作。和printf( )函数一样,scanf( )函数也用到了控制字符串和参数列表,但是scanf()在参数列表里使用的是指向变量的指针,如表4和表5所示。

表4 scanf( )函数的格式说明符

格式说明符 

输入数据

%c 

读入一个字符

%d 

读入一个有符号的十进制整数

%f、%e、%g 

读入一个浮点数

%F、%E、%G 

读入一个浮点数

%i 

读入一个有符号的十进制整数(与%d相同)

%o

读入一个有符号的八进制整数

%p

读入一个指针

%s 

读入一个字符串,输入内容以第一个非空格字符作为开始,直到下一个空格字符之 间的全部字符

%u

读入一个无符号的十进制整数

%x、%X

读入一个有符号的十六进制整数

表5 scanf()函数的格式修饰符

修饰符 

意义

本输入项读入后略去。示例:scanf("%2d%*3d%2d",&a,&b);输入1234567↓,则系统将 12赋值给a变量,345略去,67赋值给b变量

digit(s)

最大字段宽度。在达到最大字段宽度或遇到第一个空格字符时停止对输入项的读取。示 例:"%10s"

用于输入short int类型整数(如"%hd,%ho,%hx")

l

用于输入long int类型整数(如"%ld,%lo,%lx")以及double类型实数(如"%lf,%le")

你可能感兴趣的:(C语言,c语言,笔记,经验分享,其他,开发语言)