popring's Blog

探索、记录、分享

第五章 循环结构

You are more powerful than any other person.

你比任何人都强大。

程序的三种基本结构

顺序结构

选择结构

循环结构

while语句

先判断后执行,表达式为真,

注意:如果表达式的值一直为真,没有改变,并且没有break;,则会陷入死循环

1
2
3
4
while(表达式)
{
语句
}

do-while

先执行后判断

1
2
3
4
5
do{
语句
}while(表达式);

// 注意:do-while的while号后有分号。

for

for 语句中的3个表达式均可省略,但;不可省略。

1
2
3
4
5
6
7
8
9
10
for(表达式1; 表达式2; 表达式3)
{
语句
}

// 可以看成
for(循环变量赋初值; 循环条件; 循环变量增量)
{
语句
}

执行顺序

[括号内为循环]

表达式1 -> 表达式2 -> [语句 -> 表达式2 -> 表达式3 ->]

for循环内还可以使用逗号表达式

1
2
3
4
5
int sum, i;
for(sum=0, i=0; i<100; sum+=i, i++)
{
语句
}

循环嵌套

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

int main()
{
int i,j;
for(i=1; i<=2; i++)
{
for(j=1; j<=3; j++)
{
printf("*");
}
printf("\n");
}
}

break和continue

break:跳出整个循环。

continue :结束本次循环,转到循环的开始判断是否执行下一次循环。

穷举法

穷举法也成为了枚举法,将在此范围内的所有可能情况逐一验证,知道全部情况验证完毕。

素数

输入一个数,判断其是否为素数

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

int main()
{
int input, i, k;
printf("请输入大于1的数\n");
scanf("%d", &input);

k = sqrt(input);

for(i=2; i<k; i++)
if(input%i == 0) break;

if(i>k)
printf("%d是素数\n", input);
else
printf("%d不是素数\n", input);
}

第四章 选择机构

Everthing ending is just a new beginning.

每次结束都是新的开始

关系运算符

1
< > <= >= == !=

逻辑运算符

1
2
3
4
5
6
7
8
&&	逻辑与(且)
两者都为真时结果才为真有一个为假,结果为假
|| 逻辑或
有一个为真,结果为真
两者都为假时,结果才为假
! 逻辑或
运算量为真时,结果为假
运算量为假时,结果为真
1
2
3
// 1为真 0为假
5 > 0 1
5 < 3 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 优先级 从高到低
0. ()
1. 逻辑非(!) ++ -- ~ -
2. 算术运算
* / % + -
<< >> [左右移]
3. 关系运算
< <= > >=
== !=
4. && 和 ||
&& 优先级大于 ||
5. 条件 ? :
6. 赋值运算 += -= *= ...
7. 逗号
1
2
5 && 3;
// 表达式的值为 1

条件运算符

1
2
?	三目运算符
表达式1 ? 表达式2 : 表达式3

if 语句

1
2
3
4
5
6
7
8
9
// 表达式值为非0,执行语句;0不执行语句
if(表达式)
{
// 执行语句
}

// if 单语句要注意(if后无大括号),只能跟一条语句
if(a>2) a = 3;

交换两个变量的值

1
2
3
t = a;
a = b;
b = t;

switch 语句

1
2
3
4
5
6
7
8
9
10
11
12
switch(表达式)
{
case 表达式1:
语句1;
break;
case 表达式2:
语句2;
break;
...
default:
语句n;
}

第三章 顺序结构

You only get one shot, do not miss your chance to blow.

你只有一发子弹,不要错过引爆全场的机会。

语句

1
2
3
4
5
6
7
// 大括号是程序块的分界符,后不跟分号(;)
{
int a;
a = 1;
}

// 每条语句后要加分号,语句也可以也在同一行,但要用分号分割

输入输出

C语言程序的 输入/输出 都要通过库函数完成

库函数,就是“仓库“里的函数

在C语言要使用“库函数”,首先要用 #include 将一些文件包含到程序中,文件后缀一般为 .h ,称为头文件。

1
2
3
#include <stdio.h>
// 或者是
#include "stdio.h"

putchar()

单字符输出

1
putchar('a');

getchar()

单字符输入

1
getchar();

printf()

格式输出函数

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

int main()
{
printf("Hello World");
}

格式字符串控全体,

数据替换百分比(%)

字符c,正数d

小数f,指数e

(o)八叉(x)u无号

字符串s要牢记

间数全宽点小数

负号表示左对齐

scanf()

格式输入函数

1
scanf("格式控制字符串", 变量1的地址, 变量2的地址, ...)
1
2
3
4
5
6
7
8
#include <stdio.h>
int main
{
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d", &a, &b, &c);
printf("a=%d, b=%d, c=%d", a, b, c);
}

scanf, 键盘输入

后为地址,不能输出。

间数宽度,%c全读。

非格式符,麻烦用户。

函数功能用法举例
sqrt(x)求x的算术平方根,x≥0sqrt(2)
abs(x)求x(整数)的绝对值abs(-5)
fabs(x)求x(实数)的绝对值fabs(-2.5)
log(x)求自然对数ln(x)log(2)
exp(x)求ex的值exp(2)
pow(x,y)求xy的值,注意x^y是“按位异或”不是求xypow(2, 3)
sin(x)求x的正弦值,x单位为弧度sin(30*3.14/180)
cos(x)求x的余弦值,x单位为弧度cos(3.14)
tan(x)求x的正切值,x单位为弧度tan(1.3)
asin(x)求sin-1(x)的值(弧度),-1≤x≤1asin(1)
acos(x)求cos-1(x)的值(弧度),-1≤x≤1acos(0)
atan(x)求tan-1(x)的值(弧度)atan(-82.24)

第一章 概述

Good things are worth the wait.

美好的事物都值得等待。

标识符

命名规则:

标识符名很简单,字母数字下划线。

字母区分大小写,非数打头非关键。

常量

程序运行过程中值不会变化的成为常量。

C语言编译过程

C语言源程序 -> 目标程序 -> 可执行程序

进制

二进制转换十进制

十进制转换二进制

第二章 数据类型运算符和表达式

整形常量

1
2
3
4
5
6
7
// 十进制
a = 10;
// 八进制
a = 012;
// 十六进制
a = 0xA;
// 不允许写为二进制形式。

整型常量表示法,十进制数直接打。

数前添零进制八,十六进制再加叉。

数值类型

整型类型

int, short int, long int, long long int

类型类型备注
short整数型2个字节
long长整型4个字节
signed有符号型可以保存负数的整型变量(signed可省略)
unsigned无符号型可保存正数和0,但不能保存负数的整型变量
signed short int a有符号短整型2字节,-32768 ~ 32767
int整数型4个字节

浮点类型(也称为实型)

float, double, 双精度浮点型

根据精度不同,克表示数据范围不同,根据实际情况选用。

类型类型备注
float单精度型4个字节,最大7位有效数字
double双精度型8个字节,最大15位有效数字
小数形式
1
2
3
4
5
6
7
8
float f;
f = 12.;
f = .36;
f = 1.0;

// 可以省略正数部分的0
// 也可以省略小数末尾的0
// 但必须有小数点。
指数形式
1
2
3
4
5
// E(或e)代表 x10
2.1E5 == 2.1 * pow(10,5);
-0.8E-2 = -0.8 * pow(10, -2);
...
// E(e)后面必须是正数,前后两边紧相连

整型变量和实型变量

整型变量:只能保存整数,不能保存实数。(例如:int)

实型变量:只能保存实数,不能保存正数。(例如:float, double)

常量后缀

L(或l)

整数后加为长整型(long),实数后加为长双精度型(long double)

1
0L, 12L, 1.2L

U(或u)

只能加在整数后,表示常量为无符号型,不能表示负数。

1
2
3
4
0U, 6U

// 也可既用L又用U
12LU, 6LU
F(或f)

表示常量为单精度型,加在整数后,则此数不为整数。

1
1.23f, 356F

字符类型

单引号包裹的一个字符,称为字符常量。

单引号内必须为英文,只能有一个字符,每个字符常量占一个字节(8个bit位),单引号是定界符不属于字符内容。

ASCII码

标准ASCII码0~127,字符和整数是混用的,字符可边做对应的ASCII码

ASCII码详情
0~31, 127控制字符(不可显示)
32空格字符
48~57数字’0’~’9’
65~90‘A’~’Z’,
97~122‘a’~’z’,小写字母比大写多32

转义字符 '\'

1
2
3
4
5
6
\n 换行符
\a 响铃符
\t 制表符
\\ 表示 \ 字符
\' 表示 ' 字符

字符串

末尾 \0 表示字符串结束

字符常量字符串常量
引号单引号双引号
字符个数只能占一个字符可含0~多个字符
能否将值赋值给char型变量可以不可以
有无对应变量有字符型变量无字符型变量
占用内存字符数一律一个字节字符串字符数(长度)+1

算数运算符

优先级:

先乘除,后加减

* / %优先级相同,高于 + -

1
+ - * / %

自动类型转换

表达式的类型:

两个运算量类型一致时,与两个运算量的类型一致。

两个运算量类型不一致时,表达式的类型与其中较高类型运算量的类型一致(较低类型自动转换为高类型再运算)

1
2
char -> int -> float -> double
特殊:所有浮点数必然转换为 double 再运算(即使两个 float 型量的运算也会先转换为 double

取整数的个、十、百、千…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a;
a = 123456;
// 个位
a%10;

// 十位
(a/10)%10

// 百位
(a/100)%10

...

// 取最高位时,a/100000 ,只会有一位数,不%10 也可以

习题

  1. 一个数位78378 取它的所有千位和百位
  2. 水仙花

赋值运算符

= 赋值运算符优先级再C语言中排倒数第二位

1
2
3
4
5
6
7
8
9
int n;
n = 8;
n += n *= n - 2;
// 拆分运算
n += n *= 6;
n += 48;
n = n + 48;
n = 96;
// 所以表达式的值为 96,表达式求值后的n的值为 96

自增和自减

i++

单目运算符 优先级很高,仅次于括号()

只能用于变量

i++ 计算后会修改i 自身的值

i++++i 的区别

++在先,先加后用;

++在后,后加先用;

--在先,先减后用;

--在后,后减先用;

1
2
3
4
5
6
7
int a=1, b;
b = 5 - a++;
// 计算后,b=4 a=2

int a=1, b;
b = 5 - ++a;
// 计算后,b=3 a=2

逗号运算符和逗号表达式

逗号运算符优先级最低(倒数第一),顺序自左到右

1
2
3
4
5
6
// 运算符
int x=1, y=2, z;
z = (x++, y++);
z = 3;

// 表达式亦相同

位运算

2个条件

数据必须转换为二进制才能进行

只能对整型数据和字符型数据进行

按位与 & 和逻辑 && 不同

按位与 &

按位或 |

按位异或 ^

性质:

任何数与他的本身按位异或,结果都为0

a^k^k = a,可根据这个性质对数据加密

按位求反 ~

~是单目运算符,将数据转换为二进制后,将个二进制位反过来,0变1,1变0

左移 << 右移 >>

左移 <<

<<左边的数的各二进制整体左移若干位,由 <<右边的数指定移动的位数。移出的位将被舍弃。

一个数左移i位,相当于乘以2的i次方

1
2
3
3 << 4
// 相当于
3 * (2*2*2*2)
右移

>>左边的数的各二进制整体右移若干位,由 >>右边的数指定移动的位数。移出的位将被舍弃。

一个数左移i位,相当于乘以2的i次方

1
2
3
15 >> 2
// 相当于
15 / (2*2)

空类型

void

派生类型

  1. 指针类型 *
  2. 数组类型 []
  3. 结构体类型 struct
  4. 共同体类型 union
  5. 函数类型

Visual Stdio 快捷键

注释: Ctrl + K, Ctrl + C

取消注释:Ctrl + K , Ctrl + U

  • hexo 安装

  • 使用 Next 主题

  • 创建页面

  • 本文无亮点,观看需谨慎。

  • 最后想说,先去翻翻官方文档,再看第三方的,毕竟,官方的才正宗。

阅读全文 »

webpack 常用命令

  • webpack building for development
  • webpack -p building for production, minification (压缩,打包)
  • webpack --watch for continuous incremental building (监听变动并自动打包)
  • webpack -d including source maps(生成map映射文件,告知哪些模块最终打包到哪里了)
  • webpack --colors making building output pretty (美化展示信息)
阅读全文 »