为了督促备考而做的笔记, 供参考复习使用.
4.15之前
-
数据库管理系统是系统软件,不是系统.
-
若有
double a=22;int i=0,k=18;
, 则i=a%11;
不符合C语言规定.
因为取模运算符%的左右两个操作数均应为整数.
我们知道整形可以被自动转换为float或者double,但是反过来是不行的,所以你要是想用上面的语句的话,需要加强制类型转换,即:i=(int)a%11;
-
程序流程图中带箭头的线段表示控制流,数据流程图中带箭头的线段表示数据流,容易弄混,切记
-
二叉树的遍历分为以下三种:
先序遍历:遍历顺序规则为【根左右】
中序遍历:遍历顺序规则为【左根右】
后序遍历:遍历顺序规则为【左右根】 -
软件生命周期.
在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表
-
对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好
-
自然连接就是把两个表中相同属性"衔接",属性值相同的就保留下来,如果属性值不相同则去掉,注意,连接后的表的属性值个数为原来两个表的属性之和减去公共属性的个数,如果两个表没公共属性则自然连接就是笛卡尔乘积
-
z=x++,y++,++y;
因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)
-
char a='A'+'8'-'4';
得到a是E,虽然数字对应ASCII码不是它本身,但是’8’-'4’肯定是4没跑了
#include <stdio.h>
int main void()
{
int x=1,y=0;
if(!x) y++;
else if (x==0)
if (x) y+=2;
else y+=3;
printf("%d\n",y);
return 0;
}
输出结果为0!! 因为else总和最近的if配对(还以为在迷惑我)
- 全局变量的作用域是从声明处到文件的结束,由具体定义位置和extern说明来决定范围
- 可以用typedef将已存在的类型用一个新的名字来代表。关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型
- 在变量作函数参数时,所进行的值传送是单向的。即只能从实参传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,实参并不变化,两者的终值是不同的。而当用数组名作函数参数时,情况则不同。由于实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。
- rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。
- continue语句只用于循环语句,不用于switch语句。在某个循环包含的switch语句中的continue语句,将导致进入下一次循环。(使用break将跳出本switch但仍将执行for循环的剩余语句;使用continue则直接跳至i++进行下一次for循环执行)
- exit函数中的实参是返回给操作系统,表示程序是成功运行结束还是失败运行结束。对于程序本身的使用没有什么太实际的差别。习惯上,一般使用正常结束程序exit(0)。 exit(0):正常结束程序运行,exit(非0):非正常结束程序运行。
- C语言在函数间传递参数时,形参的变化是不会改变实参的值的。因为形参与实参的内存单元不同,所以,只是值传递,并不能直接进行值修改。
- C语言中的变量
auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。
register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫"寄存器变量",只有局部自动变量和形式参数可以作为寄存器变量。
extern:外部变量(即全局变量), 是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。
static:静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。 sizeof(p)
,计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。
#include <stdio.h>
#define PT 3.5 ;
#define S(x) PT*x*x ;
main()
{ int a=1, b=2; printf("%4.1f\n" , S(a+b)); }
输出结果是?
宏定义不是C语句,末尾不需要有分号。所以语句printf("%4.1f\n" , S(a+b));
展开后为printf("%4.1f\n" ,3.5;*a+b*a+b;);
所以程序会出现语法错误。
- 单引号也能引多于一个字符的字符串,结果与编译器有关,不是字符串中的第一个字符的值。
⬇下图参考自…
- 除了C++的引用类型参数,C/C++的任何函数的形式参数都是局部变量,和普通的函数内自动变量一样是自动存储类对象,具有自动存储期(一般实现中也在栈上),在退出函数作用域时自动被释放,区别只不过在参数列表中通过实参按值传递(复制)给形参进行初始化,而不是在函数体内初始化而已。
- 实现保留三位小数,第四位四舍五入的程序
x=(int)(x*1000+0.5)/1000
fread(void *buffer, size t size, size t count, FILE *stream);
功能是从一个文件流中读数据,读取count个元素,每个元素size字节,如果调用成功返回count。buffer :用于接收数据的内存地址,大小至少是 size*count 字节;size :单个元素的大小,单位是字节;count :元素的个数,每个元素是size字节;stream :输入流。- 预处理命令是以“#”号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写。语言的预处理能够实现宏定义和条件编译等功能。
- C语言在函数间传递参数时,形参的变化是不会改变实参的值的。
- malloc动态内存申请
int s=0;
void *p;
while (p=malloc(100*1024*1024))
{
s++;
}
printf("向系统申请了%fG的空间\n",s*100/1024.0);
free(p);
- 位运算符
中文名称 | 英文名称 | 运算符 |
---|---|---|
与 | and | & |
或 | or | | |
异或 | xor | ^ |
取反 | not | ~ |
或非 | nor | |
与或 | nand |
- 带参数的宏就像个函数