1 数据输出

我们之前已经使用过printf()函数来实现数据在控制台上输出

#include<stdio.h>
int main(){printf("hello world");return 0;
}

具体的用法是

printf("数据模板",数据1,数据2,...)// 数据模板表示输出数据的形式,里面包含占位符,打印的时候使用具体的数据依次的替换占位符输出结果

现在我们就来具体的说明一下printf函数的用法

主要是两个方面:占位符代表的数据类型和占位符代表的数据格式

1.1 占位符的类型

1.1.1 字符字面量

输出数据的时候要考虑到不同数据的数据类型

一个简单的例子

#include<stdio.h>
int main(){char letter = 97;printf("%dn",letter);printf("%c",letter);return 0;
}

输出的结果

我们给一个char类型的变量letter赋值97,

如果使用占位符%d输出的话,那么得到的结果是97;

如果使用占位符%c输出的话,那么得到的结果是字符c;

这里的原因就是在c语言当中char类型是用来保存字符的,但是字符数据的保存形式和整数类型的保存形式是一样的,都是把数据以2进制的形式储存到内存当中

具体的工作就是,把数据 97 转换为 2进制数(结果是1100001)

char类型的数据占用的空间大小是 1 个字节相当于 8 位的2进制数,因此上图就是变量letter在内存当中保存的数据

那么在读数据的时候:

使用%d作为占位符,那么原始数据就被解释位整数,转换为 10进制刚好就是97;

如果使用 %c 作为占位符,那么原始的数据就被解释为字符,那么对于字符就需要把数据进行一次翻译

ascii码表

在上表中 2进制 01100001 对应的字符就是 a

对于字符型数据来说储存的形式和整数是一样的,只不过在读取数据的时候需要做一次编码翻译

再看一个例子

#include<stdio.h>
int main(){int letter = 97;printf("%dn",letter);printf("%c",letter);return 0;
}

把变量的类型改为int,得到的结果是一样的

也就是说 char 类型和 int 类型都是用来保存整数,只不过 char 类型的储存空间比 short int 还要小只有 8 位二进制数(1个字节),那么在输出数据的时候使用占位符来控制输出的是整数还是通过字符编码翻译之后的字符

上面讲的是原理,在实际工作当中,我们不会通过整数来给字符类型赋值(不需要背那张表),通常都会使用字符字面量,把一个字符使用 单引号' 包裹起来

#include<stdio.h>
int main(){char letter = 'a';printf("%dn",letter);printf("%c",letter);return 0;
}

使用 'a' 给 letter 赋值, 'a' 会自动的转换为整数 97,不需要人为的干预,可以理解为编译器自动的帮我们去查字符编码表

#include<stdio.h>
int main(){int letter = 'a';printf("%dn",letter);printf("%c",letter);return 0;
}

使用 int 来处理,结果也是一样的

1.1.2 不能自动转换的情况

再看一个例子

#include<stdio.h>
int main(){int a = 123;printf("%dn", a);printf("%f", a);return 0;
}

同样的数据,使用不同的占位符输出的结果就不一样

这是因为 %f 会把数据按照浮点数进行输出, %d 会把数据以整数进行输出,而整数和浮点数在内存当中储存的形式是不一样的,所以以 %f 去解析整数类型的数据就会出错

1.1.3 占位符可以代表的数据类型

这里是printf()函数针对不同的数据类型使用的占位符,这里有几个问题需要注意

首先,对于浮点数 float 和 double 在内存当中储存的形式是一样的,所以有时候使用相同的占位符不会出错

#include<stdio.h>
int main(){float a = 1.23456;double b = 1.23456;printf("%fn", a);printf("%lfn", a);printf("%fn",b);printf("%lf",b);return 0;
}

使用 %f 和 %lf 输出的结果是一样的

但是 float 和 double 保存的数据精度不同,所以对于精度要求很高的数 %f 和 %lf 就能看出区别了

其次是关于整数数据

整数的表示形式除了 10进制之外,还可以使用 2进制,8进制,16进制

在c语言当中可以

使用 0b开头的整型字面量表示 2进制数;

使用 0开头的整型字面量表示 8进制数;

使用 0x开头的整型字面量表示 16进制数(使用a,b,c,d,e,f代表大于9的数)

#include<stdio.h>
int main(){int a = 13; //10进制数int b = 0b101; //2进制数int c = 011; //八进制数int d = 0x1a; //16进制数printf("%dn%dn%dn%d",a,b,c,d);return 0;
}

%d 会把不同进制的数转换为10进制输出

2进制的 101 -> 10进制的 5;

8进制的 11 -> 10进制的 9;

16进制的 1a -> 10进制的 26;

也可以把10进制的数转为其他进制,或者其他进制相互转换

#include<stdio.h>
int main(){int a = 123; //10进制数printf("%dn%on%x",a,a,a);return 0;
}

使用%o占位符输出8进制,%x输出16进制

10进制的数123 相当于 八进制的 173,十六进制的 7b;

为了方便区分不同进制的数,也可以在占位符当中使用#来输出类型前缀

#include<stdio.h>
int main(){int a = 123; //10进制数printf("%dn%#on%#x",a,a,a);return 0;
}

使用%#o,和%#x 更容易看出整数的进制

1.2 占位符控制输出的格式

可以在占位符 % 和表示类型的字母之间加入一些内容来控制数据输出的格式

比如控制输出内容的最小宽度

#include<stdio.h>
int main(){int a = 123;printf("每天吃%d个汉堡n",a);//原样输出printf("每天吃%5d个汉堡n",a);//最小宽度是5printf("每天吃%2d个汉堡",a);//超过最小宽度原样输出return 0;
}

%<宽度><类型>可以控制输出数据的的最小宽度

也可以控制输出数据的精度

#include<stdio.h>
int main(){double a = 3.1415926;printf("圆周率是%lfn",a);//默认输出小数点后6位printf("圆周率是%.2lfn",a);//只输出到小数点后2位printf("圆周率是%5.2lf",a);//输出小数点后2位,并保证最小宽度5return 0;
}

%<.精度><数据类型>可以控制数据输出的精度

完整的格式是

%[旗标][宽度][.精度]<类型>

中括号[] 的内容可以省略,其中:

旗标:可以使用-,+,空格,#

-:表示左对齐;

+:表示在数据前面添加正负号

空格:表示不显示正数的符号,但是使用空格占位

#:表示显示其他进制数据的前缀(0,0x)

精度在浮点型类型的数据表示小数点后的位数,对于正数表示宽度,剩余位置用0补齐对于其他类型的数据表示截取的最大长度

#include<stdio.h>
int main(){int a = 123456;printf("%+.8d",a);//显示正号,宽度为8,不足8为补零return 0;
}

%+.8d表示显示正号,宽度为8,用0补位

2 数据输入

在程序当中除了需要输出数据,还需要获取用户的输入数据

获取输入数据的方法有很多,这里只介绍一个常用的格式化输入函数scanf()

举个例子,计算长方形的面积,需要用户手动的输入长和宽

#include<stdio.h>
int main(){double w,h,s;//声明变量w:宽,h:长,s:面积scanf("%lf,%lf",&w,&h);//程序等待用户输入,并且扫面输入缓冲区s=w*h;printf("%lf",s);return 0;
}

当程序执行到 scanf() 的时候,会暂停等待用户输入,用户输入完成之后按回车,会自动地扫描用户输入的内容,根据内容的模板来匹配数据,把数据保存到对应的变量地址,这里的 & 表示取地址符,&w 表示变量 w 的地址

结果

sacnf("输入模板",变量地址1,变量地址2,...)

需要注意的是 printf() 后面的参数是变量的值, scanf() 后面的参数是变量的地址,需要加&表示把输入的数据保存到变量的地址中

c++ double 只输出五位_c 语言第四章 在控制台上数据的输入和输出相关推荐

  1. c语言中向计算机输入,C语言中字符数据的输入和输出

    字符的输出 C语言中使用putchar函数来输出字符数据 #include int main() { char a,b,c,d; //定义字符变量a,b,c,d a = 'F'; b = 'U'; c ...

  2. if语句写阶跃函数C语言,C语言第四章分支语句.ppt

    C语言第四章分支语句.ppt 例: 输入三个实数,按从小到大的顺序输出. main( ) {float a,b,c,t; scanf("%f,%f,%f ",&a,& ...

  3. 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt

    <高级语言程序设计_C语言(第六章 数组.ppt>由会员分享,可在线阅读,更多相关<高级语言程序设计_C语言(第六章 数组.ppt(30页珍藏版)>请在人人文库网上搜索. 1. ...

  4. C语言实验(十二):函数(输入年份输出日历、闰年判断、元旦星期几)

    C语言实验(十二):函数(输入年份输出日历.闰年判断.元旦星期几) 一.判断闰年和某年元旦星期几的函数 1. 编写一个函数,输入年份,判断是否为闰年: 2. 编写一个函数,输入年份,判断当年元旦所对应 ...

  5. (c语言数据结构)用链式队列的方式实现输入12345,输出12345操作——期末数据结构程序设计

    用链式队列的方式实现输入12345,输出12345操作 文章目录 用链式队列的方式实现输入12345,输出12345操作 1.队列的定义 2.队列的初始化 3.判空操作 4.入队操作 5.出队操作 6 ...

  6. 第三课 数据的输入与输出

    我们编程解题少不了与计算机进行信息交流,把已知数据输入计算机,让计算机把处 理结果等输出,这就是程序设计中数据的输入和输出.C++标准库提供了丰富的输入/输出 功能,本课讨论 C++编程中最基本和最常 ...

  7. scanf可不可以输入浮点型_数据的输入和输出

    一.基本数据类型C 的基本数据类型有 short.int.long.char.float.double 等.类型多且杂,学习时极易厌烦,这时建议使用思维导图来整理这些繁杂但有章的知识.做思维导图时首先 ...

  8. 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)

    再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...

  9. 74hc595点亮点阵式led交通灯灯 c语言程序,89C51单片机C语言用四个74hc595控制四个LED实现交通灯...

    89C51单片机C语言用四个74hc595控制四个LED实现交通灯 (2009-05-16 18:52:38) 标签: 教育 #include #define uchar unsigned char ...

最新文章

  1. 计算机硬盘清理,电脑磁盘清理,详细教您电脑磁盘怎么清理
  2. python链表的创建_python数据结构之链表的实例讲解
  3. 【Linux】一步一步学Linux——nm命令(250)
  4. Spark 运行机制
  5. 网站运营过程中经常触碰的几大误区
  6. 轻量级数据库sqlite的编译
  7. 【Codeforces】894E.Ralph and Mushrooms Tarjan缩点+DP
  8. 学习scala03 控制结构
  9. CMarkup类简介
  10. 遍历Java中的列表的方法
  11. access窗体独立运行_由浅入深学习网络设备模拟器HCL 第一篇 安装与运行
  12. 干货!NB-IoTLoRa物联网项目实操来了!
  13. import * as x from 'xx' 和 import x from 'xx'
  14. iOS中相对1970的时间转换为现在时间
  15. 出差沈阳记之初来乍到
  16. 用python代码辅助自己背诵英语四级单词
  17. Unity 托管内存(Managed Memory)
  18. 提交代码遇到 Everything up-to-date 或 提交代码遇到 On branch master Your branch and ‘origin/master‘ have diverg
  19. 如何快速统计Excel单元格中有几个数字
  20. 百度的春晚战事:如何扛住腾讯、阿里都宕机的量?

热门文章

  1. python中的daemon守护进程实现方法
  2. 贪心:Wiggle Subsequence 摇摆序列
  3. apt Could not get lock /var/lib/dpkg/lock 解决方案
  4. Visual Studio 2005 Team System下载地址
  5. 以太坊RLP机制分析
  6. IIS 7.5 去掉index.php 西数服务器
  7. [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---Linux环境搭建
  8. 2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用
  9. nodeJS之eventproxy源码解读
  10. 这样就算会了PHP么?-10