- 挑战记录
- 一、第一天
- 二、第二天
- 三、第三天
- 四、第四天
- 五、第五天
- 六、第六天
- 日、第七天
挑战记录
一、第一天
Study plan
1.学习 C 语言历史啊啥的
2. 数据类型
3. 字符串和格式化输入输出
真实实施情况
1: 学习 C语言历史啥的
额,这个感觉没啥写的,……
2: C语言数据类型
C语言 和 Python 在数据类型这里感觉还是有点不适应的,每个变量都需要初始化,包括变量的范围啊啥的,
好多也只是什么范围,也没明确……,还是花了较多
时间的一块知识吧。
1: int 类型
short、 unsigned、 long、 long long、 signed 各种关键词灵活搭配😵
范围什么的也是看系统的,写不了感觉
2: char 类型
这个是占一个字节的,用单引号(')包含的就是 字符常量,[这里又和 Python 有区别了,Python 的单引号、
双引号没区别的],编译器发现后,字符常量便会被
转换成相应的代码值进行运算了😄
3: _Bool 类型
得到的不是 True 或 False,而是真得1,假得0
4: 可移植类型🙈
头文件 stdint.h 和 inttypes.h 里
暂时应该用不到吧,pass 🤡
5: float、double、long double
可以用 十进制 表示,也可以用 e记数法 表示,还可以用 十六进制p记数法 表示
例如
十进制 1.1
e记数法 1.1e-10
p记数法 0x6.1ap10
这里细节很多啊
如太大了会导致浮点数上溢,输出 inf 等表示无穷大的值
如太小了会导致浮点数下溢,极端情况可能导致全部位为0
6: 复数和序数类型🙈
pass pass🤡
3: 格式化输入输出
printf()
printf("这里放输出内容和转换说明",这边放需要输出的变量、常量、表达式如2+2[会输出4])
注意,printf() 转换说明和后面的对不上会得到一个无意义的值,不会报错,需要注意
---------转换说明 & 输出---------------
转换说明 输出
%a %A 用十六进制p记数法表示浮点数,a和A区别在于输出的p的大小写
%c 单个字符
%d %i 有符号十进制整数
%o 无符号八进制整数
%e %E 用科学记数法表示浮点数,e和E区别在于输出e和E的大小写
%f 浮点数十进制记数法
%g %G 根据值的不同自动选择%f或%e,%e格式用于指数小于-4或大于等于精度时
%p 指针
%s 字符串
%u 无符号十进制整数
%x %X 无符号十六进制整数
%% 打印一个百分号
--------转换说明修饰符[控制输出格式]-----------
修饰符 含义
标记 -[左对齐] +[有符号值:正数显示+负数显示-] 空格[有符号值:若为正则前导空格,
若为负-号或+号覆盖空格] #[转换为另一种格式] 0[对于数值,用前导0代替空格
填充字段宽度对于整数出现-或指定精度则忽略该标记] 等,可以不适用或使用多个标
记 如 %-d
数字 最小字段宽度,放不下系统会自动使用更宽的字段,多了会在前面用空格填充 如 %4d
.数字 精度,对于%e,%E,%f转换,表示小数点右边数字的位数
,对于%g, %G转换表示有效数字最大位数
,对于%s,表示待打印字符的最大数量
, 对整型转换表示待打印数字的最小位数
如果.数字这的数字大于输出元素的个数,会在前面填充0
%.f 和 %.0f相同
当转换说明和数据类型不匹配时会有各式各样的错误
仔细仔细再仔细
printf()返回值是输出的元素个数,包括空格和看不见的换行符,如%d会先把他转换成值在计算个数
给字符串断行的三种方法
1: 使用多个 printf() 时,如果没有 \n ,后面的 printf() 会紧跟在末尾输出
2: 反斜杠(\) 和 Enter键组合断行,使得光标移到下一行,这样下一行就能接在末
尾输出,但是不能有缩进,不然那些缩进都会是作为空格输出
3: 字符串连接 <"x"y">< "x" "y">都会输出 xy ,会自动连接,"" 与 "" 之间的空格无效
scanf()
scanf() 读取基本变量类型需要在变量名前加 &, 如果把字符串读入字符数组中不要用 &
scanf() 通过空白(换行符 制表符 空格) 把输入分为多个字段,在进行转换说明和字段匹配时会跳过空白
--------------scanf() 转换说明---------------
转换说明 含义
%c 把输入解释为字符
%d 把输入解释为有符号十进制整数
%e %f %g %a[四个都有大写版本] 把输入解释为浮点数
%i 把输入解释为有符号十进制整数
%o 把输入解释为有符号八进制整数
%p 把输入解释为指针(地址)
%s 把输入解释为字符串,从第一个非空白字符开始到下一个空白字符前的所有字符都是输入
%u 把输入解释成无符号十进制整数
%x %X 把输入解释成有符号十六进制整数
--------------scanf() 修饰符-------------------
修饰符 含义
* 抑制赋值,如"%*d"
数字 最大字段宽度,输入达到最大字段宽度或空白(空格 制表表 换行符)时停止
z “%zd” 表示 sizeof() 的返回类型
scanf() 的返回值是成功读取的项数。
如果没读取任何项,且需要读取一个数字而用户却输入一个非数值字符串
则返回0,当 scanf() 检测到 文件结尾 时会返回 EOF, EOF 通常定义为 -1
printf() 中的 * 修饰符,如果不想预先指定一段宽度可以用这个, * 修饰符代替字段宽度
但是这样需要在后面的项中写上字段宽度
如 printf("%*d", 6, 2); ==> 得到的是字段宽度为6的2
printf("%*.*f", 6, 2, 3.257) == > 得到字段宽度为6,小数保留两位的3.25
主要就是说加上 * 后,在后面要先写描述 * 的值
scanf() 中的 * 修饰符与 printf() 中的不同
scanf() 会跳过相应的输入项,只要转义字符前加上*输入的就没用了
- 学习 C 语言历史啊啥的
- C语言数据类型
- 格式化输入输出
二、第二天第一天总结
感觉还是学到很多东西的,但是写出来额,感觉很差劲,主要就是数据类型和转换说明需要稍微注意一下吧,然后一些细节还是得多看书多应用巩固,像数据范围啊,printf()抓换说明和输出项的实现原理啊等……
额,我在写啥🤡
Study plan
1.运算符、表达式和语句
2. 循环
3. 级联 / 多路分支
真实实施情况
1: 运算符、表达式和语句
直接先贴一下目前学到的运算符的优先级先
优先级 | 运算符 | 结合关系 |
---|---|---|
1 | () | 从左到右 |
2 | ! + - ++ – | 从右到左(单目的 + 和 -) |
3 | * / % | 从左到右 |
4 | + - | 从左到右 |
5 | < <= > >= | 从左到右 |
6 | == != | 从左到右 |
7 | && | 从左到右 |
8 | || | 从左到右 |
9 | ? : (条件运算符) | 从右到左 |
10 | = += -= *= /= %= | 从右到左 |
11 | ,(逗号运算符) | 从左到右 |
看到一个之前没接触过的知识
% 运算其实就是 x - (x / y) * y 这样算出来的
我觉得挺重要的知识
副作用 和 序列点
副作用是对数据对象或文件的修改,如 x = 50 的副作用就是把变量 x 赋值为 50
序列点
分号, 完整表达式[不是另一个更大的表达式的子表达式]
在该点上,所有副作用都在进入下一步前发生
注意 y = (4 + x++) + (6 + x++) 这个表达式,由于 (4 + x++) 和 (6 + x++) 都是
(4 + x++) + (6 + x++) 表达式的子表达式,所以他不是完整表达式,因此,只能保证运算完后x加2,但是
不能保证是左边的x先加还是右边的x先加因此要避免这样写
要注意 逗号运算符 和 && 和 || 也是序列点
逗号运算符(,)常用于for但是不限于for,还是记了一下
他有两个性质
1: 它保证了被它分隔的表达式从左到右求值,它就是个序列点,保证副作用都在它前面发生
2: 整个逗号表达式的值是右侧项的值
第二点的解释 x = (2, 3) 这样写 x 会被赋值为 3
2: 循环
有固定次数 --》 for
必须执行一次 --》 do while
其他情况 --》 while
while (关系表达式) {
执行语句;
}
for ( 初始化 ; 测试条件 ; 更新 ) { // 这边的 三个 表达式都是完整表达式,副作用都会产生
执行语句;
}
for 很灵活,需要多实践
do {
执行语句;
} while (关系表达式);
break 跳出整个循环
continue 跳出单次循环
3: 级联 / 多路分支
级联格式
if () {
} else if () {
} else {
}
多路分支
switch(表达式) { # 表达式只能是整数型的结果
case val1: # val 值只能是常量,也可以是常量计算的表达式
语句
case val2:
语句
default:
语句
}
getchar() 和 putchar()
因为专一,所以专业把可能,它只处理字符,但它会比 scanf() 和 printf() 更快
- 运算符、表达式和语句
- 循环
- 级联 / 多路分支
三、第三天第二天总结
还寻思着这点东西一下就搞完了,结果看了四个小时🤡,是我看书的方法不对吗🤡
写完博客几分钟,为什么看书搞了 4h ,晕了
Study plan
1.函数
2. 字符输入输出的验证
3. 数组和指针
真实实施情况
1: 函数
2: 字符输入输出验证
3: 数组和指针
- [] 函数
- [] 字符输入输出的验证
- [] 数组和指针
四、第四天第三天总结
Study plan
1.字符串
2. 存储类别
3. 文件 *** 作
真实实施情况
1: 字符串
2: 存储类别
3: 文件 *** 作
- [] 字符串
- [] 存储类别
- [] 字符串
五、第五天第四天总结
Study plan
1.其他数据形式
2. 位的 *** 作
3. C预处理器和C库
真实实施情况
1: 其他数据形式
2: 位的 *** 作
3: C预处理器和C库
- [] 其他数据形式
- [] 位的 *** 作
- [] C预处理器和C库
六、第六天第五天总结
Study plan
1.高级数据表示
真实实施情况
1: 高级数据表示
- [] 高级数据表示
日、第七天第六天天总结
最终总结
只是自己对自己知识的一个回顾,写的不全也不好,额,嗯。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)