0%

===================================
2022-7-5
===================================

一.温故知新

    变量
    1.变量的含义
    变量就是用来存储数据
    2.变量的定义
    数据类型	变量名	;
    基本数据类型
        整型		有符号/无符号	short int long
        实型		有符号		float double
        字符型	有符号/无符号	char
    sizeof是一个运算符,不是函数
        sizeof(数据类型/变量名),以字节为单位
    /usr/include/limits.h
    变量名
    
    3.变量的初始化
    数据类型	变量名	=	数值	;
    int		a		=	100	;
    float	f		=	3.14;

    4.变量的使用规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-----------------------------
scanf
scanf("", );
-----------------------------
运算符
算术运算符 + - * / %(取余 取模)
关系运算符 > < == >= <= !=
逻辑运算符 && || !
a b c
a + b > c && a + c > b && b + c > a
a * a + b * b == c * c || a * a + c * c == b * b ||
b * b + c * c == a * a
a == b || a == c || b == c
a == b && a == c
赋值运算符 = += -= *= /= ...
作业 1.把今天讲过的内容完整的复习一遍 2.使用条件运算符和分支语句各解决一遍求闰年问题 3.输入三个值判断这三个值是否构成三角形 (是否是直角 等腰 等边 普通 不能) 4.输入三个整数x,y,z,请把这三个数由从小到大输出 5.输入相应的字符打印相应的语句(默认不区分大小写) 输入a,打印 钟薛高18块钱 输入b,打印 梦龙8块钱 输入c,打印 老冰棒1块钱 输入d,打印 雪莲0.5块钱 ================================ 录入成绩 0 ~ 59 打印 不及格 60 ~ 69 打印 及格 70 ~ 79 打印 中 80 ~ 89 打印 良 90 ~ 100 打印 优秀

赋值运算符

    = += -= *= /= %= <<= >>= &= |=
    int a;
    a = 9527;
先把赋值运算符右边的项进行计算,再赋值给赋值运算符左边的项
        左边的项也叫做(左值)
具有存储能力的都可以做左值(变量\指针\数组成员...)
常量(整数\字符\字符串...)不能做左值

设x为int型变量,则执行以下语句后
x = 10;
x += x -= x - x;
x = x + (x -= x - x)
x = x + (x = x - (x - x))
x的值为?20

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(void)
{
int a = 100;

printf("a = %d\n", a);

a += 2;// => 等价于 a = a + 2

printf("a = %d\n", a);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
int a = 100;

printf("a = %d\n", a);

a *= 2 + 3;
/*
a = a * (2 + 3);
*/

printf("a = %d\n", a);

return 0;
}

条件运算符(? :)

    也是C语言中唯一的一个三目运算符
    part.1 ? part.2 : part.3;
    如果part.1为真,则会执行part.2的内容,略过part.3
    如果part.1为假,则会执行part.3的内容,略过part.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(void)
{
int a = 0, b = 0;
int max = 0;

scanf("%d-%d", &a, &b);

max = a > b ? a : b;

printf("max = %d\n", max);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
int a = 0, b = 0;
int max = 0;

scanf("%d-%d", &a, &b);

max = a>b?printf("a = %d\n", a):printf("b = %d\n", b);
/*
如果a > b为真, max = printf("a = %d\n", a);
如果a > b为假, max = printf("b = %d\n", b);
注意:max获取的并不是变量的值,而是printf函数的返回值

max = a > b ? a : b;
如果a > b为真, max = a;
如果a > b为假, max = b;
*/
printf("max = %d\n", max);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main(void)
{
int a = 0, b = 0, c = 0;
int max = 0, max1 = 0;

scanf("%d-%d-%d", &a, &b, &c);
//max = a > b ? a : b;
//使用条件运算符求三个变量中的最大值

max = (a > b) ? (a>c?a:c) : (b>c?b:c);

/*
max1 = a > b ? a : b;
max = max1 > c ? max1 : c;

max = a > b ? a : b;
max = max > c ? max : c;
*/

printf("max = %d\n", max);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int year = 0;

scanf("%d", &year);
//通过条件运算符判断year是闰年还是平年
/*
能被4整除但是不能被100整除或者能被400整除
就是闰年
2022 2020 2000 1900(平年)
*/

return 0;
}

强制类型转换运算符

    (数据类型)
    可以把目标的数据类型临时的转换成你想转换的数据类型
注意 : 强制类型转换运算符并不会修改本身的数据类型
注意 : 尤其是以后转换指针时使用比较多

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main(void)
{
float f = 3.14;

printf("f = %d\n", (int)f);

return 0;
}

自增自减运算符

    ++ --
无论是自增还是自减,所改变的数量级都是1
注意 : 
    如果自增的运算自己为独立的一条语句,
        那么a++和++a没有任何区别,都是自增1
    
    如果自增的运算和别的语句一起来使用,那么就有区别了
        a++ : 先使用a的值做操作,再自增
        ++a : 先自增,再使用a的值做操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int a = 0;

printf("a++ = %d\n", a++);
printf("做完a++之后a的值是%d\n", a);

a = 0;

printf("++a = %d\n", ++a);
printf("做完++a之后a的值是%d\n", a);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(void)
{
int a = 0, b = 0;

//a++ && b++ ? printf("Hello\n") : printf("World\n");
//a++ && ++b ? printf("Hello\n") : printf("World\n");
//++a && ++b ? printf("Hello\n") : printf("World\n");
++a || b++ ? printf("Hello\n") : printf("World\n");

printf("a = %d b = %d\n", a, b);

return 0;
}

分支语句->if

1.if是C语言的关键字
2.if的结构
语句1
if(条件)
{
    语句2
}
语句3
语句1->条件的判断(真)->语句2->语句3->结束
            |
            (假)->语句3->结束
3.if...else的结构
语句1
if(条件)
{
    语句2
}
else
{
    语句3
}
语句4
语句1->条件的判断(真)->语句2->语句4->结束
            |
            (假)->语句3->语句4->结束
4.多分支结构
语句1
if(条件1)
{
    语句2
}
else if(条件2)
{
    语句3
}
else if(条件3)
{
    语句4
}
else
{	
    语句5
}
语句6
语句1->条件1的判断(真)->语句2->语句6->结束
        |
        (假)->条件2的判断(真)->语句3->语句6->结束
                |
                (假)->条件3的判断(真)->语句4->语句6->结束
                        |
                        (假)->语句5->语句6->结束
注意
1.if else都是C语言的关键字
2.if关键字之后必须要加小括号,小括号内部必须要写条件,不能空者
3.在if(条件)之后可以加分号
    if(0);
    {
        printf("Hello World!\n");
    }
    等价于
    if(0)
    {
        ;
    }
    {
        printf("Hello World!\n");
    }
4.在if(条件)之下可以不写大括号
(以后写代码即使if的语句只有一条,也要加上大括号)
    if(0)
        printf("Hello\n");
        printf("World!\n");
    等价于
    if(0)
    {
        printf("Hello\n");
    }
    printf("World!\n");

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int i = 0;

scanf("%d", &i);

if(i < 100)
{

printf("Hello World!\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int i = 0;

scanf("%d", &i);

//if(i % 2 == 0)//!(i % 2)
if(!(i % 2))
{
printf("%d这个值是偶数!\n", i);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
int i = 0;

scanf("%d", &i);

//if(i % 2 == 0)//!(i % 2)
if(!(i % 2))
{
printf("%d这个值是偶数!\n", i);
}
else
{
printf("%d这个值是奇数!\n", i);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
int year = 0;

scanf("%d", &year);

if((year%4==0 && year%100!=0) || (year%400==0))
//2022 2020 2000 1900
{
printf("%d这一年是闰年!\n", year);
}
else
{
printf("%d这一年是平年!\n", year);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
int a = 0, b = 0;

scanf("%d-%d", &a, &b);

if(a > b)
{
printf("Hello World!\n");
}
else if(a < b)
{
printf("Hello Beijing!\n");
}
else
{
printf("Hello Changping!\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main(void)
{
if(0)
printf("Hello\n");
printf("World!\n");

return 0;
}
练习 键入一个整数x, 如果小于3则执行x+3操作, 如果大于等于3则执行3*x+9 如果大于9则执行9*x-10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>

int main(void)
{
int x = 0;

scanf("%d", &x);
if(x < 3)
{
printf("x + 3 = %d\n", x + 3);
}
else if(x > 9)
{
printf("9 * x - 10 = %d\n", 9 * x - 10);
}
else
{
printf("3 * x + 9 = %d\n", 3 * x + 9);
}
/*
if(x < 3)
{
printf("x + 3 = %d\n", x + 3);
}
else if(x >= 3 && x <= 9)
{
printf("3 * x + 9 = %d\n", 3 * x + 9);
}
else
{
printf("9 * x - 10 = %d\n", 9 * x - 10);
}
*/
return 0;
}
输入三个值判断这三个值是否构成三角形 (是否是直角 等腰 等边 普通 不能)
1
2
3
4
5
6
7
#include <stdio.h>

int main(void)
{

return 0;
}

==================================
2022-7-6
==================================

一.温故知新

    赋值运算符	= += -= *= /= ...
    a += 1 => a = a + (1)
    条件运算符	? :
        part.1 ? part.2 : part.3;
    强制类型转换	(数据类型)
    求字节大小	sizeof
    自增自减		++ --
        变量名++;
        ++变量名;
    -----------------------
    分支结构
    if else
    if(条件)
    {
        语句
    }
    else if(条件)
    {
        语句
    }
    else if(条件)
    {
        语句
    }

=======================================
homework
1.
(1)打印4 * 5 的 *
例:
*****
*****
*****
*****
(2).打印i * j 的 * (i j 键盘接收)
    例:i = 4, j = 5
    //4-5 5-6
    *****
    *****
    *****
    *****
(3).打印i * j 的 * 边框(i j 键盘接收)
    例: i = 4, j = 5
    *****
    *   *
    *   *
    *****
2.打印99乘法表
    1 * 1 = 1
    1 * 2 = 2 2 * 2 = 4
    *
    **
    ***
    ****

3.计算1+2+3+4+5+...+n, n是从键盘输入的自然数

// 穷举
4.要将5张100元的大钞票,换成等值的50 20 10 5小钞票,每种面值至少一张,要多少张,有多少种换法

5.有1、2、3、4 4个数字,能组成多少个互不相同且无重复的三位数呢

6.有这样的一个等式,xyz+yzz=532,编程求x y z的值

7.计算1^2 + 2^2 + 3^2 + ... +10^2的结果
(1的平方 + 2的平方)

8.输入20个人的成绩,输出不及格的人数(0<=score<60 为不及格)

9.随机产生100个三位随机数,找出其中能被 3 5 7整除的数

10.打印0~100以内所有的质数
(只能被1 和 本身整除的数)

11.猜数游戏(随机产生一个1000以内的数,去猜,
        如果大了打印猜的大了,
        如果小了打印猜的小了,
        如果正确打印对的
        直到猜对了再结束,每次打印必须打印出猜的次数)

12. 把11修改成,程序开始时,先输入需要猜的数的范围n
例:(想要猜数的范围是(0~10000) 那么变量n接收键盘上10000
        范围都是从0开始)

13.
----------------------------
a + b - 9 = 4
+	-	-	
c -	d * e = 4
/	*	-
f + g - h = 4
=	=	=
4	4	4
求a b c d e f g h (0 ~ 12范围内)//除法指的是整除 c % f == 0
只有一种答案
14.求1+12+123+...前N项之和,其中N是从键盘输入的数(N取值范围(1~9))
    n = 5;
    sum = 1 + 12 + 123 + 1234 + 12345;

15.爱因斯坦出了一道这样的数学题,有一条长阶梯,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后省2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶只有每次跨7阶,最后才正好1阶不剩,请问在这条阶梯最少多少阶

16.设N是一个4位数,它的9倍恰好是它的反序数
    例:1234 反序数是4321

17.求s = a + aa + aaa + aaaa + ... + aa...a的值,其中a是1~9的一个数字(不超过十项)
例:a = 3; s = 3 + 33 + 333;

18.“百钱百鸡”问题,百钱买百鸡,公鸡1个3块钱,母鸡1个2块钱,小鸡3个一块钱,问公鸡,母鸡,小鸡各多少个

19.打印三角形	(画8个三角形)
* * * * *
  * * * *
    * * *
      * *
        *
6_1.打印三角形
    录入n,n是直角三角形的高
    例:	n = 3
      * 
    * * * 
  * * * * *
    n = 4
      * 
    * * * 
  * * * * * 
* * * * * * * 

20.猴子吃桃问题,有一天一只猴子摘了一些桃子,它吃掉一半,又吃了一个,第二天也是这样,到了第十天,只有一个桃子了,求猴子摘了多少桃子

21. 4 5 6 7总共能组成多少个不能被4整除的4位数

22.求n!(n的阶乘)

/*
三角形
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>

int main(void)
{
int a = 0, b = 0, c = 0;//使用a b c变量表示三角形的三个边

scanf("%d-%d-%d", &a, &b, &c);//通过scanf函数录入三个边
/*if error*/

if((a+b>c) && (a+c>b) && (b+c>a))//罗列普通三角形的条件
{
if((a*a+b*b==c*c) ||
(a*a+c*c==b*b) ||
(b*b+c*c==a*a))//罗列直角三角形的条件
{
printf("可以构成直角三角形!\n");
}
else if(a==b || a==c || b==c)//罗列等腰三角形的条件
{
if(a==b && a==c)//罗列等边三角形的条件
{
printf("可以构成等边三角形!\n");
}
else
{
printf("可以构成等腰三角形!\n");
}
}
else
{
printf("可以构成普通三角形!\n");
}
}
else
{
printf("不能构成三角形!\n");
}

return 0;
}
/* 从小到大打印 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>

int main(void)
{
int x = 0, y = 0, z = 0;
int tmp = 0;

scanf("%d-%d-%d", &x, &y, &z);
//x获取三个值中的最小值 z获取三个值中的最大值

if(x > y)
{
tmp = x;
x = y;
y = tmp;
}

if(x > z)
{
tmp = x;
x = z;
z = tmp;
}

if(y > z)
{
tmp = y;
y = z;
z = tmp;
}

printf("%d<%d<%d\n", x, y, z);

return 0;
}
/* 输入相应的字符打印相应的语句(默认不区分大小写) 输入a,打印 钟薛高18块钱 输入b,打印 梦龙8块钱 输入c,打印 老冰棒1块钱 输入d,打印 雪莲0.5块钱 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main(void)
{
char c = 0;//用来接收录入的字符

scanf("%c", &c);

if(c == 'A' || c == 'a')//if(c == 65 || c == 97)
{
printf("钟薛高18块钱\n");
}
else if(c == 'B' || c == 'b')
{
printf("梦龙8块钱\n");
}
else if(c == 'C' || c == 'c')
{
printf("老冰棒1块钱\n");
}
else if(c == 'D' || c == 'd')
{
printf("雪莲0.5块钱\n");
}
else
{
printf("录入失败,请重新录入!\n");
}

return 0;
}

分支语句

    switch(也有程序员会叫做开关语句)
1.switch case default都是C语言的关键字
2.switch语句的结构
    语句1;
    switch(变量)
    {
        case 整常量1: 语句2;
        case 整常量2: 语句3;
        default : 语句4;
    }
    语句5;
语句1->变量和整常量1是否相等->语句2->语句3->语句4->语句5->end
        |
        不相等->变量和整常量2是否相等->语句3->语句4->语句5->end
                    |
                    不相等->语句4->语句5->end
3.整常量就是整数或者可以表示为整数的内容(字符)
4.在同一个switch...case结构中整常量不能重复
5.在switch语句中加入break关键字
    语句1;
    switch(变量)
    {
        case 整常量1: 语句2; break;
        case 整常量2: 语句3; break;
        default : 语句4; break;
    }
    语句5;
语句1->变量和整常量1的判断->语句2->break->语句5->结束
        |
        (不相等)->变量和整常量2的判断->语句3->break->语句5->结束
                    |
                    (不相等)->语句4->break->语句5->结束
6.在switch语句中执行break会跳出switch语句
输入相应的字符打印相应的语句(默认不区分大小写)
输入a,打印	钟薛高18块钱
输入b,打印	梦龙8块钱
输入c,打印	老冰棒1块钱
输入d,打印	雪莲0.5块钱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
int i = 0;

scanf("%d", &i);

switch(i)
{
case 1 : printf("111111\n");
case 2 : printf("222222\n");
case 3 : printf("333333\n");
case 4 : printf("444444\n");
default: printf("ERROR!\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
char i = 0;

scanf("%c", &i);

switch(i)
{
case 'a' : printf("1111111111111\n");
case 'b' : printf("2222222222222\n");
case 'c' : printf("3333333333333\n");
case 'd' : printf("4444444444444\n");
default: printf("ERROR!\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
char i = 0;
char c = 'a';

scanf("%c", &i);

switch(i)
{
case 'b' : printf("1111111111111\n");
case 'b' : printf("2222222222222\n");
case 'c' : printf("3333333333333\n");
case 'd' : printf("4444444444444\n");
default: printf("ERROR!\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
char c = 0;

scanf("%c", &c);

switch(c)
{
case 'a' :
case 'A' : printf("钟薛高18块钱\n"); break;
case 'b' :
case 'B' : printf("梦龙8块钱\n"); break;
case 'c' :
case 'C' : printf("老冰棒1块钱\n"); break;
case 'd' :
case 'D' : printf("雪莲0.5块钱\n"); break;
default : printf("ERROR\n"); break;
}

return 0;
}
/* 录入成绩 0 ~ 59 打印 不及格 60 ~ 69 打印 及格 70 ~ 79 打印 中 80 ~ 89 打印 良 90 ~ 100 打印 优秀 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
int score = 0;

scanf("%d", &score);
//if error

switch(score / 10)
{
case 0..5 : printf("不及格!\n"); break;
case 6 : printf("及格!\n"); break;
case 7 : printf("中!\n"); break;
case 8 : printf("良!\n"); break;
case 9 :
case 10: printf("优秀!\n"); break;
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
char score = 0;

scanf("%c", &score);
//if error

switch(score)
{
case '0' ... '9': printf("Hello World!\n"); break;
case 'd' ... 'f': printf("Hello Beijing!\n"); break;
}

return 0;
}

循环语句

1.for是C语言的关键字
2.for循环的使用方法
语句1
for(循环变量的赋值; 循环变量的控制; 循环变量的变化)
{
    循环的语句
}
语句2
                    语句1
                        |
                        V
                循环变量的赋值
                        |
                        V
        |--------循环变量的控制<---------
        |				|			循环变量的变化
        V				V				^
        假				真				|		
        |		循环的语句------->-------
        |
        ----------------
                        |
                        V
                    语句2
在循环中不要改变循环变量的值否则会影响循环次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(void)
{
int i = 0;//循环变量

for(i = 0; i < 5; i += 1)
{
printf("i = %d\n", i);
}

//for(i = 10; i < 5; i++)
//{
// printf("Hello World!\n");
//}

//for(i = 0; i < 5; i++)
//{
// printf("Hello World!\n");
//}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int i = 0;//循环变量

for(i = 0; i < 10; i++)
{
//printf("%d\n", i++);
printf("%d\n", ++i);
}

printf("==== i = %d\n", i);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
//打印0 ~ 100以内奇数
int main(void)
{
int i = 0;

for(i = 1; i < 100; i+=2)
{
printf("%d\n", i);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
//求1+2+3+...+100? 5050
int main(void)
{
int i = 0;
int sum = 0;

for(i = 1; i <= 100; i++)
{
sum += i;// sum = sum + i
}

printf("sum = %d\n", sum);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
//求水仙花数(把水仙花数打印出来)
//xyz == x*x*x + y*y*y + z*z*z
int main(void)
{
int i = 100;
int b = 0, s = 0, g = 0;

for(i = 100; i < 1000; i++)
{
b = i / 100;
s = i / 10 % 10;
g = i % 10;
if(i == (b*b*b) + (s*s*s) + (g*g*g))
printf("i = %d\n", i);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
//求水仙花数(把水仙花数打印出来)
//xyz == x*x*x + y*y*y + z*z*z
int main(void)
{
int i = 1;
int b = 0, s = 0, g = 0;

for(b = 1; b < 10; b++)
{
for(s = 0; s < 10; s++)
{
for(g = 0; g < 10; g++)
{
if((b*b*b)+(s*s*s)+(g*g*g)==b*100+s*10+g)
printf("%d%d%d\n",b,s,g);
}
}
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(void)
{
int hour = 0, min = 0, sec = 0;
//1s = 1000ms = 1000000us = 1000000000ns
for(hour = 0; hour < 24; hour++)
{
for(min = 0; min < 60; min++)
{
for(sec = 0; sec < 60; sec++)
{
system("clear");
printf("%02d : %02d : %02d\n", hour,min,sec);
sleep(1);
}
}
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <unistd.h>

int main(void)
{
int i = 0;

for(i = 0; i < 5; i++)
{
printf("%d", i);
sleep(1);
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
int i = 0, j = 0;

for(i = 0; i < 4; i++)//管理行
{
for(j = 0; j < 5; j++)//管理列
{
printf("[%d %d]", i, j);
}
printf("\n");
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
int i = 0, j = 0;

for(i = 0; i < 4; i++)//管理行
{
for(j = 0; j < 5; j++)//管理列
{
printf("*");
}
printf("\n");
}

return 0;
}
/*
1
2
3
4
5
*
* *
* * *
* * * *
* * * * *
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
int i = 0, j = 0;

for(i = 1; i < 10; i++)//管理行
{
for(j = 1; j <= i; j++)//管理列
{
printf("%d X %d = %2d ", j, i, i * j);
}
printf("\n");
}

return 0;
}

==================================
2022-7-1
==================================

一.温故知新

    1.演示了一遍安装虚拟操作系统的步骤
        1)虚拟机软件->VMWare
        2)Ubuntu的镜像->网易镜像 清华镜像
        3)需要手动分区
        4)安装软件之前需要切换软件源
    2.终端
        1)修改了终端的字体字号
        2)终端的配色方案
        3)分析终端提示符
        4)命令
            cd
            ls
            pwd
            touch
            mkdir
            rm
            cp
            mv
            cat
            tar

二.编辑器与编译器

    编辑器是用来编写程序的
    编译器是用来编译程序的
    在Linux环境中编辑器有很多种 : gedit vi vim emacs
    在Linux环境中编译器有很多种 : gcc cc arm-linux-gcc
    主要讲 vim 和 gcc 的使用
    1.编辑器vim的使用
        vim之所以被称之为强大的编辑器是因为本身支持很多的模式
        命令模式 命令行模式(底行模式) 编辑模式(插入模式) 可视 可视块 可视行
        注意 : 不要使用vim打开目录文件
        注意 : 用vim编写完成的文件内容要用正常的保存退出方式,不要直接关闭终端
                否则会生成交换文件(交换文件是隐藏文件)
                    vim hello.c
                        |
        按iIoOaA			V		按:
    编辑模式<----------命令模式---------->命令行模式
            --------->		<---------	
        按esc					按esc或者删掉:

    命令行模式的操作
        w		保存
        q		退出
        wq		保存并且退出

    大家在终端中,执行 vim ~/.vimrc
    先进入到编辑模式
    set ai
    set si
    set ts=4
    set sw=4
    set nu
    保存退出

    2.编译器gcc
        注意 : gcc编译器不检查段错误(操作内存不当引起的)
    gcc hello.c
        1)编译之后终端什么提示都没有,代表程序没有语法错误,会生成可执行文件
        2)编译之后终端报出警告,代表程序有些问题,但不是致命的,会生成可执行文件
        3)编译之后终端报出错误,代表程序100%有问题,并且是致命的,
                不会生成可执行文件
    默认的可执行文件的名字是a.out
    
    指定可执行文件的名字
        gcc -o 可执行文件名 .c文件

    要求大家在编译程序时加入-Wall选项,可以把所有警告列出
    gcc -Wall hello.c

    3.执行可执行文件
        ./a.out

三.man手册(帮助手册)

    有困难,找男人
    man 你要查找的东西
    在man手册界面中键盘上下按键可以翻阅
    按 q 键可以退出man手册

=====================================
作业
1.修改自己的vim配置文件
=====================================

#include <stdio.h>
/*
#include
面试题
1.在C语言中以#开头的内容都是预处理
2.从.c文件编译成可执行程序,需要经历哪些阶段?
    预处理->编译->汇编->链接
3.在C语言中预处理都包含哪些操作?
    文件包含 宏定义 条件编译
4.在包含头文件时可以使用双引号或者尖括号,有啥区别?
    尖括号 : 默认会从指定的目录(/usr/include)中查找头文件,
            如果找不到会报错
    双引号 : 默认会从当前目录中查找头文件,
            如果找不到再从指定目录中查找头文件,
            如果再找不到报错
stdio.h		标准输入输出的头文件
*/
int main(void)
/*
    main函数(也叫做主函数)
    main函数是程序的入口
    当执行可执行文件时,会从main函数进入,按照从上往下的顺序
    逐行逐行执行代码,最后从main函数退出
*/
{
    printf("Hello World!");
    /*
    printf是一个函数(功能)
    是用来打印输出的(可以把双引号引起来的内容打印到终端中)
    由于printf函数是别人实现的功能,所以需要包含人家的头文件
    */
}

/*
1.在C语言中有字符串,有没有字符串类型?
    没有字符串类型
printf("Hello World!");
    在C语言中双引号引起来的内容叫做字符串
    字符串都是由一个一个单一的字符组成的
    在C语言中单引号引起来的内容叫做字符
    字符串最后都有一个结束标志'\0'(尾0)
例子:
    "a" 和 'a'
    不一样,"a"是字符串,'a'是字符
    "a"是由'a' + '\0'组成
======================================	
    "0" 和 '0' 和 0
    不一样."0"是字符串,'0'是字符,0是整数
    "0"是由'0' + '\0'组成
练习:
在终端中打印出一个 %
*/
1
2
3
4
5
6
7
8
#include <stdio.h>

int main(void)
{
printf("%");
//printf("Hello World!");
//printf('Hello World!');
}
/* printf打印输出的特殊内容->转义字符 转义字符也是字符 转义字符是由一个 \ + 某一个东西组成的 转义字符除了有ASCII值以外还有另外的一层含义 ASCII(描述的就是字符和数字的对应关系) 常用的ASCII表一共有128个字符(对应数字0 - 127) 记住特殊的ASCII值 字符 ASCII值 '\0' 0 '\n' 10 '0' 48 'A' 65 'a' 97 转义字符 字符 ASCII值 含义 '\0' 0 字符串的结束标志 '\n' 10 换行符 会把光标换到下一行行首的位置 '\r' 13 回车符 会让光标回到当前行行首的位置 '\t' 9 水平制表符 会补一个tab '\v' 11 垂直制表符 光标会换到下一行当前列的位置 */
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(void)
{
printf("123\v456\v789\v");
printf("123\t456\t789\t");
//printf("sdlpmdaspmdpasmdpasmoHello World!\r");
//printf("Hello World!\n");
//printf("Hello\0World!");
//printf("%");
//printf("Hello World!");
//printf('Hello World!');
}
/* printf打印输出的特殊内容->标准化输出格式 标准化输出格式只是一种输出格式,并不是字符 是由一个 % + 某一个东西组成的 %叫做占位符 %d 十进制整数输出 %o 八进制输出 %x 十六进制输出 %f 小数输出(默认打印输出小数点后六位) %.2f 默认输出小数点后2位 %c 单一字符输出 %s 字符串输出 %p 输出地址 %% 打印一个百分号 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
//printf("%d", 9527);
//printf("%x\n", 100);
//printf("%o\n", 100);
//printf("%f\n", 3.14);
//printf("%.2f\n", 3.14);
//printf("%c\n", '%');
//printf("%%\n");
//printf("%s\n", "Hello");
//printf("%f\n", 100);
//printf("%d\n", 3.14);
printf("%c-%d\n", 100, 'A');
}

===================================
2022-7-4
===================================

一.温故知新

    嵌入式方向
    需要使用Linux环境(红帽 centos Ubuntu SUSE ...)
    虚拟机安装虚拟操作系统
    熟悉环境->终端的熟悉
    打开终端的方式
    终端提示符
    常用命令
    cd ls pwd touch mkdir rm cp mv cat tar
    编辑器和编译器
    vim gcc
    ./a.out
    #include <stdio.h>
1.在C语言中以#开头的内容是预处理的操作
2.预处理都包含哪些操作
    条件编译 宏定义 文件包含
3.把.c文件编译成可执行文件,需要包含哪些操作?
    预处理->编译->汇编->链接
4.头文件包含可以使用尖括号或者双引号,有啥区别?


    int main(void)
    {
        printf("Hello World!");
        在C语言中双引号引起来的内容是字符串
        字符串是由一个一个单一的字符组成,最后有一个结束标志'\0'
        ASCII
        '\0'	0
        '\n'	10
        '0'		48
        'A'		65
        'a'		97
        标准化输出格式
        %d %o %x %f %c %s %p %%
    }
        printf("%d\n", 3.14);
        printf("%f\n", 100);
    
    printf("%.2f\n", 3.14);

    printf("3.14\n");

运算符

算术运算符	+ - * / %
关系运算符	> < == >= <= !=
逻辑运算符	&& || !
赋值运算符	= += -= *= /= %= <<= >>= &= ...
位运算符		<< >> & | ~ ^
条件运算符	? :
下标运算符	[]
分量运算符	. ->
指针运算符	& *
强制类型转换	(数据类型)
求字节大小	sizeof()
自增自减运算符	++ --

变量

1.变量的含义
    变量就是用来存储数据的
    (数据会存在内存中<以二进制补码的形式存储>)
2.变量的定义
    数据类型 变量名	;
    char		c	;
    int			i	;
    float		f	;
    1)基本的数据类型
    整型	有符号/无符号	short int long
    实型	有符号			float(单精度) double(双精度)
    字符型	有符号/无符号	char
    2)通过sizeof测试数据类型占用空间的大小
    注意 : sizeof不是函数,是一个运算符
    sizeof运算的结果是以字节为单位
    1个字节(byte) = 8个位(bit)
    1个字 = 2/4个字节
    注意使用sizeof运算符测试出来的结果并不是唯一的
    和硬件以及操作系统的位数有关(和32bit或者64bit有关)
    3)数据类型的大小以及范围在头文件中有记录
    /usr/include/limits.h
    4)变量命名的要求
        1>变量名是以数字 字母 下划线组成,但是不能以数字开头
        2>变量名区分大小写
            int a, A;//a和A是两个变量
        3>变量名不能和C语言的关键字重复
        4>变量名要做到见名生义
3.变量的初始化
    数据类型	变量名	=	数值	;
    char		c		=	'A'		;
    int			i		=	9527	;
    float		f		=	3.14	;
4.变量的定义和变量的初始化的区别
    变量的定义 : 只是给变量分配相应的存储单元,
                    变量的初始值是垃圾值
    变量的初始化 : 除了给变量分配相应的存储单元,
                    并且会给变量赋初始值
注意 : 以后写程序定义的变量一定要有初始化
5.变量的使用规则
    1)变量一定是先定义再使用
    2)便于编译时检查错误,不同类型的变量有不同的运算要求
    3)当变量在定义时,将来在内存中占用的大小就已经决定了

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(void)
{//char short int long float double
printf("sizeof(char) = %ld\n", sizeof(char));
printf("sizeof(short) = %ld\n", sizeof(short));
printf("sizeof(int) = %ld\n", sizeof(int));
printf("sizeof(long) = %ld\n", sizeof(long));
printf("sizeof(float) = %ld\n", sizeof(float));
printf("sizeof(double) = %ld\n", sizeof(double));

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main(void)
{
float f = 3.14;

printf("f = %d\n", f);

//int i = 100;

//printf("i = %f\n", i);

return 0;
}

scanf函数的使用

    函数功能 : 用来进行录入的函数(可以接收键盘录入的数值)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(void)
{
int a = 9527;

printf("a = %d\n", a);
//需求:定义三个变量,通过scanf函数录入年月日
scanf("%d", a);
//scanf("%d\n", &a);
//printf("请输入a变量的值:");
//scanf("%d", &a);
/*
注意:
1.在scanf函数的双引号中只写标准化输出格式即可
2.在scanf函数的双引号中千万不要加换行符
3.在scanf函数的双引号之后,写的参数必须是地址
*/
printf("a = %d\n", a);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main(void)
{
int year = 0, month = 0, day = 0;

printf("请输入年-月-日 : ");
scanf("%d,%d,%d", &year, &month, &day);
printf("%d年%d月%d日!\n", year, month, day);

return 0;
}

算术运算符

    +		加法
    -		减法
    *		乘法
    /		除法(取商)
    %		除法(取余)
注意 : 
除法运算中除数不能为0
    a ➗ b = c ...... d
a	被除数
b	除数
c	商
d	余
-------------------------
如果a < b, c = 0, d = a
面试题
1.两个变量值的交换
    1)可以定义第三个中间变量,通过三个变量和两个数值可以交换
    2)可以通过算术运算符完成交换
2.
    atoi()
        "123"->123
    itoa()
        9527->"9527"
        1->'1'
        1 + '0' = '1'
        char arr[5] = {0};
        arr[0] = 9527 / 1000 = 9 + '0' = '9'
        arr[1] = 9527 / 100 % 10 = 5 + '0' = '5'
        arr[2] = 9527 / 10 % 10 = 2 + '0' = '2'
        arr[3] = 9527 % 10 = 7 + '0' = '7'
        arr[4] = '\0';

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>

int main(void)
{
int a = 13, b = 7;
int c = 0;

printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b);
printf("a %% b = %d\n", a % b);

/*
printf("c = %d\n", c);
c = a + b;
printf("c = %d\n", c);
c = a - b;
printf("c = %d\n", c);
c = a * b;
printf("c = %d\n", c);
c = a / b;
printf("c = %d\n", c);
c = a % b;
printf("c = %d\n", c);
*/
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
int a = 0, b = 0;
int tmp = 0;

scanf("%d-%d", &a, &b);//13 - 7

printf("a = %d b = %d\n", a, b);

a = a + b;// a = 13 + 7 = 20
b = a - b;// b = 20 - 7 = 13
a = a - b;// a = 20 - 13 = 7

/*
tmp = a;//把变量a的值赋值给tmp变量
a = b;//把变量b的值赋值给a变量
b = tmp;//把变量tmpb的值赋值给b变量
*/
printf("a = %d b = %d\n", a, b);

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
int i = 0;

scanf("%d", &i);//9527
//录入一个4位的正整数

printf("千位 : %d\n", i / 1000);//9
printf("百位 : %d\n", i / 100 % 10);//5
printf("十位 : %d\n", i / 10 % 10);//2
printf("个位 : %d\n", i % 10);//7

return 0;
}

关系运算符

    >		是否大于
    <		是否小于
    ==		是否相等(一个等号是赋值运算符)
    >=		是否大于等于
    <=		是否小于等于
    !=		是否不等于
注意:
一个表达式经过关系运算符的运算,最终会生成真假值
    0为假,非0为真(默认的真值是1)
一般关系运算符的运算会配合分支语句和循环语句一起使用
    分支语句和循环语句就是用运算之后的真假值做操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(void)
{
int a = 13, b = 7;

printf("a > b = %d\n", a > b);
printf("a < b = %d\n", a < b);
printf("a == b = %d\n", a == b);
printf("a >= b = %d\n", a >= b);
printf("a <= b = %d\n", a <= b);
printf("a != b = %d\n", a != b);

return 0;
}

逻辑运算符

    &&		逻辑与(全真才为真,有假就是假)
        表达式1 && 表达式2
        表达式1		表达式2		整体
        真			真			真
        真			假			假
        假			真			假
        假			假			假
    ||		逻辑或(全假才为假,有真就是真)
        表达式1 || 表达式2
        表达式1		表达式2		整体
        真			真			真
        真			假			真
        假			真			真
        假			假			假
    !		逻辑非(真假互换)
        !(表达式)
        表达式		整体
        真			假
        假			真
====================================
    表达式1 && 表达式2
    如果表达式1为真,会执行表达式2的内容
    如果表达式1为假,不会执行表达式2的内容

    表达式1 || 表达式2
    如果表达式1为真,不会执行表达式2的内容
    如果表达式1为假,会执行表达式2的内容
====================================
已知有三个变量a b c存储的是非负的正整数
1.列出满足可以构成三角形的条件

2.已知a b c满足构成三角形的条件,列出满足构成直角三角形条件

3.已知a b c满足构成三角形的条件,列出满足构成等腰三角形条件

4.已知a b c满足构成三角形的条件,列出满足构成等边三角形条件
====================================

1
2
3
4
5
6
#include <stdio.h>

int main(void)
{
return 0;
}

====================================
2022-6-30
====================================

一.课程介绍

    物联网嵌入式方向
        拉齐基础
        Linux基础		(终端的使用/命令/编译器/编辑器/软件安装/服务搭建)
        Linux下的C语言	
        数据结构			(链表/栈式/队列/树/哈希表)
        ----------------------------------------------------------
        Linux下的高编		(文件IO/信号/进程/线程/通信/网络socket)
        QT(图形化界面开发)	
        ----------------------------------------------------------
        智能终端设备		(单片机<裸板驱动开发>)
                        STM32F103RBT6
        边缘计算设备		(高端ARM开发板)

二.安装开发环境

    1.双系统
        1)系统盘
            软碟通 + 镜像
        2)需要在电脑硬盘上预留100G空间
    2.安装虚拟机
        1)虚拟机软件
            VMWare
        2)镜像
            网易镜像 清华镜像
    3.分区
            注意:一定要手动分区
            8192Mb			交换分区(虚拟内存)
            把剩余空间的一半	/home
            把剩余空间		/

三.介绍终端

    在Linux下一切皆文件

    终端上的命令可以代替鼠标的所有操作
    1.打开终端的方式
        1)鼠标右键->打开终端
        2)显示应用程序->全部->打开终端
        3)快捷键
            ctrl + alt + t
    2.设置终端
        1)修改终端字体字号
        2)修改终端配色方案
    3.终端提示符
        root@zack-machine:/home/zack#
        @之前的位置		当前登陆终端的用户
        @				分割符号
        @之后 :之前		主机名
        :				分割符号
        :之后 #或$之前	当前终端所在目录的路径
            如果出现的是~指的是家目录
            每个用户都会有自己的家目录
            用户			家目录的路径
            root		/root		//超级用户
            zack		/home/zack
            tom			/home/tom
            jerry		/home/jerry
            root是超级用户所以它的家目录是/root
            其他用户属于普通用户所以家目录是/home/和用户名同名的目录	
        # 或者 $			用来提示用户级别
            #			代表当前登陆终端的用户是超级用户
            $			代表当前登陆终端的用户是普通用户
==================================
关键词
1.根目录
    是Linux最根本的路径
2.家目录
    取决于用户
    root用户的家目录		/root
    普通用户的家目录		/home/和用户名同名的目录
3.桌面
    桌面在家目录中
    root用户的桌面		/root/桌面
    普通用户的桌面			/home/和用户名同名的目录/桌面
    
    cd /桌面				ERROR
    cd /home/桌面		ERROR
    cd /home/zack/桌面	Bingo
    cd ~/桌面			Bingo

4.绝对路径和相对路径
    绝对路径 : 从根目录出发,一层一层递进
        /home/zack/桌面
        如果显示出来的路径最左边是 / 那么这个路径就是绝对路径
    相对路径 : 除了绝对路径都是相对路径
        ~/桌面
        如果显示出来的路径最左边不是 / 那么这个路径就是相对路径
    在显示的路径中只有最左边出现的是 / 才是根目录的意思
        之后再出现的/都是指的什么什么目录之下
==================================


==================================
练习
1.zack@abc-test:~$
    zack		用户名
    abc-test	主机名
    ~			家目录(/home/zack)
    $			普通用户
2.abc@abc-test:~$
    /home/abc
3.tom@abc-test:/home/zack#
4.jerry@abc-test:/$
==================================

    4.终端执行的简单命令
        终端提示符 $ 命令
        终端提示符 $ 命令 选项
        终端提示符 $ 命令 参数
        终端提示符 $ 命令 选项 参数
    cd		(改变目录/切换目录)
        1) cd			回到家目录
        2) cd 目录名		切换到该目录中(已有的目录名)
        3) cd 路径		可以是绝对的也可以是相对的,但必须是正确的路径
        4) cd ..		切换到上一级目录
    ls		(显示文件名)
        1) ls			显示当前目录下的文件名
        2) ls 文件名		可以显示文件名
        3) ls 目录名		可以显示该目录下的文件名
        4) ls -a		可以显示所有文件包括隐藏文件
            (在Linux中以.开头的文件都是隐藏文件)
            .			表示的是当前目录
            ..			表示的是上一级目录
        5) ls -l		以长格式显示文件内容
        -rwxrwxr-x  1 zack zack  8352 6月  22 20:20 a.out
        drwxrwxr-x  4 zack zack  4096 12月 27  2021 east
part.1		文件的类型
            在Linux下一共有7种文件类型
            -		普通文件
            d		目录文件
            c		字符设备文件
            b		块设备文件
            s		网络套接字文件
            p		管道文件
            l		链接文件(符号链接文件)
part.2		文件的权限
            普通的权限
            rwx				rwx				r-x
            文件所有者权限		文件所属组权限		其他用户权限
            7				7				5
            r	可读			4
            w	可写			2
            x	可执行		1
            -	该处无权限	0
part.3		文件链接数

part.4		文件所属者

part.5		文件所属组

part.6		文件字节数

part.7		文件最后修改时间

part.8		文件名

        pwd			显示当前所在目录的绝对路径
        
        touch		(创建普通文件)
            1) touch 文件名			创建普通文件
            2) touch 已有的文件名		会修改文件最后修改时间
            3) touch 文件名 文件名		创建多个文件
        mkdir		(创建目录文件)
            1) mkdir 目录名			创建目录文件
            2) mkdir 已有的目录名		报错
            3) mkdir 目录名 目录名		创建多个目录
        rm			(删除文件)
            1) rm 普通文件的文件名		删除普通文件
            2) rm -r 目录文件名		删除目录文件(-r递归的操作)
                                                (-f强制的操作)
            3) rm *.c				删除所有以.c结尾的文件
                注意 : rm -rf *
        cp			(拷贝文件)
            1) cp 源文件文件名 目标文件文件名
            2) cp -r 源目录名 目标目录名	(-r是递归的操作)
        mv			(剪切文件/移动文件/改名字)
            1) mv 源文件文件名 目标文件文件名
            注意 : 剪切目录时不需要加 -r 的操作
        cat			(查看普通文件的文件内容)
        tar			(压缩和解压缩的命令)
            压缩
            tar cvf 最终生成的压缩包的名字.tar 压缩的文件
            解压缩
            tar xvf tar包的名字
            tar xvf tar包的名字 -C 目录
                (默认会解压缩到当前目录下)
                -C	是用来指定目录的
=====================================

作业

1.把今天讲过的内容复习一遍(千万不要小看复习的力量)
2.重装虚拟操作系统
3.查找如何查看文件大小
=====================================
小操作
1.打开终端 ctrl + alt + t
2.打开终端标签页 ctrl + shift + t
3.切换终端标签页 ctrl + pgup/pgdn
4.临时放大终端字体 ctrl + shift + +
5.临时缩小终端字体 ctrl + -
6.终端清屏 ctrl + l / clear
7.查看历史命令 history
8.终端复制 鼠标选中就是复制
9.终端粘贴 鼠标中轴按键
10.终端中多敲tab,可以补齐
=====================================