挑战有 Python 基础一周学完 C 基础

挑战有 Python 基础一周学完 C 基础,第1张

文章目录
  • 挑战记录
  • 一、第一天
  • 二、第二天
  • 三、第三天
  • 四、第四天
  • 五、第五天
  • 六、第六天
  • 日、第七天


挑战记录
一、第一天

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: 高级数据表示


  • [] 高级数据表示

第六天天总结

日、第七天

最终总结

只是自己对自己知识的一个回顾,写的不全也不好,额,嗯。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/673374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存