878考研程序设计知识点查漏补缺

3. NULL = 0, EOF = -1,'\0' = 0

5. 合法用户定义标识符:①只能由字母,数字,下划线组成;②第一个字符是字母或下划线;③长度限制63之内;④区分大小写;⑤不能是关键字,可以是预定义标识符(printf,sort之类的)

6. 取模运算只能是整数

7. 非零数表示逻辑真

8. sizeof("hello") = 6,字符串hello的存储空间自动赋值’\0‘

9. int **p[10], p是一个数组

10. printf(%d,"abc"),以整型输出字符串的地址

11. char s[] = "chain"; char *p = s; 问:s数组的大小,和p所指向的字符串长度相等。--不等,字符串的长度计算相当于strlen(),不计'\0'。而数组的大小相当于sizeof(),计入'\0'。

	char str[] = "h";
	printf("%d",sizeof(str));     //输出2
    
    char str[] = "hello\tworld\n";
	printf("%d,%c",sizeof(str),*(str+10)) 
//输出13,d因为\t输出的时候是按照五个空格输出,但在字符数组中只存储一个位置

'\0'等价0等价NULL,与'0'不相等(他们对应的Ascll不同)

有变量定义 char **pp[10];则以下描述是正确的:pp是一个指针,pp是一个指向字符数组的指针,pp是数组名。

12. NULL在stdio.h中被定义

13. 在ANSI C/C89/C90 TC环境下,char 1; int 2; float 4; 说明:C89是C语言版本号,TC是编译器(比较古老了)

14. char s[10] = "abcd"; 在'\0'后面的数组元素自动被计算机定义为'\0';
上机实验:c语言对定义好,未赋初值的元素不会自动赋值:例如 int i, a[10]; 但是用一种情况会赋值,如:int a[10] = {1}; 你只要赋了一个以上的值,后面会自动被赋值为0;
上机实验:虽然对于局部变量的int i,c语言不会自动赋值,但是对全局变量的int i和静态变量static int i; 计算机自动对其赋值为0;

15. x++, ++表示自增,类似(-x)++,(a*x)++都是错的,

只有 . -> () [] 是爹

++和* - 都是单目,单目从右向左

    int a[] = {1,3,5,7,9};
	int *c = a+2;
	printf("----%d",*c++);    //输出5,因为++在后,在赋值语句中,先赋值再++
	//此时c指向a + 3 
	printf("--%d ",*++c);		//输出9,因为++在前,先加再赋值 

	int k,m=1;
	k=-m++;
	printf("%d",k);	//输出-1 ++在后先用后加。

16. 表达式'A'+'B'的类型为int
17. c语言源程序文件后缀名是.c,经编译器编译后生成.obj文件(二进制文件,目标文件,不能运行),后经过连接程序把.obj文件与c语言提供的各种库函数连接起来生成 .exe可执行文件(二进制)
c语言中的非执行语句不会被编译,不会生成二进制指令语言

18. c语言程序算法可以没有输入,但必须要有输出

19. stdout 是文件标准输出流,数据类型是FILE文件类型,用于文件输出函数将内容输出到屏幕上。其头文件stdio.h

20. 指针类型的变量无论是char,int,double,其所占字节数都是8,可以使用sizeof()来测试

#include <stdio.h>

int main() {
    char ch = 'A';
    FILE *file = stdout;
    fputc(ch, file);
    return 0;
}

21. c语言创建一个数组

int *A = (int*)malloc(sizeof(int)*n)    //创建一个动态数组
int *A = new int[n];    //c++创建
LNode *p = (LNode *)malloc(sizeof(LNode))    //创建一个结点
LNode *B = new LNode;    //c++创建

22. 逗号表达式的值,由最后一个表达式决定 

        x = y = 3 等价于 x = (y=3) 表示先将3复制到y,再将y的值赋值给x

        a=2,b=3,c=a+b; 这个表达式的值是5(假设abc已经定义好)

23. \ddd是一个八进制的字符

	printf("%d",'\101');   //65
	printf("%c",'\101');   //A

八进制首位是0,十六进制首位是0x,0X。八进制输入输出是%o,十六进制输入输出是%x,十进制无符号型输入输出是%u

24. 函数 形参值 的传递

void fun(int *a,int b,int &c){
	++*a;
	b++;
	c++;
}
int main(){
	int x=0,y=0,c=0;
	fun(&x,y,z);
	printf("%d,%d,%d",x,y,z);    //x的值会变,y的不变, z的值也会变 
}

24. 单目运算符的执行顺序

int x=0,*y=&x; 
*y++;     //x的值不会变成1,程序会先执行++后执行*,
        //这样会使指针y指向下一个地址,但不会改变y的值。
        //因此,执行完*y++后,x的值仍然是0。

24. puts和gets头文件是stdio.h,strcpy strcmp strlen 需要头文件string.h

25. %md 左边补空格,double输入%lf,输出%f,float 输出,输出都是%f

        %.mf,m位浮点数。

	int i = 2;
	printf("%3d",i);	//输出  2; 
	float k = 3.111;
	printf("&&%0.1f",k);	//输出3.1 

26. 科学计数法:1e-1,60e3都是合法。0.32e,0.32e0.1,0.32e1前面两个非法,后面一个合法,以为e后面不能没有数,且只能是实数。

float x = -121, y,z,w,m,n;
	y = fabs(x);	//取绝对值 
	z = sqrt(y);	//取根号 
	w = pow(y,1);	//取y的次幂,一次幂
	m = exp(1);		//取e的一次幂 
	n = log(m); 	//取e的对数 
	printf("%f,%f,%f,%f,%f",y,z,w,m,n);

27. 二维数组下标

对一个数组:a[3][4]	a[2][-2] = a+2*4+(-2) = a+6 合法 
对一个数组:a[3][2]	a[2][-2] = a+2*2+(-2) = a+2 合法
					a[-2][2] = a+2*(-2)+2 = a-2 非法 

28. 逆拓扑排序:出度为零的顶点优先出(考点)

        注意:要实现拓扑排序,则邻接表不适合,因为每一次删除一个出度为零的顶点,还要删除所有指向它的边,这意味着要遍历所有的结点所以不适合。

        反而如果使用邻接矩阵实现,这只需要找到这个被删除结点所在列,将所在列元素设置为零即可

29. 有关字符函数

    1. strcpy()
    char a[20] = "hello";
	strcpy(a,"wo");
	printf("%s",a); //返回结果wo 说明strcy在复制字符串到 a 数组中时,
					//wo\0都会被一起放到a中。
					//注意:strcpy(a,b),a必须是数组,b可以是数组也可以是字符串
    2. strcat()
	char b[20] = "hello";
	char c[20] = "wo";
	strcat(b,c);
	printf("\n%s",b); //返回结果 hellowo 说明c连接在b的'\0'结束位置。

30. 有关数据类型位数

char是两字节,8位(因为其是大于零,故取值范围是0-255)

31. 常见字符数组定义

正确:
A. char str[] = "abc";
B. char str[10] = "abc"
C. char str[10] = {'a','b','c'}
D. char *p; p = "abc"
错误:
A. char str[10]; str = "abc";   /*解释:第一步定义时,str指向了计算机分配的一块存储区域,
第二步又将str指向了字符串abc的位置。
由于数组的数组名是一个固定的地址,可以看作指针常量,不能随意改变它的值。故错误。*/
B. char str[10] = {"ABCDE"};    //有大括号就别双引号了

32. 打开和关闭文件

        r 只读        ;r++打开,读写

        w 创立,写;w++创立,读写/覆盖

        a 打开,追加;a++打开,读写/追加。

33. 复习文件输入输出函数

34. 平均2月28天,闰年很突出是29天

35. typedef

typedef int (*FP)();	//使用typedef定义一个指向函数的指针类型FP
typedef int ARR[10]; 	//使用typedef定义一个10个元素的整型数组类型ARR, 
ARR a;                    //再用ARR定义一个10个元素的整型数组a
typedef FILE* FP; 		//使用typedef 定义一个文件指针FP 

36杂

	printf(" ","hello"); %u,%s,%x 不会报错,%f会报错 

37 命令行参数:argc,

int main(int argc,char* argv[]){
	printf("%s",Hello);
	printf("%s",argv[1]);
}
//编译连接后,用命令行运行 test word 输出Hello world 
并且argc=2 既是数组元素个数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值