培训笔记2
实用技巧
常用快捷键
复制粘贴剪贴撤回: Ctrl + c / v / x / z
移动代码块: Alt + 上下 或 鼠标拖动
快速复制: Alt + Shift + 上下
注释代码: Ctrl + /
缩进: Tab / Shift + Tab
删除单个单词: Ctrl + Backspace
切换窗口: Ctrl + Tab 应用内切换窗口
Alt + Tab 切换所有窗口
Win + Tab 切换应用
使用工具 & 软件
截图: Ctrl + Alt + A (QQ) / Win + Shift + S (系统)
录制: Win + G(系统) / OBS
笔记: Typora, Obsidian, 飞书云文档, Hexo搭建博客
视频课资源: MOOC,BiliBili
文件查找: everything
思维导图: Xmind
电脑防护: 火绒
博客 & 文档: 知乎,稀土掘金,Stack Overflow,Github,GPT
输入输出
格式化输入输出
1 | // 有参数时 |
输入
首先,scanf函数在读取除字符之外的输入的时候会遵守以下原则:
scanf函数每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符的时候才开始读取。
然后,scanf以删除的方式从缓冲区读入数据(来自标准输入设备的数据存储在缓冲区)
也就是说,scanf从缓冲区读入一个数据项,该数据项在缓冲区中就被清除掉了。而如果scanf需要读取一个数据项,发现缓冲区当前是空的,那么程序就会在scanf代码处阻塞,等待用户输入,scanf函数接收到相应的数据项之后,在缓冲区中将这一数据项清除,scanf函数返回,程序继续执行。
缓冲区
是内存空间的一部分。也就是说,在内存中预留了一定的存储空间,用来暂时保存输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区_和输出缓冲区。_
scanf遇到空格,回车,tab都可以结束输入,gets只有回车能结束输入(至少输入一个字符或数字)
字符输入输出
字符输出函数—-putchar()
把从输出缓冲区中读取单个字符输出到标准输出设备
putchar(变量)
1 |
|
字符输入函数—-getchar()
从输入缓冲区上读取单个字符,返回值是字符
1 |
|
字符串输入输出
我们在编程的时候,经常要对字符进行操作
字符串输出函数—-puts()
从缓冲区中读取已经存在的字符串(包括空白字符)输出到标准输出设备并换行
1 | puts(s);/*s 为字符串变量*/ |
格式里的字符串变量s在这里是数组 str 和指针 s。puts() 函数的作用与printf(“%s\n”,s)相同—–输出字符串并换行。
注 意:
①数组是同一类型的数据的集合,指针是用来表示内存地址的。后面会独立的介绍,在这里只要知道数组变量和指针变量可以存储字符串就行了。②puts()函数在遇到”\0”时,就会被替换为 “\n”,实现换行。
字符串输入函数—–gets()
读取输入缓冲区中存在的字符,直到遇到回车结束
1 |
|
注意:
①用 gets 函数获取的字符串一般是放在字符变量里,也是使用数组变量和指针变量。gets 函数除了有输入字符的功能外,还有换行的作用。
②scanf()函数和gets()函数有明显区别,scanf函数在遇到空格、回车、空白符时结束输入,gets ()函数仅在遇到回车时结束输入。
代码规范
- 写注释
- 变量命名(不能太随便太奇怪)
- 空行:独立代码块之间要空行
每个函数定义结束要空行等 - 缩进:if,switch,for等(条件下内部执行的语句要缩进)特殊:只有一条if可以放一行
- 分行:定义变量可以一个变量分一列
- 减少嵌套
- 空格:等号大小于号等双目运算符左右要空格(单目运算符前后不空格,如正负号)
分支
逻辑运算符
&&优先级大于||:在没有括号的情况下,||左右可以有带&&的组合式(优先结合&&)
if的括号里可以赋值,返回值就是赋的值:如if(a=0)则返回值是0,不执行结果
短路特性
- 如果if成立,
不再执行后面的else if和else - 如果&&的前面不成立,
不再执行后面的内容 - 如果||的前面成立,
不再执行后面的内容
多用于if赋值的情形
1 | // 短路特性 例子1-1 |
如以上结果输出a=1,c=4
因为先判断a<b部分结果为真返回1赋值给a,那么此时a为1
那么在||运算符中前部分为真就已经可以使其生效,那么后面的c=3语句就不再执行
1 | //例子1-2 |
以上结果输出a=0,c=4
因为a /= b的结果保留整数为0,此时a为0
对于&&运算符必须前后都为真才能生效,那么前部分为0已经为假此语句已经失效,所以后面的c = a-b语句不再执行
三目运算符
1 | 计算结果=表达式1 ? 表达式2 : 表达式3 |
若表达式1为真执行表达式2,为假执行表达式3
并且三目运算符可以嵌套,例如
1 | 计算结果=表达式1 ? 表达式2 : 表达式3 ? 表达式4 : 表达式5 |
switch,case语句
case后面只能是整型或char类型的常量(即整数和单字符’ ‘里面可以是数字和大小写字母等,注意1和’1’是不一样的)
case后面只能是常量,我们可以预先定义常量:
define定义
const定义
循环
while循环
while循环的语法结构类似于if语句
while循环中一定要注意在循环体内调整循环的次数
for循环
for(初始化 ; 判断条件 ; 条件变量调整)
如for( a=1 ; a<6 ; a++ )
for循环的三个表达式都可以省略
for( ; ; )依然可以执行(无限/死循环)
表达式2只要不是0都可以执行(输入一个非零数字或者空着都代表无限/死循环)
☆如果第二项为“非”直接跳出循环,不再执行第三项
☆第三项为单纯的a++和++a没有区别,但如果在第三项中调用a的值,则不同
break和continue
无论是三个循环中的哪一个,都可以在循环体中任意位置使用break和continue,break的作用是在满足你设置好的条件语句后,结束循环,而continue是跳过循环体中在continue之后的所有语句,开始进入下一次循环的流程