- 博客(72)
- 收藏
- 关注
原创 C语言基础要素(019):输出ASCII码表
计算机以二进制处理信息,但二进制对人类并不友好。比如说我们规定用二进制值 01000001 表示字母’A’,显然通过键盘输入或屏幕阅读此数据而理解它为字母A,是比较困难的。为了有效的使用信息,先驱者们创建了一种称为ASCII码的交换代码,全称是美国信息交换标准代码。ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
2025-04-03 22:42:45
1093
原创 C语言基础要素(018):循环控制:break与continue
有时你可能需要在循环过程中提前结束,比如说通过循环查找一个数值是否在一组数据中,如果找到且能提前退出循环,就可以避免后续的无用查找,提高程序效率。示例程序中,外层循环控制字母A-D,内层循环控制编号1-5。比如说游戏类程序,运行在这样一个无限循环中,在其中获取用户输入、渲染场景、输出画面等,直到用户按下退出按钮,此时设置循环控制变量为假,或使用break中断循环。在下面的程序,当i=3时,continue导致后续的语句不再执行,即本次循环体完成,然后跳转执行for的i++部分,以进行下次迭代。
2025-03-26 20:53:43
514
原创 C语言基础要素(017):退出条件循环:do-while
入口条件循环是在执行循环体语句之前先检测条件,循环语句有可能一次也不执行。而退出条件循环,它的判断条件则在执行循环体之后进行检查,这表示循环体中的语句至少被执行一次。
2025-03-17 22:08:38
369
原创 Proser:重大更新,新增数据检视功能
第二行发送的数据,使用proser提供的数值转换功能,分别输出(int)1024与(float)3.14,下图是Proser检视后4个字节的结果。Proser中检视逻辑是以字节数量为依据的,如。如图所示,在左侧检视窗口中可以看到,当前右侧高亮的数据,其文本为。需要8个字节,而如果我们仅选择4字节时,此时数据可解释为。这是前4个字节检视为整数的效果。
2025-03-17 21:11:29
245
原创 C语言基础要素(016):入口条件循环:while与for
程序按照我们书写的顺序依次执行语句,称为顺序结构。根据条件,在多个语句序列间选择执行一种情况,属于分支结构。还有一类在满足某个条件之前反复执行语句的结构,称为循环(迭代)语句。假定现在要完成“重要的事情说三遍”这一壮举,我们可以这么做。万一重要的事情要喋喋不休说个千百遍呢?显然,我们需要有更有效的方式去完成这件事,这正是循环语句的用武之地。
2025-03-16 22:02:59
572
原创 C语言基础要素(015):分支控制:switch 语句
不过,由于switch语句在匹配分支后仍会向后执行的原因,程序在匹配元音字母后,仍会输出default分支的信息。注释掉错误语句后,程序的输出结果或许有些意外,虽然程序仅与 case 1 匹配,但后续的case语句序列也被执行了。如果switch语句没有default分支也没有匹配到其他分支,则该switch语句不执行任何动作,所以下面的示例没有任何输出。switch语句是一种多路判定语句,它测试表达式是否与一些常量数值中的某一个值匹配,并执行相应的分支动作。每一个由case语句表达的分支,都由一个。
2025-03-15 17:16:37
400
原创 Proser:新增指令批次发送功能
起初设计时,希望指令集窗口自身包含指令的编辑功能,这部分功能与传输窗口的功能重合度高,所以设计上进行了简化,由用户在传输窗口输入指令,添加到指令集窗口,编辑时执行反向操作。Proser中的批次发送功能,是通过指令集进行管理的。这是一次批量执行后的示例。
2025-03-13 23:06:41
206
原创 C语言基础要素(014):分支控制:if 语句
其中的各表达式将被依次求值,一旦某个表达式结构为真,则执行与之关联的语句,并终止整个语句序列的执行。if语句自身就是一个语句,所以if语句的语句部分可以是if语句,读起来有些拗口,但实则很简单。复合语句在文法上相当于单条语句,这表示if的语句部分可以是复合语句,很多时候,使用复合语句使得我们的意图能被正确表达。下面的程序中,我们希望当swap为真时,交换a、b的值,代码在编排上的意图很明显,但是却不能达成目标。构成了if的唯一语句,之后的语句不管if成立与否都会执行,这可以通过使用复合语句解决。
2025-03-11 20:53:30
792
原创 C语言基础要素(013):逻辑运算
关系运算符使我们具有表达单一条件的能力,而逻辑运算让我们拥有多个关系处理的可能。&&||!加减(+、-)运算需要左右两个操作数,如a+b;与此类似,与或运算(&&、||)需要左右两个关系表达式,它们具有从左向右的结合性。如,a && b,表示先计算表达式a,成立的话再计算表达式b。赋值运算符(=)用于将右端值赋给左边变量,这被称为右结合性,非运算(!)与之类似,也具有右结合性;!0表示非0,即为真。下面是例子的分析,注释后的第一列表示整个逻辑运算的结果,以短横线分隔的文本分别表示表达式的真假值。
2025-03-09 10:19:45
986
原创 Proser:重大更新,增加标尺功能!
可以看到,数据前面有时间信息,为了让标尺与数据开头对齐,我们只需要将鼠标放在标尺开头左右拖动即可。如果游标位置不合适,可以在标尺上按下游标手柄拖动改变位置,也可以点击右键删除当前游标。生点来了,接下来我可以可以根据需要插入游标,只需在标尺上双击即可。对于较长的数据,我们可以先。为了数据查看的易用性,
2025-03-08 12:48:35
632
原创 C语言基础要素(012):关系运算
首先计算表达式expr1,如果其值为值(不等于0),则计算expr2的值,并以该值作为条件表达式的值;显然,条件表达式提供了一种二选一的机制,即expr2与expr3中只能有一个表达式被计算。第二:在第3个printf函数中,我“记不清”这些代码组合起来,那个表达式会优先计算,所以加上圆括号,以表达期望的计算顺序。非0值、0值与true和false之间有等价关系,任何能转换为0值的表达式,其结果也是false,反之也成立。在复杂的表达式中,为了清晰的表达正确的意图,也可以使用圆括号来约束计算顺序。
2025-03-07 01:03:15
397
原创 C语言基础要素(010):复合赋值
相信你会随口说出,width的值分别是6与5(表达式的结果),而不是2与3("="右边的第一个数值)。稍加思索,你会发现自己先计算了赋值运算符右侧的整个表达式,然后将结果赋予width变量,我们称这类运算符具有右结合性。我们不能将一个变量赋值给一个常数(它不是一个盒子),但是,同一个变量却可以出现在赋值运算符的左右两侧,在左边取盒子存储的概念,在右边取读取盒中数值的概念。我们曾以盒子类比了变量的存储特性,同样的我们也可以查看盒子中的物品,即读取变量的值。运算符完成了等同的操作,当使用这种简写形式时,
2025-03-04 20:51:54
309
原创 Proser:新增历史记录功能
针对最近一次的重复发送,Proser只是更新时间,而不会重复记录,这大概也是合理的。在协议调试类软件中,对发送历史的记录,也是让软件易用的一个特性,最后看一眼,没有QSS的历史窗口,确实很素颜。新版中已经新增了此功能。
2025-03-03 22:59:30
330
原创 C语言基础要素(009):基本运算符
在C语言中,加减乘除(+、-、*、/)运算符遵循数学运算规则及优先级顺序,这些运算符需要两个操作数。运算符+、-可以看到,同一运算符可以有多种语义,如 ‘-’,可以表达相减与负号的含义。双目运算符单目运算符除法运算符代表两数相除,整型与浮点型除法运算有很大的不同。这就是说,两个int类型的数据做除法时,结果是其商。当出现不能被整除的情况时,并不会得到小数部分,1/2的结果是0而非0.5,3/2会得到1,这个现象被称为截尾。当需要保留小数部分时,就需要两个浮点类型(如:double)的数值进行运算。
2025-03-03 01:09:57
464
原创 Proser:新增CRC计算辅助功能
一些协议中通常会使用一个周知的CRC检验,来保证协议的的正确性,2:计算光标前所有数值的CRC值。1:计算选中数值的CRC值。
2025-03-01 20:46:44
625
原创 C语言基础要素(008):使用变量
定义变量的同时可以给定一个值,这叫初始化变量;未初始化的变量,其值在程序运行时是不确定的。变量在定义之后可以多次设置值,这称为赋值。变量只能被初始化一次,但可以进行多次赋值,这两种操作均是通过赋值运算符(=)执行的。在初始化或赋值时,我们给了变量一个具体的值,如 ‘x’、3.14、200等,像这种通过字面表达就能知道其值的数值,称为字面量。可以在一行代码中同时定义并初始化同一类型的多个变量,变量之间用逗号分隔;但作为一个良好的实践,并不建议这样做。
2025-03-01 20:27:53
393
原创 C语言基础要素(007):从数据到运算
编程的目标之一是通过运算得到结果,而运算则是建立在操作数据之上的;即便简单如10以内加减法、复杂如游戏、模拟程序等皆是如此。在C语言中,我们可以使用变量来存储数据,每个变量又关联到一个具体的类型。比如:箱子里苹果的个数,可以用一个整型变量存储;而苹果的重量,以小数类型表述更切贴;因此,我们从类型与变量开始。
2025-02-28 00:46:24
265
原创 C++:使用逗号表达式保持代码优雅或凌乱
由于需求变更,需要在添加后对集合进行了一个测试,删除较早的项,这由函数。逗号表达式或许会让代码显得更加干脆,又或许更加凌乱,取决于你的看法。考虑一个向集合中添加项的例子。
2025-02-27 16:30:50
308
原创 C语言基础要素(006):转义字符入门
转义字符,顾名思议就是转换字符的意义;一个转义字符在书写上是两个或多个字符,但只表示一个含义。‘\n’就是一个转义字符,当printf函数碰到它时,并没有直接输出字符’\‘与’n’,而是将它们看作一个换行标记,以使后续的输出打印在新的一行。\t\\\"
2025-02-26 21:34:50
277
原创 Proser:新增数值转16进制值辅助功能
如我们希望1000以大端2字节表示,点击按钮即可调节,随后插入即可。实现了固定报文的发送,对于短小的协议,这有些小题大作。转换功能,具体的说,就是将10进制数的二进制表示插入到协议集里。接下来可以以同样的操作继续插入数值,当然,浮点数也是支持的!中,一条协议可以编写在多行,这样有利用与实际数据对照。辅助,为了更加易用,所以新增了。如图所示:只需要在编辑框中输入。,会自动转换出16进制表达。功能实现等同的功能,需要。
2025-02-24 22:07:48
280
原创 C语言基础要素(005):使用printf函数输出文本
这里两个程序的输出是一致的,相比较而言,第一个程序更加易读一些。这时我们可以采用断行输出的方式进行,方法是将长字符串划分为几个子字符串,每个字符串由一对双引号包围,书写上每行一个子串。上面的例子中,每行文本结尾处都有一个换行符,也许我们需要将这些文本做为一个自然段落输出,为此我们只需要删掉行尾的’\n’即可。,对于上面这种简短的文本信息,我们可以将两条文本信息合并在一起,作为一个参数传递给printf进行输出。字符,它用于产生一个新行,这样后续的输出将会从下一行的行首开始,这就是输出多行文本的诀窍了。
2025-02-24 21:34:21
338
原创 C语言基础要素(004):经典的 Hello, World!
学习程序设计语言的一个重要途径就是使用它编写程序。如果一开始就尝试构建一个复杂的程序,并由此详尽的介绍语言的各种特性,这当中诸多的细节与概念,会使许多人望而生畏。我们从经典的 “Hello, World!” 开始,叩开C语言编程的大门。
2025-02-24 00:59:00
602
原创 C语言基础要素(003):创建应用程序
控制台应用程序也称作为命令行程序。在Windows中,命令行界面以名为"命令提示符"的应用程序窗口形式存在。图形界面具有可视化特性,而命令行程序有交互简单的优势。我们将使用(简称VS2022)为首选开发环境,来完成课程的学习。
2025-02-23 12:01:28
493
原创 C语言基础要素(002):安装 Visual Studio 2022
Visual Studio 社区版是 Visual Studio 的免费版本,适用于个人开发者、开源项目、学术研究、教育和小型专业团队。它提供了与专业版和企业版相同的核心功能,并且没有功能限制。免费使用:社区版对个人开发者和小型团队免费开放。多语言支持:支持多种编程语言,包括 C#, C++, Python, JavaScript 等。丰富的扩展:可以通过 Visual Studio Marketplace 安装各种扩展,增强开发体验。强大的调试工具:提供高级调试功能,如断点、监视、调用堆栈等。
2025-02-23 00:41:04
736
原创 Proser:在项目中验证功能
在实现通信控制类软件时,可以通过第三方软件按协议发送报文,以此来验证控制软件在协议解析上的正确性,Proser在这一点在上很行,这正好是Proser在最初设计上的主旨,这个需求可以通过。在正确性得到验证后,我可能还需要随机生成一些数据进行验证。在Proser中一种方法是再建立一个协议,更有效的方法是。值域的设计,就是为了定制字段,如图所示,协议头/尾保持不变,其它定段使用了随机数生成器。怎么样,非常方便吧!这里我编辑了一些固定值字段,这非常便于控制软件验证自己处理的正确性。
2025-02-22 13:16:07
176
原创 C语言基础要素(001):前言
C语言基础要素》系列教程,精选C语言中,适用于入门阶段,必须100%掌握的知识点;故而对于很多语法细节以及一些语言特性,采取了舍弃的态度,但这并不妨碍对编程建立一个俯瞰视角。在课程中,我们仅使用。
2025-02-22 12:38:06
295
原创 C++多线程习题:非原创增加注释(03)
t2/t3/t4的索引计数都是0,但t3/t4同t1一样,不满足等待条件,程序启动后,整体状态如下,其中file一栏表示文件的内容,初始为空。瞅了第一眼之后,你可能和我一样,想通过函数把核心实现重构一下。注意:在t2执行时,其计数索引i为0,files[i]就是文件。,等待条件成立,i是0,对应的文件是fa,写入"3",等待条件成立,i是1,对应的文件是fb,写入"1"发出通知,让所有等待的线程有机会获得激活。假设t1再次被激活,等待条件。不满足,因此进入等待状态,成立,因此t2被激活,
2025-02-18 10:50:07
249
原创 Qt:窗口映射到视口
3:窗口与视口同样大:将窗口的(0,0)点映射到视口的(-hpos, 0)点,即滚动了窗口。1:窗口宽度 > 视口宽度:窗口的内容被缩小到视口中显示。2:窗口宽度 < 视口宽度:窗口的内容被放大到视口中显示。关系:窗口与视口间,始终是窗口映射到视口。
2025-02-17 17:27:59
211
原创 Proser:分隔符可以变颜色了
回想多年前做UI时,自绘的心劲非常大,现在每每遇到特殊控件时,只想用现有的几个控件拼凑一个。就比如这里选择颜色的色块,完全可以用一个。打算做个简单的自定义控件,提供几个有限的颜色选择一下即可,大多数用户,不会在这里浪费太多的心思。现在,看起来花里胡哨了。
2025-02-07 09:57:19
230
原创 C++多线程习题:非原创增加注释(02-2)
要求输出结果必须按ABC的顺序显示;程序开启3个线程,这3个线程的ID分别为A、B、C。每个线程将自己的ID在屏幕上打印5遍。
2025-01-25 22:38:46
241
原创 Proser:新增分隔符插入功能
最近又对Proser进行了一次升级,加入了插入分隔符功能,多多少少有点用处吧。在Proser中,插入分隔符被定位为辅助功能,因此做了设计上的简化。
2025-01-22 16:55:50
164
原创 C++:减轻枚举成员对命名的污染
使用传统枚举,可以解决这个问题,但这又容易造成名称冲突;而且在使用枚举量时,名称限定并不是标准语法。,可以解决传统枚举的作用域污染和类型安全性不足问题。但在需要将枚举成员当索引使用时,却需要类型转换。面对我们的需求: 把枚举量当整型用,尽量减少名称污染,同时保留类型限定修饰,这时通过。当然,这在C语言下是不可行的。C++ 11 标准引入了枚举类。支持,反而有些不方便。包装枚举可以达到目标。
2025-01-14 16:18:14
189
原创 Proser:升级为简易的通讯调试助手软件
不过,目前针对即时收发还没有发送历史、批量发送等功能,但后者却可以通过【协议集】功能完成,缺点就是针对短小的协议有点大材小用的感觉,这些等后期有时间再更新吧。我本来打算将Proser定位为一个直观的协议编辑、发送端模拟软件,像下面这样。但是按耐不住升级的心理,硬生生的把即时收发整合了进去,就像这样!
2025-01-12 23:28:15
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人