C语言程序设计中用printf函数输出数据

前言

记录暑假期间自学C语言的小问题和总结 


一、创建C语言项目

这里使用的是Visual Studio 2019 

首先新建一个C++空项目

然后在项目方案资源管理器中新建一个源文件

因为我们新建的是C语言但是创建项目中是C++的模板

所以需要将新建源文件后缀改为.C即可

如图所示:

最后按照C语言的正常格式进行书写头部文件和主函数

如图:

二、printf函数介绍

C语言本身不提供输入输出语句,输入输出操作是由C标准函数库中的函数来实现的

scanf函数和printf函数

printf函数的一般格式:

printf(格式控制,输出序列)

例如:

printf("%d,%c\n",i,c)

“格式控制” 称为格式控制字符串,简称格式字符串。它包括两个信息:

  1. 格式声明:由%和格式字符组成,如%d、%f等。其作用是将输出的数据转换成指定的格式输出。格式声明总是由%字符开始
  2. 普通字符:即需要在输出时原样输出的字符 如上面printf函数中双引号内的逗号、空格和换行符等等。

输出序列:程序需要输出的一些数据,可以是常量、变量或表达式。

接下来介绍格式字符

1.%d 

用来输出一个有符号的十进制整数

可以在格式声明中指定输出数据的域宽

如用“%5d”,指定输出数据占5列,输出的数据显示在此5列数据的右侧

域宽 其官方说法就是所占的列数

下面来举个例子可能会方便理解一些:

输入下面语句:

printf( "%5d\n%5d\n",12,-345 );

 效果:

    12(12前面有3个空格)

 -345(-345前面有1个空格)

关于域宽如果说还是不太理解可以参考一下这位老哥的博客指定printf输出域宽_bufanq-CSDN博客_c语言域宽

若输出 long(长整型)数据,在格式符d前加字母l(代表long),即%ld。

若输出 long long(双长整型)数据 ,在格式符d前加两个字母ll(代表 long long) 即%lld

2.%c 

用来输出一个字符

例如:

	char ch = 'a';
	printf( "%c\n", ch );

效果: 

3.%s

用来输出一个字符串

例如:

printf( "%s\n", "Chinese" );

效果:

4.%f 

用来输出实数(包括单、双精度、长双精度),以小数形式输出

有几种用法:

1.基本型 用%f

float型 单精度浮点型,对应%f。
double型 双精度浮点型,对应%lf

不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。

一般系统处理的方法:

实数中的整数部分全部输出,小数部分输出6位。

例如:

#include<stdio.h>
int main( ) {
	double a = 1.0;
	printf( "%f\n",a/3 );
	return 0;
}

运行结果:

 虽然a是双精度型,a/3的结果也是双精度型,但是用%f格式声明只能输出6位小数

2.指定数据宽度和小数位数 用%m.nf

例如:

#include<stdio.h>
int main( ) {
	double a = 1.0;
	printf( "%20.15f\n",a/3 );
	return 0;
}

指定了数据宽度20位和小数位数15位

运行结果:

这里小数点和0各算一位

注意0前面还有3个空格

所以最后是20位

应该注意:

一个双精度数只能保证15位有效数字的精确度,即使指定小数位数位50(如用%55.50f),也不能保证输出的50位都是有效数字。

效果:

可以看到从第15位开始数字就不再准确了 

同理

float型数据的存储只能保证6位的有效数字 double型数据只能保证15位的有效数字 根据实际运算可能会有1位的偏差 ,计算机输出的数字不都是绝对精确的。

例如:

#include<stdio.h>
int main( ) {
	float a;
	a = 10000 / 3.0;
	printf( "%f\n", a );
	return 0;
}

 效果:

本来计算的理论值应为333.33333***,但是由于float型数据只能保证6-7位有效数字,虽然程序输出了6位小数,但从左面第7位数字(即第3位小数)以后的数字并不保证绝对正确。

3. 输出的数据向左对齐 用%-m.nf

在m.n前加一个负号,其作用与%m.nf形式作用基本相同,担当数据长度不超过m时,数据向左靠,右端补空格。

如:

#include<stdio.h>
int main( ) {
	float a;
	a = 10000 / 3.0;
	printf( "%-25.15f,%25.15f\n", a, a );
	return 0;
}

 运行效果:

第一次输出a时输出结果向左端靠,右端空5列。

第二次输出a时输出结果向右端靠,左端空5列。 

5.%e

指定以指数形式输出实数
如果不指定输出数据所占的宽度和数字部分和小数位数 编译系统会自动给出数字部分的小数位数为6位,指数部分占5列

数值按照标准化指数形式输出(即小数点前必须有且只有一位非零数字)

例如:

#include<stdio.h>
int main( ) {
	printf( "%e\n", 123.456 );
	return 0;
}

运行结果:

小数点后面 字母e的前面占6列 e以及往后占5列 

其中e也可以写成大写E形式,不过输出的时候也会输出大写的E

6.其他格式符

  • %i 作用与%d格式符相同 按十进制整型数据的实际长度输出 一般习惯用%d而不用%i
  • %o 以八进制整数形式输出。将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制整数的一部分输出。

例如:

#include<stdio.h>
int main( ) {
	int a = -1;
	printf( "%d\t%o\n", a, a );
	return 0;
}

运行结果:

-1在内存单元中的存放形式(以补码形式存放在4个字节)如下:

11111111111111111111111111111111

用%d输出a时,得到-1,按%o输出时,按内存单元中实际的二进制数按3位一组构成八进制形式如上面的32个二进制数可以从右至左每3位为一组:

11,111,111,111,111,111,111,111,111,111,111

对应的十进制数就是3 7 7 7 7 7 7 7 7 7 7

即最终输出数

如果说对而原码、补码等和二进制、八进制等相关的知识还不太了解,可以查阅数据结构计算机组成原理等书

  • %x 以十六进制行书输出整数
  • %u 用来输出无符号型数据 以十进制整数形式输出
  • %g 用来输出浮点数 系统自动选f格式或e格式输出 选择里面长度较短的格式 不输出无意义的0

总结

本文前半部分介绍了C的运行环境和新建项目方法

后半段较为详细的介绍了在C语言中printf函数中的各个格式字符作用,往后会对其他函数进行总结

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WhispFlow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值