总之,从今天开始,我就算正式学习编程了。
写博客主要还是弥补我差的可怕的记忆力,把自己的一些在看书时的想法记下来。( 哼,老子坐等脑机接口成熟的那一天,我看谁还背书 ~)
说实话,学了C 我才发现,我是所有语言都不想学,好在编程语言看上去结构比英语简单点。
本人懒的一批,之前的不想记,就从书的4.4开始吧。
printf() 和 scanf()
计算机和我的直接对话函数,现在看上去用的最多。
关于printf()
不同的转换说明(输出格式)会按照不同的方式对储存的数转换。
函数体:printf(格式字符串,项1,项2...)
以下是主要的打印转换:
%a | 浮点,十六进制,和 p计数法0x12.3p5=(116^1+216 ^ 0 +316 ^(-1))(2 ^ 5) //额,哪位大佬能解释下这种计数方式有什么用吗? |
%A | 和上面一样诶 |
%d | 十进制整数 |
%e | 浮点e计数 |
%E | 同上,只是打印时e变大E |
%f | 浮点十进制 |
%c | 一个字符 |
%g | 自动选择%f或%e//指数小于-4或大于等于精度1用%e |
%G | 同上 |
%o | 无符号八进制整数 |
%p | 指针(好像挺重要,然而还没学。。。) |
%s | 字符串 |
%u | 无符号十进制整数 |
%x | 无符号16进制整数 |
%X | 同上 |
%%、%’ | 打印%后面的字符 |
/
/红豆包 红豆包 红豆包 红豆包 红豆包 红豆包 红豆包 红豆包 红豆包
/红豆包 红豆包 红豆包 红豆包 红豆包 红豆包 红豆包 红豆包
/红豆包 红豆包 红豆包 红豆包 红豆包
/
printf()转换说明修饰
进一步编排要打印的字符在窗口中的位置和格式
修饰符表格:
修饰符 | 含义 |
---|---|
- | 待打印项左对齐 |
+ | 显示数的正负号 |
空格 | 数为正,打印空格;数为负,打印减号 |
# | 个人感觉和保留有效数字挺像,书上写的是把结果转换为另一种形式。%o,以零开始打印;%x,以0x开始打印;%f %d,保证有小数点;%G,防止后面零被删除。 |
0 | 数前补零,对于整数格式,若出现-标记或指定精度,则被忽略 |
数字 | 最小字段宽度,被超过自动补充宽度 |
.数字 | 精度 |
h,hh,l,ll | 和整形转换说明一起使用 |
L | 和和浮点转换说明一起使用 |
j | 表示intmax_t,uintmax_t类型的值定义在stdint.h中 |
t | 和整形一起用,表示ptrdiff_t类型。ptrdiff_t指两个指针差值的类型 |
z | 和整形转换说明一起用,表示size_t类型的值。size_t是sizeof返回的类型。 |
转换只是将一个数值翻译出来并打印,并不能改变数值
printf本身有返回值,返回的是打印字符的个数,如果输出有误,返回一个负数。
关于scanf()
- 在了解指针之前,如果使用scanf(),要在变量名前加&,但把字符串读到数组中,不要使用&。
- scanf()使用空白把输入分成多个字段,系统会依次匹配,但%c转换说明会读取每一个字符。
- scanf()函数所用的转换说明几乎与printf()函数相同。主要区别是对于float和double类型,printf90函数有%f、%e、%E、%g、%G转换说明,而scanf()只把它们用于float类型,对于double要用l修饰符。
- scanf()除空格字符外普通字符必须与输入字符相匹配 如
scanf("%d,%d",&n,&m)
输入时要有逗号。 - scanf()的返回值,若没读取到任何项,scanf()返回0,当其检测到文件结尾时,会返回EOF(是个啥。。。据说通常被定义为-1)。
-空白字符,除了%c模式,scanf()会在读取输入时跳过非空白字符前的所有空白字符,然后一直读取,直至遇到空白字符或别的类型的字符
。
c语言中:
float浮点数7位有效数字。
double双精度数16位有效数字。
单精度数的尾数用23位存储,加上默认的小数
点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 <
10^8,所以说单精度浮点数的有效位数是e799bee5baa6e79fa5e98193e4b893e5b19e313333373866657位。 双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16
< 9007199254740992 < 10^17,所以双精度的有效位数是16位
单精度浮点数的实际有效精度为24
位二进制,这相当于 24*log102≈7.2
位10进制的精度,所以平时我们说“单精度浮点数具有7位精度”。(精度的理解:当从1.000…02变化为1.000…12时,变动范围为
2-23,考虑到因为四舍五入而得到的1倍精度提高,所以单精度浮点数可以反映2-24的数值变化,即24位二进制精度)
浮点数7位有效数字。(应该是单精度数)
双精度数16位有效数字。
浮点数取值范围:
负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。
双精度数取值范围:
负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。
//百度网友 夜礼服假面MP ↩︎