目录

项目四、路由器管理系统-权限判断

第 1 节 项目需求、项目实现

第 2 节 项目精讲-string 字符串的比较

第 3 节 项目精讲-表示真假的布尔类型

第 4 节 项目精讲-C 语言字符串的比较

第 5 节 项目精讲-其它数据类型的比较运算

第 6 节 项目精讲-用于综合决策的逻辑运算

6.1逻辑与 &&

6.2逻辑或 ||

6.3逻辑非 !

第 7 节 项目精讲-操作硬件的位运算

第 8 节 项目精讲-其它运算

8.1算术运算

8.2赋值运算

8.3复合赋值运算

8.4自增自减运算

8.5逗号运算符

8.6三目运算符

第 9 节 项目精讲-使用多个运算符时的优先级

第 10 节 项目精讲-数据类型之间的转换

10.1类型转换的概念

10.2隐式类型转换

10.3强制类型转化

第 11 节 项目精讲-如果再回到从前- 条件判断

11.1项目精讲-if 语句的三种形态

11.2项目精讲-if 语句的嵌套

第 12 节 项目精讲-switch 语句

12.1switch 的基本使用

12.2switch 和 if 的选择

第 13 节 项目精讲-常见错误总结

13.1switch 错误

13.2不安全函数(scanf 等)

13.3cin >> 的返回值

13.4getline 的返回值

13.5if 语句后面误加分号

第 14 节 英语不是障碍:计算机英语加油站

第 15 节 编程思维修炼

​第 16 节 职场修炼:怎样优雅地避免加班

第 17 节 项目练习

17.1习题 1. 让用户输入一个字符, 然后进行转换:

17.2习题 2. 让用户输入一个数字(0-9),然后输出对应的大写汉字。

17.3习题 3. 让用户输入年份和月份,然后输出这个月有多少天。

第 18 节 程序员逼格提升:程序员的逼格神器-github


项目四、路由器管理系统-权限判断

为看书困难的小伙伴推荐视频教程:百度网盘 提取码:r59a

第 1 节 项目需求、项目实现

项目需求

项目实现:

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;int main(void) {string name;string pwd;std::cout << "请输入账号:";std::cin >> name;std::cout << "请输入密码:";std::cin >> pwd;if (name == "54hk" && pwd == "123456") {std::cout << "1.网站 404 攻击" << std::endl;std::cout << "2.网站篡改攻击" << std::endl;std::cout << "3.网站攻击记录" << std::endl;std::cout << "4.DNS 攻击" << std::endl;std::cout << "5.服务器重启攻击" << std::endl;} else {cout << "用户名或密码错误!" << endl;}system("pause");return 0;
}

第 2 节 项目精讲-string 字符串的比较

复习字符串的比较规则:

按顺先从前往后比较

同序号的字符按“ASCII”码值比较

直到遇到对应字符不等或者字符串结束

字符串比较的“运算符”

==

>

<

>= (大于或者等于)

<= (小于或者等于)

!=

c++中,字符串的比较, 可以直接使用以上的”比较运算符”

比如:

str1 == str2

字符串比较的“结果”:bool 类型

逻辑真 true

逻辑假 false

第 3 节 项目精讲-表示真假的布尔类型

C++语言中,有两种 bool(布尔)类型的表示方式:

1)直接使用 bool 类型

bool x = true;

bool 类型, 只有两个值:

true

false

2)使用 0 和非 0 的任何值(C 语言风格)

0:表示假

非 0: 表示真

​特别注意:

1>3 是假

1>3 == false 是真

3>1 是真

3>1 == false 是假

bool x;

x = 1 < 3;

类似:

对你的女神/男神说:

我爱你 => 是真

我爱你 == true => 是真

我爱你 == false => 是假

对你的备胎说:

我爱你 => 是假

我爱你 == true => 是假

我爱你 == false => 是真

常见错误:

3>2>1 是假

3>2>1 => true>1 => 1>1 => false

3>2 && 2>1 使用“逻辑与”运算。

bool 类型使用场合:

if 语句

for 语句

while 语句

第 4 节 项目精讲-C 语言字符串的比较

#include <string.h>
int strcmp( const char *str1, const char *str2 );

例如:

int ret;
ret = strcmp(str1, str2);

返回值:

str1 < str2 时, 返回值< 0(有些编译器返回 -1)

str1 > str2 时, 返回值> 0(有些编译器返回 1)

str1 等于 str2 时, 返回值为 0

demo

#include <stdio.h>
#include <string.h>
#include <Windows.h>int main(void) {char addr[32];int ret;printf("美女,你是哪里人?");scanf("%s", addr);if (strcmp(addr, "湖南") == 0) {printf("美女,我们是老乡啊!\n");} else {printf("美女,你和我的同学是老乡啊!\n");}system("pause");return 0;
}

第 5 节 项目精讲-其它数据类型的比较运算

char, int, short, float, double 等数据类型,都可以使用比较运算:

大于: >

大于或等于: >=

小于: <

小于或等于: <=

不等于: !=

等于: ==(注意:不是 = )

比较运算的结果:(逻辑值)

结果为“真”: true

结果为“假”: false

#include <iostream>
#include <Windows.h>using namespace std;int main(void) {int weight;printf("美女, 你多重啊?\n");cin >> weight;if (weight >= 120) {cout << "美女, 如此丰满, 真有福气!" << endl;} else {cout <<"美女, 这么瘦, 身材不错啊!" << endl;}system("pause");return 0;
}

第 6 节 项目精讲-用于综合决策的逻辑运算

与 C 语言完全相同。

现实生活中,任何决策,都是根据多个因素,综合决策的!

有没有钱, 有没有时间, 实力允不允许?

6.1逻辑与 &&

a

b

a&&b

都为真,逻辑与才是真

只要有一个是假, 逻辑与就是假

相当于“而且”

应用场景:

当需要两个条件都满足时,就使用逻辑与

特别注意:

条件 1 && 条件 2

当条件 1 为真时,才去判断条件 2

当条件 1 为假时,就不再判断条件 2

多个条件:

条件 1 && 条件 2 && 条件 3

#include <iostream>
#include <Windows.h>using namespace std;int main(void) {int money;int days;cout << "你有多少钱?";cin >> money;cout << "你看多少天的假期?";cin >> days;//如果存款大于 10 万,而且假期大于 10 天, 就去旅游if (money > 100000 && days > 10) {cout << "我要去旅游!" << endl;} else {cout << "还是在家里呆着" << endl;}system("pause");return 0;
}

6.2逻辑或 ||

a

b

a||b

只要有一个是真, 结果就是真

都为假时,结果才是假

相当于“或者”

多个条件:

条件 1 || 条件 2 || 条件 3

应用场景:

只需要满足任意一个条件时,就使用逻辑或

特别注意:

条件 1 || 条件 2

当条件 1 为真时,就不再判断条件 2

当条件 1 为假时,才判断条件 2

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {int money;string love;cout << "你有多少钱?" << endl;cin >> money;cout << "你爱我吗?" << endl;cin >> love; //回答: 爱 或者 不爱if (money > 1000000 || love == "爱" ) {cout << "我们结婚吧!" << endl;} else {cout << "你是一个好人!" << endl;}system("pause");return 0;
}

6.3逻辑非 !

是”单目运算符”, 即:只有一个操作数

!条件

a

!a

相当于“不”

应用场景:

当需要不满足某条件时,就使用逻辑非

特别注意:

逻辑非,只对一个条件进行运算!

是一种“单目运算符”

需求: 如果月薪不到 3 万, 那就努力修炼. 否则, 就可以去接外包.

#include <iostream>
#include <Windows.h>using namespace std;int main(void) {int money;int days;cout << "你的月薪多少?";cin >> money;if (!(money >= 30000)) {cout << "我是菜鸟, 薪资不到 3 万, 我要努力修炼!\n" << endl;} else {cout << "我要接外包\n" << endl;}system("pause");return 0;
}

第 7 节 项目精讲-操作硬件的位运算

问题:

把地址为 0x80040 的寄存器的最低 4 位设置为 0110

解决方案:

使用位操作

什么是位?

内存的基本单元是字节, 一个字节有 8 位.

位与 &

0 & 0 0

0 & 1 0

1 & 0 0

1 & 1 1

对应位, 都是 1, 结果才是 1

// 00001000

// 00000011

// 00000000

cout << " 8 & 3 = " << (8 & 3) << endl;

位或 |

0 | 0 0

0 | 1 1

1 | 0 1

1 | 1 1

对应位, 都是 0, 结果才是 0

只要有一位是 1, 结果就是 1

0 | x x

// 00001000

// 00000011

// 00001011

cout << " 8 | 3 = " << (8 | 3) << endl;

位非 ~

~ 1 0

~ 0 1

取反

// 00001000

// 11110111

unsigned char x = ~8;

cout << (int)x << endl; //247

异或 ^

0 ^ 0 0

1 ^ 1 0

0 ^ 1 1

1 ^ 0 1

对应位不同, 结果才是 1

// 00001000

// 00000011

// 00001011

cout << (8^3) << endl; //11

<< 左移

右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。

向左移动 n 个位置,就等同于乘以 2 的 n 次方

只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)

// 00001000

// 01000000

cout << (8<<3) << endl; //8*2*2*2 = 64

>> 右移

如果左操作数是无符号类型,则左边多出来的位用 0 来填充。

如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。

向左移动 n 个位置,就等同于除以 2 的 n 次方

只适用于: int/short/long/char 等定点数类型(float/double 浮点数类型不能使用)

// 00001000

// 00000001

cout << (8>>3) << endl; //1

应用:

把一个整数的的最低 4 位设置为 0110

cout << "请输入一个整数: " << endl;
cin >> x;//把 x 的最低 4 位清 0
x = x & (~15);//把 x 的最低 4 位设置为 0110
x = x | 6;cout << "x=" << x << endl;

第 8 节 项目精讲-其它运算

已经学习了:

x = 100;

== > >= < <= !=

&& || !

& | ~ ^ >> <<

8.1算术运算

+

x = 5 + 3;

-

x = 5 - 3;

*

x = 5 * 3;

/

x = 10 / 3;

1. 两个整数相除,结果取整数部分
2. 除数不能为 0(也不要为 0.0)

%

取余

x = 10 % 3;
//结果为1

只有整数和 char 类型可以做%运算
float 和 double 类型不能做%运算

8.2赋值运算

x = 10; //把 x 的值设置为 10, 把 10 写到变量 x 中。

x = 10 + a;

左边必须是变量

“优先级”很低,只比 ","(逗号元素符)高。

8.3复合赋值运算

x += 10; // x = x + 10

x -= 10; // x = x - 10

类的还有: *= ,/=, %= 等。

8.4自增自减运算

i++ => i = i+1

++i => i = i+1

i-- => i = i-1

--i => i = i-1

i = 100;

x = i++; // x = 100

i = 100;

x = ++i; // x= 101

后缀自增

x = i++;

x = i;
i = i+1;

先取值
再自增(自减)

后缀自减

x=i--;

x = i;
i=i-1;

先取值
再自增(自减)

前缀自增

x = ++i;

i=i+1;
x = i;

先自增(自减)
再取值

前缀自减

x = --i;

i=i-1;
x = i;

先自增(自减)
再取值

注意:

1. 只能对变量做++和--运算,不能对变量和表达式做++和--运算

5++; //ERROR

(3+x)++; //ERRO

2. 建议尽量使用前缀自增(自减),以避免错误。

8.5逗号运算符

优先级最低。

#include <stdio.h>int main(void) {int x;// 先计算 x = 3+5, 再计算 3*5x = 3+5, 3*5, 10/5;printf("x=%d\n", x); //x=8//取最后一个表达式的值,作为整个“逗号表达式”的值x = (3+5, 3*5, 10/5);cout <<  x << endl; //x=2return x;
}

8.6三目运算符

条件 ? 表达式 1 :表达式 2

如果条件为真,就取表达式 1 作为整个表达式的值

如果条件为假,就取表达式 2 作为整个表达式的值

#include <iostream>
#include <Windows.h>using namespace std;int main(void) {int salary;printf("请输入您的月薪: ");scanf("%d", &salary);cout << (salary > 30000 ? "老鸟" : "菜鸟") << ", 晚上好!" << endl;system("pause");return 0;
}

第 9 节 项目精讲-使用多个运算符时的优先级

一共有 15 个级别!

不需强制记忆,只需要掌握以下常用的优先级:

最高优先级:( )和[ ]

最低优先级:逗号表达式

倒数第二低优先级:赋值和复合赋值(=, +=, -= ...)

x = a+ b*c;

! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

(3 + 4 < 5 && 6 > 7) || (8 > 7);

第 10 节 项目精讲-数据类型之间的转换

10.1类型转换的概念

为什么需要“类型转换”

参与运算的两个操作数的数据类型,必须相同!

类型转换的类别:

1. 隐式类型转换 (自动完成转换)

1)算数转换

2)赋值转换

3)输出转换

2. 强制类型转化

10.2隐式类型转换

算数转化

(+,-,*,/,%)

char , int, long, long long, float, double

15 + 3.14 => 15.0 + 3.14

赋值转换

#include <stdio.h>int main(void) {int x;// 计算结果 31.4 转换为 int 类型,因为赋值符号的左边变量的类型是 int 类型x = 3.14 * 10.0;cout << x << endl; //31return 0;
}

输出转换(C 语言)

#include <stdio.h>int main(void) {printf("%c\n", 255+50); //305 -> 49 ('1');printf("%d\n", 255+50); //305return 0;
}

int 类型数据, 按照%f 格式输出时,将得到错误的输出

float(或 double) 类型数据,按照%d 格式输出时,将得到错误的输出

10.3强制类型转化

简单强制类型转换

(直接使用数据类型)

int x = 257 + 100;
cout << "x=" << x << endl; //357x = (char)257 + 100; //100000001 -> 00000001
cout << "x=" << x << endl; //101

高级强制类型转换

1) static_cast

2) dynamic_cast

3) const_cast

4) reinterpert_cast

[将在后续章节中, 详细精讲]

第 11 节 项目精讲-如果再回到从前- 条件判断

11.1项目精讲-if 语句的三种形态

形态 1:

#include <iostream>using namespace std;int main(void) {int salary;cout << "你月薪多少?";cin >> salary;if (salary < 20000) {cout << "你是一个好人, 我还不想谈恋爱." << endl;}system("pause");return 0;
}

形态 2:

#include <iostream>using namespace std;int main(void) {int salary;cout << "你月薪多少?" << endl;cin >> salary;if (salary < 20000) {cout << "你是一个好人, 我还不想谈恋爱." << endl;} else {cout << "我没有什么要求, 只要你对我好就行." << endl;}system("pause");return 0;
}

形态 3

#include <iostream>
#include <string>
#include <stdio.h>using namespace std;int main(void)
{int salary;string houseRet; //是否有房string carRet; //是否有车cout << "你的月薪是多少?" << endl;cin >> salary;cout << "你有房吗?" << endl;cin >> houseRet;cout << "你有车吗?" << endl;cin >> carRet;if (salary < 20000) {cout << "你是一个好人, 我现在还不想谈恋爱." << endl;} else if (houseRet == "有") {cout << "我其实没有什么要求,只要你对我好." << endl;} else if (carRet == "有") {cout << "还不错哦, 以后再联系." << endl;} else {cout << "有缘再见." << endl;}system("pause");return 0;
}

11.2项目精讲-if 语句的嵌套

实例:

求 3 个数的最大值。

#include <iostream>
#include <windows.h>using namespace std;int main(void) {int x, y, z;cout << "请输入 3 个整数: " << endl;cin >> x >> y >> z;if (x > y) {if (x > z) {cout << "最大值是: " << x << endl;} else {cout << "最大值是: " << z << endl;}} else {if (y > z) {cout << "最大值是: " << y << endl;} else {cout << "最大值是: " << z << endl;}}system("pause");return 0;
}

嵌套的常见错误(配对错误)

与前面最近的,而且还没有配对的 if 匹配

错误避免方法:

1)严格使用 { }

2)先写{}再写里面的内容

3)保持良好的“缩进”

第 12 节 项目精讲-switch 语句

12.1switch 的基本使用

语法:

switch (x) {case 表达式 1:语句 1break;case 表达式 2:语句 2break;case 表达式 3:语句 3break;default 表达式 1:语句 1break;
}

流程图:

​demo

#include <iostream>
#include <windows.h>using namespace std;int main(void) {int num;cout << "请输入一个数字: ";cin >> num;switch (num) {case 1:cout << "星期一:包子" << endl;break;case 2:cout << "星期二:馒头" << endl;break;case 3:cout << "星期三:稀饭" << endl;break;case 4:cout << "星期四:白菜" << endl;break;case 5:cout << "星期五:土豆" << endl;break;case 6:case 7:cout << "周末:休息" << endl;break;default:cout << "请输入 1-7" << endl;break;}system("pause");return 0;
}

12.2switch 和 if 的选择

switch: 用于 int/char/long/long long 类型的变量,和多个特定常量的判断处理。

(float 和 double 类型不可以)

if: 适用于各种逻辑判断

第 13 节 项目精讲-常见错误总结

13.1switch 错误

以下错误,在 vs/vc 中有提示,但是仍可以通过编译。

在 gcc 编译器中,不能通过编译。

#include <stdio.h>int main(void) {int c;scanf("%d", &c);switch(c) {case 1:int x = 0;  //错误!printf("c=1");break;case 2:printf("c=2");break;default:printf("other");break;}return 0;
}

应该修改为:

#include <stdio.h>int main(void) {int c;scanf("%d", &c);switch(c) {case 1:{int x = 0;   //错误!printf("c=1");}break;case 2:printf("c=2");break;default:printf("other");break;}return 0;
}

13.2不安全函数(scanf 等)

#include <iostream>
#include <string>
#include <stdio.h>using namespace std;int main(void){int num;scanf("%d", &num);system("pause");return 0;
}

vs 中不能直接使用 scanf 等 C 标准库函数

因为 vs 使用更安全的 c11 标准, 认为这类函数不安全。

注明,这类函数正常使用时,是没有任何问题的

但是,部分黑客可能会利用其中的缺陷,开发恶意软件,对系统造成影响

解决方案:

1. 方法 1:使用修改项目的属性,直接使用这些“不安全”的函数。

添加: /D _CRT_SECURE_NO_WARNINGS

2. 方法 2:使用 c11 标准中的“更安全”的函数

scanf_s

gets 不能使用

使用 gets_s

gets 是老标准 C 语言函数,vs 使用更安全的 c11 标准, 使用对应的 gets_s

char line[32];
gets_s(line, sizeof(line));

scanf 不能使用

原因同上,改用 scanf_s

int x;
scanf_s("%d", &x); //不需要使用第 3 个参数,用法和 scanf 相同float f;
scanf_s("%f", &f); //不需要使用第 3 个参数, 用法和 scanf 相同char c;
scanf_s("%c", &c, sizeof(c)); //需要使用第 3 个参数, 否则有告警char name[16];
scanf_s("%s", name, sizeof(name)); //需要使用第 3 个参数int age;
char name[16];
scanf_s("%d%s", &age, name, sizeof(name));

13.3cin >> 的返回值

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {string word;int count = 0;int length = 0;cout << "请输入任意多个单词:";while (1) {if ((cin >> word) == 0) { //在 vs 中不能通过编译break;}count++;length += word.length();}cout << "一共有" << count << "单词" << endl;cout << "总长度:" << length << endl;system("pause");return 0;
}

把 if ((cin >> word) == 0) 修改为:

if ((bool)(std::cin >> word) == 0) {

或者修改为:

if (!(cin >> word)) {

13.4getline 的返回值

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {string line;int lineCount = 0;int length = 0;cout << "请输入任意多行:";while (1) {// 遇到文件结束符时, 返回 NULL(0)if (getline(cin, line) == 0) {break;}lineCount++;length += line.length();}cout << "一共有" << lineCount << "行" << endl;cout << "总长度: " << length << endl;system("pause");return 0;
}

测试代码:

string line;
int length = 0;getline(cin, line) >> length;
cout << "line=" << line << endl;
cout << "length=" << length << endl;

​修改:

if (getline(cin, line) == 0) {

修改为:

if ((bool)getline(cin, line) == 0) {

或者修改为:

if (!getline(cin, line)) {

13.5if 语句后面误加分号

 int age;cout << "请输入年龄: ";cin >> age;if (age > 40); {cout << "大叔" << endl;}

严格遵循代码规范,做到零警告。

以上代码在 VS 中编译时,会有警告 warning

第 14 节 英语不是障碍:计算机英语加油站

bool

布尔
逻辑类型

if

如果

else

否则

switch

开关

case

情况

default

默认

第 15 节 编程思维修炼

代码对战(略)

Scratch 积木式编程:“灌篮高手”

演示演示

项目分析:

使用重力效果。

项目实现:

1. 选择背景 Wall

2. 给角色设置名称“乔丹猫”

3. 为“乔丹猫”创建表示速度的变量“垂直速度”

4. 让“乔丹猫”实现“重力降落”

​5. 添加地平线

落到地平线后,“乔丹猫”就不再下降

​6. 添加起跳代码

仅但乔丹猫在地平线上时,按下向上箭头键,才会起跳。

​7. 让乔丹猫左右移动

8. 绘制篮筐

使用“矢量编辑模式”

并设置适当比例,比如 50。

命名为“篮筐”

9. 随机移动篮筐

10. 创建篮筐靶心

创建角色“靶心”,目的在于更方便的判断是否进球。

让靶心时刻跟随篮筐

把“虚像”特效设置为 100, 就能把靶心“隐藏”起来

11. 创建篮球

添加篮球角色,并命名为“篮球”

实现“乔丹猫”投篮

12. 投篮

为篮球添加以下代码:

当按下空格键,投篮:(先选中篮球,为篮球编辑代码)

​13. 判断得分

分析:篮球在下降过程中遇到篮筐中心,才算得分。

篮球-垂直速度 < 0 时, 表示篮球在下降。

创建“进球”消息

创建得分变量“得分”

篮球的代码

​靶心的代码:

14. 修改 BUG

投一次篮,得 2 分,甚至更多。

分析:在篮球一次跌落过程中,被循环监测多次。

​第 16 节 职场修炼:怎样优雅地避免加班

996 工作制?

9-6-5

制定合理的项目计划

提高工作效率(要有一定的技术积累)

养成良好的工作习惯【不加班】

每天有目标的学习 1 小时以上

第 17 节 项目练习

17.1习题 1. 让用户输入一个字符, 然后进行转换:

如果是大写字母,就转换为小写字母

如果是小写字母,就转换为大写字母

如果是其它字符,不做任何转换。

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {char c;cout << "请输入一个字符: " << endl;cin >> c;if (c >= 'a' && c <='z') {c = c - 'a' + 'A';} else if (c >= 'A' && c <= 'Z') {c = c - 'A' + 'a';}cout << c << endl;system("pause");return 0;
}

17.2习题 2. 让用户输入一个数字(0-9),然后输出对应的大写汉字。

注:零 壹 贰 叁 肆 伍 陆 柒 捌 玖

例如,用户输入 3, 输出“叁”

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;//零 壹 贰 叁 肆 伍 陆 柒 捌 玖int main(void) {int num;string ret;cout << "请输入一个数字[0-9]: ";cin >> num;switch (num) {case 0:cout << "零";break;case 1:cout << "壹";break;case 2:cout << "贰";break;case 3:cout << "叁";break;case 4:cout << "肆";break;case 5:cout << "伍";break;case 6:cout << "陆";break;case 7:cout << "柒";break;case 8:cout << "捌";break;case 9:cout << "玖";break;default:break;}cout << endl;system("pause");return 0;
}

方法 2:

用空间换速度。

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {int num;string ret[10] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌","玖"};cout << "请输入一个数字[0-9]: ";cin >> num;if (num >=0 && num <=9) {cout << ret[num] << endl;}system("pause");return 0;
}

17.3习题 3. 让用户输入年份和月份,然后输出这个月有多少天。

说明:

闰年的 2 月份有 29 天

普通闰年: 能被 4 整除但不能被 100 整除的年份为

世纪闰年: 能被 400 整除

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;/*
闰年的 2 月份有 29 天
普通闰年: 能被 4 整除但不能被 100 整除的年份为
世纪闰年: 能被 400 整除
*/int main(void) {int year;int month;bool flag = false;int days;cout << "请输入年份:";cin >> year;cout << "请输入月份:";cin >> month;if (year % 400 == 0) {flag = true;} else if (year % 4 == 0 && year % 100 != 0) {flag = true;} else {flag = false;}switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 2:days = flag ? 29 : 28;break;case 4:case 6:case 9:case 11:days = 30;break;default:std::cout << "无效月份" << std::endl;break;}cout << year << "年" << month << "月一共有:" << days << "天" << endl;system("pause");return 0;
}

第 18 节 程序员逼格提升:程序员的逼格神器-github

github 的重要性:

网络时代的程序员必备。

github 的作用:

1. 版本管理

2. 多人协作

3. 开源共享

常用方案:

git+TortoiseGit+github

[Tortoise,程序员常称其为小乌龟,小海龟]

​安装配置步骤

1. 注册

使用邮箱: (例如:xxxxxxxx@qq.com)

密码需要至少包含一位小写字母,至少七位

​在 step2 中,填写个人描述信息,可以直接点击 submit.

2. 在本地安装 git

3. 安装 tortoisegit

4. 配置 git 配置的账号

文件:.gitconf

[filter "lfs"]clean = git-lfs clean -- %fsmudge = git-lfs smudge -- %fprocess = git-lfs filter-processrequired = true
[user]name = xxxxemail = xxxxxx@qq.com

5. 在 github 创建仓库

6. 把 github 的仓库 clone【克隆】到本地

本地目录一定要为空

7. 在这个本地目录下, 创建 vs 项目。

8. commit【提交】到本地仓库

9. push【推】到 github 仓库

如果没有弹出框来输入密码, 这在 git 终端上输入:

git credential-manager uninstall

用来清除掉缓存在 git 中的用户名和密码

为看书困难的小伙伴推荐视频教程:百度网盘 提取码:r59a

零基础学习C++系列课程(五) 持续更新中相关推荐

  1. 零基础学习C++系列课程(一) 持续更新中

    目录 第 1 节:课程目标 项目 1:C++基础编程-黑客攻击系统(含 6 个子项目) 项目 2:C++基础编程-人工智能之地形导航系统 项目 3:C++基础编程-人工智能之双色球预测系统 项目 4: ...

  2. 零基础学习C++系列课程(三) 持续更新中

    目录 项目二.黑客攻击系统-输入账号 第 1 节 项目需求 第 2 节 项目实现 第 3 节 项目精讲 3.1 C++的数据类型 3.2 构建 IT 大厦的砖块:变量 3.3 用于计数的整数类型 3. ...

  3. 视频教程-零基础JS入门系列课程(2)之JS语法基础精讲-JavaScript

    零基础JS入门系列课程(2)之JS语法基础精讲 螺钉课堂讲师,擅长Vue.React.ReactNative.NodeJS等前端框架及技术 邓老师 ¥59.00 立即订阅 扫码下载「CSDN程序员学院 ...

  4. C++学习笔记目录链接(持续更新中)

    学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...

  5. Ambari源码二次开发实战课程(持续更新中)

    如果大家想基于 ambari 开发一套自己的大数据平台,那么 ambari 二次开发的相关知识就必须具备.比如:ambari 整体编译,ambrai 汉化,ambari 页面开发,ambari api ...

  6. YOLO 3/4/5/6/7/x、Efficient、MaskRcnn、FasterRcnn、FCOS、SSD、M2Det、Retina、CenterNet、PicoDet等系列数据模型汇总持续更新中

    做了很长时间的CV领域的任务了,见到了很多不错的项目,很多时候也是会选择直接拿来开源的项目去使用,自己也做过了很多项目,后面就萌生了一个想法,将看到的不错的文章或者是数据集或者是项目汇总记录一下,以便 ...

  7. 零基础学习网页制作(五)

    郑重声明: 1.所谓的零基础并不是真的零基础,首先你会用电脑的一些简单操作,如:新建一个文本文档(txt): 2.文章仅供本人娱乐,如有雷同,纯属巧合: 3.文章的目的还有一个,告诉一些不懂写代码的人 ...

  8. 图谱(学习地图)系列总结,持续更新中

    目录 1.2022年最新前端学习路线图 2.2022年最新大数据学习路线图 3.2022年最新javaEE学习路线图 4.2022年最新UI/UE学习路线图 5.2022年java学习路线指南 6.J ...

  9. 技术文章系列汇总(持续更新中)并附博客上树状列表源代码

    系统架构系列 在多台服务器上简单实现Redis的数据主从复制 利用Nginx做负载均衡 软件设计系列 项目分析 [项目分析]ASP.NET MVC路由匹配检测组件的代码分析 [项目分析]保持你的网站激 ...

最新文章

  1. CloudStats :一款SaaS 服务器监控工具
  2. 产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等
  3. 如果编程替换成中文就会怎样? 程序员看了表示头疼
  4. BZOJ3884上帝与集合的正确用法-欧拉函数
  5. type或者xtype总结
  6. fgetcsv php,PHP - fgetcsv - 分隔符被忽略?
  7. jenkins远程构建job_jenkins分布式构建job
  8. Qt学习之路3---Qt中的坐标系统
  9. MATLAB的cat()函数
  10. 解决Linux系统下磁盘IO紧张的一种方法
  11. 欧拉函数计算公式的推导
  12. 利用gpu加速神经网络算法,为什么用gpu 模型训练
  13. 处世36计之第17计--恐吓计
  14. 在这个项目的心得体会和经验教训
  15. java freemarker导出word 带图片,文件导出后图片无法使用office正常打开
  16. LOG高斯-拉普拉斯算子
  17. ESP32 TM1637显示4位数码管
  18. 第五届蓝桥杯C/C++本科B组(真题试做)(1~5)
  19. 【obs】项目构建环境
  20. 史上最全的Git使用手册

热门文章

  1. idea字体设置--主题下载推荐及使用
  2. #DeepLearningBook#算法概览之八:Representation Learning
  3. 24岁了,做个精致的电子工程师--剑雨琴侠
  4. python之组合数据
  5. 未来有巨大潜力的四类垂直电商模式
  6. java垃圾回收器之跟搜索算法
  7. 苹果发布Apple Watch 5手表,是否值得购买?这真的要看个人!!!
  8. python(3.9.7)的字典(全面、细致)
  9. 51单片机 ret和reti
  10. Windows 7 + SQL Server 2005 + Visual Studio 2008 安装过程体验