------------------------预祝考试顺利,成功上岸------------------------

//--------------理论部分--------------//

一、进制转换

1、八进制:以0作为八进制数的前缀,取值为0~7,例如:

012(八进制) --> 十进制:2*8^0+1*8^1=10

023(八进制) --> 十进制:3*8^0+2*8^1=19

换算方法:

例如八进制012,换成十进制为:第一位数2乘8的零次方+第二位数1乘8的一次方等于10

2、十六进制:前缀为0X或0x作为十六进制的开头,取值为0~9,A~F或a~f,例如:

0x09(十六进制)--> 十进制:9

0x0C(十六进制)--> 十进制:12

0x3B(十六进制)--> 十进制:11*16^0+3*16^1=59

换算方法:

例如十六进制0x3B,B是11,换成十六进制为第一位数B乘16的零次方+第二位数3乘16的一次方,等于59

二、数据类型及常量变量

char1字节
short2字节
int4字节
long 4字节
long long8字节
float4字节
double8字节

 

1、sizeof 是关键字,是操作符,用于计算类型或者变量所占空间的大小

2、被const修饰的变量是不能改的,称为常变量.  其本质还是变量

3、#define 定义的标识符常量不可更改

4、字符串在结尾的位置隐藏了一个\0的字符,求字符串长度时不会计算\0,字符串的结束标志是\0

        char dog[] = "wang\0miao";
        求字符串大小:printf("%d\n", sizeof(dog));      //输出结果是10,分别是:w a n g \0 m i a o \0
        求字符串长度: printf("%d\n", strlen(dog));        //输出结果是4,因为遇到\0结束

5、#define定义常量的使用易错点:

#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
	int a = 5, b = 2, c = 3, d = 3, t;
	t = MAX(a+b,c+d) * 10;
	printf("%d\n", t);
}

在该代码中,t=MAX(a+b,c+d) * 10,其实是t=(a+b)>(c+d)?(a+b):(c+d)*10

所以最终结果是7

三、转义字符

\n 换行       

\\ 反斜杠,转义\        

\ddd  ddd表示三个八进制的数字  打印出来的是转换为十进制数对应的ASCII码值的字符

\xdd  dd表示两个十进制的数字

易错点:

printf("%c\n",'\109');          //9不属于八进制,所以不在\ddd转义字符当中

所以只有\10被转义

四、操作符与关键字

1、=是赋值运算符,==是关系运算符

if(x==1)        正确写法

if(x=1)        错误写法

2、float a =9 / 2;

     a的结果是4;想要得到4.5,需被除数或除数任意一个加上小数点,如:

     float a =9 / 2.0;

3、sizeof  是一个单目操作符  不是函数

4、前置++ , 先++,后使用。后置++,先使用,后++。

例如:     

  前置++

int a = 10;
int b = ++a;
printf("%d\n", b);
//b等于11

后置++

int a = 10;
int b = a++;
printf("%d\n", b);
//b等于10

5、强制类型转换的写法是:

float a = 3.14;
int b = (int)a;
printf("%d",b);
//b的结果为3

6、条件操作符(三目操作符)的写法是exp1 ? exp2 : exp3

exp1成立,exp2计算,整个表达式的结构是 exp2的结果
exp1不成立,exp2不计算,exp3计算,整个表达式的结构是 exp3的结果

7、逗号表达式,是从左向右依次计算,整个表达式的结果是最后一个表达式的结果

int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4, b = c + 2); //a = 5 , c = 1 , b = 3
printf("%d\n", d);  //d结果为b=3

8、define和include    不是关键字,是预处理指令

五、选择循环语句

1、不能单独在switch语句中使用continue!

2、while 循环可能一次都不会执行;do...while循环至少执行一次。

3、c语言的三种基本结构是:顺序结构、选择结构、循环结构。

4、switch语句中case后必须是整形常量表达式。

5、switch语句中如果没有break,程序进入后会一直运行下去。

6、switch语句中超出switch范围的数可以用default来提醒,default所在位置没有规定。

7、在while循环中,break用于永久的终止循环;continue的作用是跳过本次循环。

六、函数

1、strcat(s1,s2)    将字符串s2追加到字符串s1后面,s2不变

2、strcpy(s1,s2)    将字符串s2复制给字符串s1,字符串s1变为字符串s2的内容,s2不变

3、strcmp(s1,s2)    将字符串s1与s2进行比较,自左向右对字符的ASCII码逐个比较,若s1等于s2则返回0,若s1大于s2则返回一个正数,若s1小于s2则返回一个负数

4、strlen()函数        求字符串长度,遇到结束符'\0'为止

5、实参和形参:

     (1)定义函数时,系统不会给形参分配存储单元,形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

     (2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

     (3)实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。

     (4)函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

6、函数不可以嵌套定义,但是可以嵌套调用

7、printf()的返回值是打印在屏幕上的字符个数(太偏不考)

8、当自定义函数写在主函数后面的时候,需要在主函数前面或者使用函数前声明该函数

七、数组

1、定义数组时,括号内是[常量表达式],不能是变量。

错误写法:int n = 8;  int arr[n];

2、[]是下标引用操作符

3、数组名是数组首元素的地址

4、在二维数组的创建与初始化中,行可以省略,列不可以省略!

八、指针

1、指针指向位置不可知时被称为野指针

2、指针减指针的运算得到的是两个指针之间的元素个数

3、给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数

九、结构体与共用体

结构体:

struct stu
{
        char name[10];
        int age;
        char id[11];
        double score;

}stu1;

1、struct是关键字 ,stu是结构体名,stu1是结构体变量。

2、对结构体成员赋值时,对字符串类型的赋值需要使用strcpy()函数,例如:

        strcpy(stu1.id, "111222");

3、求结构体的大小:最大类型的整数倍

如上述结构体中,最大类型为double类型,所以需要以8为基础,对内存中的数据存放:

 char name[10]占10字节,放10个1

int age占4字节,放一个4

char id[11]占11字节,放11个1

double score占8字节,放1个8

由图可知,共占用5行,故5*8=40

运行结果如下:


 

4、求结构体+共用体大小

union data
{
	int a;
	char c[17];
	double b;
}u1;

struct stu
{
	int id;
	char name[9];
	double socre;
	union data u1;
}stu1;

int main()
{

	printf("%d", sizeof(stu1));
	return 0;
}

结构体的大小依旧是如上方法计算:

4 1 1 1 1

1 1 1 1 1 (1) (1) (1)

8

结构体大小为3*8=24

共用体大小计算:最大类型的整数倍,所有成员共用一段内存

char c[17]占了17个字节,double类型8字节,需要3*8=24字节才能放得下char c[17]

所有共用体u1的大小是3*8=24

所以上述代码中,结构体+共用体大小的大小是24+24=48

运行结果为 48

 十、文件

fopen() 文件打开函数

fclose() 关闭文件函数

fputc() 文件写函数,把一个字符写到指定函数中

fgetc() 文件读函数,从指定文件读取一个字符

feof() 判断读取的文件是否读完的函数,未遇到结束标志时,feof()函数返回值为0;否则feof()函数返回值为1

------------------后续内容接下文:C语言考试知识点汇总(实践知识点)------------------

更多推荐

C语言考试知识点汇总(理论知识点)