《C语言程序设计教程》——朱鸣华、刘旭麟等


第一章 C语言概述


1、C语言的特点:

1)兼具高级、低级语言的双重能力(C语言允许直接访问物理地址,能够进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作,又称为中级语言);
2)生成的目标代码质量好,程序执行效率高;
3)语言简洁,结构清晰;
4)语言表达能力强;
5)程序通用性、移植性好。

2、C语言的组成与结构:

1)一个C语言程序的主体结构是由一个或若干个的函数构成的;
2)主函数main是程序的入口,它可以出现在程序的任何位置;
3)C程序中的函数包括:主函数main,用户自定义函数,系统提供的库函数(例:输出函数printf);
4)函数由函数头和函数体两个部分组成;
5)语句由关键字和表达式组成;
6)程序中的“/* */”内的文字是程序的注释部分。

3、C语言开发步骤:

1)编辑源程序;
2)编译源程序;
3)链接目标文件;
4)运行程序;
5)结果分析。

第二章 算法与程序设计基础


1、一个算法就是一个有穷规则的集合,其中的规则规定了一个解决某个特定类型的问题的运算序列。简单地来说,任何解决问题的过程都是由一定的步骤来组成的,我们把解决问题确定的方法和有限的步骤称为算法。

2、算法分为数值运算算法和非数值运算算法两种。数值运算算法是指对问题的数值求解;非数值运算算法需要用户按不同要求进行设计。

3、算法的五个特征:有穷性;确定性;可行性;有零个或多个输入;有一个或多个输出。

4、(流程图)结构化程序设计的三种基本程序结构是顺序结构、选择结构和循环结构

5、一般程序设计方法:分析问题,建立数学模型;确定数据结构;确定算法,描述算法;编制程序,调试程序;运行结果

6、结构化程序主要特征:以三种结构的组合来描述程序;整个程序采用模块化结构;有限制地使用goto语句;以控制结构为单位;采用结构化程序设计语言编写程序。

7、结构化程序的主要原则:自顶而下;逐步求精;模块化;限制使用goto语句。

第三章 数据类型、运算符与表达式


1、C语言基本符号:数字、英文字母、下划线字符、运算符、关键字

2、标识符:符号常量、变量、函数、数组、类型、文件命名的有效字符序列

3、标识符命名规则如下:1)只能由字母、数字和下划线组成;2)第一个字符必须为字母或下划线;3)不能使用关键字;4)区分大小写字符;5)建议标识符长度不超过8个字符。

4、程序在使用变量前,先要对变量进行定义,即必须“先定义,再赋值,后使用”

5、变量一般是在函数开头的声明部分定义。

6、C语言数据类型:整型数据、实型数据、字符型数据

7、整型数据

整型变量

基本整型:以int作为类型说明符

短整型:以short int或short作为类型说明符

长整型:以long short或long作为类型说明符

一般来说,整型变量在内存中占的字节数与所选择的编译系统有关,不同的编译系统对整型数据的存储是不同的,规定long型整数不短于int型,short型整数不长于int型。

无符号整型变量

无符号基本整型:以unsigned int或unsigned作为类型说明符

无符号短整型:以unsigned short int或unsigned short作为类型说明符

无符号长整型:以unsigned long int或unsigned long作为类型说明符

整型常量

整型常量就是整常数,有十进制,八进制和十六进制三种表达形式。

8、实型数据

实型变量

单精度实型:以float作为类型说明符

双精度实型:以double作为类型说明符

长双精度实型:以long double作为类型说明符

实型常量

实型常量的表达形式:实型常量就是实常数,有十进制小数形式和指数形式两种表达形式

实型常量的类型:许多C编译系统将实型常量作为双精度来处理

一个实型常量可以赋给一个float型、double型或long double型变量,系统根据变量的类型自动截取实型常量中相应的有效数字。

9、字符型数据

字符型数据用于表示一个字符值。字符型数据分为字符常量和字符变量两种。

字符常量是用单撇号括起来的一个字符,同时,C语言约定用“”开头的字符序列作为标记,这类字符统称为转义字符,用于代表一种特定的控制功能或表示一个特别的字符。

10、运算符和表达式

用运算符将操作对象连接起来,符合C语言语法的式子称为表达式。具有以下特点

常量和变量都是表达式

运算符的类型对应表达式的类型

每一个表达式都有自己的值

1)+、-、*与数学中的意义相同

2)在除法运算中,两个整数相除的结构为整数,舍弃小数部分,如果被除数或除数有一个是负数,则舍弃小数部分的方向是不一定的。

3)%是取余运算符或模运算符,该运算只能作用于两个整型数,运算结果是两个整数相除后的余数,运算结果为整数。同时,规定运算结果的正负符号与被除数的符号一致,如果被除数小于除数,运算结果等于被除数。

赋值运算符有一般形式和复合形式两种。

赋值运算符是“=”,作用是将一个数据赋给一个变量,由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式

形式如下:变量 = 表达式

其作用是把赋值运算符右边表达式的值赋给赋值运算符左边的变量。

逗号表达式一般形式如下:表达式1,表达式2,表达式3,……,表达式n

逗号运算符的优先级是所有运算符中最低的,结合方向:“从左到右”

逗号表达式的值和类型就是最右边的“表达式n”的值和类型。

11、数据类型转换

整型、实型和字符型数据可以进行混合运算,在进行运算时,一般类型的数据先转换成标准类型的数据,不同类型的数据要先转换成相同类型的数据。

在运算过程中,每个数据都要转换为标准类型,以提高运算精度
强制类型转换是指将表达式的运算结果(即表达式的值)转换为指定的类型。一般形式如下:
(类型说明符)表达式

int k;double x, y;
(double) k;     /*将k的值转换为double型*/
(int)(x+y);     /*将表达式x+y的值转换为int型*/
(int) x+y       /*将x的值转换为int型,然后和y的值相加,最后结果是double型*/
(int) x%k       /*将x的值转换为int型,然后和k的值求余,最后结果是int型*/

说明:

对表达式进行强制类型转换时,表达式应该用括号括起来,否则会产生不同的结果

对变量进行强制类型转换时,只能得到一个中间值,并不改变该变量原有的类型

强制类型转换运算符的优先级高于取余运算符%

自增运算和自减运算

使用形式一般如下:
++变量 或 变量++
--变量 或 变量--
其作用是使变量的值增1或减1.其中变量是指算术类型的变量

12、位计算

按位取反运算符 ~
一般形式:~A
功能:将A的各位都取反(即0变1,1变0)后所得到的值。


按位与运算符 &
一般形式:A&B
功能:将A的各位与B的对应位进行比较,如果两者都为1,A&B对应位上的值为1,否则为0.


按位或运算符 |
一般形式:A|B
功能:将A的各位与B的对应位进行比较,如果两者至少有一个为1,A|B对应位上的值为1,否则为0.


按位异或运算符^
一般形式:A^B
功能:将A的各位与B的对应位进行比较,如果两者不同,A^B对应位上的值为1,否则为0。


左移运算符 <<
一般形式:A<<n,其中n为一个整形表达式,且大于0。
功能:把A的值左移n位,右边空出的n位用0填补。当左移时移走的高位中全都是0时,这种操作相当于对A作n次乘以2的运算。


右移运算符 >>
一般形式:A>>n,其中n为一个整型表达式,且大于0。
功能:把A的值向右移动n位,左边空出的n位用0(或符号位)填补。

第四章 数据的输入和输出


1、数据的输出

格式输出函数printf
函数的一般形式:printf(格式控制字符串,输出表列)
功能:按指定格式,向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据
使用说明:printf函数需要提供两类参数,一类是格式控制字符串,另一类是输出表列。

字符输出函数putchar
函数的一般形式:int putchar(char ch)
功能:向终端(或系统隐含指定的输出设备输出一个字符)
返回值:成功时返回输出字符的ASCII码,否则返回-1。

说明:可以输出转义字符;可以将字符变量定义成int型或char型。

2、数据的输入

格式输入函数scanf
函数的一般形式
功能:按指定格式,用键盘输入若干个任意类型的数据。
说明:scanf函数需要提供两类参数,一类是格式控制字符串,另一类是地址表列。
字符输入函数getchar
函数的一般形式:int getchar()
返回值:成功时返回输入字符的ASCII码,否则返回-1
功能:从终端接收一个字符
说明:只能接收一个字符;可以将获得的字符赋给int型或char型的变量;可以用来接收键盘输入的不必要的回车或空格,或使运行的程序暂停。

1)程序用getchar()接收键盘输入的不必要的回车或空格

#include <stdio.h>
int main()
{
    int a;
    char b;
    printf("Input a, b:\n  ");
    scanf("%d", &a);
    getchar();  /*接收上条语句避免将其作为有效字符输入给字符变量b*/
    scanf("%c", &b);
    printf("a = %d, b = %c\n", a, b);
    return 0;
}

第五章 选择结构


1、关系运算符和关系表达式

C语言中的关系运算符: > 、 >= 、< 、<= 、== 、!= ,前四种的优先级相同,后两种的优先级也相同。前四种的优先级高于后两种

关系运算符的结合性从左到右

用关系运算符将两个操作数(运算量)连接起来的式子称为关系表达式。两个操作数可以是算术表达式,字符表达式,赋值表达式,关系表达式和逻辑表达式等。

2、逻辑运算符和逻辑表达式

逻辑运算符:&&、||、!,其中&&、||为双目运算符,要求有两个操作数(运算量)。当&&两边的操作数均为非0时,运算结果为1,否则为0.当||两边的操作数均为0时,运算结果为0,否则为1.

!为单目运算符,只要求有一个操作数,其运算结果是使操作数(运算量)的值为非0着变为0,为0者变为1。

三种逻辑运算符的优先级由高到低依次为:!、&&、||。

3、选择语句

在C语言中,使用if语句和switch语句来实现选择结构,它可根据给定的条件,选择所给出的一组操作执行。

if语句,基本形式:

if(表达式)
    语句1
[else
    语句2]

[ ]中的语句为可选项。

if后面的表达式可以为关系式、逻辑表达式、算术表达式等。

在if语句中,语句1和语句2均可为一条语句或多条语句,当为多条语句时,需要用“{ }”将这些语句括起来,构成复合语句,否则将导致程序逻辑错误。实际上复合语句是比函数更小的程序单元。

if(a < b)
    { t=a; a=b; b=t ;}
else
    printf("max = %d\n", a);

if语句的嵌套:if语句中又包含一个或多个if语句称为if语句的嵌套。if语句嵌套的一般形式:

if(表达式1)
    if(表达式2) 语句1
    else    语句2
else
    if(表达式3) 语句3
    else    语句4

if与else既可成对出现,也可不成对出现,且else总是与最近的if相配对。

switch语句,基本形式:

switch(表达式->(整型或字符型))
{
    case 常量表达式1:[语句序列1]<-(不必使用“{ }”)
    case 常量表达式2:[语句序列2]
    ……
    case 常量表达式n:[语句序列n]
    [default:语句序列n+1]<-(也可以放在"case"前面,遇到'}'结束switch)
}

其中,方括号括起来的内容是可选项。

switch语句的执行过程是:首先计算switch后表达式的值,然后将其结果值与case后常量表达式的值依次进行比较,若此值与某case后常量表达式的值一致,即转去执行该case后的语句序列;若没有找到与之匹配的常量表达式,则执行default后的语句序列。

说明:

1、switch后的表达式和case后的常量表达式必须为整型、字符型或枚举类型

2、同一个switch语句中各个常量表达式的值必须互不相等。

3、case后的语句序列可以是一条语句,也可以是多条语句,此时多条语句不必用花括号括起来。

4、case和default的次序可以交换,也就是说,default可以位于case前面

5、多个case可以执行同一个语句序列。如:

switch(ch = getchar())
{
    case 'y':
    case 'y': printf("You are right"); break;
}

6、switch可以嵌套使用,其执行过程与简单switch语句类似。嵌套switch语句中的break语句仅对当前的switch语句起作用,并不会跳出外层switch语句。

4、条件运算符和条件表达式

条件运算符是C语言中唯一的一个三目运算符,它要求有三个操作对象。
条件表达式的一般形式:

表达式1?表达式2:表达式3
(优先级:3级,从右向左:max = a>b?a:b)

条件表达式的执行顺序是:先求解表达式1,若其值为真,则求解表达式2,整个条件表达的值即为表达式2的值,若表达式1的值为假,则求解表达式3,将表达式3的值作为整个条件表达式的值。

如:a>b?a+b:a-b
若a>b,则条件表达式的值为a+b的值,否则为a-b的值。    

说明:1)条件运算符的优先级低于算术运算符、关系运算符及逻辑运算符,高于赋值运算符和逗号运算符。

2、条件运算符的结合性为“从右到左”

3、条件表达式中的三个表达式类型可以不同,当表达式2与表达式3的类型不同时,条件表达式值的类型为二者中较高的类型。

第六章 循环结构


1、goto语句与标号

goto语句与标号配合使用的一般形式

goto 标号;
……
……
标号:语句
……
……

功能:当程序执行到goto语句时,改变程序自上而下的执行顺序,执行语句标定指定的语句,并从该语句继续往下顺序执行程序。
说明:1)标号要与goto语句配合使用才有意义,单独存在没有意义,不起作用

2)标号的构成规则与标识符相同。

3)与goto语句配合使用的标号只能存在于该goto语句所在的函数内,并且唯一;不可以利用goto语句将执行的流程从一个函数转移到另一个函数中去。

4)允许多个goto语句转向同一标号。

2、while循环语句

while循环语句的一般形式:while(循环语句)

while循环语句的执行过程:

1)计算表达式并检查表达式的值是否为0,如果为0,while循环语句结束执行,接着执行while循环语句的后续语句,若果表达式的值为非0,则执行2)

2)计算while循环语句的内嵌语句,然后执行1)

3)发生下列情况之一时,while循环结束执行:

· 表达式的值为0

· 循环体内遇到break语句

· 循环体内遇到goto语句,且与该goto语句和配合使用的标号所指定的语句在本循环体外

· 循环体内遇到return语句

3、do-while循环语句

do-while循环语句的一般形式:
do 语句 while (表达式)

do-while循环语句的执行过程:

1)执行夹在关键字do和while之间的内嵌语句;

2)计算表达式,如果该表达式的值为非0,则转到第1)步继续执行;如果表达式的值为0。则do-while循环语句结束执行,执行do-while循环语句的后续语句

说明:

1、在关键do和while之间的语句,也称为循环体,可以是单语句,也可以是复合句。

2、do-while循环语句是首先执行循环体,然后计算表达式并检查循环条件,所以循环条件至少被执行一次。

3、退出do-while循环的条件与退出while循环的条件相同

4、for循环语句

for循环语句的一般形式:

for(表达式1;表达式2;表达式3)语句(3个表达式可缺省,也可以移到“语句”里)

或:for(循环变量赋初值,循环条件:循环变量的增值)

执行过程:

1)计算表达式1;

2)计算表达式2,如果表达式2的值为非0,则执行内嵌语句,计算表达式3,然后重复第2)步;如果表达式2的值为0,则结束执行for循环语句,执行for循环语句的后继语句。

说明:

1)“表达式3”后面的内嵌语句也称为循环体,循环体可以是单语句,也可以是复合语句。

2)三个表达式都可以缺省,但是起分隔作用的两个分号不可省略。

3)“表达式1”只执行一次,可以是设置循环控制变量无关的其他表达式。 “表达式2”的值决定了是否继续执行循环。“表达式3”的作用是通常是不断改变循环控制变量的值,最终使“表达式2”的值为0。

5、三种循环语句的比较

1)for循环语句和while循环语句都是先检查循环条件是否成立,后执行循环体,因此循环体可能一次也不执行;而do-while循环语句是先执行循环体,后检查循环条件是否成立,循环体至少能被执行一次。

2)对于while和do-while循环语句,对“表达式”中的循环控制变量赋初始值是在执行这两个循环语句前完成的,而对于for的循环语句,对“表达式2”中的循环控制变量赋初始值既可在“表达式1”中完成又可在执行for循环语句之前完成。

3)为了防止出现“死循环”,while和do-while循环语句的循环体一般应包括改变“表达式”中循环控制变量值的语句,以便使循环操作趋于结束;for循环语句通常是在“表达式3”中包含改变循环控制变量的值,进而使循环趋于结束的操作。

6、循环嵌套

1)一个循环语句的循环体中又包含循环语句,称为循环嵌套。循环嵌套可以是二层或多层嵌套。while循环、do-while循环和for循环除各自本身可以循环嵌套外,它们之间也可以互相嵌套。如:

1)while()
{
    ……
    while()
    {
    ……
    }
}

2)do{
    ……
    do{
        ……
    }while();
}while();

3)for(;;)
{
    ……
    for(;;)
    {
        ……
    }
}

4)while()
{
    ……
    do{
        ……
    }while();
}

5)for(;;)
{
    ……
    while()
    {
        ……
    }
}

6)do{
    ...
    for(;;)
    {
        ...
    }
}while();

7)do{
    ...
    while()
    {
        ...
    }
}while();

8)while()
{
    ...
    for(;;)
    {
        ...
    }
}

9)for(;;)
{
    ...
    do{
        ...
    }while();
}

7、break语句、continue语句和空语句

1)break语句
break语句功能:终止执行包含该语句的最内层的switch、for、while或do-while语句。
说明:
1)break语句只能出现在switch、for、while或do-while四种语句中。
2)若循环嵌套,则break语句只能终止执行该语句所在的一层循环,并使执行流程跳出该层循环体。
3)当break语句出现在循环体中的switch语句体内时,其作用只是使执行流程跳出该switch语句体;若循环体中包含switch语句,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break语句后,使执行流程跳出本层循环体。

2)continue语句
continue语句的一般形式:continue;
功能:终止循环体的本次执行,继续进行是否执行循环体的检查判定。
说明:对于for循环语句,跳过循环体中continue语句下面尚未执行的语句,转去执行表达式3,然后执行表达式2;对while和do-while循环语句,跳过循环体中continue语句下面尚未执行的语句,转去执行关键字while后面括号中的表达式。

3)空语句
空语句的一般形式:;(只由一个分号构成)
功能:没有功能。

第七章 数组


1、一维数组

定义:

数组在引用前,必须事先定义。定义的作用是通知编译程序在内存中分配出连续的单元供数组使用。

一维数组定义的一般形式:类型说明符 数组名[正整型常量表达式]

说明:

1)正整型常量表达式也可以是符号常量和字符常量。

2)数组名后面的下标是用方括号括起来,而不是用圆括号。

3)数组名的命名同变量名的命名规则相同。

4)数组定义中常量表达式的值表示数组元素的个数。

引用:

C语言规定,只能引用单个元素。而不能一次引用整个数组

引用数组元素的形式为:数组名[下标]

说明:

下标是整型表达式,可以是数值常量、符号常量、字符常量、变量、算术表达式、函数返回值。若是系统常量,系统将自动按舍弃小数位保留整数位处理。

冒泡排序

#include<stdio.h>
int main()
{
    int i,j ,temp, a[10];
    scanf("%d", &n);
    printf("The original numbers:\n");
    for(i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for(i = 0; i < n-1; i++)
    {
        for(j = 1; j < n-i; j++)
            if(a[j-1] > a[j])
            {
                temp = a[j-1];a[j-1] = a[j]; a[j] = temp;
            }
    }
    printf("\nThe sorted number:\n");
    for(i = 0; i < n; i++)
        printf("%d  ", a[i]);
    return 0;
}

2、二维数组

二维数组的定义和引用:

二维数组定义的一般形式:类型说明符 数组名[正整型常量表达式][
正整型常量表达式]

二维数组元素引用的一般形式:数组名[下标1][下标2],其中下标1和下标2对本身值的范围和类型的要求与一维数组下标一直。

3、字符数组

在数组中,若每个数组元素存放的是字符型数据,则称为字符数组。
字符数组的定义和引用:

字符数组用char来说明其类型。

一维字符数组定义的一般形式:char 数组名[正整型常量表达式]

字符数组的输入和输出有以下两种形式:

%c格式用于一个字符的输入和输出。

%s格式用于一个字符串的输入和输出。

说明:

1)以%s格式输出字符串时,在printf函数中输出项应写字符数组名,而不是数组元素。

2)在输出字符串时,遇到字符'\0'就结束输出。'\0'是空操作,不输出任何字符

3)在scanf函数中使用%s时,在输入项中不要加地址符号'&',直接写出字符数组名皆可,因为数组名表示该数组在内存的起始地址。

字符串处理函数

输出字符串函数puts,函数调用一般形式:puts(字符数组名);

输入字符串函数gets

gets函数是从键盘输入一个字符串到字符数组中,并得到该字符数组的起始地址。

函数调用一般形式:gets(字符数组名);

字符串连接函数strcat

函数调用的一般形式:strcat (字符数组1, 字符数组2)

功能:将字符数组2连接到字符数组1的后面,结果存放在字符数组1中,使字符串1中的串值发生改变。

字符串复制函数strcpy

函数调用一般形式:strcpy(字符数组1,字符串2)

功能:将字符串2复制到字符数组1中。

字符串比较函数 strcmp

函数调用一般形式:strcmp(字符串1,字符串2)

功能:将字符串1和字符串2从左向右逐个字符(按ASCII码大小)比较,直到出现不同字符或遇到'\0'为止。

检测字符串长度函数strlen

函数调用一般形式:strlen(字符数组名)

功能:测试字符串长度,该函数的值为字符串实际长度,不包括'\0'在内。

字符串小写函数strlwr

函数调用一般形式:strlwr(字符串)

功能:将字符串的大写字母转换为小写字母。

字符串大写函数strupr

函数调用一般形式:strupr(字符串)

功能:将字符串中的小写字母转换为大写字母。

《C语言程序设计教程》学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 42、扩展原理-ApplicationListener原理

    42.扩展原理-ApplicationListener原理 有三个事件 ContextRefreshedEvent.Test_Ext$1[source=我发布了一个事件].ContextClosedE ...

  2. 009_Python3 元组

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可.   实例1: >>> ...

  3. 前端利用webuploader实现超大文件分片上传、断点续传

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  4. LibreOJ #116. 有源汇有上下界最大流

    二次联通门 : LibreOJ #116. 有源汇有上下界最大流 /* LibreOJ #116. 有源汇有上下界最大流 板子题 我也就会写写板子题了.. 写个板子第一个点还死活过不去... 只能打个 ...

  5. 如何利用awk计算文件某一列的平均值?

    [root@master yjt]# cat yjt.sh #!/bin/bash awk -v field="$1" '{sum+=$field; n++;}END {if (n ...

  6. Tkinter 之Text文本框标签

    一.参数说明 语法 作用 t=tk.Text()t.insert(END,'插入的文本信息') INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置END:这个Textbuffer ...

  7. Centos-7修改yum源(阿里yum源)

    国外地址yum源下载慢,下到一半就断了,就这个原因就修改它为国内yum源地址 国内yum源: 阿里centos7 yum源:http://mirrors.aliyun.com/repo/Centos- ...

  8. Apache Flink - 作业和调度

    Scheduling: Flink中的执行资源通过任务槽(Task Slots)定义.每个TaskManager都有一个或多个任务槽,每个槽都可以运行一个并行任务管道(pipeline).管道由多个连 ...

  9. 【java反射】

    反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个类对象进行操作. A ...

  10. 深入理解JVM虚拟机3:垃圾回收器详解

    JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...