当前位置:   article > 正文

C 程序设计教程(09)—— 数据输出函数(printf)用法详解_根据输出结果,在给出代码c语言

根据输出结果,在给出代码c语言

C 程序设计教程(09)—— 数据输出函数(printf)用法详解

在这里插入图片描述

该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。

一、C 语言的赋值语句

赋值语句与赋值表达式相同,是程序中使用最多的语句之一。赋值语句的格式如下:

赋值表达式;
  • 1

说明:

(1)当一个变量未获得数据时,通过赋值,就把赋值号右端的表达式的值存入该变量所代表的存储单元中。

(2)当一个变量已获得了数据,通过赋值,就把赋值号右端的表达式的值存入该变量所代表的存储单元中,并覆盖原来的值。

(3)当读取变量的值时,该变量的值并不消失。

(4)由于在赋值运算符(=)右边的表达式可以是一个赋值表达式。因此,形如 a=b=b=d=5; 的语句是正确的。按照赋值运算符的右结合性,该语句实际等价于:

d=5;
c=5;
b=5;
a=5;
  • 1
  • 2
  • 3
  • 4

(5)注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间必须用逗号分隔,而赋值语句则必须用分号结尾。例如:

int i=1,j=2;
int a,b;
a=1;
b=2;
  • 1
  • 2
  • 3
  • 4

(6)严格区分赋值表达式和赋值语句。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。

二、数据的输出 —— printf 函数

为了实现输入和输出功能,C 语言在其库函数中提供了一组输入输出函数:putchar(输出字符)、getchar(输入字符)、printf(格式化输出)、scanf(格式化输入)。其中 scanf 和 printf 函数是针对标准输入输出设备(键盘和显示器)进行格式化输入输出的函数。由于它们在文件 stdio.h 中定义,所以在使用它们时,应使用编译预处理命令 #include<stdio.h> 将该文件包含到程序文件中。

1、printf 函数的一般形式

printf 函数称为格式化输出函数,printf 函数的格式为:

printf("格式控制字符串",输出项列表);
  • 1

说明:

(1)“格式控制字符串”是用双引号括起来的字符串,包括以下两种信息:

① 格式说明符:作用是将要输出的数据转换成指定的格式输出。由 “%” 和格式字符组成,如:%d,%f 等。

② 普通字符:即原样输出的字符。

例如:

printf("a=%d,b=%d\n",a,b);
  • 1

其中:%d 是格式说明符,其余都是普通字符(包括a=、逗号 ,、b=、\n)。如果 a=10,b=20,则该输出语句的输出结果为:

a=10, b=20

(2)输出列表是需要输出的数据,输出列表中的各项要用逗号间隔,每个输出项可以是合法的常量、变量、表达式或函数。格式说明符的个数要与输出项的个数相同、一一对应且类型匹配。例如:

int a=20;
float b=13.5;
printf("a=%d,b=%f\n",a,b);
  • 1
  • 2
  • 3

由于 printf 是函数,因此,“格式控制符” 和 “输出列表” 实际上都是函数的参数。printf 函数的一般形式也可以表示为:

printf(参数1, 参数2, ... ,参数n);
  • 1

printf 函数的本质是将参数2~参数n 按参数1给定的格式输出。

2、格式字符

对不同类型的数据使用不同的格式字符,常用的有以下几种格式字符:

(1)d 格式符

用来输出十进制整数。

① %d,按整型数据的实际长度输出。

② %md,m为指定输出数据的宽度。如果数据的位数小于m,则左端补空格,若大于m,则按实际位数输出。

例如:

int a=134, b=12345;
printf("%5d,%4d",a,b); //输出结果为:  134(左侧补两个空格), 12345
  • 1
  • 2

③ %ld,输出长整型数据

long a=123456;
printf("%ld",a);
//如果按%d输出,会发生错误
//长整型也可以指定宽度,如:printf("%7ld",a);
//一个int型数据可以用%d或%ld格式输出
  • 1
  • 2
  • 3
  • 4
  • 5
(2)o 格式符

以八进制形式输出整数。由于是将内存单元中各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即符号位也一起作为八进制数的一部分输出。例如:

int a=-1;
printf("%o",a); //输出结果为:177777
  • 1
  • 2

对长整型(long 型),可以使用 %lo 格式输出,也可以指定输出宽度,例如:

int a=-1;
printf("%8lo",a); //输出结果为:  177777
  • 1
  • 2
(3)x 格式符

以十六进制形式输出整数。同样不会出现负的十六进制数。

例如:

int a=-1;
printf("%d,%x",a,a); //输出结果为:-1,ffff
  • 1
  • 2

可以使用 %lx 输出长整型,也可以指定输出数据的宽度,如 %12x 等。

(4)u 格式符

以十进制输出 unsigned 型数据。

一个有符号整数(int)也可以用 %u 格式输出;反之,一个 unsigned 型数据也可以用 %d 格式输出。unsigned 型数据也可以用 %o 或 %x 输出。

(5)c 格式符

用来输出一个字符。例如:

char ch='A';
printf("%c\n",ch);  //输出结果:A
  • 1
  • 2

一个整数,只要它的值在 0~255 之间,也可以用字符形式输出。在输出前,将该整数转换成 ASCII 字符,反之,一个字符型数据也可以用整数形式输出。例如:

char ch='A';
int x=97;
printf("%c",ch); //输出:A
printf("%d",ch); //输出:65
printf("%c",x); //输出:a
printf("%d",x); //输出:97
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
(6)s 格式符

用来输出一个字符串。

① %s,按实际格式输出字符串。

例如:

printf("%s","China");  //输出结果:China
  • 1

② %ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若字符串小于m,则左边补空格。例如:

printf("%10s","China");  //输出结果:     China
  • 1

③ %-ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若字符串小于m,字符串左对齐,右边补空格。例如:

printf("%10s%d","China",20);  //输出结果:China     20
  • 1

④ %m.ns,输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的右端,左补空格。例如:

printf("%5,2s","China");  //输出结果:   Ch
  • 1

⑤ %-m.ns,输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的左端,右补空格。例如:

printf("%-5,2s,%d","China",20);  //输出结果:Ch   20
  • 1
(7)f 格式符

以小数形式输出实数。(包括单精度、双精度)

① %f,系统自动指定输出宽度,使整数部分全部输出,并输出6位小数。

② %m.nf,指定输出的数据共占m列,其中有n位小数。如果数据长度小于m,则左端补空格。

③ %-m.nf,指定输出的数据共占m列,其中有n位小数。如果数据长度小于m,数据左对齐,右端补空格。

例如:

#include<stdio.h>
int main() {       
	float f=123.456;
	printf("%f,%10f,%10.2f,%-10.2f,%.2f",f,f,f,f,f);
	return 0;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上程序的运行结果如下:

在这里插入图片描述

(8)e 格式符

以指数形式输出实数。

① %e,不指定输出数据所占的宽度和数字部分小数位数,由系统自动给出6位小数,指数部分占5位(如e+013),其中e 占一位,指数符号占一位,指数占3位。例如:

printf("%e",123.456); //输出:1.234560e+002
  • 1

② %m.ne 和 %-m.ne,指定输出的数据共占m列,其中有n位小数。

(9)g 格式符

用来输出实数,根据数值的大小,自动选用 f 格式或 e 格式(选择输出时占宽度较小的一种),且不输出无意义的零。

3、printf 函数格式字符使用总结

printf 函数的格式字符

格式字符说明
d,i以带符号的十进制形式输出整数(正数不输出符号)
o以八进制无符号形式输出整数(不输出前导符0)
x,X以十六进无符号形式输出整数(不输出前导符0x),用小写x则输出十六进制数的a~f时以小写形式输出,用大写X时,则以大写字母输出。
u以无符号十进制形式输出整数。
c以字符形式输出,一次输出一个字符。
s输出字符串。
f以小数形式输出单精度和双精度型,隐含输出6位小数。
e,E以指数e或E形式输出实数。
g,G选用%f或%e格式中宽度较短的一种格式,不输入无意义的0。用G时,若以指数形式输出,则指数以大写表示。

说明:如果需要输出字符%,则在“格式控制字符串”中连续用两个%表示。例如:

printf("%f%%",0.5); //输出结果:0.50000%
  • 1

在格式说明中,可以在%和上表中的格式字符之间插入以下几种附加符号。

(1)标志字符

标志字符包括-、+、#三种,具体含义如下表所示:

字符意义
-输出结果左对齐,右边填空格;默认则输出结果右对齐,左边填空格
+输出值为正值时冠以“+”号,为负时冠以“-”号
#八进制输出时加前缀 0;十六进制输出时加前缀 0x

例如:

printf("%6d,%d\n",111,2); //输出结果:   111,2
printf("%-6d,%d\n",111); //输出结果:111   ,2
printf("%+d,%+d\n",111,-111); //输出结果: +111,-111
printf("%#o,%#x\n",10,16); //输出结果:012,0x10
  • 1
  • 2
  • 3
  • 4
(2)宽度指示符

用来设置输出数据项的最小宽度,通常用十进制整数来表示输出的位数。如果输出数据项所需实际位数多于指定宽度,则按实际位数输出,如果实际位数少于指定的宽度则用空格填充。例如:

printf("%d,%d\n",888,12);  //输出结果:888(按实际需要宽度输出),12
printf("%6d,%d\n",888,12);  //输出结果:   888(左边补3个空格),12
printf("%-6d,%d\n",888,12);  //输出结果:888   ,12(右边补3个空格)
printf("%f,%d\n",888.88,12);  //输出结果:888.880000(按实际需要宽度输出),12
printf("%12f,%d\n",888,12);  //输出结果:  888.880000(左边补2个空格),12
printf("%g,%d\n",888,12);  //输出结果:888.88(%f格式比%e格式输出宽度小),12
printf("%8g,%d\n",888,12);  //输出结果:  888.88(左边补2个空格),12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
(3)精度指示符

以“.” 开头,用十进制整数指定其精度。对于 float 和 double 类型的浮点数可以用 m.n 的形式在指定宽度的同时指定其精度。其中,m 用以指定输出数据所占总的宽度,n 称为精度。例如:

printf("%.5d\n",888);  //输出结果:00888(数字前补0)
printf("%.0d\n",888);  //输出结果:888
printf("%d,%8.3f\n", 11, 888.88);  //输出结果:11, 888.880(左边补一个空格)
printf("%d,%8.1f\n", 11, 888.88);  //输出结果:11,   888.9(左边补3个空格)
printf("%d,%8.0f\n", 11, 888.88);  //输出结果:11,     888(左边补5个空格)
printf("%.5s","abcdefg");  //输出结果:abcde(截去超过的部分)
printf("%5s","abcdefg");  //输出结果:abcdefg(宽度不够,按实际宽度输出)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
(4)长度修正符

常用的长度修正符有 h 和 l 两种,h 表示输出项按短整型输出,l 表示输出项按长整型输出。

数据输出举例:

#include<stdio.h>
int main() {       
	int n1=123;
	long n2=1234567;
	float real=123.4567;
	printf("%d,%6d,%-6d,%2d\n",n1,n1,n1,n1);
	printf("%ld,%8ld,%4ld\n",n2,n2,n2);
	printf("%f,%10f,%10.2f,%-10.2f",real,real,real,real);
	printf("%s,%10.5s,%-10.5s","student","student","student");
	return 0;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

以上程序的运行结果如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/64787
推荐阅读
相关标签
  

闽ICP备14008679号