当前位置: 首页 > news >正文

《明解C语言入门篇》读书笔记四

目录

第四章:程序的循环控制

第一节:do语句

do语句

复合语句(程序块)中的声明

读取一定范围内的值

逻辑非运算符 · 德摩根定律

德摩根定律

求多个整数的和及平均值

复合赋值运算符

后置递增运算符和后置递减运算符

练习4-1

练习4-2

第二节:while语句

while语句

用递减运算符简化程序代码

数据递增

限定次数的循环操作

字符常量和putchar()函数

do语句和while语句

前置递增运算符和前置递减运算符

do语句的显示

逆向显示整数值

练习4-3

练习4-4

练习4-5

练习4-6

练习4-7

练习4-8

练习4-9

练习4-10

练习4-11

练习4-12

第四章:程序的循环控制

第一节:do语句

📖读书笔记

  • do语句

C语言中提供了三种循环语句,分别是do语句、while语句、for语句,每种都有自己的使用场景,下面使用do语句编写一个程序,来判断输入的数字是奇数还是偶数。

//输入一个整数,判断是奇数还是偶数
//这个代码在书中的代码基础上做了一点点修改,比如使用更加熟悉的printf()函数来输出
#include <stdio.h>
int main()
{int retry = 1, no = 0;//将retry初始化为1,是为了不与循环条件retry == 0冲突do{printf("请输入一个整数\n");scanf("%d", &no);if (no % 2) //这里用来判断奇数还是偶数printf("这个数字是奇数\n");elseprintf("这个数字是偶数\n");printf("想要重来一次吗(Yes输入0,NO输入其他整数)?\n");scanf("%d", &retry);} while (retry == 0); //如果retry结果为0,表示继续循环,这里相当于判断条件return 0;
}

上面代码的运行结果如下:

那么do-while循环的执行过程是怎样的呢?输出结果首先就让我们“输入一个整数”,可见并不是先判断循环条件(因为最开始retry为1,判断的条件为假),这就是do-while语句的特点,即无论循环条件是否为真,都会先执行一次循环,这次循环执行结束之后,再判断循环条件,如果为真就继续循环,为假就跳出循环。

上面的程序我们可以再次修改一下,写成更加符合我们习惯的代码。

//程序修改
int main()
{int num = 0;do{printf("请输入一个整数\n");scanf("%d", &num);if (num % 2 == 1) //这里用来判断奇数还是偶数printf("这个数字是奇数\n");elseprintf("这个数字是偶数\n");printf("继续请输入1,退出请输入0\n");scanf("%d", &num);if (num == 0)break;} while (1); //将循环条件设置恒为真,此时需要搭配break语句跳出循环return 0;
}

  • 复合语句(程序块)中的声明

在上面的代码中,no变量只在循环内部使用,应尽量声明在循环内部,这就是复合语句中的声明,但如果在循环外部声明,也没有什么问题。

  • 读取一定范围内的值

下面代码应该是个“猜”拳游戏,只不过猜的不是谁赢,而是出了什么。

//“猜”拳游戏(有一定的更改)
//规定0代表石头,1代表剪刀,2代表布
int main()
{int hand = 0;do{printf("请出拳【0-石头、1-剪刀、2-布】\n");scanf("%d", &hand);} while (hand < 0 || hand > 2);//如果没有0、1、2这三个值其中之一,就继续循环//选择了正确的出拳//下面将书中的switch语句换成了if语句,原因是if语句更加清晰,而且使用频率也比switch高if (hand == 0)printf("石头\n");else if (hand == 1)printf("剪刀\n");else if (hand == 2)printf("布\n");return 0;
}

上面的程序中,通过do-while循环的循环条件,实现了读取[0, 2]范围内的整数值。

  • 逻辑非运算符 · 德摩根定律

通过逻辑非运算符(!),就可以实现真变假,假变真,比如上面程序中的“hand < 0 || hand > 2”就可以改成“!(hand >= 0 && hand <= 2)”。

在C语言中,0表示假,一切非0表示真,所以!a的含义是:如果a为0(假),那么!a就是非0(真);如果a为非0(真),那么!a就是0(假)。

  • 德摩根定律

下面两个表达式称为德摩根定律:

  1. (x && y) == !(!x || !y),即用x && y做判断条件,与!(!x || !y)做判断条件相同。
  2. (x || y) == !(!x && !y),这两个表达式就是通过逻辑非运算符联系在一起的。
  • 求多个整数的和及平均值

不停的输入整数,显示其和及其平均值,代码如下:

//不停的输入整数,显示其和及其平均值(稍加修改)
int main()
{int num = 0, sum = 0, count = 0;//num表示输入的整数,sum是和,count是数字个数float avg = 0.0;//avg是平均值do{printf("请输入一个整数\n");scanf("%d", &num);sum += num;//求和count++;//统计个数avg = (float)sum / count;//求平均值,由于sum是整形,所以要强转成浮点型之后计算printf("和为%d,平均值为%f\n", sum, avg);//%f用来输出浮点数printf("继续请输入1,退出请输入0\n");scanf("%d", &num);//这里借用了num变量来判断是否继续执行循环if (num == 0)break;} while (1);return 0;
}

  • 复合赋值运算符

复合赋值运算符有:+=(加等)、-=(减等)、*=(乘等)、/=(除等)、%=(取模等)、&=(按位与等)、|=(按位或等)、^=(按位异或等)、<<=(左移等)、>>=(右移等)。

这些运算符相当于简写,比如“a += b”和“a = a + b”是一样的,都是将a+b的值再赋给a。

  • 后置递增运算符和后置递减运算符

如果是++,表示递增运算符,--表示递减运算符。如果写在变量或表达式后面,就是后置递增或递减,写在前面就是前置递增或递减。

a++;//后置++
a--;//后置--
++a;//前置++
--a;//前置--

对于后置++或--,由于运算符在后面,所以运算顺序是先赋值,再++或--;如果是前置++或--,则恰好相反。当然,如果没有赋值这一操作,前置和后置++或--其实没什么区别。

a = (b++);//先把b的值给a,之后b的值加1,此时a的值是b,b的值是b+1
a = (--b);//先让b减1,之后把b-1的值给a,此时a的值是b-1,b的值也是b-1//这里需要注意的是,++和--运算符是能够改变b本身的值的,这与+和-运算符不同
a = b + 1;//a的值是b+1,b的值不变

📝课后习题

  • 练习4-1

将下面代码改成可以输入、显示任意次。

int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);if (num == 0)printf("该整数为0\n");else if (num > 0)printf("该整数为正数\n");elseprintf("该整数为负数\n");return 0;
}

✏️解答:

//练习4-1
int main()
{int num = 0;do{printf("请输入一个整数\n");scanf("%d", &num);if (num == 0)printf("该整数为0\n");else if (num > 0)printf("该整数为正数\n");elseprintf("该整数为负数\n");printf("继续请输入1,退出请输入0\n");scanf("%d", &num);if (num == 0)break;} while (1);return 0;
}

  • 练习4-2

编写一段程序,像下面一样读取两个数的值,然后计算出它们之间所有整数的和。

请输入两个整数

整数 a:37

整数 b:28

大于等于28,小于等于37的所有整数的和是325

✏️解答:

//练习4-2
#include <stdlib.h>
int main()
{do{//由于每一次循环,都需要将sum和count置为0,所以不如放在循环内部声明int a = 0, b = 0, sum = 0, count = 0;//sum求和,count记录a和b之间的个数printf("请输入两个整数\n");scanf("%d %d", &a, &b);//这样写的话,scanf()函数可以读取两个值,中间用空格分隔//由于不知道a和b的大小关系,所以使用到绝对值函数abs(),需要包含头文件<stdlib.h>count = abs(a - b) - 1;//计算a和b之间的数字个数(不包括a和b)//这里使用while循环求和do {sum += ((a < b ? a : b) + count);count--;} while (count > 0);sum += (a + b);//加上端点值//这样打印是考虑到a和b的大小关系printf("大于等于%d,小于等于%d的所有整数的和是%d\n", (a < b ? a : b), (a > b ? a : b), sum);printf("继续请输入1,退出请输入0\n");scanf("%d", &a);//借用a变量判断是否继续循环if (a == 0)break;//这里需要注意的是,借用的变量不能乱借,要借能够重新赋值的变量,不然会造成结果出错} while (1);return 0;
}

注意,上面的代码在计算count变量时,如果不想使用abs()函数,可以这样写:

count = ((a > b ? a : b) - (a < b ? a : b)) - 1;

第二节:while语句

  • while语句

while语句再循环结构中使用的频率很高,它几乎与do-while语句相同,只不过要先判断循环条件的真假,再进行循环,而do-while循环至少执行一次循环,其他地方二者都是一样的。

下面看一个程序,从输入的整数开始倒数到0。

//从输入的整数开始倒数到0(有修改)
int main()
{int num = 0;printf("请输入一个正整数\n");scanf("%d", &num);while (num >= 0)printf("%d ", num--);//先打印num的值,之后--return 0;
}

  • 用递减运算符简化程序代码

这个简化后的版本就是我上面写的代码,也就是用“printf("%d ", num--)”代替“printf("%d ", num)和num--”。

  • 数据递增

编写一个程序,使其从0开始递增(减)到输入的整数。

//从0开始递增(减)到输入的整数(有修改)
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);int i = num;if (num > 0){while (i >= 0)printf("%d ", num - (i--));}else if (num < 0){while (i <= 0)printf("%d ", num - (i++));}elseprintf("%d ", num);return 0;
}

  • 限定次数的循环操作

这个早就接触过了,也就像上面循环条件中的“i >= 0”这样,通过i的改变,导致循环次数的改变,比如i如果是10,该循环就执行11次。这个循环条件可以是变量、常量、表达式、函数调用等。

  • 字符常量和putchar()函数

用英文单引号括起来的字符称为字符常量(只能括一个字符),比如'a'、'?'、'&'等。用英文双引号括起来的称为字符串(无论个数多少),比如""(空字符串)、" "(空格字符串)、"abc"等。

putchar()函数是用来显示一个字符的,也可以使用printf()函数替换。

//putchar()函数
int main()
{char a = '@';putchar('?');putchar(a);printf("%c\n", '?');//%c用来打印字符printf("%c\n", a);return 0;
}

可以看出,putchar()函数也没有换行,个人认为printf()函数更好用一些。

  • do语句和while语句

关于两者的对比,上面已经说过了,这里不再重复了。

  • 前置递增运算符和前置递减运算符

上面讲后置的时候已经说过了。

  • do语句的显示

作者说do-while语句和while语句中都含有while,因此有时很难区分,其实当我们看见do的时候,找到它下面的花括号({}),之后花括号后面的第一个while就是do-while语句中的while。不好区分很大原因是代码写的凌乱(记住一点,do-while循环和while循环一样,如果循环内部只有一行代码,可以不写{},但是那样就不好区分,因此我都是无论do-while循环内部有多少代码,都写上{}加以区分)。

  • 逆向显示整数值

下面看这个程序,输入一个非负整数,进行逆向显示,比如输入1963,输出结果为3691。

//逆向显示整数值
int main()
{int num = 0;printf("请输入一个正整数\n");scanf("%d", &num);while (num > 0){printf("%d", num % 10);//通过模10操作,拿到num的最后一位num /= 10;//去掉num的最后一位}//模拟输出结果,假设输入1963//第一次循环:num == 1963, num % 10 == 3(此时输出3), num / 10 == 196//第二次循环:num == 196, num % 10 == 6(此时输出6), num / 10 == 19//第三次循环:num == 19, num % 10 == 9(此时输出9), num / 10 == 1//第四次循环:num == 1, num % 10 == 1(此时输出1), num / 10 == 0, 退出循环return 0;
}

我们可以通过模10再除等10的操作,拿到一个数字的每一位(从个位开始)。

📝课后习题

  • 练习4-3

对第二节while语句中第一个代码(从输入的整数开始倒数到0)进行修改,当输入的值为负数的时候不执行换行操作。

注意:由于我对代码进行了一些修改,所以当输入负数时,结果不进入循环,程序直接结束。因此不如将练习4-3改为输入负数时,从该负数开始输出到0。

✏️解答:

//练习4-3
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);if (num > 0){while (num >= 0)printf("%d ", num--);}else if (num < 0){while (num <= 0)printf("%d ", num++);}elseprintf("%d ", num);return 0;
}

  • 练习4-4

对练习4-3的代码进行修改,使其递(增)减到1。

✏️解答:

将while循环中的“num >= 0”和“num <= 0”改成“num >= 1”和“num <= 1”即可。

  • 练习4-5

对“从0开始递增(减)到输入的整数”的程序进行修改,使其从1(-1)开始递增(减)。

✏️解答:

//练习4-5
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);int i = num;if (num > 0){while (i > 0)printf("%d ", num - (i--) + 1);}else if (num < 0){while (i < 0)printf("%d ", num - (i++) - 1);}elseprintf("%d ", num);return 0;
}

  • 练习4-6

编写一个程序,像下面这样按照升序显示出小于输入值的所有正偶数。

请输入一个整数:19

2 4 6 8 10 12 14 16 18

✏️解答:

//练习4-6
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);int i = num;while (num > 1)printf("%d ", i - (num -= 2));return 0;
}

  • 练习4-7

编写一个程序,像下面这样显示出小于输入的整数的所有2的乘方。

请输入一个整数:19

2 4 8 16

✏️解答:

//练习4-7
int main()
{int num = 0, i = 1;printf("请输入一个整数\n");scanf("%d", &num);while (num - (i * 2) > 0)printf("%d ", i *= 2);return 0;
}

  • 练习4-8

编写一个程序,使得输入一个整数,连续显示出该整数个'*',之后输出换行符,当输入的值小于1时,不输出换行符。

✏️解答:

//练习4-8
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);if (num > 0){while (num--)printf("%c", '*');printf("\n");}return 0;
}

  • 练习4-9

编写一个程序,像下面这样交替显示+和-,总个数等于所输入的整数值。另外,当输入0以下的整数时,什么也不显示。

正整数:13

+-+-+-+-+-+-+

✏️解答:

//练习4-9
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);if (num % 2 == 1){printf("+");num -= 1;}while (num > 0){printf("-+");num -= 2;}return 0;
}

  • 练习4-10

编写一个程序,像下面这样连续显示*,总个数等于所输入的整数值,当输入0以下的整数时,什么也不显示。

正整数:3

*

*

*

✏️解答:

//练习4-10
int main()
{int num = 0;printf("请输入一个整数\n");scanf("%d", &num);while ((num--) > 0)printf("*\n");return 0;
}

  • 练习4-11

对上面逆向显示整数值的代码进行修改,使其像下面这样,在显示输出结果的同时,显示输入的整数值。

请输入一个正整数:1963

1963的逆向显示的结果是3691。

✏️解答:

只需要在上面代码的while循环的上一行加上“printf("%d逆向显示的结果是", num);”即可。

  • 练习4-12

编写一个程序,像下面这样,读取一个正整数,显示其位数。

请输入一个正整数:1963

1963的位数是4。

✏️解答:

注意到while循环的循环次数就是num的位数,所以只要再定义一个变量count用来记录循环次数即可。

//练习4-11
int main()
{int num = 0, count = 0;//count用来记录循环次数printf("请输入一个正整数\n");scanf("%d", &num);int i = num;//记录原来的数字while (num > 0){num /= 10;//由于不需要输出末位数,所以直接执行num/10即可count++;}printf("%d的位数是%d", i, count);return 0;
}

补充练习:

编写一个程序,输入一个整数,正向拿取到该整数的每一位,中间用空格分隔,比如:

请输入一个整数:1963。

输出结果:1 9 6 3。

✏️解答:

//补充练习
//由于没有学习数组和函数递归,因此采用下面的方法
#include <math.h>
int main()
{int num = 0, count = 0;//count记录循环次数,也就是num的位数printf("请输入一个正整数\n");scanf("%d", &num);int i = num;//统计num的位数while (i > 0){i /= 10;count++;}while (count)printf("%d ", (num / (int)pow(10, --count)) % 10);//pow(double x, double y)是C语言的库函数,用来计算x的y次幂,头文件为<math.h>//pow()函数的返回值是浮点型,所以强转为int类型//模拟输出结果:已知num == 1963, count == 4//第一次循环,pow() == 10^3,num / 1000 == 1,1 % 10 == 1,count变成3//第二次循环,pow() == 10^2,num / 100 == 19,19 % 10 == 9,count变成2//第三次循环,pow() == 10^1,num / 10 == 196,196 % 10 == 6,count变成1//第四次循环,pow() == 10^0,num / 1 == 1963,1963 % 10 == 3,count变成0,退出循环return 0;
}

相关文章:

《明解C语言入门篇》读书笔记四

目录 第四章&#xff1a;程序的循环控制 第一节&#xff1a;do语句 do语句 复合语句&#xff08;程序块&#xff09;中的声明 读取一定范围内的值 逻辑非运算符 德摩根定律 德摩根定律 求多个整数的和及平均值 复合赋值运算符 后置递增运算符和后置递减运算符 练习…...

【每日随笔】文化属性 ② ( 高维度信息处理 | 强者思维形成 | 认知重构 | 资源捕获 | 进化路径 )

文章目录 一、高维度信息处理1、" 道 " - 高维度信息2、上士对待 " 道 " 的态度3、中士对待 " 道 " 的态度4、下士对待 " 道 " 的态度 二、形成强者思维1、认知重构 : 质疑本能 -> 信任惯性2、资源捕获 : 远神崇拜 -> 近身模仿3…...

terraform查看资源建的关联关系

一、使用 terraform graph 命令生成依赖关系图 该命令会生成资源间的依赖关系图&#xff08;DOT 格式&#xff09;&#xff0c;需配合 Graphviz 工具可视化。 1. 安装 Graphviz # Ubuntu/Debian sudo apt-get install graphviz# MacOS brew install graphviz 2. 生成并查看…...

win11报错 ‘wmic‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 的解决方案

方法一&#xff1a;检查环境变量 右键点击“此电脑”或“计算机”: 选择“属性”&#xff0c;然后点击“高级系统设置”。 进入环境变量设置&#xff1a; 在“系统属性”窗口中&#xff0c;点击“环境变量”。 检查Path变量&#xff1a; 在“系统变量”部分&#xff0c;找到并…...

监控易一体化运维:巡检管理,守护企业系统稳定的坚固防线

在数字化浪潮奔涌的当下&#xff0c;企业业务高度依赖信息技术系统&#xff0c;数据流量呈爆发式增长。从日常办公到核心业务运作&#xff0c;每一个环节都离不开稳定可靠的系统支持。在这种背景下&#xff0c;确保系统时刻处于最佳状态的重要性。而监控易的巡检管理功能&#…...

技能点总结

技能点总结 1、多线程导致事物失效的原因1.1 线程间竞争条件1.2 可见性问题1.3 原子性破坏1.4 死锁与活锁1.5 事务隔离级别问题1.5.1 脏读、不可重复读、幻读 1、多线程导致事物失效的原因 多线程环境下事物失效是一个常见问题&#xff0c;主要原因包括以下几个方面&#xff1…...

23种设计模式-行为型模式之命令模式(Java版本)

Java 命令模式&#xff08;Command Pattern&#xff09;详解 &#x1f9e0; 什么是命令模式&#xff1f; 命令模式是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使你可以使用不同的请求、队列、日志请求以及支持可撤销的操作。 命令模式将请求的…...

聊一聊接口测试的核心优势及价值

目录 一、核心优势 提前发现问题&#xff0c;降低修复成本 高稳定性与维护效率 全面覆盖复杂场景 性能与安全测试的基石 高度自动化与高效执行 支持微服务与分布式架构 二、核心价值 加速交付周期及降低维护成本 提升质量与用户体验 增强安全性及促进团队间的协作 …...

大学之大:索邦大学2025.4.27

索邦大学&#xff1a;千年学术传承与现代创新的交响 一、前身历史&#xff1a;从巴黎大学到现代索邦的千年脉络 1. 中世纪起源&#xff1a;欧洲学术之母的诞生 索邦大学的历史可追溯至9世纪&#xff0c;其前身巴黎大学被誉为“欧洲大学之母”。1257年&#xff0c;神学家罗伯特…...

python文本合并脚本

做数据集本地化时&#xff0c;用到了文本txt合并问题&#xff0c;用了trae -cn ai辅助测试一下效果&#xff0c;还可以吧&#xff0c;但还是不如人灵光&#xff0c;反复的小错&#xff0c;如果与对成手&#xff0c;应该很简单&#xff0c;这里只做了测试吧&#xff0c;南无阿弥…...

Coding Practice,48天强训(25)

Topic 1&#xff1a;笨小猴(质数判断的几种优化方式&#xff0c;容器使用的取舍&#xff09; 笨小猴__牛客网 #include <bits/stdc.h> using namespace std;bool isPrime(int n) {if(n < 1) return false;if(n < 3) return true; // 2和3是质数if(n % 2 0 …...

pytorch学习使用

1. 基础使用 1.1 基础信息 # 输出 torch 版本 print(torch.__version__)# 判断 cuda 是否可用 print(torch.cuda.is_available()) """ 2.7.0 False """1.2 创建tensor # 创建一个5*3的矩阵&#xff0c;初始值为0. print("-------- empty…...

《AI大模型应知应会100篇》第38篇:大模型与知识图谱结合的应用模式

第38篇&#xff1a;大模型与知识图谱结合的应用模式 摘要 随着大模型&#xff08;如GPT、BERT等&#xff09;和知识图谱技术的快速发展&#xff0c;两者的融合为构建更精准、可解释的智能系统提供了新的可能性。本文将深入探讨大模型与知识图谱的能力互补性、融合架构设计以及…...

TypeScript中的type

在 TypeScript 中&#xff0c;type 是一个非常重要的关键字&#xff0c;用于定义类型别名&#xff08;Type Alias&#xff09;。它允许你为一个类型创建一个新的名字&#xff0c;从而使代码更加简洁和可读。type 可以用来定义基本类型、联合类型、元组类型、对象类型等。以下是…...

数据库3,

describe dt drop table 删表 df delete from删行 usw update set where更新元素 iiv insert into values&#xff08;&#xff09;插入行 sf select from选行 select *选出所有行 &#xff08;ob order by 排序 由低到高 DESC由高到低 order by score&#…...

I-CON: A Unifying Framework for Representation Learning

1&#xff0c;本文关键词 I-Con框架、表征学习、KL散度、无监督分类、对比学习、聚类、降维、信息几何、监督学习、自监督学习、统一框架 2&#xff0c;术语表 术语解释I-Con本文提出的统一表征学习方法&#xff0c;全称Information Contrastive Learning&#xff0c;通过最…...

mybatis首个创建相关步骤

1。先关联数据库&#xff0c;用户&#xff0c;密码&#xff0c;数据库保持一致 2.添加包和类 1.User放和数据库属性一样的 package com.it.springbootmybatis01.pojo;lombok.Data lombok.AllArgsConstructor lombok.NoArgsConstructor public class User {private Integer i…...

vue3子传父——v-model辅助值传递

title: 子组件向父组件传值 date: 2025-04-27 19:11:09 tags: vue3 vue3子传父——v-model辅助值传递 一、子组件发出 1.步骤一创建emit对象 这个对象使用的是defineEmits进行的创建&#xff0c;emit的中文意思又叫发出&#xff0c;你就把他当成一个发出数据的函数方法来用…...

Golang | 向倒排索引上添加删除文档

syntax "proto3";package types;message Keyword {string Field 1; // 属性/类型/名称string Word 2; // 关键词 }message Document {string Id 1; //业务使用的唯一Id&#xff0c;索引上此Id不会重复uint64 IntId 2; //倒排索引上使用的文档id(业务侧不用管这…...

秒杀系统 Kafka 架构进阶优化

文章目录 前言1. Kafka Topic 分区&#xff08;Partition&#xff09;设计2. Kafka 消费者高可用部署&#xff08;Consumer Scaling&#xff09;3. Kafka Redis 多级限流降级设计4. 秒杀链路全链路追踪&#xff08;Tracing&#xff09;5. Kafka 死信队列&#xff08;DLQ&#…...

探索大语言模型(LLM):自监督学习——从数据内在规律中解锁AI的“自学”密码

文章目录 自监督学习&#xff1a;从数据内在规律中解锁AI的“自学”密码一、自监督学习的技术内核&#xff1a;用数据“自问自答”1. 语言建模&#xff1a;预测下一个单词2. 掩码语言模型&#xff08;MLM&#xff09;&#xff1a;填补文本空缺3. 句子顺序预测&#xff08;SOP&a…...

Java自定义注解详解

文章目录 一、注解基础注解的作用Java内置注解二、元注解@Retention@Target@Documented@Inherited@Repeatable(Java 8)三、创建自定义注解基本语法注解属性使用自定义注解四、注解的处理方式1. 编译时处理2. 运行时处理(反射)五、实际应用场景1. 依赖注入框架2. 单元测试框…...

在使用docker创建容器运行报错no main manifest attribute, in app.jar

原因就是在打包的时候pom配置有问题,重新配置再打包 我的dockerfile FROM openjdk:11 MAINTAINER yyf COPY *.jar /app.jar EXPOSE 8082 ENTRYPOINT ["java","-jar","app.jar"] 修改过后&#xff0c;经测试成功了 参考我的pom <?xml ver…...

C#中属性和字段的区别

在C# 中属性和字段的区别 在 C# 中&#xff0c;字段(field)和属性(property)都是用于存储数据的成员&#xff0c;但它们有重要的区别&#xff1a; 主要区别 1. 访问控制 - 字段&#xff1a;直接存储数据的变量 - 属性&#xff1a;通过访问器(get/set)控制对私有字段的…...

分析型数据库入门指南:如何选择适合你的实时分析工具?

一、什么是分析型数据库&#xff1f;为什么需要它&#xff1f; 据Gartner最新报告显示&#xff0c;超过75%的企业现已在关键业务部门部署了专门的分析型数据库&#xff0c;这一比例还在持续增长。 随着数据量呈指数级增长&#xff0c;传统数据库已无法满足复杂分析场景的需求…...

第三方软件检测报告:热门办公软件评估及功能表现如何?

第三方软件检测报告是重要文件。它用于对软件做专业评估。能反映软件各项性能。能反映软件安全性等指标。该报告为软件使用者提供客观参考。该报告为软件开发者提供客观参考。有助于发现问题。还能推动软件改进。 检测概述 本次检测针对一款热门办公软件。采用了多种先进技术…...

GPUStack昇腾Atlas300I duo部署模型DeepSeek-R1【GPUStack实战篇2】

2025年4月25日GPUStack发布了v0.6版本&#xff0c;为昇腾芯片910B&#xff08;1-4&#xff09;和310P3内置了MinIE推理&#xff0c;新增了310P芯片的支持&#xff0c;很感兴趣&#xff0c;所以我马上来捣鼓玩玩看哈 官方文档&#xff1a;https://docs.gpustack.ai/latest/insta…...

2025年邵阳市工程技术研究中心申报流程、条件、奖补

一、邵阳市工程技术研究中心申报条件 &#xff08;一&#xff09;工程技术研究中心主要依托科技型企业组建&#xff0c;依托单位应具有以下条件&#xff1a; 1. 具有较强技术创新意识的领导班子和技术水平高、工程化实践经验丰富的工程技术研发队伍&#xff0c;其中固定人员…...

【Python】Matplotlib:立体永生花绘制

本文代码部分实现参考自CSDN博客&#xff1a;https://blog.csdn.net/ak_bingbing/article/details/135852038 一、引言 Matplotlib作为Python生态中最著名的可视化库&#xff0c;其三维绘图功能可以创造出令人惊叹的数学艺术。本文将通过一个独特的参数方程&#xff0c;结合极…...

Spark Streaming核心编程总结(四)

一、有状态转化操作&#xff1a;UpdateStateByKey 概念与作用 UpdateStateByKey 用于在流式计算中跨批次维护状态&#xff08;如累加统计词频&#xff09;。它允许基于键值对形式的DStream&#xff0c;通过自定义状态更新函数&#xff0c;将历史状态与新数据结合&#xff0c;生…...

虚拟数字人:从虚拟到现实的跨越与未来展望

在人工智能和数字技术飞速发展的今天&#xff0c;虚拟数字人&#xff08;Digital Humans&#xff09;正逐渐从科幻走向现实&#xff0c;成为科技领域的新焦点。虚拟数字人不仅在娱乐、教育、客服等领域展现出巨大的应用潜力&#xff0c;还在不断推动着人机交互方式的变革。本文…...

RuoYi-Vue项目Docker镜像构建、推送与部署完整流程

RuoYi-Vue项目Docker镜像构建、推送与部署流程 一、本地构建镜像 1. 使用docker-compose构建镜像 基于docker-compose.yml文件&#xff0c;可以一次构建所有服务镜像&#xff1a; # 构建所有服务 docker-compose build# 或者构建并启动 docker-compose up -d --build若只需…...

MyBatis DTD [Element type “if“ must be declared]

MyBatis DTD [Element type "if" must be declared] <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g…...

【项目实训个人博客】multi-agent调研(1)

随着LLM的涌现&#xff0c;以LLM为中枢构建的Agent系统在近期受到了广泛的关注。Agent系统旨在利用LLM的归纳推理能力&#xff0c;通过为不同的Agent分配角色与任务信息&#xff0c;并配备相应的工具插件&#xff0c;从而完成复杂的任务。 目前更常见的框架大多聚焦于single-ag…...

OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理

OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理 目录 OpenSSH配置连接远程服务器MS ODBC驱动与Navicat数据库管理 一、MS ODBC驱动 1.1、安装到Windows后的表现形式 1.2、版本的互斥性 1.3、安装程序 1.4、配置后才可用 二、Navicat数据库管理工具 2.1、安…...

Day14(链表)——LeetCode234.回文链表141.环形链表

1前言 这几天脑子真转不动&#xff0c;本想刷点简单题养养脑子&#xff0c;结果发现简单题也想不到&#xff0c;只是看答案好理解了。。。 2 LeetCode234.回文链表(LeetCode234) 2.1 题目描述 即判断链表是否为回文链表&#xff0c;回文链表即链表的数值正向遍历与反向遍历结…...

Centos 7.6安装redis-6.2.6

1. 安装依赖 确保系统已经安装了必要的编译工具和库&#xff1a; sudo yum groupinstall "Development Tools" -y sudo yum install gcc make tcl -y 2. 解压 Redis 源码包 进入 /usr/local/ 目录并解压 redis-6.2.6.tar.gz 文件&#xff1a; cd /usr/local/ sudo ta…...

react的 Fiber 节点的链表存储

在React Fiber架构中&#xff0c;Fiber节点的链表存储是一种重要的数据结构组织方式&#xff0c;用于管理和遍历Fiber节点。以下是关于Fiber节点链表存储的详细介绍&#xff1a; 链表结构 单链表&#xff1a;React Fiber节点通过next指针形成单链表结构。每个Fiber节点都有一…...

MCU ADC参考电压变化怎么办?

在嵌入式系统设计中&#xff0c;ADC&#xff08;模数转换器&#xff09;精度直接决定了系统对模拟信号的感知能力。 然而&#xff0c;很多工程师对ADC参考电压&#xff08;VREF&#xff09;的认识仍然存在模糊&#xff0c;尤其是在电池供电、电压不稳场景下。 ADC参考电压定义…...

IP地址与子网计算工具

IP地址与子网计算工具 工具介绍 这是一个免费的在线IP地址与子网计算工具&#xff0c;专为网络工程师和IT维护人员设计。只需输入IPv4地址和子网掩码位数&#xff0c;即可快速计算出&#xff1a; 工具已发布在: http://mutou888.com/tools/net/ip/index.html 网络地址广播地…...

显卡驱动与cuda toolkit版本对应关系

查显卡对应驱动的网址&#xff1a; NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA 查这个的时候&#xff0c;不同的显卡对应不同的产品类型和系列&#xff0c;需要先选对这两个&#xff0c;才能找到对应的产品名称&#xff0c;比如A6000&#xff0c;是在RTX/Quadro类型&#xf…...

典籍查询界面增加我的收藏查询功能

1.效果展示 点击我的收藏后可以显示当前用户收藏的典籍 2.后端代码 3.前端代码...

浮点数:IEEE 754标准

IEEE 754 标准是一种由电气和电子工程师协会&#xff08;IEEE&#xff09;制定的浮点数表示的标准&#xff0c;广泛应用于计算机系统中&#xff0c;下面是详细介绍&#xff1a; 历史背景 在 IEEE 754 标准出现之前&#xff0c;不同的计算机系统采用各自的浮点数表示方法&…...

‌RISC-V架构的低功耗MCU多电压域优化设计

RISC-V核低功耗MCU的多电压域设计是一种优化电源管理以降低功耗的技术方案。该设计通过电源域划分、电压转换和时序管理等手段&#xff0c;有效降低了系统功耗并提升能效&#xff0c;适用于物联网和嵌入式系统等场景。 多电压域设计的基本原理是将芯片划分为多个独立供电区域&…...

【密码学——基础理论与应用】李子臣编著 第八章 SM2公钥密码算法 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇&#xff0c;请大佬批评指正&#xff01; 不带思考抄作业的请自动退出&#xff0c;我的并非全对&#xff0c;仅仅提供思维&#xff01; 题目 逐题解析 知识前提&#xff1a;模运算的分数怎么转…...

在winform中使用chromiumWebBrowser显示Echarts图表

首先&#xff0c;在项目引用中添加CefSharp&#xff0c;这个是谷歌的控件。 然后在form中添加一个chromiumWebBrower控件 在form初始化时&#xff0c;执行浏览器组件的初始化 //浏览器组件只初始化一次&#xff0c;所以放在主界面 CefSettings settings new CefSettings(); …...

基于ART光学跟踪系统打造具有开创性的人车互动VR解决方案

随着汽车行业的日益发展更多的车内内容量和更高的客户体验使得车辆越来越复杂复杂&#xff0c;。此外消费者的可持续意识与政府的限制&#xff0c;也迫使企业在整个生产过程中提高资源利用率。与此同时为保证利润&#xff0c;开发时间进一步缩短&#xff0c;预算也随之减少。 由…...

面试记录1-春招补录0427

快手面试记录&#xff1a; 面试官是个帅哥&#xff0c;嘿嘿&#xff0c;而且感觉很厉害的样子&#xff0c;说话也比较温柔。 最近同时面试了好几家公司&#xff0c;感觉面试官的水平差距还是比较明显的。快手这位面试官给我的印象很不错哇&#xff01; 一听他说话就知道他很厉害…...

【计算机网络性能优化】从基础理论到实战调优

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1&#xff1a;iPerf3带宽测试案例2&#xff1a;TCP窗口优化案例3&#xff1a;QoS流量整形 运行…...

Maven下载aspose依赖失败的解决方法

Maven下载aspose依赖失败的解决方法 日期&#xff1a;2025年4月27日 遇到问题&#xff1a; Could not find artifact com.aspose:aspose-cad:pom:23.9 in aliyunmaven (https://maven.aliyun.com/repository/public) [WARNING] The POM for com.aspose:aspose-cad:jar:23.9 is…...