C语言复习提纲.docx

上传人:b****6 文档编号:7843784 上传时间:2023-01-26 格式:DOCX 页数:16 大小:27.58KB
下载 相关 举报
C语言复习提纲.docx_第1页
第1页 / 共16页
C语言复习提纲.docx_第2页
第2页 / 共16页
C语言复习提纲.docx_第3页
第3页 / 共16页
C语言复习提纲.docx_第4页
第4页 / 共16页
C语言复习提纲.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C语言复习提纲.docx

《C语言复习提纲.docx》由会员分享,可在线阅读,更多相关《C语言复习提纲.docx(16页珍藏版)》请在冰豆网上搜索。

C语言复习提纲.docx

C语言复习提纲

C语言复习提纲

C语言概述

1.程序设计语言:

机器语言、汇编语言、高级语言。

2.高级语言翻译成机器语言的两种方式:

编译方式、解释方式。

3.算法+数据结构+(编程语言)=程序

4.结构化程序设计的三种基本结构:

顺序结构、分支(选择)结构、循环结构

5.C语言由函数组成,有且仅有一个main函数。

6.函数:

说明部分、函数体。

7.一条复杂语句分行书写,用反斜杠(\)续行。

8.注释用/*……*/(多行)或//(单行)

9.每个语句由分号(;)结束(注意for语句和while语句等可以不接循环体,直接加分号)。

 

数据类型、运算符和表达式

1.常量(记表2-1):

◆整型常量(记表2-2、2-3):

235、0235、-0x235(前可加负号),长整型:

-12l(L)、-065l(L)、0x55l(L)等。

◆实型常量(记表2-4、2-5):

小数形式、指数形式。

◆字符常量:

用单引号,如’c’。

◆转义字符(记表4-1)。

◆字符串常量:

用双引号,如”haha”、”abc”,内存占用为实际长度加1(结束标志’\0’)。

◆符号常量(宏常量)(3.2):

#define(宏常量没有数据类型,编译器只进行简单的字符串替换,注意M(x)和M((x))的区别)。

◆const常量(3.3):

标识符被声明为具有某种类型的常量,只能在定义时赋初值

2.变量:

◆标识符命名规则:

(2.1.2)。

◆各种类型变量的长度(见附录B):

整型4个字节(VC6.0中)、浮点型(float)4个字节、字符型1个字节。

◆数据类型(记表2-6)。

◆不同数据类型数据之间的混合运算:

不同数据类型之间的运算必须先转换成相同数据类型才能运算。

◆数据类型转换(3.4):

自动、强制。

注:

强制类型转换只得到所需类型的结果值,原变量或表达式的类型仍为原类型。

如(float)(x+y)

3.各种运算符运算规则(2.5赋值、3.1算术、5.9逻辑、5.10.3位运算,不要求)。

优先级与结合性见附录C(算术>关系>位(移位例外)>逻辑)

4.增1减1运算符(3.1.3):

i++,++i,i--,--i。

(不清楚可以在系统中运算查看结果)。

5.其它运算符:

复合运算符、条件运算、逗号运算、长度运算符(形式:

sizeof(表达式或变量名)或sizeof(数据类型))

 

标准输入输出

1.单字符输入/出:

putchar(字符变量)、getchar()。

注意getchar()没有参数。

2.字符串:

gets(字符数组名)、puts(数组名)。

3.格式化输入:

scanf(格式控制字符串,地址列表);(记表4-4、4-5)

格式控制符(格式转换说明符):

%c、%d、%o、%x、%s、%f

◆若输入long型、double型应加l,如%ld、%lo、%lf

◆格式%s输入字符串,遇到第一个空白字符时结束,且对应地址表列是字符数组名或指向数组的指针。

◆默认分隔符(空白字符):

空格、回车、Tab键(也可按域宽截取)

◆输入函数中%f格式不能带小数,如:

scanf(“%7.2f”,&a)是错误的。

◆%c格式输入单字符,空白字符和转义字符都作为有效字符接收。

4.格式化输出:

printf(“格式控制字符串”[,输出列表]);(记表4-2、4-3)

◆格式控制符部分可加入其它字符,原样输出。

如:

提示语或使输出结果清楚显示

◆输出列表:

可以是变量、常量、表达式、函数调用等。

◆转义字符:

以斜杠(\)开始,作为一个字符,如求字符串长度:

“jk\\gk\bl\0k\nlj”,长度为7。

◆输出long、double型数据,用%ld、%lf

◆可设定输出宽度,m和n,如:

%5d、%6.2f、%.2f

◆负号表示域内向左对齐,如:

%-12d

 

选择结构

1.if语句的三种形式:

◆If(表达式)语句;

◆If(表达式)

{语句1;}

Else

{语句2;}

◆If(表达式1){语句1;}

Elseif(表达式2){语句2;}

Elseif(表达式3){语句3;}

……

Elseif(表达式n){语句n;}

Else{语句n+1;}

2.if语句的嵌套。

3.switch语句结构

Switch(表达式)

{

Case常量表达式1:

语句1;break;

Case常量表达式2:

语句2;break;

……

Case常量表达式n:

语句n;break;

default:

语句n+1;

}

4.if中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。

表达式的值为0则为假,为非0则为真。

5.逻辑表达式的优化运算:

◆&&运算:

只要算出第一个表达式为0,第二个表达式不再运算。

◆||运算:

只要算出第一个表达式为1,第二个表达式不再运算。

如:

inti=0,j=0,a=6;if((++i>0)||(++j>0))a++;printf(%d%d%d”,i,j,a);

结果i为1,j为0,a为7。

6.如果有多条语句,必须用大括号括起,构成复合语句。

7.switch语句中case后面只能是常量值;若执行完某case后的语句没遇到break,则继续执行下一个case语句。

 

循环结构

1.主要的循环结构

◆while(表达式){语句;}

◆do

{循环语句序列;}

While(表达式);

◆for(循环变量初值表达式1;循环结束条件表达式2;循环变量增值表达式3)

{循环语句;}

while、for中的表达式,一般是逻辑或关系表达式,也可以是任意类型表达式。

2.如果有多条语句,必须用大括号括起,构成复合语句。

3.循环程序:

注意循环变量的初值、循环条件、修正值等,以及循环中用到的某些变量赋初值,如求累加和变量。

4.一般是先判断条件,再执行循环体;但do—while语句是先执行一遍循环体,再判断条件。

5.break语句跳出整个循环体,不再执行循环、continue语句结束本次循环,可继续执行下一次循环判断。

 

数组

1.数组定义:

inta[10];或inta[N](N需要事先定义为符号常量:

#defineN10);

数组长度必须是常量值,不能是变量,可以是在程序开始前定义的符号常量,进行长度定义。

2.下标引用:

0~N-1,切记不能引用到N。

(inta[5];a[5]=10;这种引用是错误的)

3.数组初始化时可省略长度定义。

(二维数组的第二维长度永远都不可以省略)

4.数组不能整体赋值。

数组中各元素值的输入/出,应使用循环程序逐个输入/出;字符数组例外(gets、puts)。

5.数组中的排序和查找(8.4)

6.二维数组:

按行存放;赋初值的4种情况(8.2)。

7.字符数组:

通常定义较长长度,如:

chars[50];通常用于存放字符串,结束标志为‘\0’。

可用字符串常量为其初始化,如:

chars[]=“sdkhg”;也可由键盘输入,如gets(s);输出用puts(s);

注意:

chars[5]={‘a’,’d’,’f’,’g’,’w’};此种形式不是字符串,无字符串结束标志,仅仅是普通一维字符数组,不能用puts输出,只能用%c格式逐个输出。

字符数组的输入/出还有两种形式:

%c、%s。

8.字符串函数(10.5):

strlen、strcpy、strcmp、strcat

函数

1.函数定义:

intfun(inta,inty);如定义时没指明函数类型,如:

fun(inta);默认是int型,返回值不确定。

2.声明:

函数定义在前,使用在后,可省略函数声明,反之需要在使用前声明。

◆函数声明后加分号,而函数定义后没有分号。

3.函数调用:

函数名(实参表);

◆实参与形参个数、类型、位置一致。

◆形参与实参占据不同的存储单元;形参只在函数调用时才为其分配存储单元,函数调用结束后释放。

◆实参与形参之间是传值调用,单向传递关系,形参值改变,不会影响实参值。

◆补充:

函数可嵌套调用,不可嵌套定义。

◆嵌套调用:

一个函数内部又调用另外一个函数。

◆递归调用:

一个函数调用它自身。

4.从作用域角度,变量分为:

全局变量、局部变量。

◆局部变量:

在函数内部定义,只能在该函数中使用,包括函数的形参和复合语句中定义的变量,main函数中定义的变量也是局部变量,不能被其它函数使用。

◆不同函数内定义的同名变量,互不影响,因其作用域不同,内存空间独立。

◆全局变量:

在函数外部定义,作用域从定义开始到本文件结束。

其间的所有函数都可以使用它,可在各函数间传递值,但容易带来副作用,降低模块独立性。

5.变量存储类型(7.5.2):

重点了解静态变量static

◆静态变量仅在第一次进入函数时被自动初始化为0。

◆在第二次进入函数时,静态变量的值仍然保持上一次退出函数前所拥有的值。

6.动态内存分配(11.4.2)

void*malloc(unsignedintsize);

void*calloc(unsignedintnum,unsignedintsize);

voidfree(void*p);

void*realloc(void*p,unsignedintsize);

 

指针

1.指针的基本概念:

指针≡地址;

2.指针常量:

某已知变量的地址,或数组名等,:

inta,b[5];此时&a和b就是指针常量(固定值)。

3.指针变量:

如inta,*p=&a;chars[9],*q=s;

◆赋值:

必须赋地址值,如inta,*p;p=&a;

如p=2001;是错误的。

4.间接访问:

*p=5;等同于a=5;

5.指针作为函数的参数,传递的是实参变量的地址,

如:

voidfunc(int*p)

◆调用时用某变量的地址常量,或指向该变量的指针作为实参,如主调函数中有定义inta,*q;q=&a;则可用&a或q作为实参进行调用,即func(&a);或func(q);都是将变量a的地址传递给形参指针p,使指针p指向变量a。

函数中使用*p就是对a的间接访问,就可以改变a的值,或者将结果放入a中。

但形参变量本身改变,反过来不会影响实参指针值。

6.指针与一维数组:

inta[10],*p=a;则a代表数组首地址,是指针常量,

◆元素的表示方法:

a[i]、*(a+i)、p[i]、*(p+i)

◆元素地址:

&a[i]、a+i、&p[i]、p+I

◆区别:

a实指针常量,只不能变,而p是指针变量,可进行增减运算;所以常通过p的增减运算来快速访问数组a,如:

while(p

或while(p

◆理解(*p)++、*p++、*(p++)、p++的含义。

◆执行p++后指针拨动的单元数(由元素类型决定)

7.指针和二维数组间的关系(11.2)注重理解

行指针:

定义

int(*p)[4];//注意:

必须声明长度

初始化

p=a;/p=&a[0];

引用p[i][j]*(p[i]+j)*(*(p+i)+j)(*(p+i))[j]

列指针:

定义

int*p;//跟普通的指针定义一样

初始化

p=a[0];/p=*a;/p=&a[0][0];

引用

a[i][j]*(p+i*n+j)p[i*n+j]

小窍门:

a[i]*(a+i)例如:

*(a[i]+j)*(*(a+i)+j)其他等价式同样适用

 

结构体和共同体

1.结构体:

struct,.定义的几种形式(12.2.2)。

成员可以是任意类型。

成员引用:

结构体变量名.成员名

◆占用内存计算方式:

大体的规律:

1.偶数地址访问2.机器字长对齐

◆结构体类型在定义数组和指针的时候,都可以把他们当作普通类型的标识符看待。

但是,在结构体数组初始化时要注意,结构体成员要按照规定的顺序、格式初始化。

◆如何访问结构体指针:

圆点运算符(.)和箭头运算符()

pt->studentID=008;(*pt).studentID=008;

2.共用体:

union,定义形式同结构体。

成员引用:

共用体变量名.成员名

◆占用内存大小为:

共用体中较长的成员的长度。

◆某一时刻只有一个成员起作用,最后一个存放的成员值有效。

◆结构体类型与共用体类型可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。

3.链表(12.7.2):

掌握基本的定义和单向链表的新建、插入、删除操作

 

文件

1.流式文件:

文本文件、二进制文件。

◆文本文件:

若干字符序列,较长,可用type命令或记事本查看。

◆二进制文件:

若干字节序列,短,存取速度快,不能用type或记事本等查看。

2.文件操作:

读操作、写操作。

使用有关文件函数来完成

3.操作步骤:

①定义文件类型指针FILE*fp;

②打开文件fp=fopen(文件名,打开方式);

③检测指针if(fp==NULL){……exit(0);}

④读/写fgetc(fp)、fputc(ch,fp)

⑤关闭文件。

fclose();

4.打开文件时的使用方式(记表13-1):

”r”、”w”、”a”。

5.fopen()如果不能正确打开文件,则返回值为NULL。

fclose()如果正确关闭文件,则返回值为0,否则返回EOF(-1)。

fputc(ch,fp)以写的方式打开,如果输出成功,则返回值就是输出的字符;如果输出失败,否则返回EOF(-1)。

fgetc(fp)必须以读或读写的方式打开文件,且文件必须存在。

该函数返回一个字符值。

如果读入的文件遇到结束符,返回EOF(-1)。

6.读入文件控制循环:

while((ch=fgetc(fp))!

=EOF)或while(!

feof(fp))

7.按格式读写文件(fprintf和fscanf)与标准输入输出函数(printf和scanf)用法相似,注意前者有个指针参数fp。

 

C语言复习重点,即使上机不会,只要看了这个也能过来源:

曹猛的日志

大体上必须清楚的:

1)程序结构是三种:

顺序结构,循环结构(三个循环结构),选择结构(if和switch)

2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。

3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.

4)bit是位是指为0或者1。

byte是指字节,一个字节=八个位.

5)一定要记住二进制如何划成十进制。

概念常考到的:

1、编译预处理不是C语言的一部分,不再运行时间。

C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、每个C语言程序中main函数是有且只有一个。

3、在函数中不可以再定义函数。

4、算法的是一定要有输出的,他可以没有输入。

5、break可用于循环结构和switch语句。

6、逗号运算符的级别最低

第一章

1)合法的用户标识符考查:

合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了。

关键字不可以作为用户标识符号。

maindefinescanfprintf都不是关键字。

迷惑你的地方If是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

2)实型数据的合法形式:

2.333e-1就是合法的,且数据是2.333×10-1。

考试口诀:

e前e后必有数,e后必为整数。

.

3)字符数据的合法形式:

'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

 '0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。

4)整型一般是两个字节,字符型是一个字节,双精度一般是4个字节:

  考试时候一般会说,在16位编译系统,或者是32位系统。

碰到这种情况,不要去管,一样做题。

掌握整型一般是两个字节,字符型是一个字节,双精度一般是4个字节就可以了。

5)转义字符的考查:

在程序中inta=0x6d,是把一个十六进制的数给变量a注意这里的0x必须存在。

在程序中inta=06d,是一个八进制的形式。

在转义字符中,’\x6d’才是合法的,0不能写,并且x是小写。

‘\141’是合法的,0是不能写的。

‘\108’是非法的,因为不可以出现8。

6)算术运算符号的优先级别:

同级别的有的是从左到右,有的是从右到左。

7)强制类型转换:

一定是(int)a不是int(a),注意类型上一定有括号的。

注意(int)(a+b)和(int)a+b的区别。

前是把a+b转型,后是把a转型再加b。

8)表达式的考查:

是表达式就一定有数值。

赋值表达式:

表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

自加、自减表达式:

假设a=5,++a(是为6),a++(为5);

运行的机理:

++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这

个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,

再放到变量a中。

进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。

考试口诀:

++在前先加后用,++在后先用后加。

逗号表达式:

优先级别最低;表达式的数值逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

9)位运算的考查:

 会有一到二题考试题目。

总的处理方法:

几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

例1:

 chara=6,b;

    b=a<<2;这种题目的计算是先要把a的十进制6化成二进制,再做位运算。

例2:

 一定要记住,

例3:

 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。

10)018的数值是非法的,八进制是没有8的,逢8进1。

11)%符号两边要求是整数。

不是整数就错了。

12) 三种取整丢小数的情况:

       1、inta=1.6;

2、(int)a;  

3、     

第二章

1)printf函数的格式考查:

%d对应整型;%c对应字符;%f对应单精度等等。

宽度的,左对齐等修饰。

%ld对应longint;%lf对应double。

2)scanf函数的格式考察:

注意该函数的第二个部分是&a这样的地址,不是a;

Scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。

3)putchar,getchar函数的考查:

chara=getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。

putchar(‘y’)把字符y输出到屏幕中。

4)如何实现两个变量x,y中数值的互换(要求背下来)

不可以把x=y,y=x;要用中间变量t=x;x=y;y=t。

5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)

这个有推广的意义,注意x=(int)x这样是把小数部分去掉。

第三章

特别要注意:

c语言中是用非0表示逻辑真的,用0表示逻辑假的。

1)关系表达式:

表达式的数值只能为1(表示为真),或0(表示假)

当关系的表达是为真的时候得到1。

如9>8这个是真的,所以表达式的数值就是1;

2)逻辑表达式:

只能为1(表示为真),或0(表示假)

a)共有&&||!

三种逻辑运算符号。

b)!

>&&>||优先的级别。

c)注意短路现象。

考试比较喜欢考到。

d)要表示x是比0大,比10小的方法。

0

是先计算0

所以一定要用(0

3)if语句

else是与最接近的if且没有else的相组合的。

4)条件表达式:

 表达式1?

表达式2:

表达式3

 注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。

考试口诀:

真前假后。

5)switch语句:

a)一定要注意有break和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。

 b)switch只可以和break一起用,不可以和continue用。

第四章

1)三种循环结构:

a)for();while();do-while()三种。

b)for循环当中必须是两个分号,千万不要忘记。

c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。

d)do-while()循环的最后一个while();的分号一定不能够丢。

(当心上机改错)

2)break和continue的差别

记忆方法:

break:

是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。

continue:

是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。

3)嵌套循环

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。

4)while((c=getchar())!

=’\n’)和while(c=getchar()!

=’\n’)的差别

先看a=3!

=2和(a=3)!

=2的区别:

(!

=号的级别高于=号所以第一个先计算3!

=2)第一个a的数值是得到的1;第二个a的数值是3。

考试注意点:

括号在这里的重要性。

第五章

函数:

是具有一定功能的一个程序块;

1)函数的参数,返回数值(示意图):

main()

{

inta=5,b=6,c;

c=add(a,b);

printf(“%d”,c);

}

调用函数

a,b是实参

整个函数得到一个数值就是

Add函数的返回数值。

intadd(intx,inty)

{

intz;

z=x+y;

returnz;

}

被调用函数

x,y是形式参数

函数返回数值是整型

z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。

程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。

当得到了返回数值后,再顺序的往下执行

2)一定要注意参数之间的传递

实参和形参之间传数值,和传地址的差别。

(考试的重点)

传数值的话,形参的变化不会改变实参的变化。

传地址的话,形参的变化就会有可能改变实参的变化。

3)函数声明的考查:

一定要有:

函数名,函数的返回类型,函数的参数类型。

不一定要有:

形参的名称。

第六章

指针变量的本质是用来放地址,而一般的变量是放数值的。

int*p中*p和p的差别:

*p可以当做变量来用;*的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1