2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
for(初始化表达式1;判别表达式2;表达式3)
{
循环体
}
先执行初始化表达式1,初始化;
再执行判别表达式2,如果判别为真
去执行循环体
然后执行循环表达式3
再执行表达式2
然后执行循环表达式3
直到不满足条件,退出
初始化表达式1只执行1次
判别表达式2是循环和终止条件
表达式3是自增或者自减
咱们看看求1–100的和
void f27(void)
{
//咱们看看求1--100的和
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;//每次都累加
}
printf("%d\n", sum);
}
int main(void)
{
f27();
system("pause");
return 0;
}
for的表达式有3个
但是仨都可以变换或者省略
分号不可以省略;
void f28(void)
{
//咱们看看求1--100的和
int sum = 0;
int i = 1;
for (; i <= 100; i++)
{
sum += i;//每次都累加
}
printf("%d\n", sum);
}
void f28(void)
{
//咱们看看求1--100的和
int sum = 0;
int i = 1;
for (; ; i++)
{
if (i > 100) break;
sum += i;//每次都累加
}
printf("%d\n", sum);
}
void f28(void)
{
//咱们看看求1--100的和
int sum = 0;
int i = 1;
for (; ; )
{
if (i > 100) break;
sum += i;//每次都累加
i++;
}
printf("%d\n", sum);
}
但是最好别这么搞
基础标准版for循环最合适
方便。
表达式有多个呢,也行
void f29(void)
{
int i = 0;
int a = 0;
for (i = 1, a = 3; i < 10, a < 20; i++, a += 5)
{
printf("%d %d ", i, a);
}
}
初始条件2个
判断条件时要同时满足的
自增条件随你加
生成一个随机数
需要添加随机数种子,利用当前的系统时间,来生成随机数
srand(time(NULL));
#include // system,srand
#include //time函数
void f30(void)
{
srand(time(NULL));//添加随机数种子
//返回随机数
int n = rand() % 100;//模的话,只能是0-99了
//循环输入数据,猜
int x;
//while实现
while (1)//不等继续猜
{
printf("请猜数字:\n");
scanf("%d", &x);//你还得提示用户
if (x == n)
{
printf("恭喜你,你猜读对了\n");
break;
}
else if (x > n) printf("你猜太大了!\n");
else printf("你猜太小了\n");
}
}
int main(void)
{
f30();
system("pause");
return 0;
}
void f31(void)
{
srand(time(NULL));//添加随机数种子
//返回随机数
int n = rand() % 100;//模的话,只能是0-99了
//循环输入数据,猜
int x;
//while实现
for (;;)//不等继续猜
{
printf("请猜数字:\n");
scanf("%d", &x);//你还得提示用户
if (x == n)
{
printf("恭喜你,你猜读对了\n");
break;
}
else if (x > n) printf("你猜太大了!\n");
else printf("你猜太小了\n");
}
}
常见的scanf错误
不要用printf格式
\n绝对不能放到scanf中!!
这些将来设计算法的时候,经常用的。
经常会遇到o(n平方的)算法复杂度,你需要优化为o(nlogn)或者o(n)
o(n立方的)优化为o(n平方的)
这个看起来就是o(n平方)
外循环执行1次
内循环执行10次
外面n次,里面也n次,其复杂度计算不就是o(n平方)吗
懂?
这个的话,外面o(n方),最里面每次都是o(n)
那不就是o(n立方)吗
easy?懂?
时分秒,60进制
逢60进位
#include //Sleep
void f32(void)
{
int i, j, k;//时分秒
for (i = 14; i < 24; i++)
{//时
for (j = 46; j < 60; j++)
{//分钟
for (k = 0; k < 60; k++)
{//秒
printf("%.2d:%.2d:%.2d\n", i, j, k);//时分秒
Sleep(1000);//睡眠毫秒
system("cls");//清屏
}
}
}
}
int main(void)
{
f32();
system("pause");
return 0;
}
11
12
–
91
92
等等
不就是外面1–9
里面1–9
void f33(void)
{
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++)
{
printf("%.2d × %.2d = %.2d ",i,j, i * j);
}
printf("\n");
}
}
重复的就不用了
void f33(void)
{
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++)
{
printf("%.2d × %.2d = %.2d ",i,j, i * j);
}
printf("\n");
}
}
void f34(void)
{
for (int i = 9; i >= 1; i--) {
for (int j = 1; j <= i; j++)
{
printf("%d × %d = %d\t", j, i, i * j);
}
printf("\n");
}
}
break是直接跳出循环,不玩了
而continue是跳过当前后续的语句,继续下一个循环
void f35(void)
{
for (int i = 0; i < 10; i++)
{
if (i == 3) continue;//跳过3
printf("%d\n", i);
}
}
上面的代码,i=3时,结束本次循环,但是继续下一个循环,本次不玩了
太灵活了
最好别用
void f36(void)
{
int i = 0;
L:
printf("1111111111\n");
printf("1111111111\n");
printf("1111111111\n");
printf("2222222222\n");
i++;
if (i == 5) system("pause");
goto L;
}
int main(void)
{
f36();
system("pause");
return 0;
}
它只在函数内部生效
你直接去j,请问j没有初始化,它等于多少呢?????
所以不推荐使用goto,懂了吧?
提示:重要经验:
1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。