大三上C复习
二进制原码、反码、补码
原码
反码
补码:反码+1
如何从补码到原数:(补码-1)->01对调(表示正负号的不对调)-> 二进制相加
ASCII编码
数字=字符时,其值是该字符对应的ASCII编码
字符串=数字时同理
条件表达式
expr1 ? exp2:expr3; |
if expr1 is True then expr2 else expr3
时间复杂度
数组
1、正确的初始化
int n[5] = {1,2,3,4,5}; |
错误示例:
不要使用超过数组长度的序号:
int a[100]; a[100] = 40; |
虽然长度是100,但序号是[0,99]
2、数组在函数的传递:名称且不带括号
int myArray[24]; |
字符串数组
char string1[] = { 'f', 'i', 'r', 's', 't', '\0' } |
数组的名字就是第一个元素的地址
char *s = "SPEIT"; *s = 'c'; |
在C语言中,字符串常量是不可更改的。s
是一个指向字符串常量 "SPEIT"
的指针,当你尝试修改这个字符串常量中的字符时,会导致错误。
修改的话应定义为字符串数组
char s[]= "SPEIT"; s[0] = 'c'; |
多维数组
二维数组在初始化时一般只确定列的个数
char vowels[][5] = { |
类型强制转换
注意:把值从较高类型转换到较低类型,会引起数据的丢失
(最低类型)bool -> char -> unsigned char -> short -> unsigned short -> int -> unsigned int -> long int ->unsigned long -> float -> double -> long double ;
数值调用和实例调用(Call by Reference)
Call by Reference
void addone(int *n) { |
取地址:&
取值:*
a时=是数组名称,a[1]中的[]其实也是一种取值运算
指针
1、初始化:Initialize pointers to 0, NULL, or an address
2、错误示例:
int *c; |
3、const
int *const myPtr = &x; |
4、b[n] = *(b + n)
5、对一个二维数组同理:
b[m][n] = *(*(b+m)+n); |
6、指针的指针
int (*p)[n]; |
创建了行数不确定,列数为n的数组;指针p指向该数组的第一个值
int *p[n]; |
创建了n个内容为指针的数组;
排序算法
交换函数
void swap(int * A, int i , int j){ |
插入排序 Insertion Sort
算法原理:从数列的第二个数开始到最后一个数进行循环,每一次都将它们与排在它们之前的所有数进行比较,并和所有比它大的数换位
算法代码:
void inssort(int *A, int N){ |
选择排序 Selection Sort
- 算法原理:
- 从未排序部分中找到最小(或最大)元素。
- 将其与当前未排序部分的第一个元素交换。
- 重复上述过程,直到所有元素被排序。
- 算法代码:
void selsort(int *A , int N){ |
冒泡排序 Bubble Sort
- 算法原理
- 从数组的第一个元素开始,逐一比较相邻的两个元素。
- 如果前一个元素比后一个元素大,则交换它们的位置。
- 一次完整的遍历会将当前未排序部分中最大的元素"冒泡"到数组的末端。
- 每次遍历后,末尾的元素已经是排序好的,因此下一次遍历时可以忽略末尾已排序的元素。
- 重复上述过程,直到没有更多的交换,数组已经排序完毕。
- 算法代码
void bubsort(int *A , int N){ |
快速排序 Quick Sort
- 算法介绍:使用分治法(Divide and Conquer)策略,将问题分解为更小的子问题并逐步解决。快速排序的基本思想是通过一个“基准值”将数组分为两部分,使得一部分元素都小于基准值,另一部分元素都大于基准值。然后递归地对这两部分继续进行排序,最终实现整体的排序。
- 算法原理:
- 选择基准元素:从数组中选择一个基准元素,常见的选择方式有选择第一个元素、最后一个元素、随机选择一个元素或选择中间元素等。
- 分区操作(Partition):将数组中的元素重新排列,使得基准元素的位置固定。所有比基准元素小的元素都移到基准元素的左侧,而所有比基准元素大的元素都移到基准元素的右侧。
- 递归排序:对基准元素左侧和右侧的两个子数组递归地进行快速排序。每次递归操作将数组分割成更小的子数组,直到子数组只有一个元素或为空,此时数组已经排序完毕。
- 算法代码
void quisort(int *A,int start,int end){ |
