C语言---基础内容(万字)
C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。
C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。
当前最新的 C 语言标准为 C18 ,在它之前的 C 语言标准有 C17、C11…C99 等。那么
为什么要使用 C?
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:
- 操作系统
- 语言编译器
- 汇编器
- 文本编辑器
- 打印机
- 网络驱动器
- 现代程序
- 数据库
- 语言解释器
- 实体工具
编译工具:
-
Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插件支持 C/C++ 开发,使其成为一个流行的选择,通过安装 C/C++ 插件和调整设置,你可以使其成为一个很好的 C 语言开发环境。
安装教程:https://www.runoob.com/w3cnote/vscode-tutorial.html
下载地址:https://code.visualstudio.com/
-
DevC++: DevC++是一款功能强大的C/C++语言编译器,不仅界面美观、可操作性高、使用方便,最最重要的是它还是免费的。
安装教程:https://blog.csdn.net/bigzql/article/details/109349382
下载地址:https://sourceforge.net/projects/orwelldevcpp/
C 程序
一个 C 语言程序,可以是 3 行,也可以是数百万行,它可以写在一个或多个扩展名为 “.c” 的文本文件中,例如,hello.c。您可以使用 “vi”、“vim” 或任何其他文本编辑器来编写您的 C 语言程序。
C 程序的结构
C 程序主要包括以下部分:
- 预处理器指令
- 函数
- 变量
- 语句 & 表达式
- 注释
以下是一个简单例子:
#include <stdio.h>int main()
{/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0;
}
解析:
- 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
- / … / 用于注释说明。
- printf() 用于格式化输出到屏幕。printf() 函数在 “stdio.h” 头文件中声明。
- "\n"表示输出后换行。
- stdio.h 是一个头文件 (标准输入输出头文件)
- #include 是一个预处理命令,用来引入头文件。
- return 0; 语句用于表示退出程序。 终止 main() 函数,并返回值 0
C 基本语法
分号
在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。
例如,下面是两个不同的语句
printf("Hello, World! \n");
return 0;
注释
**C 语言有两种注释方式
/* 单行注释 */ 或者 //单行注释
/* 多行注释多行注释多行注释*/
标识符
- C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称。
- 一个标识符以字母、下划线开始,后跟零个或多个字母、下划线和数字。注意不能由数字开头!
- C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。
- 因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。下面列出几个有效的标识符:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
关键字
保留字不能作为常量名、变量名或其他标识符名称。
auto double int struct break else long switchcase enum register typedef char extern return unionconst float short unsigned continue for signed voiddefault goto sizeof volatile do if while static
基本数据类型
1.变量、常量和字面量
变量
在编程中,变量是用于保存数据的容器(存储区)。
为了指定存储区域,应该为每个变量赋予唯一的名称(标识符)。变量名称只是存储位置的符号表示。例如:
示例
int playerScore = 95;
在这里,playerScore是一个int类型变量。为这个变量分配了一个整数值95。
变量的值可以更改,因此可以更改名称。
示例
char ch = 'a';
// some code
ch = 'l';
变量命名规则
-
变量名称只能包含字母(大写和小写字母),数字和下划线。
-
变量的第一个字母应该是字母或下划线。
-
对于变量名称(标识符)可以使用多长没有指定。但是,如果变量名超过31个字符,则在某些编译器中可能会遇到问题。
**注意:*应始终尝试为变量赋予有意义的名称。例如:firstName是比fn更好的变量名。
C 语言是一种强类型语言。意味着变量类型一旦声明就无法更改。例如:
示例
int number = 5; //整型变量
number = 5.5; // error
double number; // error
在这里,number变量的类型为int。您不能分配浮点(十进制)值5.5给这个变量。另外,您不能将变量的数据类型重新定义为double(双精度浮点型)。顺便说一下,要将十进制值存储在C中,您需要将其类型声明为double 或 float。
字面量
字面量是用于表示固定值的数据。它们可以直接在代码中使用。例如:1,2.5,'c’等。
这里1,2.5和’c’是字面量。为什么?您不能为这些项分配不同的值。
整数
整数是没有任何小数或指数部分的数字文字(与数字关联)。C编程语言中有三种类型的整数字面量:
- 八进制(以8为底)
- 十进制(以10为底)
- 十六进制(以16为底)
例如:
十进制: 0, -9, 22 etc
八进制: 021, 077, 033 etc
十六进制: 0x7f, 0x2a, 0x521 etc
在C编程中,八进制以0开头,十六进制以0x开头。
浮点字面量
浮点字面量是具有分数形式或指数形式的数字字面值。例如:
-2.0
0.0000234
-0.22E-5
注意:指数型数值E前后必须为整数
字符
通过将单个字符括在单引号内来创建字符字面量。例如:‘a’,‘m’,‘F’,‘2’,'}'等。
转义序列
有时,在C编程中必须使用不能键入或具有特殊含义的字符。例如:换行符(输入),制表符,问号等。
为了使用这些字符,使用了转义序列。
转义字符序列
转义序列 | 字符 |
---|---|
\b | 退格符 |
\f | 换页符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ | 反斜杠 |
\’ | 单引号 |
\‘’ | 双引号 |
\? | 问号 |
\0 | 空字符 |
例如:\n用于换行符。反斜杠\会导致编译器无法正常处理字符。
字符串
字符串字面量是用双引号引起来的一系列字符。例如:
“good” //字符串常量
“” //空字符串常量
" " //六个空格的字符串常量
“x” //具有单个字符的字符串常量。
“Earth is round\n” //用换行符打印字符串
常量
如果要定义一个不能更改其值的变量,则可以使用 const关键字。这将创建一个常量。例如,
示例
const double PI = 3.14;
注意,我们增加了关键字 const。
在这里,PI是一个符号常量;其值不能更改。
示例
const double PI = 3.14;
PI = 2.9; //错误
也可以使用#define预处理器指令定义常量。
#define PI 3.12133
C语言基本输入输出
格式说明符
- %d 对应为 int
- %f 对应为 float
- %lf 对应为 double
- %c 对应为 char
所占字节
类型 所占字节
int 4
float 4
double 8
char 1
short 2
printf()输出函数
该函数将格式化的输出发送到屏幕
示例一:printf()简单输出
#include <stdio.h>
int main()
{ //打印输出引号内的字符串printf("C Programming");return 0;
}
该程序如何工作?
-
所有有效的C程序都必须包含该main()函数。代码从main()函数的开头开始执行。
-
printf()是一个库函数来格式化输出发送到屏幕上。该函数将打印引号内字符串。
-
要在我们的程序中使用printf()函数,我们需要使用#include <stdio.h>语句包括stdio.h头文件 。
-
return 0;main()函数中的语句是程序的“退出状态”。 它是可选的。
示例2:整数输出
#include <stdio.h>
int main()
{int a = 5;printf("Number = %d", a);return 0;
}
使用%d格式说明符来打印int类型。在这里,引号内的%d将替换为testInteger的值。
示例3:单精度浮点和双精度浮点数输出
#include <stdio.h>
int main()
{float number1 = 13.5;double number2 = 12.4;printf("number1 = %f\n", number1);printf("number2 = %lf", number2);return 0;
}
输出结果
number1 = 13.500000
number2 = 12.400000
要打印float,使用%f格式说明符。同样,还要使用%lf打印double值。
示例4:打印字符
#include <stdio.h>
int main()
{char chr = 'a'; printf("character = %c.", chr); return 0;
}
要打印char,使用%c格式说明符。
scanf()输入函数
作用是从用户那里接受输入。该函数从标准输入(例如键盘)读取格式化的输入。
示例5:整数输入/输出
#include <stdio.h>
int main()
{int testInteger;printf("输入数字: ");scanf("%d", &testInteger); printf("Number = %d",testInteger);return 0;
}
输出结果
输入数字: 4
Number = 4
在这里,使用了scanf()函数内部的格式%d说明符来接收用户的输入int数值。用户输入整数时,它将存储在testInteger变量中。
注意,scanf()使用了&testIntegerinside 。这是因为&testInteger获取的地址testInteger,并且用户输入的值存储在该地址中。
示例6:单精度浮点和双精度浮点数输入/输出
#include <stdio.h>
int main()
{float num1;double num2;printf("输入一个数字: ");scanf("%f", &num1);printf("输入另一个数字: ");scanf("%lf", &num2);printf("num1 = %f\n", num1);printf("num2 = %lf", num2);return 0;
}
输出结果
输入一个数字: 12.523
输入另一个数字: 10.2
num1 = 12.523000
num2 = 10.200000
float和double分别使用%f和%lf格式说明符。
示例7:C 字符 I / O
#include <stdio.h>
int main()
{char chr;printf("输入一个字符: ");scanf("%c",&chr); printf("您输入了 %c.", chr); return 0;
}
当用户在上述程序中输入字符时,字符本身不会被存储。而是存储一个整数值(ASCII值)。
当我们使用%c文本格式显示该值时,将显示输入的字符。如果%d用于显示字符,则将其ASCII值打印出来。
示例8:ASCII值
#include <stdio.h>
int main()
{char chr;printf("输入一个字符: ");scanf("%c", &chr); //当使用%c时,将显示一个字符printf("您输入了 %c.\n",chr); //使用%d时,显示ASCII值printf("ASCII 值为 % d.", chr); return 0;
}
输出结果
输入一个字符: g
您输入了 g.
ASCII 值为 103.
多个值输入输出(I/O)
这是可以从用户那里获取多个输入并显示它们的方法示例
#include <stdio.h>
int main()
{int a;float b;printf("输入整数,然后再输入浮点数: ");//接受多个输入scanf("%d%f", &a, &b);printf("您输入了%d和 %f", a, b); return 0;
}
输出结果
输入整数,然后再输入浮点数: -3
3.4
您输入了 -3 和 3.400000
算术运算符、赋值运算符及其对应表达式的应用
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:
-
算术运算符
-
关系运算符
-
逻辑运算符
-
位运算符
-
赋值运算符
算术运算符
下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 示例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
看下面的示例,了解 C 语言中所有可用的算术运算符:
#include <stdio.h>
int main()
{int a = 21;int b = 10;int c ;c = a + b;printf(" c = a + b 的值是 %d\n", c ); //31c = a - b;printf(" c = a - b 的值是 %d\n", c ); //11c = a * b;printf(" c = a * b 的值是 %d\n", c ); //210c = a / b;printf(" c = a / b 的值是 %d\n", c ); //2c = a % b;printf(" c = a % b 的值是 %d\n", c ); //1c = a++; // 赋值后再加 1 ,c 为 21,a 为 22printf(" c = a++ 的值是 %d\n", c ); //21c = a--; // 赋值后再减 1 ,c 为 22 ,a 为 21printf(" c = a-- 的值是 %d\n", c ); //22}
以下示例演示了 a++ 与 ++a 的区别:
#include <stdio.h>
int main()
{int c;int a = 10;c = a++; printf("先赋值后运算:\n");printf("Line 1 - c 的值是 %d\n", c );printf("Line 2 - a 的值是 %d\n", a );a = 10;c = a--; printf("Line 3 - c 的值是 %d\n", c );printf("Line 4 - a 的值是 %d\n", a );printf("先运算后赋值:\n");a = 10;c = ++a; printf("Line 5 - c 的值是 %d\n", c );printf("Line 6 - a 的值是 %d\n", a );a = 10;c = --a; printf("Line 7 - c 的值是 %d\n", c );printf("Line 8 - a 的值是 %d\n", a );}
以上程序执行输出结果为:
先赋值后运算:
Line 1 - c 的值是 10
Line 2 - a 的值是 11
Line 3 - c 的值是 10
Line 4 - a 的值是 9
先运算后赋值:
Line 5 - c 的值是 11
Line 6 - a 的值是 11
Line 7 - c 的值是 9
Line 8 - a 的值是 9
这里记住一句话:++在后表达式即原值
关系运算符
下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 示例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
看下面的示例,了解 C 语言中所有可用的关系运算符:
#include <stdio.h>int main()
{int a = 21;int b = 10;int c ;if( a == b ){ printf("Line 1 - a 等于 b\n" );}else{printf("Line 1 - a 不等于 b\n" );}if ( a < b ){printf("Line 2 - a 小于 b\n" );}else{printf("Line 2 - a 不小于 b\n" );}if ( a > b ){printf("Line 3 - a 大于 b\n" );}else{printf("Line 3 - a 不大于 b\n" );}/* 改变 a 和 b 的值 */a = 5;b = 20;if ( a <= b ){printf("Line 4 - a 小于或等于 b\n" );}if ( b >= a ){printf("Line 5 - b 大于或等于 a\n" );}
}
输出结果:
Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 a
逻辑运算符
下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:
运算符 | 描述 | 示例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A | B) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
看下面的示例,了解 C 语言中所有可用的逻辑运算符:
#include <stdio.h>int main()
{int a = 5;int b = 20;int c ;if ( a && b ){printf("Line 1 - 条件为真\n" );}if ( a || b ){printf("Line 2 - 条件为真\n" );}/* 改变 a 和 b 的值 */a = 0;b = 10;if ( a && b ){printf("Line 3 - 条件为真\n" );}else{printf("Line 3 - 条件为假\n" );}if ( !(a && b) ){printf("Line 4 - 条件为真\n" );}
}
输出结果:
Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件为假
Line 4 - 条件为真
赋值运算符
下表列出了 C 语言支持的赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
示例
#include <stdio.h>main()
{int a = 21;int c ;c = a;printf("Line 1 - = 运算符示例,c 的值 = %d\n", c );c += a;printf("Line 2 - += 运算符示例,c 的值 = %d\n", c );c -= a;printf("Line 3 - -= 运算符示例,c 的值 = %d\n", c );c *= a;printf("Line 4 - *= 运算符示例,c 的值 = %d\n", c );c /= a;printf("Line 5 - /= 运算符示例,c 的值 = %d\n", c );c = 200;c %= a;printf("Line 6 - %= 运算符示例,c 的值 = %d\n", c );c <<= 2;printf("Line 7 - <<= 运算符示例,c 的值 = %d\n", c );c >>= 2;printf("Line 8 - >>= 运算符示例,c 的值 = %d\n", c );c &= 2;printf("Line 9 - &= 运算符示例,c 的值 = %d\n", c );c ^= 2;printf("Line 10 - ^= 运算符示例,c 的值 = %d\n", c );c |= 2;printf("Line 11 - |= 运算符示例,c 的值 = %d\n", c );}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - = 运算符示例,c 的值 = 21
Line 2 - += 运算符示例,c 的值 = 42
Line 3 - -= 运算符示例,c 的值 = 21
Line 4 - *= 运算符示例,c 的值 = 441
Line 5 - /= 运算符示例,c 的值 = 21
Line 6 - %= 运算符示例,c 的值 = 11
Line 7 - <<= 运算符示例,c 的值 = 44
Line 8 - >>= 运算符示例,c 的值 = 11
Line 9 - &= 运算符示例,c 的值 = 2
Line 10 - ^= 运算符示例,c 的值 = 0
Line 11 - |= 运算符示例,c 的值 = 2
杂项运算符 ↦ sizeof & 三元
下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? :。
运算符 | 描述 | 示例 |
---|---|---|
sizeof() | 返回变量的大小。 | sizeof(a) 将返回 4,其中 a 是整数。 |
& | 返回变量的地址。 | &a; 将给出变量的实际地址。 |
* | 指向一个变量。 | *a; 将指向一个变量。 |
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
示例
#include <stdio.h>int main()
{int a = 4;short b;double c;int* ptr;/* sizeof 运算符示例 */printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a) );printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b) );printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c) );/* & 和 * 运算符示例 */ptr = &a; /* 'ptr' 现在包含 'a' 的地址 */printf("a 的值是 %d\n", a);printf("*ptr 是 %d\n", *ptr);/* 三元运算符示例 */a = 10;b = (a == 1) ? 20: 30;printf( "b 的值是 %d\n", b );b = (a == 10) ? 20: 30;printf( "b 的值是 %d\n", b );
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - 变量 a 的大小 = 4
Line 2 - 变量 b 的大小 = 2
Line 3 - 变量 c 的大小 = 8
a 的值是 4
*ptr 是 4
b 的值是 30
b 的值是 20
C 中的运算符优先级
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | | | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
示例
#include <stdio.h>main()
{int a = 20;int b = 10;int c = 15;int d = 5;int e;e = (a + b) * c / d; // ( 30 * 15 ) / 5printf("(a + b) * c / d 的值是 %d\n", e );e = ((a + b) * c) / d; // (30 * 15 ) / 5printf("((a + b) * c) / d 的值是 %d\n" , e );e = (a + b) * (c / d); // (30) * (15/5)printf("(a + b) * (c / d) 的值是 %d\n", e );e = a + (b * c) / d; // 20 + (150/5)printf("a + (b * c) / d 的值是 %d\n" , e );return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50
相关文章:
C语言---基础内容(万字)
C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯里奇在贝尔电话实验室设计开发了 C 语言。 C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程…...

c语言从入门到函数速成(完结篇)
哈喽,小伙伴们大家好呀,本篇文章是这个系列的完结篇,希望大家看完后能有所收获哦 首先能看到这里的同学,一定也是自觉性比较强的了,我会在文章末尾给大家发点小福利 那么,我们先来通过数学中的函数来引入一…...

关于linux磁盘告警问题
案例:我们在执行df命令时,查看到磁盘利用率很高,但是到相对应的目录执行du -sh *来找大文件时进行删除时,发现各个目录相加并不大,如下图: 使用df命令查看到根(/)目录使用到33G,而du命令显示只使…...

冯喜运:5.27黄金暴跌大阴后出现“暂定符”今日黄金原油操作策略
【黄金消息面分析】:金价虽然有大阴线暴跌,但依然属于超买后的调整而非熊市,对中长线投资者来说只是市场洗牌。因此,在出现企稳迹象之后,随时关注反弹时机的启动。未来几日,黄金空头可能在进一步发力之前需…...

前端JS必用工具【js-tool-big-box】学习,获取全球重点城市时间
我们去住一些旅馆的时候,或者一些国际性网站,经常可以看见他们的钟表会展示一些国家地区的时间,这个就是很常用的功能。但如果不常接触这个功能的开发网站呢,大家就看自己电脑右下角的时间展示,就是自己当前的具体时间…...

BioTech - 将蛋白质的 PDB 格式文件 转换成 mmCIF 格式文件 (Python)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/139234247 蛋白质的三维结构信息通常可以通过两种格式的文件来获取:PDB (Protein Data Bank) 和 mmCIF (Macromolecular Crystallographic Information File…...

【编程题-错题集】奇数位丢弃(模拟 - 规律)
牛客对应题目链接:奇数位丢弃_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 通过⼀两个例子的模拟,可以发现:每次起始删除的下标都是 2 的次方。根据这个规律,找到最后⼀次删除的起始位置的下标即可。 二、代码 #include <io…...

Docker安装MongoDB(Linux版)
文章目录 前言一、Docker环境的准备1.安装依赖2.安装Docker 二、使用Docker安装MongoDB1.mongo版本选取2.拉取合适的镜像3.宿主机创建MongoDB需要挂载的文件夹4.第一次无认证创建mongo用户5.启动需要认证的mongo容器 问题汇总总结 前言 本文章主要介绍在Centos系统,…...

【设计模式】JAVA Design Patterns——Commander(指挥官模式)
🔍目的 用于处理执行分布式事务时可能遇到的所有问题。 🔍解释 处理分布式事务很棘手,但如果我们不仔细处理,可能会带来不想要的后果。假设我们有一个电子商务网站,它有一个支付微服务和一个运输微服务。如果当前运输…...

解决vue3项目vite打包忽略.vue扩展名
项目打包时报could not relolve “...”,因为vite已不再默认忽略.vue扩展名。 解决方法如下: 在vite.config.js中配置vite使其忽略 .vue 扩展名(不建议忽略) 注意:即使忽略了.vue文件,在实际写的时候也要加…...

Vue基础(数据绑定、export使用)
1、简介 在使用vue开发的过程中,经常会遇到一些容易混淆的问题,因此,在本文中进行汇总操作,只有通过不断总结学习,才能更好掌握vue的使用(每天进步一点)。 2、数据绑定 在js中定义数据…...

【传知代码】基于图神经网络的知识追踪方法(论文复现)
前言:本文将深入探讨基于图神经网络的知识追踪方法,旨在通过构建知识图谱来捕捉知识之间的复杂关联,并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术,然后详细阐述如何将…...
Vue与React、Angular的比较
Vue、React和Angular是前端开发中三个流行的JavaScript框架,它们各自具有不同的特点、优势和适用场景。以下是对这三个框架的比较: 1. 基本概念 Vue:Vue是一套用于构建用户界面的渐进式框架,其核心库专注于视图层,易…...
LINQ(二) —— 流式语句
总目录 C# 语法总目录 LINQ 二 —— 流式语句 1.1 序列相关部分运算符1.2 查询相关部分运算符 1.1 序列相关部分运算符 Take 运算符:Take 是拿出序列的几个数 Skip 运算符:Skip 是跳过序列的前几个数 Reverse 运算符:Reverse 是将序列反转 …...
怎么查看MySQL服务的最大连接,已经使用的连接数?怎么配置最大连接数?
要查看和配置MySQL服务的最大连接数以及已经使用的最大连接数,可以使用以下SQL语句和步骤: 查看MySQL服务的最大连接数和已经使用的最大连接数 查看当前最大连接数: SHOW VARIABLES LIKE max_connections;查看已经使用的最大连接数ÿ…...

微信小程序毕业设计-跑腿系统项目开发实战(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

stm32通过esp8266连接阿里云平台代码讲解
连接服务器 首先,按照一定的规则,获取连接阿里服务器所需要的ClientID(客户端D)、Username(用户名)、Passward(密码),ServerIP(域名),ServerPort(…...

突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...
作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…...

SpringCloudAlibaba:6.2RocketMQ的普通消息的使用
简介 普通消息也叫并发消息,是发送效率最高,使用最多的一种 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSch…...

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据
样式 在趋势图中点击某一个柱状图,出现下面的弹窗 代码实现 主要是在趋势图页面代码中,在初始化趋势图的设置中,添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…...

.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 适用场…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...