【C语言进阶】 12. 假期测评①
day01
1. 转义字符的判断
以下不正确的定义语句是( )
A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B: char c2[] = {‘\x10’, ‘\xa’, ‘\8’};
C: char c1[] = {‘1’,‘2’,‘3’,‘4’,‘5’};
D: int y[5+3]={0, 1, 3, 5, 7, 9};
【答案解析】 B
本题B选项考查转义字符,有如下格式,但八进制数字是0-7,没有8,故B选项中’\8’是错误的
\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0
2. &数组名和数组名
有如下定义语句,则正确的输入语句是【多选】( )
int b;
char c[10];
A: scanf(“%d%s”,&b,&c);
B:scanf(“%d%s”,&b,c);
C: scanf(“%d%s”,b,c);
D: scanf(“%d%s”,b,&c);
【答案解析】AB
&c和c两个地址值是一样的,程序的效果相同, 也没错,但同时也必须把变量b的地址给scanf, 故CD错误,AB正确
3. 动态内存开辟的使用场景
这里设计的函数返回值为int* 返回一个整数列表,如果只是单纯的在函数体内部创建整数列表作为返回值,那么就大错特错,在函数体内创建的列表只在该函数体内有效,退出函数体,函数栈帧就销毁了,该指针属于野指针
day02
4. 计算字符个数(转义字符)
以下程序段的输出结果是( )
#include<stdio.h>
int main()
{char s[] = "\\123456\123456\t";printf("%d\n", strlen(s));return 0;
}
A: 12 B: 13 C: 16 D: 以上都不对
【答案解析】A
这里考查转义字符,注意:==\ 表示字符’‘,\123表示字符’{',\t表示制表符,==这些都是一个字符
5. 浮点型的比较 和 数组的初始化
对于下面的说法,正确的是( )
A: 对于 struct X{short s;int i;char c;},sizeof(X)等于sizeof( s ) + sizeof( i ) + sizeof( c )
B: 对于某个double变量 a,可以使用 a == 0.0 来判断其是否为零
C: 初始化方式 char a[14] = “Hello, world!”; 和char a[14]; a = “Hello, world!”;的效果相同
D: 以上说法都不对
【答案解析】D
A选项,没有考虑内存对齐。
B选项,考察double类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。
C选项,a为数组首地址是常量不能改变,
所以A,B,C都是错的,选择D
6. while(~scanf(…))的用法
while (~scanf("%d%d",&n,&m))
等效于 while (scanf("%d%d",&n,&m)!=EOF)
因为读到文件的结束符时,scanf返回值是EOF,也就是-1,而~(-1)的作用就是对-1的按位取反。
-1的原码是1000 0001,因此-1的补码就是1111 1111。
~(-1)就是包括符号位都取反,变成0000 0000
day03
7. 全局变量的使用
以下程序的输出结果为( )
#include <stdio.h>
int i;
void prt()
{for (i = 5; i < 8; i++)printf("%c", '*');printf("\t");
}
int main()
{for (i = 5; i <= 8; i++)prt();return 0;
}
A: *** B: *** *** *** *** C: *** *** D: * * *
答案解析:
正确答案:A
全局变量i,在main()中修改为5,第一次在prt()中执行循环输出三次’*',i被修改为8, 回到main()中第二次调用prt()
时,i<8为假,循环结束没输出,执行一次print(“\t”),再次回到主函数后i++变为9, i<=8为假,循环结束;
8. 二分查找 和 追加思想
【答案解析】
暴力破解:遍历数组找出最小值即可
更优思想:采用二分查找,这个题主要分析三种旋转情况 [1, 2, 3, 4, 5],使用中间值与右端进行比较。
- 中间大于右边 [3, 4, 5, 1, 2],这种情况下,最小数一定在右边;则left = middle + 1
- 中间等于右边 [1, 0, 1, 1, 1], 这个是[0, 1, 1, 1, 1] 旋转过来的,这时候需要缩小范围 right–;,注意不能是
left++,因为是非降序数组,所以要缩小右边范围,把较小值向右推,符合我们的判断规则。 - 中间小于右边 [5, 1, 2, 3, 4], 这种情况下,最小数字则在左半边;则right = middle
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen) {if (rotateArrayLen == 0) return 0;int left = 0, right = rotateArrayLen - 1, mid;if (rotateArray[right] > rotateArray[left]) return rotateArray[0];while (left < right) {mid = left + (right - left) / 2;if (rotateArray[mid] > rotateArray[right]) left = mid + 1;else if (rotateArray[mid] == rotateArray[right]) right--;else right = mid;}return rotateArray[left];
}
最优思想:在数组后追加自身数组,找到第一个比之前数组元素小的数字
day04
9. for循环第一项
设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )
A:n=0;while(ch=getchar()!='\n')n++;
B:n=0;while(getchar()!='\n')n++;
C:for(n=0;getchar()!='\n';n++);
D:n=0;for(ch=getchar();ch!='\n';n++);
【答案解析】D
对于for循环,其中第一项初始化表达式: ch=getchar();只执行一次,因此ch只从输入流中取一个字符,
之后就再不会取字符,因此会死循环
10. 回车 == ‘\n’
若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )
#include <stdio.h>
int main()
{char c;int v0 = 0,v1 = 0,v2 = 0;do{switch (c = getchar()){case'a':case'A':case'e':case'E':case'i':case'I':case'o':case'O':case'u':case'U':v1 += 1;default:v0 += 1; v2 += 1;}} while (c != '\n');printf("v0=%d,v1=%d,v2=%d\n", v0, v1, v2);return 0;
}
A: v0=7,v1=4,v2=7
B: v0=8,v1=4,V2=8
C: v0=11,v1=4,v2=11
D: v0=12,v1=4,v2=12
答案解析:
正确答案:D
代码switch语句中没有break,则每次找到入口进入后,顺序执行到代码块结束为止。例如当c为’A’时,从case 'A’进入,
先后执行v1+=1;v0+=1;v2+=1;,而当c为’p’时,从default进入,先后执行v0+=1;v2+=1;,容易看出最终v0和v2是相
等的
而回车表示的 ’ \n ’ 10 ,会进入default 然后再跳出循环,所以一共是12次
11. 插入排序和选择排序的区别
以下程序段的功能是( )
int a[] = { 4, 0, 2, 3, 1 }, i, j, t;
for (i = 1; i < 5; i++)
{t = a[i];j = i - 1;while (j >= 0 && t < a[j]){a[j + 1] = a[j];--j;}a[j + 1] = t;
}
A: 对数组a进行插入排序(升序) B: 对数组a进行插入排序(升序)
C: 对数组a进行选择排序(升序) D: 对数组a进行选择排序(降序)
【答案解析】B
这是一个升序插入排序算法,读完即懂。结合画图分析
第i次排序时,t=a[i]作为临时变量保存这一次待插入值,j=i-1故而while循环中j是从下标i的前一项开始向下标0遍历,
判断t<a[j]为真时a[j+1]=a[j],j+1在遍历之初是等于i的,也就是将下标i位置用前边较大的值覆盖,依次把前边的元素后移,直到a[j]不大于t的时候将t插入到下标j+1位置,使得前i个元素达到有序,
方便第i+1次排序操作,所以第i次排序时前边i-1个元素都是有序的
12. 标记思想(最优) 和 排序思想(暴力)
1、【答案解析】:
使用标记的方式就可以找出重复的数字,数组中出现过哪个数字就把对应数字作为下标在对应位置1,表示已经标记出现过,如果哪个数据对应位已经置1,则表示就是重复的数字。有了重复的数字,拿 [1, n] 的总和减去去掉重复数据的数组总和就是丢失的数据。
标准版: 其实使用标记法时出现的数字对应位每次 ++ ,**则最后出现0次的就是丢失,出现2次的就是重复的,**这样的方式也可以,不过需要多一次遍历。
int* findErrorNums(int* nums, int numsSize, int* returnSize) {*returnSize = 2;//遍历nums数组,将其中数据对应的位置1, 哪一位如果已经重置过则意味着数据重复了int* arr = (int*)calloc(numsSize + 1, sizeof(int));//申请numsSize个整形空间,并初始化为0int* ret = (int*)calloc(*returnSize, sizeof(int));//申请2个整形空间,并初始化为0int cur_sum = 0, old_sum = 0;for (int i = 0; i < numsSize; i++) {if (arr[nums[i]] == 1) { //这个数字在上边数组的对应位置已经置过1了,则重复ret[0] = nums[i];//找到重复的数字}arr[nums[i]] = 1; //将标记数组的对应数据位置1old_sum += i + 1; // 1~n的求和cur_sum += nums[i]; //当前数组中的数据求和(多了一个重复的,少了一个丢失的)}ret[1] = old_sum - (cur_sum - ret[0]);//原始总和,减去去掉重复后的当前总和就是丢失的数字free(arr);return ret;
}
标准版:(自己实现)
int* findErrorNums(int* nums, int numsSize, int* returnSize) {*returnSize = 2;int* same = (int*)malloc(sizeof(int) * numsSize);assert(same);memset(same, 0, numsSize*4);for (int i = 0; i < numsSize; i++){same[nums[i]-1]++;}int* tmp = (int*)malloc(8);for (int i = 0; i < numsSize; i++){if (same[i] == 0){tmp[1] = i + 1;}if (same[i] == 2){tmp[0] = i + 1;}}return tmp;
}
暴力方法:将数组排好序,找到出现问题的地方,针对特殊情况还需要处理,非常麻烦 o(╥﹏╥)o
day05
12. 二分思想的运用场景
当题目中出现非降序和时间复杂度O(logN)的关键信息时,可采取二分的思想
13. unsigned 类型
如果使用int 类型,那么A^B得到的是若是负数-1,会发生溢出的现象(-1的补码为全1)死循环,所以采取unsigned int 类型
day06
14. do while循环
以下描述中正确的是( )
A: 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B: do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C: 在do-while循环体中,不一定要有能使while后面表达式的值变为零(“假”)的操作
D: do-while循环中,根据情况可以省略while
【答案解析】C
do-while循环中的循环体通常都是复合语句代码块,A错误,
while(表达式)后面要写分号,B错误,
while不能省,D错误
C中如果出现没有使while后面表达式的值变为零(“假”)的操作,则表示死循环(do…while…是可以出现死循环的情况的类似于while(1))
15. 默认返回类型
在c语言中,一个函数不写返回值类型,默认的返回类型是( )
A: int B: char C: void D: 都不是
【答案解析】A
一个函数不写返回值类型,默认的返回类型是int(可不是void喔), 但不提倡这么做,代码可读性不高
day08
16. 数组的定义
下列定义数组的语句中正确的是【多选】( )
A:
#define size 10
char str1[size], str2[size+2];
B:
char str[];
C:int num['10'];
D:int n=5; int a[n][n+2];
答案解析:
正确答案:AC
A选项:宏替换,没问题;
B选项:非法定义,一维数组必须定义数组元素个数;
C选项:字符’0’,转换成十进制为48,所以该选项最终为int num[48];
D选项:错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不做特殊考虑。
17. 抵消思想
【答案解析】:
一个数组中有一个数字出现次数大于 n/2 ,从第 0 个字符开始,假设它就是最多的那个数字,遇到相同的数字则计数 +1 , 遇到不同的则计数 -1 ,其实就是互相消耗,等到计数为 0 的时候,表示本次互拼完毕,从下一个字符重新开始互拼**,但是归根结底出现次数大于 n/2 的这个数字数量更多,因此也是最后保留的字符。**
示例: “23335” 首先从字符 2 开始计数 1 ,遇到 3 ,不同则 -1 ,互拼消耗 重新从剩下的 “335” 开始的过程,这时候保存的字符为 3 ,遇到 3 则计数 +1 , 遇到5则计数 -1 ,在计数不为 0 时,走到末尾保存的字符就是个数超过 n/2的字符
int majorityElement(int* nums, int numsSize) {int count = 1;int tmp = nums[0];for (int i = 1; i < numsSize; i++) {if (tmp == nums[i]) {//与保存的字符相同则计数+1count++;}else {//与保存的字符不同则计数-1count--;//计数为0表示有可能保存的字符不是最多的字符,换下一个if (count == 0) tmp = nums[i + 1];}}return tmp;
}
day09
18. 指针数组
下列程序的输出是( )
#include<stdio.h>
int main()
{int a[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, *p[4], i;for (i = 0; i < 4; i++)p[i] = &a[i * 3];//printf("%d\n",p[3][2]);return 0;
}
A: 上述程序有错误 B: 6 C: 8 D: 12
【答案解析】D
p是一个指针数组,(int* p[4]
)
p[i] = &a[i*3]相当于是把数组a每3个一组 分开并把每组的首地址存在p数组,此时p类似一个4行3列的二维数组,p[3][2]
就是4行第3个元素12
19. 逗号表达式
以下逗号表达式的值为( )
(x = 4 * 5 , x * 5) , x + 5;
A: 25 B: 20 C: 100 D: 45
【答案解析】A
逗号表达式的优先级是最低的,所以最后计算 此题去掉括号后的表达式,和原表达式是等价的,先计算4*5
并赋值给x,x变为20,中间x*5
并没有改变x的值,最后一项x+5
值是25,也就是整个表达式的值
20. 左右划分
【答案解析】:
暴力不考虑其他的因素的话,将所有数据乘积起来,然后遍历数组除以当前位置数据即可。
更优解法:将乘积分为两次进行,第一次先将每个位置左边的数据乘积计算出来放到返回数组中,后边第二次循环将
对应位置右边的数据乘积计算出来与返回数组对应位置的左半边乘积相乘得到结果。
示例: 一个数组 int nums[] = {2, 3, 4} 。 int left = 1, right = 1; 计算左侧乘积:
第0个元素的左边乘积, arr[0] = left 然后计算第1位左侧乘积left*=nums[0] -> left = 1*2
第1个元素的左边乘积, arr[1] = left 然后计算第2位左侧乘积left*=nums[1] -> left = 1*2*3
第2个元素的左边乘积, arr[2] = left 然后计算第3位左侧乘积 已经没必要了,因为第2元素是末尾元素了
一次循环完毕后,返回数组中每个元素存储的都是自己左侧元素的乘积。 arr[]中的值: [1, 2, 6] 计算右侧乘积:
第2个元素的右边乘积,arr[2] *= right
然后计算第1位右侧乘积right*=nums[2] -> right =1*4
第1个元素的右边乘积,arr[1] *= right
然后计算第0位右侧乘积right*=nums[1] -> right =1*4*3
第0个元素的右边乘积,arr[0] *= right
然后计算第-1位右侧乘积 -1位已经不需要计算了
循环完毕后,返回数组中的每个元素都是其他元素的乘积了arr[2]*=1; arr[1]*=4; arr[0]*=12
空间复杂度:O(1)
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {int* ret = (int*)malloc(numsSize * sizeof(int));*returnSize = numsSize;int left = 1, right = 1;//第一次循环,将当前位置左边的数字乘积填入返回数组中for (int i = 0; i < numsSize; i++) {ret[i] = left;// 1 nums[0] nums[0]*nums[1] num[0]*nums[1]*nums[2] ....left *= nums[i];}//第二次循环,对于返回数组的元素从后往前进行,每次乘以右边元素的乘积for (int i = numsSize - 1; i >= 0; i--) {ret[i] *= right; //最后一个成绩不需要乘以最后元素,乘以1就行right *= nums[i]; //right变化:1 nums[end] nums[end]*nums[end-1] .....}return ret;
}
空间复杂度:O(N) 更容易理解
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{//除自身的乘积的的值 等于 左乘积 * 右乘积int leftPro[numsSize];int rightPro[numsSize];//左乘积leftPro[0] = 1;for(int i = 1; i < numsSize; i++){leftPro[i] = leftPro[i-1] * nums[i-1];}//右乘积rightPro[numsSize-1] = 1;for(int i = numsSize - 1 - 1; i >= 0 ; i--){rightPro[i] = rightPro[i+1] * nums[i+1];}*returnSize = numsSize;// 返回数组int * returnNums = (int *)malloc(sizeof(int) * numsSize);for(int i =0; i < numsSize; i++){returnNums[i] = leftPro[i] * rightPro[i];}return returnNums;
}
相关文章:

【C语言进阶】 12. 假期测评①
day01 1. 转义字符的判断 以下不正确的定义语句是( ) A: double x[5] {2.0, 4.0, 6.0, 8.0, 10.0}; B: char c2[] {‘\x10’, ‘\xa’, ‘\8’}; C: char c1[] {‘1’,‘2’,‘3’,‘4’,‘5’}; D: int y[53]{0, 1, 3, 5, 7, 9}; 【答案解析】 B 本…...

给程序加个进度条吧,1行Python代码,快速添加~
大家好,这里是程序员晚枫。 你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆…...
常见的Keil5编译报错及其原因和解决方法
以下是几种常见的Keil5编译报错及其原因和解决方法: "Error: L6218E: Undefined symbol"(未定义符号错误) 这通常是由于缺少对应的库文件或者代码中有未声明的变量或函数引起的。解决方法是检查相应的库文件是否已正确添加到工程中…...

Django 实现瀑布流
需求分析 现在是 "图片为王"的时代,在浏览一些网站时,经常会看到类似于这种满屏都是图片。图片大小不一,却按空间排列,就这是瀑布流布局。 以瀑布流形式布局,从数据库中取出图片每次取出等量(7 …...

传输层协议----UDP/TCP
文章目录前言一、再谈端口号端口号的划分认识知名端口号(Well-Know Port Number)两个问题nestatpidof二、UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项基于UDP的应用层协议二、TCP协议TCP协议段格式可靠性问题确认应答(ACK)机制流量控制六个标志位PSHUG…...

教你如何快速在Linux中找到某个目录中最大的文件
工作中经常会有查看某个目录下最大的文件的需求,比如在运维工作中,发现某个系统或功能不工作了,经排查发现是服务器空间满了…那么接下来就需要清理一下临时文件或者日志文件,或者其他不需要的文件,那么就会想要查看一…...

Java二叉树面试题讲解
Java二叉树面试题讲解🚗1.检查两颗树是否相同🚕2.另一颗树的子树🚙3.二叉树最大深度🚌4.判断一颗二叉树是否是平衡二叉树🚎5.对称二叉树🚓6.获取树中结点个数🚑7.判断一个树是不是完全二叉树&am…...
rancher2.6进阶之nfs动态创建pv配置
添加NFS client provisioner 动态提供K8s后端存储卷 1.1.前提说明 1.1.1.说明 NFS client provisioner 利用 NFS Server 给 Kubernetes 作为持久存储的后端,并且动态提供PV。 默认 rancher 2 的存储类中的提供者不包含NFS,需要手动添加;添加方式有两种: 1)从应用商店直接安…...

快速上手vue elementUI好看的登录界面
这是一个非常非常适合新手的vue登录界面,总体来说美观大气,axios那部分没有发,有需要的大家可以自己进行二次开发,继续编写。 用到了技术栈有 vue/cli 5.07 element-ui 2.15.9 适合入门级新手,展示下页面 emmm验证码…...

Vue趣味【Vue3+Element Plus+Canvas实现一个简易画板;支持导出为图片】
目录🌟前言🌟粉丝先看🌟创建Vue3项目🌟引入Element Plus🌟实现代码(详细注释)🌟写在最后🌟JSON包里写函数,关注博主不迷路🌟前言 哈喽小伙伴们&a…...

【Spring Cloud Alibaba】2.服务注册与发现(Nacos安装)
文章目录环境要求简介安装Nacos源码安装Docker安装数据库配置访问服务我们要搭建一个Spring Cloud Alibaba项目就绕不开Nacos,阿里巴巴提供的Nacos组件,可以提供服务注册与发现和分布式配置服务,拥有着淘宝双十一十几年的流量经验,…...

深度学习 Day28——利用Pytorch实现好莱坞明星识别
深度学习 Day28——利用Pytorch实现好莱坞明星识别 文章目录深度学习 Day28——利用Pytorch实现好莱坞明星识别一、前言二、我的环境三、前期工作1、导入依赖项设置GPU2、导入数据集3、划分数据集四、调用官方的VGG16模型五、训练模型1、编写训练函数2、编写测试函数3、设置动态…...
Android中使用FCM进行消息推送
Firebase Cloud Message 的介绍 Firebase Cloud Message(FCM)是由Google推出的一种云端消息推送服务,它是由Google推出的Google Cloud Messaging(GCM)服务的升级版。在2016年5月,Google宣布将Google Cloud Messaging重命名为Firebase Cloud Message,作为Firebase的一部…...

从 X 入门Pytorch——BN、LN、IN、GN 四种归一化层的代码使用和原理
Pytorch中四种归一化层的原理和代码使用前言1 Batch Normalization(2015年提出)Pytorch官网解释原理Pytorch代码示例2 Layer Normalization(2016年提出)Pytorch官网解释原理Pytorch代码示例3 Instance Normalization(2…...
Windows环境下实施域名访问的一些小知识
文章目录 前言一、windows域名访问流程二、网络域名访问配置设置DNS未正确设置DNS的结果三、本地hosts设置本地hosts本地hosts的优先机制本地hosts的内部访问次序示例一示例二总结前言 作为一种常见的操作系统,windows系统具有其特殊的域名访问管理机制。了解其访问机制,将有…...
78.qt QCustomPlot介绍
参考https://www.qcustomplot.com/index.php/tutorials/settingup 下载地址: https://www.qcustomplot.com/index.php/download 1.添加帮助文档 在QtCreator ——>工具——>选项——>帮助——>文档——>添加,选择qcustomplot.qch文件,确定,以后按F1就能跳转到…...

win32api之文件系统管理(七)
什么是文件系统 文件系统是一种用于管理计算机存储设备上文件和目录的机制。文件系统为文件和目录分配磁盘空间,管理文件和目录的存储和检索,以及提供对它们的访问和共享,以下是常见的两种文件系统: NTFSFAT32磁盘分区容量2T32G…...
点云规则格网化,且保存原始的点云索引
点云规则格网化,且保存原始的点云索引 点云深度学习Voxelize规则,参考PTV2:https://github.com/Gofinge/PointTransformerV2 1总执行文件 import numpy as np import torch from pcr.utils.registry import Registry TRANSFORMS Registry…...

入职第一天就被迫离职,找工作多月已读不回,面试拿不到offer我该怎么办?
大多数情况下,测试员的个人技能成长速度,远远大于公司规模或业务的成长速度。所以,跳槽成为了这个行业里最常见的一个词汇。 前言 前几天,我们一个粉丝跟我说,正常入职一家外包,什么都准备好了࿰…...

走进Vue【三】vue-router详解
目录🌟前言🌟路由🌟什么是前端路由?🌟前端路由优点缺点🌟vue-router🌟安装🌟路由初体验1.路由组件router-linkrouter-view2.步骤1. 定义路由组件2. 定义路由3. 创建 router 实例4. 挂…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...