1、数值在计算机存储是按补码进行存储,整数的补码是它本身,负数的补码是按位取反再加1 ,取反的时候符号位是不取反的要保留。
1、非结构化的语言 早期的basic fortran 程序的流程可以随意跳转,难以阅读和维护
2、结构化语言 规定程序必须 由 具有良好特性的基本结构(顺序结构、分支结构、循环结构)构成,程序中的流程不允许随意的跳转,程序总是由上而下顺序执行各个基本结构的。
以上的非结构化语言和、结构化语言 都是基于过程的语言,在编写程序时 需要具体指定 每一个过程的细节。在实践的发展中,人们又提出了面向对象的程序设计方法。程序面对的 不是过程的细节,而是一个个对象,对象是由数据 以及对数据进行的操作组成的。面向对象程序设计。对象的使用。
3、C语言的祖先是BCPL,最初的C语言只是为了描述和实现UNIX 操作系统提供的一种工作语言而设计的。
4、C语言的特点:语法限制不太严格程序设计自由度大。C语言允许直接访问物理地址 能进行bit操作。可移植性好,生成目标代码质量高,程序执行效率高。
5、C语言本身不提供 输入输出语句。输入和输出的操作是由函数库函数scanf 和 printf 等函数来完成的。
6、计算机不能直接识别和执行用高级语言写的指令,必须用编译器 把C语言的程序翻译成二进制形式的目标程序,然后再将该目标程序与系统的函数库以及其他目标程序连接起来,形参可执行的目标程序。在用编译系统对程序进行编译时,自动包括了预编译和正式编译两个阶段。
7、经过编译所得到的二进制目标文件,还不能够工计算机直接执行。一个程序可能包含若干个源程序文件,而编译时以源程序文件为对象的一次编译只能得到与一个源程序文件想对应的目标文件,它只是整个程序的一部分,必须把所有经过编译的目标文件,连接装配起来,再与函数库相连接 才能成为可执行目标文件。
8、一个程序只要包括以下两个方面:对数据的描述就是数据结构。对操作的描述就是算法。为解决一个问题采取的方法和步骤就是算法。算法的特性:有穷性、确定性、和有效性。算法的描述: 用自然语言表示算法、用流程图表述算法、用伪代码表示算法。
9、结构化程序设计方法:自顶向下,逐步细化;自下而上,逐步积累。
10、数据分为 常量和变量。在程序运行过程中其值不能改变的称为常量,有 整型常量 、实型常量(1.2 12.34e3)、字符常量(普通字符、转义字符、字符串常量)、符号常量(#define A 2)。
11、变量(有名字的一个存储单元,存放数据)、常变量(拥有变量的基本属性,有名字有类型,占存储单元,只是不允许改变其值)
12、数据类型。
13、字符、字符变量。浮点型数据(存储小数)在C语言中实数是以指数的形式存储在内存中的。3.1416 ,3.14159 * e1,0.314159 * e2,由于小数点位置移动,所以称为浮点数。规范化的指数形式 0.314159 * e2,在程序以指数的形式输出小数时,必然时规范化的输出。
14、C语言中实型常量都是按双精度浮点型的常量。float a = 3.14159f; ,long double a = 3.14159L;
15、运算符。
16、赋值过程中的类型转换,隐形类型转换,显形类型转换。
17、输入输出概念。
18、putchar(),getchar(),gets(),puts()
19、内存分配 malloc(),字符串函数strcat()、strcmp()、strcpy()
20、c99增加的逻辑型变量 bool。
21、函数定义和调用 形参和实参。实参和形参之间是值传递。函数类型决定返回值的类型。
22、函数的递归调用。一个函数在执行过程中,直接或者间接的调用本身。
23、局部变量和全局变量:在函数之内定义的变量 是局部变量,在函数之外定义的变量是全局变量。
24、静态局部变量。一个由C/C++编译的程序占用的内存分为以下几个部分:堆、栈、全局区、常量区、代码区。
25、内部函数:如果一个函数只能够被本文件中的其他函数调用称为内部函数。static。
26、地址,指针,指针变量。 一个变量的地址称为该变量的指针。指针变量用来盛放指针。
27、匿名枚举、和匿名联合、匿名结构体。
28、typedef 声明新 类型名。
29、程序文件 和数据文件。根据数据的组成形式,数据文件可分为ASCII 文件,和二进制文件。数据在内存中是以二进制形式存储的如果不加转换的输出到外存 就是二进制文件(映像文件)。如果在外存上以ASCII 代码存储,则需要在存储前 进行转换,及文本文件,每一个字节放一个字符的ASCII代码。
30、文件缓冲区:系统自动的为每一个正在使用的文件开辟文件缓冲区。文件类型指针。 fopen()、fread() fwrite()fclose() fputc() fgetc()fgets() fputs()fprintf() fscanf()
31、随机读写文件、fseek()。
一、关于const跟指针
1、指向const对象的指针 const int *p;对象的常指针 int * const p;
2、赋值跟类型检查
const 限定词是很严格的,没有强调const的地方是字符数组的字面值。
char*cp = "sdff";编译器将接受它而不报错,从技术讲这是一个错误。
3、函数的参数和返回值
当函数的参数是const的,是创建者的工具,避免值被修改,而不是调用者的工具。
对函数的返回值来说,const int go(),对于内部类型的的按值返回是否是一个const是无关紧要的,因为编译器已经不让它成为一个左值。
注:当用户处理自定义类型的时候按值返回常量是很重要的。如果一个函数按值返回一个类对象为const时,那么这个函数的返回值不能当作一个左值。
有时候,在求表达式值的期间,编译器必须创建临时对象。他们也需要存储空间,也必须能够构造和销毁,编译器决定他们存在的时间和细节。对于临时量自动的转换为常量。
对按值返回对象的函数的调用式直接修改,编译虽然可以通过,但对于临时对象的修改是错误的,临时对像在表达式编译过之后,临时对象也将被清理。
当函数返回某一个值时,会先在临时空间中生成对应的函数返回值的类型,然后可以利用相关变量进行接收。
指针的分析,从变量名处起,根据运算符的优先结合一步步分析
1、一级指针 int *p; P与*结合说明p是一指针,指向整形
2、二级指针int* *p; p与[]结合说明是一个指针,指向int*,
3、指针数组,int *p[3];
4、数组指针,int (*p)[3];
5、函数指针,int (*p)(int a);
6.函数指针数组,int(*p[5])(int a);
7.数组的引用,int (&p)[5];
算法
1、算法; 定义解决问题的方法,一系列定义明确的操作。
1> 复杂度:时间复杂度、空间复杂度
时间复杂度:
并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。常见的时间复杂度有:常数阶O(1),对数阶 O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),..., k次方阶O(nk),指数阶O(2n)。
空间复杂度:
一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。
(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。
一个算法所需的存储空间用f(n)表示。S(n)=O(f(n)) 其中n为问题的规模,S(n)表示空间复杂度。