2021年07月13日 笔记
函数
main(){
}
推动软件发展的动力
- 软件的复用
- 尽量接近自然语言
C语言可重用的粒度为函数
Java面向对象可重用的粒度为对象
函数的作用
封装一段功能,方便软件复用
函数的定义
1 | 返回类型 函数名(形参列表){ |
变量不要使用单独的字母,特别是l和o,这两个字母和数字1和0容易分不清。
形参列表
如下返回值的写法否有语法错误
1 | return a,b; |
逗号表达式
1 | 表达式1,表达式2 |
先执行表达式1,再执行表达式2;
定义函数
1 | int max(int a,int b) |
更简单的写法
1 | int max(int a,int b) |
函数和普通数据类型都在栈空间,只有对象在堆空间。
调用
1 | main() |
编程题 写一个判断素数和闰年的函数
编程题 写一个日历
输入年月日,判断这个日期是年中的第几天。
判断星期几。
1990年1月1日,星期一
判断输入的日期到,1990年1月1日有多少天,然后在%7,即可得到星期。
传值 传地址 交换地址,交换地址的空间里面的内容
1 | void swap(int a,int b){ |
问,打印的a和b的值。
不会交换
1 | void swap(int *a,int *b){ |
是否有交换?
不会交换,只交换地址而已,没有交换地址里面的数据。
1 | void swap(int *a,int *b){ |
是否有交换
有,交换了地址对应的空间里面的值
递归函数
double f(int n){
if(n==0||n==1) return 1;
return f(n-1)*n;
}
编程题 递归斐波那契第n项的值
String类
scanner.next(),以空格或回车作为结束符
scanner.nextLine(),以回车符作为结束符。
2021年07月12日 笔记
指针
内存以字节编址,32位系统,内存地址编址有32个bit表示。
int m=20;
变量m占据4个字节。
C语言中
1 | // 定义一个指针变量 |
指针变量p只会记录数据的首地址,因为地址的长度都是一样的,所以指针的大小都是一样的。
1 | int a; |
*p表示到指针变量p取值,int占用4个字节,所以*p
连续取出4个字节。
1 | p++ |
等价于
1 | p=p+1*sizeof(int) |
把int类型的m的地址赋值给char类型的指针是否可以?
1 | char *t; |
可以,但取值的时候会出错。
强制类型转换
1 | char *t; |
强制吧m的地址赋值给char变量t。
1 | int m=30 |
k赋值给m是否有问题?
1 | m=k; |
没问题。
m赋值给k有没有问题?
1 | k=m; |
有问题。
二维数组
C语言写法
1 | int a[3][4]; |
内存条没有二维的,所以,二维数组得转换为一维的来存储。
行序优先存储
Java二维数组写法1
1 | //还没有分配空间。 |
后续使用
a[0][1]
另一种二维数组的写法
1 | int[][] a=new[3][]; |
此时分配的空间就不连续了。
问:java中二维数组数组的空间是不是都是连续的
答,不一定。
a.length表示的是行的数目
a[0].length表示第一行的列数
初始化
静态初始化
1 | int a[][]={{1,2,3},{4,5},{7}}; |
静态初始化只能在声明是使用,不能先声明再初始化。
也就是如下写法是错误的:
1 | int a[][]; |
编程题 从键盘接收10个数,存储为2*5的矩阵,并打印出来
1 | public class InputMatrix { |
编程题 找鞍点
二维数组中的一个元素,该元素在当前行中是最大的,但是在该元素所在的列是最小的。
例如,在如下的二维数组中:
1 | 1 2 3 |
3就是鞍点。
查找二维数组的鞍点
1 | public class SaddlePoint { |
编程题 输出杨辉三角
1 | 1 |
编译
编译javac java解释给JVM
Java———->中间码(字节码).class——————->平台1 的JVM 来执行
|
|———————->平台2 的JVM 来执行
C语言
简化的main方法
1 | int main(){ |
完整的main
1 | int main(int argsnum,char[][] args){ |
环境变量
做什么用,
例如你在命令行cmd中输入一个copy,cmd如何知道copy命令的可执行文件在字在哪里呢?
先在当前目录下查找copy的执行性文件
如果没有找到则到系统文件中取查找可执行性文件
如果系统中也没有该命令,则到系统中的PATH环境变量中记录的地址中取查找该命令的可执行性文件
如果PATH中的记录的地址也没有找到,则报错,说明找不到该可执行性文件。
手动安装IDM的Chrome插件IDM Integration Module,取消IDM的更新提示
Chrome手动安装IDM插件IDM Integration Module
输入IDM在Chrome商店的网址进行安装
在Chrome商店中输入IDM Integration Module无法直接搜索到该插件,可以输入如下的地址进行访问:
1 | https://chrome.google.com/webstore/detail/idm-integration-module/ngpampappnmepgilojfohadhhmbhlaek |
拖动IDM安装目录下的 IDMGCExt.crx 文件到Chrome中进行安装
进入Chrome扩展程序界面,或者输入如下地址进入:
1 | chrome://extensions/ |
然后,进入IDM的安装路径,找到IDMGCExt.crx文件,把它拖动到Chrome扩展程序界面中进行安装
1 | C:\Program Files (x86)\Internet Download Manager\IDMGCExt.crx |
取消IDM更新提示
打开注册表,进入路径:
1 | 计算机\HKEY_CURRENT_USER\SOFTWARE\DownloadManager |
找到名称为
1 | LstCheck |
的数据项,然后双击它,这个数据项保存的是更新提示的日期,最后一个数是当前年,把最后一个数的年份修改为99。
也就是2099年才显示更新提示。
2021年07月12日 数组习题
1、在一个数组中找出最大和最小值,并输出它们的位置;
1 | public class FindMaxAndMinInArray { |
2、冒泡法对一个数组排序;
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢”浮”到数列的顶端。
https://www.runoob.com/w3cnote/bubble-sort.html
https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F#4
1 | /** |
3、 选择法对数数组排序;
https://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95
https://www.runoob.com/w3cnote/selection-sort.html
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
选择排序是不稳定的排序方法。
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
1 | /** |
4、把一个十进制数转换成十六进制的数;
和十进制转2进制的做法一样,除以16,取余数,然后逆序排列即可。
1 | public class DecimalToHexadecimal { |
5、实现一个数组的逆序存储
1 | /** |
6、在一个有序的数组插入一个数,也保证有序;
1 | public class OrderedArrayIsStillOrderedAfterInsertion { |
7、在一个有序的数组中,利用折半法进行查找;
https://baike.baidu.com/item/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE
https://zh.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%90%9C%E5%B0%8B%E6%BC%94%E7%AE%97%E6%B3%95
二分查找
1 | /** |
测试
1 | public static void main(String[] args) { |
运行结果
1 | 数组中 存在9这个元素,a[4]=9 |
8、矩阵的倒置;
水平镜像矩阵
1 | /** |
垂直镜像矩阵
1 | /** |
测试
1 | int[][] a = { |
运行结果
1 | |01,02,03| |
9、矩阵相加
https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5%E5%8A%A0%E6%B3%95
通常的矩阵加法被定义在两个相同大小的矩阵。两个m×n矩阵A和B的和,标记为A+B,一样是个m×n矩阵,其内的各元素为其相对应元素相加后的值。例如:
$$
\left[\begin{array}{ll}
1 & 3 \\
1 & 0 \\
1 & 2
\end{array}\right]+\left[\begin{array}{ll}
0 & 0 \\
7 & 5 \\
2 & 1
\end{array}\right]=\left[\begin{array}{ll}
1+0 & 3+0 \\
1+7 & 0+5 \\
1+2 & 2+1
\end{array}\right]=\left[\begin{array}{ll}
1 & 3 \\
8 & 5 \\
3 & 3
\end{array}\right]
$$
1 | /** |
测试:
1 | public static void main(String[] args) { |
运行结果:
1 | |1 3| |
10、矩阵相乘; M*N
N*K
设$A$为$m \times p$的矩阵,$B$为$p \times n$的矩阵,那么称$m \times n$的矩阵$C$位$A$与$B$的乘积,记作$C=AB$,其中矩阵$C$中的第$i$行和第$j$列的元素可以表示为:
$$
(A B)_{i j}=\sum_{k=1}^{p} a_{i k} b_{k j}=a_{i 1} b_{1 j}+a_{i 2} b_{2 j}+\cdots+a_{i p} b_{p j}
$$
如下所示:
$$
A =\left[\begin{array}{lll}
a_{1,1} & a_{1,2} & a_{1,3} \\
a_{2,1} & a_{2,2} & a_{2,3}
\end{array}\right] \\
$$
$$
B =\left[\begin{array}{ll}
b_{1,1} & b_{1,2} \\
b_{2,1} & b_{2,2} \\
b_{3,1} & b_{3,2}
\end{array}\right] \\
$$
$$
C =A B=\left[\begin{array}{ll}
a_{1,1} b_{1,1}+a_{1,2} b_{2,1}+a_{1,3} b_{3,1}, & a_{1,1} b_{1,2}+a_{1,2} b_{2,2}+a_{1,3} b_{3,2} \\
a_{2,1} b_{1,1}+a_{2,2} b_{2,1}+a_{2,3} b_{3,1}, & a_{2,1} b_{1,2}+a_{2,2} b_{2,2}+a_{2,3} b_{3,2}
\end{array}\right]
$$
文字描述
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
示例
$$
C=A B=\left(\begin{array}{lll}
5 & 2 & 4 \\
3 & 8 & 2 \\
6 & 0 & 4 \\
0 & 1 & 6
\end{array}\right)\left(\begin{array}{ll}
2 & 4 \\
1 & 3 \\
3 & 2
\end{array}\right)=\left(\begin{array}{cc}
24 & 34 \\
20 & 40 \\
24 & 32 \\
19 & 15
\end{array}\right)
$$
$$
\left[\begin{array}{lll}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right] \times\left[\begin{array}{cc}
7 & 8 \\
9 & 10 \\
11 & 12
\end{array}\right]=\left[\begin{array}{cc}
58 & 64 \\
139 & 154
\end{array}\right]
$$
交换顺序 结果不一样
$$
\begin{aligned}
&{\left[\begin{array}{ll}
1 & 2 \\
3 & 4
\end{array}\right] \times\left[\begin{array}{ll}
2 & 0 \\
1 & 2
\end{array}\right]=\left[\begin{array}{ll}
4 & 4 \\
10 & 8
\end{array}\right]}
\end{aligned}
$$
$$
\begin{aligned}
&{\left[\begin{array}{ll}
2 & 0 \\
1 & 2
\end{array}\right] \times\left[\begin{array}{ll}
1 & 2 \\
3 & 4
\end{array}\right]=\left[\begin{array}{ll}
2 & 4 \\
7 & 10
\end{array}\right]}
\end{aligned}
$$
参考资料
https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95
https://www.shuxuele.com/algebra/matrix-multiplying.html
矩阵乘法java代码
1 | /** |
打印矩阵乘法运算
1 | private static void printmatrixMul(int[][] A, int[][] B) { |
其他方法
1 | /** |
矩阵打印相关
1 | /** |
测试1
$$
C=A B=\left(\begin{array}{lll}
5 & 2 & 4 \\
3 & 8 & 2 \\
6 & 0 & 4 \\
0 & 1 & 6
\end{array}\right)\left(\begin{array}{ll}
2 & 4 \\
1 & 3 \\
3 & 2
\end{array}\right)=\left(\begin{array}{cc}
24 & 34 \\
20 & 40 \\
24 & 32 \\
19 & 15
\end{array}\right)
$$
1 | int[][] A = { { 5, 2, 4 }, { 3, 8, 2 }, { 6, 0, 4 }, { 0, 1, 6 } }; |
运行结果
1 | |5 2 4| |
测试2
$$
\left[\begin{array}{lll}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right] \times\left[\begin{array}{cc}
7 & 8 \\
9 & 10 \\
11 & 12
\end{array}\right]=\left[\begin{array}{cc}
58 & 64 \\
139 & 154
\end{array}\right]
$$
1 | int[][] A = { { 1, 2, 3 }, { 4, 5, 6 } }; |
运行结果
1 | |1 2 3| |
测试3
$$
\begin{aligned}
&{\left[\begin{array}{ll}
1 & 2 \\
3 & 4
\end{array}\right] \times\left[\begin{array}{ll}
2 & 0 \\
1 & 2
\end{array}\right]=\left[\begin{array}{ll}
4 & 4 \\
10 & 8
\end{array}\right]}
\end{aligned}
$$
$$
\begin{aligned}
&{\left[\begin{array}{ll}
2 & 0 \\
1 & 2
\end{array}\right] \times\left[\begin{array}{ll}
1 & 2 \\
3 & 4
\end{array}\right]=\left[\begin{array}{ll}
2 & 4 \\
7 & 10
\end{array}\right]}
\end{aligned}
$$
1 | int[][] A = { { 1, 2 }, { 3, 4 } }; |
运行结果
1 | AB= |
11、打印杨辉三角前20行;
1 | public static void main(String[] args) { |
运行结果
1 | 1 |
13、找出两个数组的交集
数组1的元素有: 21,3,33,89,16;
数组2的元素有: 33,78,15,16,48,57
则结果为:33,16
1 | public class HW_13_Intersection { |
运行结果
1 | {33,16} |
2021年07月11日习题
1、输入一个3位的整型数,输入其百位、十位及个位数;
1 | /** |
2、判断一个数是否是素数?
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
参考资料
https://oi-wiki.org/math/prime/
https://blog.csdn.net/adamjy/article/details/23514531
1 | /** |
3、百分制转成等级制( 利用 if 和 swtich 两种语句格式写)
利用if
1 | /** |
利用switch
1 | /** |
5、企业发放的奖金根据利润提成。
企业发放的奖金根据利润提成。利润(I)
低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于 40万元的部,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于 100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
1 | public static void main(String[] args) { |
7、判断101-200之间有多少个素数,并输出所有素数。
与第2题重复了,见第二题
8、计算s=1+2+…+100。
1 | /** |
9、打印出所有的“水仙花数”
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1 | /** |
10 找出1000以内的所有完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
如果一个数恰好等于它的真因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。截至2018年,相关研究者已经找到51个完全数。
性质
所有的完全数都是三角形数。例如:6=1+2+3;28=1+2+3+…+6+7;496=1+2+3+…+30+31;8128=1+2+3…+126+127。
三角形数
第n个三角形数的公式是n(n+1)/2或者(2n+1)^(2)-1/8。
PerfectNumber.java
1 | public class PerfectNumber { |
参考资料
https://baike.baidu.com/item/%E4%B8%89%E8%A7%92%E5%BD%A2%E6%95%B0
http://c.biancheng.net/cpp/html/3324.html
11、求s=a+aa+aaa+aaaa+aa…a的值
其中a是一个数字。例如2+22+222+2222+22222
(此时 共有5个数相加),几个数相加有键盘控制。
1 | /** |
12、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
1 | public static void main(String[] args) { |
运行结果:
1 | 2/1 + 3/2 + 5/3 + 8/5 + 13/8 |
13、一个5位数,判断它是不是回文数。
14、输入一个数,判断它是不是回文数。
设n是一任意自然数。若将n的各位数字==反向排列==所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
注意:
1.偶数个的数字也有回文数124421
1 | /** |
测试:输出10到10000内的所有回文数
1 | boolean isNotFirst = false; |
运行结果:
1 | 11,22,33,44,55,66,77,88,99,101,111,121,131,141,151,161,171,181,191,202,212,222,232,242,252,262,272,282,292,303,313,323,333,343,353,363,373,383,393,404,414,424,434,444,454,464,474,484,494,505,515,525,535,545,555,565,575,585,595,606,616,626,636,646,656,666,676,686,696,707,717,727,737,747,757,767,777,787,797,808,818,828,838,848,858,868,878,888,898,909,919,929,939,949,959,969,979,989,999,1001,1111,1221,1331,1441,1551,1661,1771,1881,1991,2002,2112,2222,2332,2442,2552,2662,2772,2882,2992,3003,3113,3223,3333,3443,3553,3663,3773,3883,3993,4004,4114,4224,4334,4444,4554,4664,4774,4884,4994,5005,5115,5225,5335,5445,5555,5665,5775,5885,5995,6006,6116,6226,6336,6446,6556,6666,6776,6886,6996,7007,7117,7227,7337,7447,7557,7667,7777,7887,7997,8008,8118,8228,8338,8448,8558,8668,8778,8888,8998,9009,9119,9229,9339,9449,9559,9669,9779,9889,9999 |
15、输入2个正整数m,n,求其最大公约数和最小公倍数。
参考资料
辗转相除法 求最大公约数
https://zhuanlan.zhihu.com/p/31824895
辗转相除法, 又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。它是已知最古老的算法, 其可追溯至公元前300年前。
这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。
有了这条定理,求出最大公约数就简单了。我们可以使用递归的方法来把问题逐步简化。
首先,我们先计算出a除以b的余数c,把问题转化成求出b和c的最大公约数;然后计算出b除以c的余数d,把问题转化成求出c和d的最大公约数;再然后计算出c除以d的余数e,把问题转化成求出d和e的最大公约数……
以此类推,逐渐把两个较大整数之间的运算简化成两个较小整数之间的运算,直到两个数可以整除,或者其中一个数减小到1为止。
求最小公倍数
两个正整数A、B,他们的最大公约数和最小公倍数的乘积就等于这两个数的乘积(A*B)。
最小公倍数=(A*B)/最大公约数
最小公倍数=两整数的乘积÷最大公约数
程序 辗转相除法求最大公约数
1 | public class GreatestCommonDivisor { |
https://baike.baidu.com/item/%E6%9C%80%E5%A4%A7%E5%85%AC%E7%BA%A6%E6%95%B0
16、请编程序打印出以下数列:1、1、2、3、5、8、13、…的前40项。每行输出4个数。(斐波那契数列)
https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0
$$
\begin{cases}
F_{0}=0 \\
F_{1}=1 \\
F_{n}=F_{n-1}+F_{n-2} (n \ge 2)
\end{cases}
$$
https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97
斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。首几个斐波那契数是:
1 | 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ,610, 987 |
特别指出:0不是第一项,而是第零项。
求斐波那契数列第n项 递归实现
1 | /** |
求斐波那契数列第n项 循环实现
1 | /** |
缓存已经计算过得斐波那契数列的项
下次遇到已经计算过斐波那契数列项的直接返回,没有计算过得才计算。
1 | /** |
测试
1 | // 打印前40项斐波那契数列 |
运行结果
1 | 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155 |
17、输入x值,按照公式计算cos(x)的值,直到最后一项小于10^(-6)为止。
$$
\cos (x)=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}-\frac{x^{6}}{6!}+…
$$
特殊cos值
$$
\cos 30^{\circ}=\cos \dfrac{\pi}{6}=\dfrac{\sqrt{3}}{2} \approx 0.8660254038
$$
$$
\cos 45^{\circ}=\cos \dfrac{\pi}{4}=\dfrac{\sqrt{2}}{2} \approx 0.7071067812
$$
$$
\cos 60^{\circ}=\cos \dfrac{\pi}{3}=\dfrac{1}{2}=0.5
$$
1 | private static double cos(double x) { |
测试
1 | System.out.println(cos(Math.PI / 6)); |
运行结果:
1 | 0.8660254042103523 |
18 、输入2个正整数m,n,求其最大公约数和最小公倍数。
1 | /** |
测试
1 | int a, b, gcd; |
运行结果
1 | 5和10的最大公约数为:5,最小公倍数为:10 |
19、编写一个程序,求如下值:
$$
1-\dfrac{1}{2}+\dfrac{1}{3}-\dfrac{1}{4}+\cdots+\dfrac{1}{99}-\dfrac{1}{100}
$$
1 | public class HW_19_Sum { |
运行结果:
1 | 1.0 |
20、编写一个程序,求e的值。
$$
e \approx 1+\dfrac{1}{1 !}+\dfrac{1}{2 !}+\cdots+\dfrac{1}{n !}
$$
1 | double e = 1; |
运行结果:
1 | 2.7182818011463845 |
2021年07月11日
bit,Byte
1Byte=8bit
32位系统和64位系统的区别
32位的电脑的内存只能使用2^32Byte的内存,也就是32位的电脑最多使用4GB的内存条。
32位处理器一次只能处理32位,也就是4个字节的数据;而64位处理器一次就能处理64位,即8个字节的数据。 如果将总长128位的指令分别按16位、32位、64位为单位进行编辑的话:32位的处理器需要4个指令,而64位处理器则只要两个指令。 显然,在工作频率相同的情况下,64位处理器的处理速度比32位的更快。
内存以字节编址
指针的大小都是一样的
编码 原码 反码 补码
第一位表示符号, 其余位表示值.
比如如果是8位二进制:
1 | [+1]原 = 0000 0001 |
反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
补码
补码的表示方法是:
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
补码的补码就是原码
[+17]补码+[-5]补码=
[+17]补码+[-25]补码=
计算机数值范围8位机器:
-128~+127
-0(指代位-128)
8位机器:
+127+1=-128
32位机器的数值范围
-2^(31)~2^(31)-1
32位机器上最小数-2等于多少。
自己写个框架,然后实现,面试好吹牛。
计算机如何表示浮点数
数据类型
int
float
double
char
ASCII码
A-Z
a-z
0-9
声明变量
int m
变量命名规则:
C语言变量名命名规则
- 只能取字母,数字,下划线
- 不能以数字开头
- 大小写敏感
Java语言
- 只能取字母,数字,下划线,美元符号$
int m=60;
m=62
问
m=?
答:62
一次定义多个变量
1 | int a,b,c; |
算数运算符号
加+,减-,乘*,除/,求余数%
输入命令行
Scanner scanner=new Scanner(System.in);
m=scanner.nextInt();
输出
System.out.println();
System.out.println(“Hello”+m);
eclipse使用示例
打开
创建工程
创建包
创建主类
编程题,输入一个三位数,颠倒顺序
颠倒整数顺序
Upside down integer order
eclipse自动补全
eclipse字体调整
逻辑和条件
条件运算符
与&&、或||,非!
如下代码中:
10<=a<=30
c语言中是没有问题的
java语言中是不可以的
(10<=a)<=30
(boolean)<=int
不同类型无法比较,所以错误
条件式:
1 | if(条件式){ |
1 | if(){ |
错误写法
1 | if(xxxx);{ |
编程题,闰年判断闰年
- 能被4整数不能被100整除
- 能被400整除
编程题 整数百分数,转等级
百分制分数转换为等级制分数
Percentage score conversion to a grade score
编程题switch 整数百分数,转等级
编程题 输入年月日 判断它是该年的第几日 判断是否为闰年
循环结构
1 | for(表达式1;条件式;表达式2){ |
错误写法:
1 | for(表达式1;条件式;表达式2);{ |
编程题
求阶乘
n!=n*(n-1)…32*1
s=1
s=s2
2=s3
Factorial.java
1 | /** |
1 | 输入n:2 |
1 | 输入n:3 |
1 | 输入n:35 |
求水仙花数(100~999)
所谓的水仙花数是指:一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例如153,370,371,407等都是水仙花数,就拿153来说,153 = 111 + 555 + 333.
输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 1^3 + 5^3 + 3^3。
Narcissistic number
153=1^3+5^3+4^3
i++和++i的区别
while循环
判断一个数是否为素数
什么时候用for,什么时候有while
循环次数已知的就用for循环,
遍历次数为未知的就用while循环。
单行注释
块注释
编程题
计算根号a
编程题
pi/4=1-1/3+1/5-1/7+1/9-…+1/n
pi/4=
-1/3+1/5-1/7+1/9-…+1/n
-3=21+1
5=22+1
-7=2*3+1
(-1)^(i%2)/(2*i+1)
当算到1/n<10^(-6)=1e-6
丑数
把只包含质因数2,3,5的数称作丑数
1是第一个丑数。
1 | /** |
素数
问号表达式
1 | (条件表达式1)?值1:值2 |
for循环中的变量尽量在循环体内定义。
拆分整数
数组
a[下标]
定义数组
1 | int a[] |
内存划分
栈空间
栈空间占用的内存,生命周期结束则回收。
堆空间
堆空间的内存由垃圾回收机制回收。
new运算符
堆空间 的内存由new运算符来申请。
new申请的空间,对于数值类型的数据,都赋值为0
内存图
圆圈表示栈空间,方块表示堆空间。
浅拷贝
1 | int[] a=new int[10]; |
数组长度
1 | a.lenth |
编程题 在数组中查找最大值最小值
从键盘中输入10个数,并找出最大最小值。
1 | public class FindMaxAndMinInArray { |
动态初始化
1 | int[] a=new int[10]; |
静态初始化
1 | int a[]={1,2,3,4,5,6}; |
编程题 逆序存储到数组
1 | /** |
编程题 逆序存储静态数组,首位交换
1 | public class AxisymmetricStaticArray { |
编程题 十进制转为二进制,顺序输出
十进制整数转换为二进制整数十进制整数转换为二进制整数采用”除2取余,逆序排列“法。
具体做法是:
用2整除十进制整数,可以得到一个商和余数;
再用2去除商,又会得到一个商和余数,
如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
789=1100010101(B)
算式 | 余数 | 顺序 |
---|---|---|
789/2=394 | 余1 | 第10位 |
394/2=197 | 余0 | 第9位 |
197/2=98 | 余1 | 第8位 |
98/2=49 | 余0 | 第7位 |
49/2=24 | 余1 | 第6位 |
24/2=12 | 余0 | 第5位 |
12/2=6 | 余0 | 第4位 |
6/2=3 | 余0 | 第3位 |
3/2=1 | 余1 | 第2位 |
1/2=0 | 余1 | 第1位 |
1 | /** |
nvm for windows安装使用详解
下载nvm for windows
进入如下地址下载:
https://github.com/coreybutler/nvm-windows/releases
或者:
1 | https://github.com/coreybutler/nvm-windows/releases/download/1.1.7/nvm-setup.zip |
安装到C盘
nodejs注意要安装到C盘,如果安装到其他盘,可能会造成无法切换nodejs版本。
修改setting.txt 添加下载node和npm的淘宝镜像
安装完后打开setting.txt添加以下内容,切换node和npm的下载镜像:
1 | node_mirror: https://npm.taobao.org/mirrors/node/ |
安装后npm -v无显示的情况
如果不使用淘宝镜像的话,安装的时候,可能只安装上node.exe,安装不上npm.exe。
使用nvm
查看可安装版本
1 | nvm list available |
运行效果:
1 | PS C:\\Users\\haha> nvm list available |
参看可切换的版本
1 | PS C:\\Users\\haha> nvm list |
使用特定版本
1 | nvm use 12.22.3 |
此时会跳出两个窗口,都点确认,就可以切换了。
设置npm的下载的淘宝镜像
1 | npm config set registry https://registry.npm.taobao.org --global |
设置npm的全局安装路径
1 | npm config set prefix "G:\dev2\nvm\nodejs\node_global" |