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

C语言刷题日记(附详解)(1)

一、选择判断部分

第一题:

如下代码是否存在风险,并说明原因和修改方案

#include<stdio.h>
int main()
{char* str = "hello world";*str = 'a';return 0;
}

思路提示:这种形式的字符串存储在什么区域呢?是否真的有写入权限?

答案:运行会报错!!!

因为这种形式的字符串是存储在常量区的,而对于储存在常量区的数据只能进行读取,并不能进行写入,所以此时直接对str所指向的值进行修改是不行的。当然,如果我们先将字符串存放在数组形式中,就可以对数据进行修改啦:

#include<stdio.h>
int main()
{char str[] = "hello world";char* pstr = str;*str = 'a';return 0;
}

第二题:

若定义:int a[2][3]={1,3,5,7,9,11},以下描述正确的是(      )

A:*(a + 1)为元素7的地址

B:(a[1] + 1)的值是5

C:**(a + 1) + 2值是11

D:a[0]和a不同

答案:A

题解:在二维数组中,*(a + 1)代表的是第二列首元素的地址,而第二列首元素对应的值为7,则A是正确的。而(a[1] + 1)所代表的是第二列的第二个元素的地址,对应的值应该为9的地址(需要再解引用一次才是9),故B是错误的。**(a + 1) + 2中**(a + 1)所代表的是第二列首元素,此值为7,+2得9,并不是11,所以C是错误的。a所代表的是首元素地址,也就是数组首地址,而a[0]代表的是第一列的首元素地址,同样也是数组首地址,故a和a[0]其实是相同的。

第三题:

请问下列代码的输出是多少 (      )

#include<stdio.h>
int main()
{int m[] = { 1,2,3,4,5,6,7,8,9,0 };int(*p)[4] = (int(*)[4])m;printf("%d", p[1][2]);return 0;
}

思路提示:int(*p)[n]代表的是什么?而int* p[n]代表的又是什么?p[1][2]中p这个二维数组是对一维数组m以什么形式的拆分所得到的呢?

答案:输出结果是7。

题解:int∗ p[n] 表示的是大小为n的,用来存储指针变量的指针数组
           int(∗p)[n] 表示的是一个指向有n个元素的数组的
数组指针

而对于(int(*)[4])m, 我们可以联想一下:(int)m 就是将m强制类型转换为int型,而此时(int(*)[4])m也与(int)m的格式相似,而(int(*)[4])的格式代表了一个以4位元素组成一组的数组指针,此时将m强制类型转换为它,那么m现在就应该是{{1,2,3,4},{5,6,7,8},{9,0, , }};而p[1][2]所指向的就是第二列的第三个元素也就是7

第四题:

说出以下代码的错误之处,并说明原因:

char* getmemory(void)
{char p[] = "hello world";return p;
}
void test()
{char* str = NULL;str = getmemory();printf("%s", str);
}
int main()
{test();return 0;
}

思路提示:在getmemory函数中定义的p值在什么区域?是全局变量?还是局部变量?还是静态变量?

答案:运行不报错,但也不会输出hello world,而是随机输出乱码。

题解:因为当我们将str置空之后,将str传入getmemory函数中,虽然getmemory函数中期望的定义并返回的p为hello world,但p是一个局部变量,当退出函数时,p会自动销毁,而此时我们再打印str时,会发现str不再是NULL了,但也不会是hello world,而是随机的乱码。

第五题:

请问下列代码的输出是什么(      )

int main() 
{char* str = "hello.com";int i;str = "hello world!";int len = strlen(str);printf("%d \n", len);printf("%c \n", *(str + 4));printf("%s \n", (str + 6));return 0;
}

答案

12
o
world!

题解:因为将str重新赋值后长度发生了改变,此时长度为12,*(str + 4)对应的是str字符数组中第五个字符,也就是o,而打印字符串形式(str + 6)代表的就是跳过str前六个字符再进行打印,也就是world!。

二、编程题部分

第一题:统计字母,空格,字符数!

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

输入样例:

aaabbb11223344   @@@@

输出样例:

数字个数为:8
字母个数为:6
空格个数为:3
字符个数为:4

思路提示:想要做到分别统计出一段字符中的英文字母,空格,数字以及其他字符个数,我们可以定义出四个计数器,分别来统计数字,字母,空格,字符的个数。然后我们可以定义一个整型变量sz用来存放这段字符的长度通过一个for循环将这段字符的每一个字符遍历一边,并且对每一个字符进行判断,使相应的计数器自增,最后按格式输出它们的个数。

答案

int main()
{char arr[100];fgets(arr, 100, stdin);int sz = strlen(arr) - 1;int shunum = 0;int zinum = 0;int kongnum = 0;int funum = 0;int i = 0;for (i = 0; i < sz; i++){if (arr[i] >= '0' && arr[i] <= '9')shunum++;else if ((arr[i] >= 'a' && arr[i] <= 'z') || (arr[i] >= 'A' && arr[i] <= 'Z'))zinum++;else if (arr[i] == ' ')kongnum++;elsefunum++;}printf("数字个数为:%d\n", shunum);printf("字母个数为:%d\n", zinum);printf("空格个数为:%d\n", kongnum);printf("字符个数为:%d\n", funum);return 0;
}

需要注意的是:在对定义的字符串赋值时,我们使用的是fgets函数而并非scanf("%s"),这是因为使用scanf的形式进行赋值,在遇到空格时会终止赋值,所以无法判断空格的个数。而fgets函数在进行赋值时,大部分情况下不会被终止只有遇到换行符号"\n",或者已经达到输入大小的限度才会终止

由图我们可以知道,fgets函数的原型,以及fgets传参的参数类型。

char* fgets(char* str, int num, FILE* stream)

第一个参数char* str代表的是:容器的地址

第二个参数int num代表的是:容器的大小

第三个参数FILE* stream代表的是:从哪里开始读取

在题中我们使用的格式为fgets(arr, 100, stdin);这段代码就代表,我们需要为地址为arr的容器进行赋值,并且容器最大为100,从0(键盘)开始读取。(stdin代表输入流,表示从0(键盘)开始记录)

第二题:然后是几点?

我们使用四个数字来代表时间,比如1209代表12点零9分。而此题中,你的代码需要计算之前的时间加上经过的时间后的到的现在的时间

读入两个数字,一个数字代表之前的时间,另一个数字代表经过的时间,而最后输出现在的时间。比如我们输入:1130 160;   输出:1410;

思路提示:如果直接将时间用一个数来表示,那么将本是100进1的小时位改成60进1的小时位未免过于繁琐,我们是否可以尝试一下将时间分成两个数字分别代表小时和分钟呢?这样或许会方便很多哦~

答案

int main()
{int time;int minute;scanf("%d %d", &time, &minute);int time1 = time / 100;//用来表示小时int time2 = time % 100;//用来表示分钟if (minute > 0)//用来判断经过时间>0{while (minute > 60){time1++;minute -= 60;}}else if (minute < 0)//用来判断经过时间<0{while (minute < 0){time1--;minute += 60;}}time2 += minute;if (time2 >= 60)//将>60的分钟进位{time1++;time2 -= 60;}if (time1 > 24)time1 -= 24;if(time2<10)//补充分钟为个位时,中间缺少的0printf("%d0%d", time1, time2);elseprintf("%d%d", time1, time2);return 0;
}

题解我们定义两个变量为time1time2time1 = time / 100;代表只取两个高位数,也就是小时而time2 = time % 100;代表只取两个低位数,也就是分钟。之后我们使用if选择语句和while循环语句,将流逝的时间minute分别加在小时位和分钟位上当minute>60时,不断地将minute自减60,并且同时为小时位+1同时也要注意,此题中输入流逝时间为负数的情况(难道这就是传说中的反方向的钟?!)同样的当minute<0时,不断地将minute自增60,并且同时小时位-1。最后将剩余的时间加在分钟位上,再进行一次time2是否>=60的判断,然后此题就解决啦~怎么样,只要想到将小时和分钟分开算,其实还是很简单的呢。

第三题:阶乘计算升级版

本题要求实现一个打印非负整数的阶乘的函数

要求其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”

整体代码:

#include <stdio.h>void Print_Factorial(const int N)
{/* 你需要编写并实现此代码 */}int main()
{int N;scanf("%d", &N);Print_Factorial(N);return 0;
}

思路提示:平时我们使用的阶乘计算方法很简单,比如我们此时要求5!,只需要定义一个整形变量初始化值为1,for(i=1;i<=5;i++),使此变量在for循环中与i分别相乘,就能求出5!

int main()//阶乘计算初阶版
{int a;scanf("%d", &a);int i = 0;int sum = 1;for (i = 1; i <= a; i++){sum *= i;}printf("%d", sum);return 0;
}

但这是之前的初阶版,对于比较小的数字求阶乘还勉强能做到,但如果要求的阶乘位数很高呢,高到我们用long long型变量也接收不了,那该怎么办呢?给大家一个提示:我们可以定义一个很大的数组,用数组中的元素分别放置阶乘结果的每一位数字,这样无论结果位数多大,我们也能轻松自如的接收啦~

(在此大家可能觉得,就算知道了用数组接收每一位数字的思路,但想要实现能够计算1000!的函数还是太难太繁琐了,确实这是一个较难的题(也可能是我菜(ㄒoㄒ)),那让我们先做一个稍微比较好理解的题来练练手吧~)

练手题:大数加法

利用数组的形式存储每一位数字并进行运算。

运行效果:

大数加法的核心思想与阶乘计算升级版的思想是一致的,我们需要使用数组来接收每一位数字并运算。因为是大数加法,所以输入的数字也可能非常大,所以输入的数字也需要使用数组来存储

因为我们需要使每一位数字存储在数组相应的位置,并且这一位数字必须是个位数,所以我们可以将其转换成字符形式这样输入运算数时,自动就将每一位运算数当作字符存储在相应位置了~~~那么有了思路,具体来操作一下:我们定义三个char型数组,char a[10001]用来接收大数运算数(存入时为字符类型),char arr1[10001]和char arr2[10001]用来接收两个大数运算数(接收时将每一位都转换成数字类型)

char a[10001] = { 0 };//用于存储运算数(字符形式)
char arr1[10001] = { 0 };//用于接收运算数(接收需转换成数字形式)
char arr2[10001] = { 0 };//用于接收运算数(接收需转换成数字形式)
printf("输入两个运算数:\n");
scanf("%s", a);
for (i = strlen(a) - 1; i >= 0; i--)
{arr1[tmp++] = a[i] - '0';//将字符转换为数字
}
scanf("%s", a);
for (tmp = 0,i = strlen(a) - 1; i >= 0; i--)
{arr2[tmp++] = a[i] - '0';//将字符转换为数字
}

解决了大数运算数的传输与接收,那么再让我们来思考一下,大数运算数如何通过数组的形式进行每一位的运算呢

让我们来举一个例子,并且逐步分析,来看一下运算的过程

比如此时我们输入的arr1为97,输入的arr2为75,那么两者运算过程就会是:

 个 十 百7  9  05  7  0(第一次运算)tmp = arr1[i] + arr2[i] + up; (tmp = 7 + 5 + 0 = 12)arr1[i] = tmp % 10; (arr1[i] = 12 % 10 = 2)up = tmp / 10;  (up = 12 / 10 = 1)(第二次运算)tmp = arr1[i] + arr2[i] + up; (tmp = 9 + 7 + 1 = 17)arr1[i] = tmp % 10; (arr1[i] = 17 % 10 = 7)up = tmp / 10;  (up = 17 / 10 = 1)(第三次运算)tmp = arr1[i] + arr2[i] + up; (tmp = 0 + 0 + 1 = 1)arr1[i] = tmp % 10; (arr1[i] = 1 % 10 = 1)up = tmp / 10;  (up = 1 / 10 = 0)(结束运算)结果为:arr1[0] = 2 arr1[1] = 7 arr1[2] = 1;(97 + 75 = 172)

由此,我们就能够直观的看出运算过程到底是何种方式~我们可以定义两个整型变量tmp和up来辅助运算,tmp代表此次两个位数相加的和up代表两个位数相加后是否需要进1而arr1[i]用来存储此次运算后得到的此位数字(只需要取10的余数即可)。将这个思路转化为运算公式的形式就会是这样:

for (i = 0; i < 10000/*运算的最大位数*/; i++)
{tmp = arr1[i] + arr2[i] + up;//两数相加运算arr1[i] = tmp % 10;up = tmp / 10;
}

怎么样?转化为运算公式之后,是不是感觉一下简便了很多呢~接下来就只剩下最后的打印工作了此处我们需要注意的是,之前我们对arr1和arr2进行存储时,使用的是逆序的存储,这样的目的是使低位数在前,高位数在后,这样我们就能做到使用for循环运算时先计算低位数,再计算高位数相应的,得出的结果也理所当然的是逆序,所以打印时我们需要从后往前打印,才能得出真正的结果~

答案

int main()
{char a[10001] = { 0 };//用于存储运算数(字符形式)char arr1[10001] = { 0 };//用于接收运算数(接收需转换成数字形式)char arr2[10001] = { 0 };//用于接收运算数(接收需转换成数字形式)int tmp = 0;int up = 0;int i = 0;printf("输入两个运算数:\n");scanf("%s", a);for (i = strlen(a) - 1; i >= 0; i--){arr1[tmp++] = a[i] - '0';//将字符转换为数字}scanf("%s", a);for (tmp = 0,i = strlen(a) - 1; i >= 0; i--){arr2[tmp++] = a[i] - '0';//将字符转换为数字}printf("运算结果为:\n");for (i = 0; i < 10000; i++){tmp = arr1[i] + arr2[i] + up;//两数相加运算arr1[i] = tmp % 10;up = tmp / 10;}for (i = 10000; i >= 0; i--){if(arr1[i]!=0)for(i;i>=0;i--)//逆序打印出真正结果printf("%d", arr1[i]);}return 0;
}

那么学会了大数相加,让我们收回思路,继续解决阶乘计算升级版吧~

还是同样的思路,我们需要定义一个足够大的char型数组用来后续存放i的阶乘,然后先分别对<0求阶乘和对0,对1求阶乘的情况进行解决:

#include <stdio.h>
void Print_Factorial(const int N)
{char a[5000] = { 1 };//因为是相乘而不是相加,如果初始化为0则无法进行相乘int tmp = 0;         //所以我们将第一个元素初始化为1,使其能够正常运算int i = 0;           //并且其他的元素仍为0,使用进位来增大其余元素int j = 0;int up = 0;if (N < 0)printf("Invalid input");else if (N == 0 || N == 1)printf("1");else{...}

而else中的内容,就是求阶乘的运算了~

同样的,让我们举个例子,逐步分析一下应该如何运算:

 从 i = 2 开始 i<=5 i++ 分别求2! 3! 4! 5!(计算2!)//2 0 0tmp = a[j] * i + up; (tmp = 1 * 2 + 0 = 2)a[j] = tmp % 10; (a[j] = 2 % 10 = 2)up = tmp / 10; (up = 2 / 10 = 0)(计算3!)//6 0 0tmp = a[j] * i + up; (tmp = 2 * 3 + 0 = 6)a[j] = tmp % 10; (a[j] = 6 % 10 = 6)up = tmp / 10; (up = 6 / 10 = 0)(计算4!)//4 2 0(逆序)tmp = a[j] * i + up; (tmp = 6 * 4 + 0 = 24)a[j] = tmp % 10; (a[j] = 24 % 10 = 4)up = tmp / 10; (up = 24 / 10 = 2)tmp = a[j] * i + up; (tmp = 0 * 4 + 2 = 2)a[j] = tmp % 10; (a[j] = 2 % 10 = 2)up = tmp / 10; (up = 2 / 10 = 0)(计算5!)//0 2 1(逆序)tmp = a[j] * i + up; (tmp = 24 * 5 + 0 = 120)a[j] = tmp % 10; (a[j] = 120 % 10 = 0)up = tmp / 10; (up = 120 / 10 = 12)tmp = a[j] * i + up; (tmp = 0 * 5 + 12 = 12)a[j] = tmp % 10; (a[j] = 12 % 10 = 2)up = tmp / 10; (up = 12 / 10 = 1)tmp = a[j] * i + up; (tmp = 0 * 5 + 1 = 1)a[j] = tmp % 10; (a[j] = 1 % 10 = 1)up = tmp / 10; (up = 1 / 10 = 0)

(整理这个真的要把我这个小菜鸡累毁了!!!各位看到这里如果不介意的话,点点收藏点点赞吧 T A T)

统计成公式就是:

for (i = 2; i <= N; i++)
{for (up = 0, j = 0; j <= 5000; j++){tmp = a[j] * i + up;a[j] = tmp % 10;up = tmp / 10;}
}

最后我们只需要将运算出来的数组给逆序打印出来就好啦~

答案

#include <stdio.h>
void Print_Factorial(const int N)
{char a[5000] = { 1 };int tmp = 0;int i = 0;int j = 0;int up = 0;if (N < 0)printf("Invalid input");else if (N == 0 || N == 1)printf("1");else{for (i = 2; i <= N; i++){for (up = 0, j = 0; j <= 5000; j++){tmp = a[j] * i + up;a[j] = tmp % 10;up = tmp / 10;}}for (i = 5000; i >= 0; i--){if (a[i] != 0)for (i; i >= 0; i--)printf("%d", a[i]);}}
}
int main()
{int N;scanf("%d", &N);Print_Factorial(N);return 0;
}

怎么样,是不是看起来比大数运算还要更加简便一些呢?但其实这段乘法的公式是真的难!!

最后我们算出1000的阶乘为......好可怕的数字......不愧是计算机,这都能算出来~

那么今天的刷题日记就给大家分享到这啦~如果有哪里说的不对的或者讲解的不清楚的,还请大家多多在评论区指出意见哦~我也会多多吸取教训,多多学习的~那么我们下一篇再见啦ヾ(•ω•`)o

相关文章:

C语言刷题日记(附详解)(1)

一、选择判断部分 第一题&#xff1a; 如下代码是否存在风险&#xff0c;并说明原因和修改方案 #include<stdio.h> int main() {char* str "hello world";*str a;return 0; }思路提示&#xff1a;这种形式的字符串存储在什么区域呢&#xff1f;是否真的有…...

SpringSecurity实现登录功能实战!!!

实现思路 登录 ①自定义登录接口 调用ProviderManager的方法进行认证 如果认证通过生成jwt 把用户信息存入redis中 ②自定义UserDetailsService 在这个实现类中去查询数据库 注意配置passwordEncoder为BCryptPasswordEncoder 退出登录&#xff0c;删除redis中的数…...

mysql中用一个查询获取多个数据库(模式)和表的计数之和

问题 下面的查询返回了4排数据&#xff0c;这很好。但我同时需要对同一个查询中的所有计数求和。这如何实现&#xff1f;我已经尝试了多种不同的方法&#xff0c;但只得到sintax报错。 SELECT COUNT(*) FROM schema1.table WHERE STATE 17 AND LEVEL 1 UNION ALL SELECT CO…...

linux patch 的制作方式

文章目录 制作patch1. 准备工作2. 使用 diff 命令生成补丁文件生成单个文件的补丁生成整个目录的补丁 3. 检查补丁文件 使用patch1. 应用补丁文件1.1 应用单个文件的补丁1.2 应用整个目录的补丁 总结示例&#xff1a;制作和应用补丁 前言&#xff1a; 在Linux系统中&#xff0c…...

白骑士的C#教学进阶篇 2.4 LINQ查询

系列目录 上一篇&#xff1a;白骑士的C#教学进阶篇 2.3 委托与事件 LINQ&#xff08;Language Integrated Query&#xff09;是C#中的一个强大特性&#xff0c;它提供了统一的语法来查询和操作各种数据源&#xff0c;如数组、集合、XML和数据库等。LINQ通过一种类似SQL的查询语…...

2024华为OD机试真题- 贪吃的猴子Python-C卷D卷-200分

目录 题目描述 输入描述 输出描述 用例1 用例2 用例3 解题思路 代码 2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。 猴子获取香蕉,…...

4-1-2 直流电机(电机专项教程)

4-1-2 直流电机&#xff08;电机专项教程&#xff09; 4-1-2 直流电机主要参数尺寸参数额定电压额定电流空载转速 如何控制直流电机有刷直流电机转向控制H桥电路控制转向 如何控制电机转速PWM控制电机转速 4-1-2 直流电机 之前学习了有刷直流电机的基本结构个工作原理&#xff…...

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…...

学习记录第二十八天

有名管道&#xff08;FIFO&#xff09; 在Linux系统中&#xff0c;有名管道是一种特殊类型的文件&#xff0c;它允许不相关的进程之间进行通信。有名管道在文件系统中有一个具体的路径和名称&#xff0c;因此它们可以被多个进程共同访问。有名管道的特点包括持久性、多进程访问…...

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…...

透明加密技术

透明加密技术&#xff0c;也被称为透明数据加密&#xff08;Transparent Data Encryption, TDE&#xff09;&#xff0c;是一种加密方法&#xff0c;它允许数据在存储时自动加密和解密&#xff0c;而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…...

深入理解Faiss:高效向量检索的利器

近年来&#xff0c;随着人工智能和机器学习技术的飞速发展&#xff0c;向量检索技术变得越来越重要。无论是在推荐系统、图像搜索还是自然语言处理等领域&#xff0c;向量检索都扮演着至关重要的角色。而在众多向量检索库中&#xff0c;Faiss&#xff08;Facebook AI Similarit…...

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…...

Python模块篇(五)

模块 模块与包模块的导入与使用标准库的常用模块第三方库的安装与使用&#xff08;如&#xff1a;pip工具&#xff09; 模块与包 模块是一个包含 Python 代码的文件&#xff0c;通常以 .py 作为扩展名。一个模块可以包含函数、类、变量&#xff0c;以及可执行的代码段。模块的…...

西安旅游系统--论文pf

TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿…...

分享一个思路,使用插桩技术解决慢查询测试问题

前段时间&#xff0c;我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高&#xff0c;问题发生的时候并发很高&#xff0c;出现大量请求超时&#xff0c;超时请求比例随时间推迟越来越高&#xff0c;最后几乎全部请求都失败。滚动重启了所有进程后&#xff0…...

【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)

个人主页~ 实战项目的实现过程&#xff08;一&#xff09;~ 实战项目的实现过程 二、初步了解各个外设硬件1、OLED模块2、GPS模块3、MPU6050模块4、超声测距模块5、温度测控模块6、语音模块7、SIM模块8、按键模块 三、查阅资料1、查看手册2、查找例程 四、研究硬件功能1、OLED…...

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量&#xff0c;以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…...

SQL - 数据类型

字符串类型 char(10)&#xff0c;存储固定长度字符串 varchar(255)&#xff0c;存储可变长度字符串 mediumtext&#xff0c;中文本&#xff0c;对于存储JSON对象、SCV字符串很好使 longtext&#xff0c;长文本&#xff0c;可以很好地存储教本或许多年地日志文件 tinytext&#…...

进程相关知识

进程和程序的区别 程序 程序是静态的&#xff0c;是存储在硬盘、SSD等存储介质中的一个文件&#xff0c;通常由源代码&#xff08;如 .c 文件&#xff09;编译生成的二进制可执行文件&#xff08;如 a.out&#xff09;。程序包含了指令和数据&#xff0c;但在未被执行时&#…...

萝卜快跑和端到端的自动驾驶(1)

先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示&#xff0c;左边的方块中的子方块&#xff0c;是展示了自动驾驶获取数据的途径&#xff0c;这里包括&…...

通信原理学习笔记

一个手机通话需要经过下面三个网络 类别接入网&#xff08;Access Network&#xff09;承载网&#xff08;Transport Network&#xff09;核心网&#xff08;Core Network&#xff09;定义连接终端用户与电信网络的部分。在接入网和核心网之间传输数据的网络。处理、交换和管理…...

系统编程---day4

1. 链接文件 命令行&#xff1a; ln -s 文件名 softlink 1.1 symlink int symlink(const char *oldpath, const char *newpath); 功能:创建一个链接向oldpath文件的新符号链接文件 参数:oldpath:被链接向的文件的路径 newpath:新符号链接文件 返回值:成功返回0,失败返回…...

01:电容的什么,各类电容的优缺点

1.电容是什么&#xff1f; 电容是由两块不连通的导体&#xff0c;已经中间的不导电材料组成 电容结构&#xff1a; 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs​ 1.3常见电容的种类 1.4各类电容的特点...

Android+Jacoco+code-diff全量、增量覆盖率生成实战

背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程&#xff0c;目前已完成全量覆盖方案&#xff0c;仅使用jacoco就能实现&#xff1b; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码&#xff0c;卡在kotlin文件的分析&am…...

乌龟对对碰在线版

爆肝两天使用vue开发了一个在线版的乌龟对对碰小游戏之幸运对对碰。没有找到合适的乌龟素材&#xff0c;现在使用小兔子代替。 体验地址&#xff1a;幸运对对碰 | 乌龟对对碰小游戏 之前的python版本的乌龟对对碰&#xff1a;写文章-CSDN博客 乌龟对对碰-幸运对对碰...

如何更改select option边框颜色和选中的颜色

<!doctype html> <html> <head> <meta charset"utf-8"> <title>如何更改select option边框颜色和选中的颜色</title> </head><style>ul{border: 1px solid #000000;width: 500px;height: auto;background-color: aq…...

6. 数据结构—串的匹配算法

1.BF算法(暴力算法) //模式匹配(暴力算法) int Index(SString S,SString T){int i1,j1;while(i<S.length&&j<T.length){if(S[i]T[i]){i;j;}else{ii-j2; //最开始匹配的位置的后一个j1; //从头匹配 }}if(j>T.length)return i-T.length;return return 0…...

九大服务架构性能优化方式

来源&#xff1a;九大服务架构性能优化方式 目录 性能优化九大方式&#xff1a; 缓存 使用什么样的缓存 缓存常见问题 缓存淘汰 缓存数据一致性 并行化处理 批量化处理 数据压缩合并 无锁化 顺序写 分片化 避免请求 池化 异步处理 总结 最近做了一些服务性能优…...

【RabbitMQ】 相关概念 + 工作模式

本文将介绍一些MQ中常见的概念&#xff0c;同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列&#xff0c;多用于分布式系统之间的通信。 系统间调用通常有&#xff1a;同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…...

嵌入式学习 ——(Linux高级编程——进程)

目录 一、进程的含义 二、进程和程序的区别 三、进程的作用 四、进程的状态 五、进程的调度与上下文切换 六、查询进程相关命令 七、fork()函数 八、getpid()和getppid()函数 九、面试题解析&#xff1a; 十、应用场合及测试 一、进程的含义 进程指正在运行的程序&a…...

C++练习备忘录

1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…...

改善工作流

快捷键管理器 打开Editor->Shortcuts查看和编辑Unity中的快捷键 示例 ShiftSpace 窗口最大化 P 选择预制体 进入预制体编辑模式 单一检视窗口 选择组件&#xff0c;选择Properties打开一个窗口&#xff0c;显示组件信息&#xff1b;切换对象&#xff0c;窗口信息不会改变…...

迭代器失效

一、什么是迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是对指针进行了封装&#xff0c;比如&#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效&#xff0c;实际就是迭代器底层对应指针所指…...

@RequestParam @RequestBody @PathVariable 这三个注解对应的前端使用vue的http请求时不同的调用方式

1. RequestParam 用途&#xff1a;用于提取请求参数&#xff0c;常见于GET请求或表单提交。 Vue HTTP 请求示例&#xff1a; // 使用axios发送GET请求 axios.get(/api/users, { params: { id: 1, name: John } }); 2. RequestBody 用途&#xff1a;用于提取请求体…...

SQL - 索引

索引本质上是数据库引擎用来快速查找数据的数据结构&#xff0c;可以显著提高查询的性能&#xff0c;为了加快运行较慢的查询。创建索引 默认索引 create index 索引名 on 表名 (列名); 通过对列名进行创建索引&#xff0c;在查询的时候&#xff0c;数据库就能通过索引找到匹配…...

Oracle23ai新特性FOR LOOP循环控制结构增强

在Oracle数据库中&#xff0c;FOR LOOP是一种常用的循环控制结构&#xff0c;它允许你重复执行一系列语句固定次数或直到满足特定条件为止。然而&#xff0c;标准的Oracle PL/SQL中的FOR LOOP主要用于遍历集合&#xff08;如数组或游标的结果集&#xff09;&#xff0c;而不是像…...

DHU OJ 二维数组

思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…...

UDP/TCP --- Socket编程

本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程&#xff0c;其中只对 UDP 和 TCP 进行了简单的介绍&#xff0c;本篇主要实现的是代码&#xff0c;至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是…...

【C语言】最详细的单链表(两遍包会!)

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、单链表的概念 1. 单链表的特点 2. 单链表的基本…...

QT:VS2019 CMake编译CEF

CEF介绍 CEF作为一个基于Chromium的开源Web浏览器控件&#xff0c;为第三方应用提供了强大的嵌入浏览器支持。其多平台支持、HTML5特性、自定义能力以及多进程架构等特性&#xff0c;使得CEF在浏览器开发、桌面应用、开发工具以及自动化测试等领域得到了广泛应用。 多平台支持…...

day31(8/19)——静态文件共享、playbook

目录 一、ansible模块 script模块 copy模块 使用command模块下载 nfs-utils rpcbind 在被控制的主机上添加static目录&#xff0c;并创建test文件 command模块 service模块 二、playbook 三、playbook编排vsftpd 1、安装 2、卸载 3、启动服务 4、修改配置文件设置不…...

白骑士的C#教学实战项目篇 4.4 游戏开发

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.3 Web开发 在这一部分&#xff0c;我们将探索如何使用 Unity 和 C# 开发游戏。游戏开发结合了编程、图形设计和创意&#xff0c;既充满挑战又充满乐趣。通过这一节的学习&#xff0c;您将了解游戏引擎的基础知识&#…...

在Vue工程中开发页面时,发现页面垂直方向出现两个滚动条的处理

在Vue工程中开发页面时&#xff0c;发现页面垂直方向出现两个滚动条 最近在开发页面时&#xff0c;发现页面多了两个滚动条&#xff0c;如图&#xff1a; 原因&#xff1a; 当一个页面的内容高度大于屏幕的高度时就会出现滚动条。一般情况下当一个页面高度大于屏幕高度时&a…...

【C++初阶】:C++入门篇(一)

文章目录 前言一、C命名空间1.1 命名空间的定义1.2 命名空间的使用 二、C的输入和输出2.1 cin和cout的使用 三、缺省参数3.1 缺省参数的分类 四、函数重载4.1 函数重载概念及其条件4.2 C支持函数重载原理 -- 名字修饰 前言 C是在C语言的基础之上&#xff0c;增加了一些面向对象…...

【JAVA CORE_API】Day14 Collection、Iterator、增强for、泛型、List、Set

Collection接口及常用方法 Collection<Object> collection new ArrayList();&#xff1a;实例化ArrayList集合对象&#xff1b; collectionName.add(Object obj);&#xff1a;在集合中增加元素&#xff1b; int sizeName collectionName.size();&#xff1a;获取集合…...

Go更换国内源配置环境变量

背景 要在中国境内下载和使用Go编程语言的包&#xff0c;可以使用国内的Go模块代理来加速下载速度。以下是一些常见的国内Go模块代理源以及如何切换到这些源的方法&#xff1a; 常见国内Go模块代理源 七牛云&#xff08;Qiniu&#xff09; https://goproxy.cn 阿里云&#xff0…...

澎湃认证显实力,浪潮信息存储兼容新篇章

浪潮信息在存储技术兼容性领域取得新突破&#xff0c;其集中式存储HF/AS系列与长擎安全操作系统24强强联合&#xff0c;成功完成澎湃技术认证。此次合作不仅验证了双方产品的无缝对接能力&#xff0c;更体现了浪潮信息在推动全产业链共建共享方面的坚定决心。 浪潮信息澎湃技术…...

Leetcode 3255. Find the Power of K-Size Subarrays II

Leetcode 3255. Find the Power of K-Size Subarrays II 1. 解题思路2. 代码实现 题目链接&#xff1a;3255. Find the Power of K-Size Subarrays II 1. 解题思路 这一题是题目3254的进阶版&#xff0c;其实主要就是增加了算法复杂度。 整体上来说的话思路还是一个分段的思…...

Kotlin学习02-变量、常量、整数、浮点数、操作符、元组、包、导入

变量、常量、整数、浮点数、操作符、元组、包、导入 Book.kt package com.wujialiang.packclass Book {var title: String "Hello" }val PI 3.14; val E 2.178;Main.kt //引入包 //import com.wujialiang.pack.Book; import com.wujialiang.pack.*; //重命名导…...