1.计算时转换:
int * float ----> 均转为double计算,结果double
char * int ----> char转为int计算,结果int
char * double ----> char转为double计算,结果ouble
int ---> float ---> double :低精度可以自然转为高精度;反之,高精度需强转为低精度;
2.定义数组:
int a[5] = {1,2,3,4,5}
3.冒泡算法:
思想:每次将相邻的两个数进行比较,将小的放到前面,就是沉大法。一趟下来,可将最大的/最小的沉出来。
eg:5个数,要比较4躺,第1趟:比较4次,将大的沉下去;第2躺:比较3次;
算法实现:
for(i=0; i<4; i++){
for(j=0; i<4-i; j++){
if(a[j] > a[j+1]){
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
eg:n个数:
for(i=0; i<n-1; i++){
for(j=0; i<n-1-i; j++){
if(a[j] > a[j+1]){
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
4.二维数组:
int a[3][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }
第1维的长度可以省略,第2维的长度不能省略;
eg:int a[][4] = {} (☑️) int a[4][] = {} (❌)
5.二维字符数组,可用于打印***
eg:打印下面的图形:
*****
****
***
**
*
char a[5][5] = {{'*''*''*''*''*'}, {'*''*''*''*'}, {'*''*''*'}, {'*''*'}, {'*'}}
for(i=0; i<5; i++){
for(j=0; j<5; j++){
printf("%c",a[i][j]);
}
printf("\n"); -----换行
}
6.字符串的一些函数:
strcat (str1, str2) 将2连接到1中;
strcpy (str1, str2) 将2复制到1中;
strcmy (str1, str2) 将1与2比较; 1>2 :正数; 1=2 :0 ; 1<2 :负数;
strlen (str) str的字符长度;
7.函数使用时首先要声明:
声明的作用:1》在主函数中调用时,能够识别那是函数名;
2》便于检查在调用时传递的参数类型及个数是否对;
8.递归调用: 函数中调用它本身
====>第1个人年龄位10岁,第2个比前一个大2岁,......第5个比前一个大2岁,求第5个人的年龄的递归;
int age(int n){
int score;
if( n == 1 ){
age = 10;
}else{
score = age(n-1) + 2;
}
return score;
}
9.递归的生活应用: 汉娜塔,移盘子问题
思路:将n个盘子从A移到C;
1》将A上n-1个盘子借C移到B;
2》将A座上剩下一个盘子移到C;
3》将n-1个借A从B移到C;
void hanoi(int n, char A, char B, char C){
void move(char x, char y); ----->声明函数
if(n == 1){
move(A, C);
}else{
hanoi(n-1, A, C, B);
move(A, C);
hanoi(n-1, B, A, C);
}
}
move(char x, char y){
printf(" %c ----> %c ", x, y) ----->移动为打印
}
10.自动变量,静态局部变量区别:
自动变量:调用后就自动释放的存储空间;
静态局部变量:调用结束后不消失而继续保留上一次结束的值;
11.指针:
int *p ;
p = &a[0] ; 将 a[0] 元素的地址赋值给p
===》 int *p = &a[0] ;
===》 int *p = a ; 首地址
指针的数据交换:
void swap(int *p1, int *p2){
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
---》交换后,并不会改变原先指向的a,b值,只是改变了其指向的地址;
12.指针加减:
p+1:指向同一数组的下一个元素 ;
p-1:指向同一数组的上一个元素 ;
13.排序:选择排序算法:
1》 找出一个最小的数,交换到最前面;
2》 再从剩下的里面,再找一个最小的,交换到剩下的数最前面;
思路:1》将第1个数作为基数,命令它最小;
2》与后面的数进行一一比较,若比基数小,那么记录下它的序号,直至比较完为止;
3》这一趟比较完之后,将记录下最小的数的序号交换到最前面;
void select_sort(int a[], int n){
for(int i=0; i<n-1; i++){
int min_index = i;
for(j=i+1; j<n; j++){
if(a[j] < a[min_index]){
min_index = j;
}
}
if(i != min_index){ -->当min_index变了是,说明后面有比第1个基数小的数;
int temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
14.优先级:
++ > || > =
eg: int x=1 , y=1 , c = 0 ; c = x++ || y++ 输出x,y,c
先x++,再||, x = 2,c=1,y=1;
15.引用与指针区别?
1》初始化:引用必须初始化;指针不必;
2》是否改变值:引用初始化以后不能被改变;指针可以改变所指的对象;
3》能否空值:引用不能指空值;指针可以;
16.大小写字母的ASCII码转换
*C -= 'A' - 'a'; 因为: 'A'=65 'a' = 97 'A' -'a' = -32
所以:*C -= -32
*C = *C -(-32) = *C +32 即:将大写字母变成小写字母的操作
17. extern:扩展作用,将变量的作用扩展到其他文件中使用;
18. 运算符的优先级: ! > 算术 > 关系运算符 > && > || > 赋值
19. 大小写字母比较: 小写字母a 比大写字母A 大 32 ,即:a=97,A= 65
20.访问字符串中的每个字符:
1》访问:
StringBuffer str = new StringBuffer("abcde");
Char c = str.charAt(i);
2》判断c是不是小/大写:
Charccter.isLowerCase(c);
Charccter.isUpperCase(c);
3》将c转换为小/大写:
Charccter.toLowerCase(c);
Charccter.toUpperCase(c);
4》若要在内部改变字符,要用StringBuffer,不能用String
21. final 与 static 区别:
final:修饰变量,类,方法; 不可被修改,不能被继承;
static:修饰变量,类,方法;可通过类名,变量名,方法名直接调用;值可被修改,修改后,其他人再使用时,为修改后的值;
22.长度计算:
sizeof() :计算分配的内存长度,包含"\0"结束符;
strlen() :计算字符串长度;
eg: "one" sizeof() = 4 ; strlen() = 3 ;
23.数值进制之间的转换:
1》十进制 ----> 其他: 除基取余,从下到上;(小数:乘基取整,从上到下);
2》二进制 ----> 八 ---> 十六 :8421码,不够补0;
3》十六 ----> 十 : 16的x次方 eg:3D8
4》八 ----> 十 : 8的x次方 eg:92
5》二 ----> 十 : 2的x次方 eg:110
24. 原码,补码,反码:
1》正数: 补码,反码 都是本身;
2》负数: 反码: 除符号位外,其余位取反;
补码:反码+1;