C语言基础之【程序流程结构】
C语言基础之【程序流程结构】
- 概述
- 选择结构
- if语句
- if…else语句
- 小练习:“三只小猪体重比较”
- if…else if…else语句
- 小练习:“三只小猪体重比较”
- 三目运算符
- 小练习:“三只小猪体重比较”
- switch语句
- 小练习:**“成绩等级判断器”**
- 循环结构
- while语句
- 小练习:“敲 7 游戏”
- do…while语句
- 小练习:“水仙花数查找器”
- for语句
- 小练习:“猜数字游戏”
- 嵌套循环
- 小练习:“数字时钟模拟器”
- 小练习:“九九乘法表生成器”
- 小练习:“倒三角九九乘法表生成器”
- 跳转语句break、continue、goto
- break语句
- continue语句
- goto语句
往期《C语言基础系列》回顾:
链接:
C语言基础之【C语言概述】
C语言基础之【数据类型】(上)
C语言基础之【数据类型】(下)
C语言基础之【运算符与表达式】
概述
程序的流程结构
:决定了程序的执行顺序和逻辑。C语言中的流程结构主要包括以下三种:
顺序结构
:顺序结构是程序最基本的流程结构,代码按照从上到下的顺序依次执行。选择结构(分支结构)
:根据条件判断执行不同的代码块。循环结构
:重复执行某段代码,直到满足特定条件。
选择结构
if语句
语法:
if (条件) {// 条件为真时执行的代码 }
示例:
#include <stdio.h>int main() {int a = 1;int b = 2;if (a > b){printf("%d\n", a);}return 0; }
if…else语句
语法:
if (条件) {// 条件为真时执行的代码 } else {// 条件为假时执行的代码 }
示例:
#include <stdio.h>int main() {int a = 1;int b = 2;if (a > b){printf("%d\n", a);}else{printf("%d\n", b);}return 0; }
小练习:“三只小猪体重比较”
编写一个程序,比较三只小猪的体重,并输出最重的一只小猪的体重。
#include <stdio.h> // 包含 printf 和 scanf 函数的头文件
#include <stdlib.h> // 包含 system 函数的头文件int main(void)
{int pig1, pig2, pig3;printf("请输入三只小猪的体重: ");scanf("%d %d %d", &pig1, &pig2, &pig3);if (pig1 > pig2){if (pig1 > pig3){printf("第一只小猪最重,体重为:%d\n", pig1);}else{printf("第三只小猪最重,体重为:%d\n", pig3);}}else{if (pig2 > pig3){printf("第二只小猪最重,体重为:%d\n", pig2);}else{printf("第三只小猪最重,体重为:%d\n", pig3);}}system("pause");return 0;
}
交互过程:
请输入三只小猪的体重: 50 60 55
第二只小猪最重,体重为:60
if…else if…else语句
语法:
if (条件1) {// 条件1为真时执行的代码 } else if (条件2) {// 条件2为真时执行的代码 } else {// 其他情况执行的代码 }
示例:
#include <stdio.h>int main() {int a = 1;int b = 2;if (a > b){printf("%d\n", a);}else if (a < b){printf("%d\n", b);}else{printf("a==b\n");}return 0; }
小练习:“三只小猪体重比较”
编写一个程序,比较三只小猪的体重,并输出最重的一只小猪的体重。
#include <stdio.h> // 包含 printf 和 scanf 函数的头文件
#include <stdlib.h> // 包含 system 函数的头文件int main(void)
{int pig1, pig2, pig3;// 提示用户输入三只小猪的体重printf("请输入三只小猪的体重: ");scanf("%d %d %d", &pig1, &pig2, &pig3);if (pig1 > pig2 && pig1 > pig3){printf("第一只小猪最重,体重为:%d\n", pig1);}else if (pig2 > pig1 && pig2 > pig3){printf("第二只小猪最重,体重为:%d\n", pig2);}else{printf("第三只小猪最重,体重为:%d\n", pig3);}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return 0;
}
交互过程:
请输入三只小猪的体重: 50 60 55
第二只小猪最重,体重为:60
三目运算符
#include <stdio.h>int main()
{int a = 10;int b = 20;int c;if (a > b){c = a;}else{c = b;}printf("c1 = %d\n", c);a = 1;b = 2;c = ( a > b ? a : b );printf("c2 = %d\n", c);return 0;
}
输出:
c1 = 20
c2 = 2
嵌套的三目运算符:
#include <stdio.h> // 包含 printf 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件int main()
{int a = 40;int b = 4;// 嵌套的三目运算符int m = a < b ? 69 : a < b ? 3 : 5;// 输出 m 的值printf("m = %d\n", m);// 输出三目运算符的结果printf("%d\n", a > b ? 69 : 100);// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
输出:
m = 5
69
三目运算符:
a > b ? 69 : 100
:
- 如果
a > b
为真,输出69
- 如果
a > b
为假,输出100
嵌套的三目运算符:
a < b ? 69 : a < b ? 3 : 5
:
- 如果
a < b
为真,m
赋值为69
- 如果
a < b
为假,进一步判断a < b
:
- 如果
a < b
为真,m
赋值为3
- 如果
a < b
为假,m
赋值为5
小练习:“三只小猪体重比较”
编写一个程序,比较三只小猪的体重,并输出最重的一只小猪的体重。
#include <stdio.h> // 包含 printf 和 scanf 函数的头文件
#include <stdlib.h> // 包含 system 函数的头文件int main(void)
{int pig1, pig2, pig3;// 提示用户输入三只小猪的体重printf("请输入三只小猪的体重: ");scanf("%d %d %d", &pig1, &pig2, &pig3);// 使用三目运算符判断最重的小猪int max_pig = (pig1 > pig2) ? (pig1 > pig3 ? pig1 : pig3) : (pig2 > pig3 ? pig2 : pig3);char *pig_name = (pig1 > pig2) ? (pig1 > pig3 ? "第一只小猪" : "第三只小猪") : (pig2 > pig3 ? "第二只小猪" : "第三只小猪");// 输出最重的小猪printf("%s最重,体重为:%d\n", pig_name, max_pig);system("pause");return 0;
}
交互过程:
请输入三只小猪的体重: 50 60 55
第二只小猪最重,体重为:60
switch语句
语法:
switch (表达式) {case 常量1:// 表达式等于常量1时执行的代码break;case 常量2:// 表达式等于常量2时执行的代码break;default:// 其他情况执行的代码 }
示例:
#include <stdio.h>int main() {char c;c = getchar();switch (c) //参数只能是整型变量{case '1':printf("oK\n");break;//switch遇到break就中断了case '2':printf("not oK\n");break;default://如果上面的条件都不满足,那么执行defaultprintf("are you ok?\n");}return 0; }
小练习:“成绩等级判断器”
编写一个程序,要求用户输入一个分数(
0
到100
之间的整数),并根据以下规则输出成绩等级:
- 90 分及以上:输出“优秀”
- 80 分到 89 分:输出“良好”
- 70 分到 79 分:输出“良好”
- 60 分到 69 分:输出“及格”
- 60 分以下:输出“不及格”
#include <stdio.h>
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件int main()
{int score;// 提示用户输入分数printf("请输入分数:");scanf("%d", &score);// 根据分数范围输出成绩等级switch (score / 10) {case 10: // 100 -- 90 优秀case 9:printf("优秀\n");break;case 8: // 70 -- 89 良好case 7:printf("良好\n");break;case 6: // 60 -- 69 及格printf("及格\n");break;default: // 低于 60 不及格printf("不及格\n");break;}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
return EXIT_SUCCESS
:表示程序正常结束。
EXIT_SUCCESS
是标准库中定义的宏,通常值为0
循环结构
while语句
语法:
while (条件) {// 条件为真时重复执行的代码 }
示例:
#include <stdio.h>int main() {int a = 20;while (a > 10){scanf("%d", &a);printf("a = %d\n", a);}return 0; }
小练习:“敲 7 游戏”
编写一个程序,遍历从
1
到100
的所有整数,并根据以下规则输出结果:
- 如果数字是
7
的倍数(如7
,14
,21
等),则输出“敲桌子”- 如果数字的个位数是
7
(如7
,17
,27
等),则输出“敲桌子”- 如果数字的十位数是
7
(如70
,71
,72
等),则输出“敲桌子”- 如果数字不满足以上任何条件,则直接输出该数字。
#include <stdio.h> // 包含 printf 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件// 敲 7
int main()
{int num = 1;while (num <= 100){// 7的倍数、个位含7、十位含7 “敲桌子”if ((num % 7 == 0) || (num % 10 == 7) || (num / 10 == 7)){printf("敲桌子\n");}else{printf("%d\n", num);}num++; // 递增}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
程序从
1
到100
遍历每个数字。
- 如果数字满足以下条件之一,则输出“敲桌子”:
- 数字是
7
的倍数(num % 7 == 0
)- 数字的个位数是
7
(num % 10 == 7
)- 数字的十位数是
7
(num / 10 == 7
)- 否则,输出数字本身。
输出:
123456敲桌子8910111213敲桌子1516敲桌子...
do…while语句
语法:
do {// 先执行一次,然后判断条件 } while (条件);
示例:
#include <stdio.h>int main() {int a = 1;do{a++;printf("a = %d\n", a);} while (a < 10);return 0; }
输出:
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
小练习:“水仙花数查找器”
编写一个程序,查找并输出
100
到999
之间的所有水仙花数。
水仙花数(Narcissistic Number)
:指一个 n n n位数,其每个位上的数字的 n n n次幂之和等于它本身。
- 例如:153是一个水仙花数,因为 1 3 + 5 3 + 3 3 = 153 1^3 + 5^3 + 3^3 = 153 13+53+33=153
#include <stdio.h> // 包含 printf 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件int main()
{int a, b, c;int num = 100; //当前检查的数字,从100开始,逐步递增到999do {a = num % 10; // 存储个位数b = num / 10 % 10; // 存储十位数c = num / 100; // 存储百位数if (a * a * a + b * b * b + c * c * c == num){printf("%d\n", num); // 输出水仙花数}num++;} while (num < 1000);// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
输出:
153
370
371
407
for语句
语法:
for (初始化; 条件; 更新) {// 条件为真时重复执行的代码 }
示例:
#include <stdio.h>int main() {int i;int sum = 0;for (i = 0; i <= 100; i++){sum += i;}printf("sum = %d\n", sum);return 0; }
输出:
sum = 5050
小练习:“猜数字游戏”
编写一个程序,实现一个简单的猜数字游戏。具体要求如下:
- 程序生成一个
0
到99
之间的随机数。- 用户通过输入数字来猜测程序生成的随机数。
- 程序根据用户的输入给出提示
#include <stdio.h> // 包含 printf 和 scanf 函数的头文件
#include <stdlib.h> // 包含 srand 和 rand 函数的头文件
#include <time.h> // 包含 time 函数的头文件int main(void)
{srand(time(NULL)); // 初始化随机数种子int n = 0; //用户输入的数字int num = rand() % 100; // 生成 0 到 99 之间的随机数printf("猜数字游戏开始!请输入一个 0 到 99 之间的数字:\n");for (;;) //死循环{scanf("%d", &n); // 读取用户输入if (n < num){printf("猜小了\n");}else if (n > num){printf("猜大了\n");}else{printf("猜中了!!!\n");break; // 猜中后退出循环}}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return 0;
}
- 使用
srand(time(NULL))
初始化随机数种子,确保每次运行程序时生成的随机数不同。- 使用
rand() % 100
生成一个0
到99
之间的随机数。交互过程:
50
猜大了
30
猜小了
40
猜小了
45
猜大了
42
猜中了!!!
嵌套循环
循环语句之间可以相互嵌套:
#include <stdio.h>int main() {int num = 0;int i, j, k;for (i = 0; i < 2; i++){for (j = 0; j < 2; j++){for (k = 0; k < 2; k++){printf("hello world\n");num++;}}}printf("num = %d\n", num);return 0; }
外层循环执行一次,内层循环执行一周
输出:
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
num = 8
小练习:“数字时钟模拟器”
编写一个程序,模拟一个 24 小时制的数字时钟。具体要求如下:
- 程序应显示从
00:00:00
到23:59:59
的所有时间。- 每秒更新一次时间,并在屏幕上显示当前时间。
#include <stdio.h> // 包含 printf 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件
#include <Windows.h> // 包含 Sleep 函数的头文件int main()
{int i, j, k;// 时for (i = 0; i < 24; i++){// 分for (j = 0; j < 60; j++){// 秒for (k = 0; k < 60; k++){printf("%02d:%02d:%02d\n", i, j, k); // 输出当前时间Sleep(1000); // 延迟 1000 毫秒system("cls"); // 清屏}}}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
输出:
00:00:00 00:00:01 00:00:02 ... 23:59:59
- 通过
嵌套循环
和延迟函数
,程序能够模拟时钟的运行。
小练习:“九九乘法表生成器”
编写一个程序,生成并输出九九乘法表的一部分。
#include <stdio.h> // 包含 printf 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件int main()
{for (size_t i = 1; i <= 9; i++){for (size_t j = 1; j <= i; j++){printf("%dX%d=%d\t", j, i, j * i); // 输出乘法结果}printf("\n"); // 每行结束后输出空行}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
输出:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
小练习:“倒三角九九乘法表生成器”
编写一个程序,生成并输出倒三角形式的九九乘法表。
#include <stdio.h> // 包含 printf 和 putchar 函数的头文件
#include <stdlib.h> // 包含 EXIT_SUCCESS 和 system 函数的头文件int main(void)
{int i, j;for (i = 9; i >= 1; i--) // 行{for (j = 1; j <= i; j++) // 列{printf("%dX%d=%d\t", j, i, j * i); // 输出乘法结果}putchar('\n'); // 每行结束后输出换行符}// 暂停程序,等待用户按键继续(Windows 系统)system("pause");// 程序正常结束return EXIT_SUCCESS;
}
输出:
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X4=4 2X4=8 3X4=12 4X4=16
1X3=3 2X3=6 3X3=9
1X2=2 2X2=4
1X1=1
跳转语句break、continue、goto
break语句
在
switch条件语句
和循环语句
中都可以使用break语句:
- 当它出现在switch条件语句中时,作用是:
终止某个case并跳出switch结构
- 当它出现在for、while、do-while循环语句中时,作用是:
跳出当前内循环语句,执行后面的代码
- 当它出现在嵌套循环语句中时,作用是:
跳出最近的内循环语句,执行后面的代码
在
switch语句
中使用 break
- 用于防止
switch
语句中的代码“贯穿”到下一个case
分支。#include <stdio.h>int main() {int num = 2;switch (num) {case 1:printf("数字是 1\n");break; // 终止 switch 语句case 2:printf("数字是 2\n");break; // 终止 switch 语句case 3:printf("数字是 3\n");break; // 终止 switch 语句default:printf("未知数字\n");}return 0;}
输出:
数字是 2
在
循环语句
中使用 break
- 跳出当前内循环语句,执行后面的代码
#include <stdio.h>int main() {for (int i = 1; i <= 10; i++) {if (i == 5) {break; // 当 i 等于 5 时,退出循环}printf("%d\n", i);}printf("循环结束\n");return 0;}
输出:
1
2
3
4
循环结束
在
嵌套循环语句
中使用 break
- 跳出最近的内循环语句,执行后面的代码
#include <stdio.h>int main() {for (int i = 1; i <= 3; i++) {for (int j = 1; j <= 3; j++) {if (j == 2) {break; // 跳出内层循环}printf("i = %d, j = %d\n", i, j);}}return 0;}
输出:
i = 1, j = 1
i = 2, j = 1
i = 3, j = 1
continue语句
continue 语句
:跳过当前循环的剩余部分,直接进入下一次循环的条件判断
或迭代
使用 continue
跳过偶数的输出:
#include <stdio.h>int main(void)
{for (int i = 1; i <= 10; i++){if (i % 2 == 0) // 如果是偶数{continue; // 跳过本次循环,直接进入下一次循环}printf("%d ", i); // 只输出奇数}return 0;
}
输出:
1 3 5 7 9
break
和 continue
的区别
特性 | break | continue |
---|---|---|
作用 | 终止整个循环或 switch 语句 | 跳过当前循环的剩余部分,进入下一次迭代 |
循环行为 | 循环立即结束,不再执行后续代码 | 循环继续,但跳过当前迭代的剩余代码 |
适用场景 | 提前退出循环或 switch 语句 | 跳过某些特定条件的迭代 |
嵌套循环中的行为 | 只终止最内层的循环 | 只影响当前所在的循环 |
continue
只能用于循环结构(for
、while
、do-while
),不能用于switch
语句或其他地方。
goto语句
goto 语句
:是一种无条件跳转语句,它允许程序跳转到同一函数内的某个标签(label)处继续执行。
- 尽管
goto
语句在某些情况下可以简化代码- 但它也容易导致代码结构混乱,降低可读性和可维护性
因此:
goto
语句在现代编程中通常不推荐使用。
goto
语句的基本语法:goto label; ... label:// 代码块
label
是一个用户定义的标识符,后面跟一个冒号(:
)- 当程序执行到
goto label;
时,会立即跳转到label:
处继续执行
#include <stdio.h>int main()
{goto End; //无条件跳转到End的标识printf("aaaaaaaaa\n");End:printf("bbbbbbbb\n");return 0;
}
输出:
bbbbbbbb
注意事项:
#include <stdio.h> #include <stdlib.h>int main(void) {int i = 0;int j = 0; //如果将这句代码注释掉//会出现这样的错误:“goto ABX234”跳过了“j”的初始化for (i = 0; i < 10; i++){if (i == 5)goto ABX234;printf("i = %d\n", i);}for (j = 0; j < 10; j++){ABX234:printf("j = %d\n", j);}system("pause");return 0; }
输出:
i = 0
i = 1
i = 2
i = 3
i = 4
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
j = 8
j = 9
尽管
goto
语句在大多数情况下不推荐使用,但在以下场景中,它可以提供一定的便利:
- 错误处理:
- 在函数中,如果发生错误,可以使用 goto 跳转到统一的
错误处理代码块
,避免重复代码- 跳出多层循环:
- 在嵌套循环中,如果需要从内层循环直接跳出外层循环,可以使用 goto
- 资源清理:
- 在需要释放资源(如内存、文件句柄等)时,可以使用 goto 跳转到
清理代码块
👨💻 博主正在持续更新C语言基础系列中。
❤️ 如果你觉得内容还不错,请多多点赞。⭐️ 如果你觉得对你有帮助,请多多收藏。(防止以后找不到了)
👨👩👧👦
C语言基础系列
持续更新中~,后续分享内容主要涉及C++全栈开发
的知识,如果你感兴趣请多多关注博主。
相关文章:
C语言基础之【程序流程结构】
C语言基础之【程序流程结构】 概述选择结构if语句if…else语句小练习:“三只小猪体重比较” if…else if…else语句小练习:“三只小猪体重比较” 三目运算符小练习:“三只小猪体重比较” switch语句小练习:**“成绩等级判断器”**…...
代码随想录35 动态规划
目录 leetcode 746.使用最小花费爬楼梯 leetcode 62.不同路径 思路: leetcode 63.不同路径|| leetcode 746.使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选…...
【游戏设计原理】98 - 时间膨胀
从上文中,我们可以得到以下几个启示: 游戏设计的核心目标是让玩家感到“时间飞逝” 游戏的成功与否,往往取决于玩家的沉浸感。如果玩家能够完全投入游戏并感受到时间飞逝,说明游戏设计在玩法、挑战、叙事等方面达到了吸引人的平衡…...
51单片机 06 定时器
51 单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 作用:1、用于计时;2、替代长时间的Delay,提高CPU 运行效率和处理速度。 定时器个数:3个(T0、T1、T2)…...
4 前端前置技术(中):node.js环境
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 前言...
【Leetcode刷题记录】1456. 定长子串中元音的最大数目---定长滑动窗口即解题思路总结
1456. 定长子串中元音的最大数目 给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为(a, e, i, o, u)。 这道题的暴力求解的思路是通过遍历字符串 s 的每一个长度为 k 的子串…...
C++效率掌握之STL库:string函数全解
文章目录 1.为什么要学习string?什么是string?2.string类对象的常见构造3.string类对象的容量操作4.string类对象的迭代器5.string类对象的元素访问6.string类对象的元素修改7.string类对象的查找、提取、对比8.string类的非成员函数及npos希望读者们多多…...
Linux命令运行原理及权限管理
目录 1.引言 2.shell命令以及运行原理 3.Linux权限 3.1Linux下的用户类型 3.2Linux权限管理 3.2.1文件访问者的分类(人) 3.2.2文件类型和访问权限(事物属性) 3.2.3文件权限值的表示方法 3.2.4文件访问权限的相关设置方法…...
linux内核源代码中__init的作用?
在 Linux 内核源代码中,__init是一个特殊的宏,用于标记在内核初始化阶段使用的变量或函数。这个宏的作用是告诉内核编译器和链接器,被标记的变量或函数只在内核的初始化阶段使用,在系统启动完成后就不再需要了。因此,这…...
系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝
其中标题的深搜,回溯,剪枝我们之前专题都已经有过学习和了解,这里多了两个穷举和暴搜,其实意思都差不多,穷举就是穷尽力气将所有情况都列举出来,暴搜就是暴力地去一个一个情况搜索,所以就是全部…...
《深度洞察ICA:人工智能信号处理降维的独特利器》
在人工智能技术飞速发展的今天,信号处理作为关键环节,面临着数据维度不断攀升的挑战。高维信号数据虽蕴含丰富信息,但也给处理和分析带来诸多难题,如计算资源消耗大、分析复杂度高、模型易过拟合等。独立成分分析(ICA&…...
FASTA 和 FASTQ 格式详解|SRA转fastq
FASTA 格式 FASTA 格式是一种用于存储序列信息的简单格式,广泛应用于核酸(DNA/RNA)和蛋白质序列的存储。它主要由两个部分组成: 描述行:以“>”符号开头,包含序列的描述信息,如名称、来源等…...
Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)
目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…...
为何在Kubernetes容器中以root身份运行存在风险?
作者:马辛瓦西奥内克(Marcin Wasiucionek) 引言 在Kubernetes安全领域,一个常见的建议是让容器以非root用户身份运行。但是,在容器中以root身份运行,实际会带来哪些安全隐患呢?在Docker镜像和…...
【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...
以AI为翼:技术能力进阶的新路径
一、引言 1.1 研究背景与意义 在当今数字化时代,人工智能(AI)已成为推动各领域发展的核心驱动力。从最初简单的算法模型到如今复杂的深度学习架构,AI 技术取得了令人瞩目的进步。自 20 世纪 50 年代人工智能概念提出以来&#x…...
使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器
在Perl中,HTTP::Server::Simple 模块提供了一种轻量级的方式来实现HTTP服务器。该模块简单易用,适合快速开发和测试HTTP服务。本文将详细介绍如何使用 HTTP::Server::Simple 模块创建和配置一个轻量级HTTP服务器。 安装 HTTP::Server::Simple 首先&…...
Jenkins 触发构建的几种常见方式
为了实现自动化构建,Jenkins 提供了多种触发构建的方式。这些触发方式可以根据开发团队的需求来选择,使得构建过程更加灵活和高效。 1. 手动触发构建 手动触发构建是最简单的一种方式,通常用于开发人员或管理员手动启动构建任务。 步骤: 登录 Jenkins 后,进入某个项目(…...
算法基础--二分查找
模板 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> /** 二分查找(Binary Search)是一种高效的查找算法,其时间复杂度为 o(logn) */ using namespace std;const int N …...
Vue 3 30天精进之旅:Day 14 - 项目实践
在前面的学习中,我们已经掌握了Vue 3的基础知识,包括其核心概念、Vue Router、Vuex,以及异步操作等。今天是一个重要的里程碑:我们将把这些知识整合到一个实际的项目中。通过项目实践,你将能够深入理解所学知识&#x…...
【Java基础-42.4】Java中的包装类对象默认值:深入解析与注意事项
在Java编程中,包装类(Wrapper Classes)是将基本数据类型(如int、char等)封装为对象的类。它们提供了更多的功能和灵活性,例如允许基本数据类型参与面向对象的操作(如存储在集合中)。…...
Linux进程概念
目录 一.进程 二.进程状态 三.环境变量 四.程序地址空间 五.Linux2.6内核进程调度队列 一.进程 基本概念 课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的…...
Linux的简单使用和部署4asszaaa0
一.部署 1 环境搭建方式主要有四种: 1. 直接安装在物理机上.但是Linux桌面使用起来非常不友好.所以不建议.[不推荐]. 2. 使用虚拟机软件,将Linux搭建在虚拟机上.但是由于当前的虚拟机软件(如VMWare之类的)存在⼀些bug,会导致环境上出现各种莫名其妙的问题比较折腾.[非常不推荐…...
人工智能专业术语详解(A)
人工智能不仅是指寻求如何替代人类的机器人或人类寻求自我挑战的游戏,更是指运用复杂的程序化数学,其结果与高质量的训练数据相结合,推动了我们在日常生活中所看到的技术进步。从无人驾驶汽车到寻找癌症的治疗方法,人工智能正在逐…...
深度学习 Pytorch 基础网络手动搭建与快速实现
为了方便后续练习的展开,我们尝试自己创建一个数据生成器,用于自主生成一些符合某些条件、具备某些特性的数据集。 导入相关的包 # 随机模块 import random# 绘图模块 import matplotlib as mpl import matplotlib.pyplot as plt# 导入numpy import nu…...
deepseek的对话风格
概述 deepseek的对话风格,比一般的模型的回答多了思考过程,这是它比较可爱的地方,模型的回答有了思考过程,对用户而言大模型的回答不完全是一个黑盒。 deepseek的对话风格 train_prompt_style """Below is an…...
Spring Security(maven项目) 3.0.2.9版本 --- 改
前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…...
OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
TVM调度原语完全指南:从入门到微架构级优化
调度原语 在TVM的抽象体系中,调度(Schedule)是对计算过程的时空重塑。每一个原语都是改变计算次序、数据流向或并行策略的手术刀。其核心作用可归纳为: 优化目标 max ( 计算密度 内存延迟 指令开销 ) \text{优化目标} \max…...
AlexNet网络学习笔记(NIPS 2012)
题目:ImageNet Classification with Deep Convolutional Neural Networks 发文机构:多伦多大学 作者:Alex Krizhevsky,Ilya Sutskever,Geoffrey E. Hinton(人工智能教父,AI三巨头——杰弗里.辛顿(Geoffrey Hinton),约书亚.本吉奥(Yoshua Bengio)和扬.勒丘恩(Yan…...
Starrocks 对比 Clickhouse
极速查询的单表查询 StarRocks 在极速查询方面上做了很多,下面着重介绍四点: 1)向量化执行:StarRocks 实现了从存储层到查询层的全面向量化执行,这是 StarRocks 速度优势的基础。向量化执行充分发挥了 CPU 的处理能力…...
C++实现一款功能丰富的通讯录管理系统
在学习编程的过程中,如何设计一个实用的项目是许多同学头疼的问题。如果你是一位正在学习C的同学,想通过实际项目巩固知识,那么这个通讯录管理系统绝对是一个理想的练手项目。在本文中,我将详细拆解代码逻辑,帮助你理解…...
动态规划之背包问题
文章目录 0-1 背包问题1. 二维动态规划实现(0-1 背包):2. 一维动态规划实现(0-1 背包): 完全背包问题1. 二维动态规划实现(完全背包):2. 一维动态规划实现(完…...
Linux抢占式内核:技术演进与源码解析
一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…...
Rust语言进阶之文件处理:BufWriter用法实例(一百零四)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
EtherCAT主站IGH-- 30 -- IGH之master.h/c文件解析
EtherCAT主站IGH-- 30 -- IGH之master.h/c文件解析 0 预览一 该文件功能`master.c` 文件功能函数预览二 函数功能介绍`master.c` 中主要函数的作用1. `ec_master_init`2. `ec_master_clear`3. `ec_master_thread_start`4. `ec_master_thread_stop`5. `ec_master_enter_idle_pha…...
关于deepseek的一些普遍误读
最近deepseek成为全球最热门的话题,甚至没有之一,无论是北美,欧洲,各大IT巨头,各个投资机构,政府官员,乃至脱口秀演员,都在不断提及这个话题,而国内,自媒体也…...
刷题记录 动态规划-7: 63. 不同路径 II
题目:63. 不同路径 II 难度:中等 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。…...
7-2 拯救外星人
7-2 拯救外星人 你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“57”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。…...
人工智能导论-第3章-知识点与学习笔记
参考教材3.2节的内容,介绍什么是自然演绎推理;解释“肯定后件”与“否定前件”两类错误的演绎推理是什么意义,给出具体例子加以阐述。参考教材3.3节的内容,介绍什么是文字(literal);介绍什么是子…...
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
一、GenBI AI 代理介绍(文末提供下载) github地址:https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI,我们的使命是通过生成式商业智能 (GenBI) 使组织能够无缝访问数据&…...
Java 大视界 -- Java 大数据在智能电网中的应用与发展趋势(71)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
c语言练习题【消息队列、共享内存、信号灯集】
练习1:消息队列 请使用消息队列实现2个终端之间互相聊天 #发送端 key_t key; int id;typedef struct Msgbuf{long channel;char buf[128];}msg_t;int main(int argc, const char *argv[]) {if (argc<2){printf("传入频道号\n");return 1;}keyftok("./ipc&q…...
力扣 295. 数据流的中位数
🔗 https://leetcode.cn/problems/find-median-from-data-stream/ 题目 数据流中不断有数添加进来,add 表示添加数据,find 返回数据流中的中位数 思路 大根堆存储数据流中偏小的数据小根堆存储数据流中偏大的数据若当前的 num 比大根堆的…...
JavaScript原型链与继承:优化与扩展的深度探索
在 JavaScript 的世界里,万物皆对象,而每个对象都有一个与之关联的原型对象,这就构成了原型链的基础。原型链,简单来说,是一个由对象的原型相互连接形成的链式结构 。每个对象都有一个内部属性[[Prototype]]࿰…...
【建站】专栏目录
建站专栏的想法有很多,想写穷鬼如何快速低成本部署前后端项目让用户能访问到,如何将网站收录到百度,bing,google并优化seo让搜索引擎搜索到网站,想写如何把网站加入google广告或者接入stripe信用卡首款平台收款&#x…...
题目 1160: 出圈
题目描述 设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。 输入格式 输入多行,每…...
Python小游戏29乒乓球
import pygame import sys # 初始化pygame pygame.init() # 屏幕大小 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("打乒乓球") # 颜色定义 WHITE (255, 255, 255) BLACK (…...
力扣 【99. 恢复二叉搜索树】Java题解(二叉树的 Morris 遍历)
题目链接 Morris遍历 递归和迭代遍历,不管是前序中序还是后续,空间复杂度都是O(n)(递归是因为隐式调用栈的开销)。 而Morris遍历可以做到空间复杂度是O(1)。 思路就是节点的前序节点的右指针指向该节点,来保证可以通…...
CNN的各种知识点(一):卷积神经网络CNN通道数的理解!
卷积神经网络CNN通道数的理解! 通道数的核心概念解析1. 通道数的本质 2. 单张灰度图的处理示例: 3. 批量输入的处理通道与批次的关系: 4. RGB三通道输入的处理计算过程:示例: 5. 通道数的实际意义6. 可视化理解(1) 单通…...