春季C语言复习提纲.docx

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

春季C语言复习提纲.docx

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

春季C语言复习提纲.docx

春季C语言复习提纲

2010年春季C语言复习提纲

第一章

1.程序设计语言:

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

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

编译方式、解释方式。

3.算法+数据结构=程序

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

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

5.算法的表示方法:

自然语言、传统的程序流程图、N-S流程图。

6.结构化程序设计的32字原则:

7.C语言的产生及发展:

UNIX操作系统

8.C语言的特点:

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

10.函数:

说明部分、函数体。

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

12.注释用/*……*/

第二章

1.单字符输入/出:

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

2.字符串:

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

3..格式化输入:

scanf(“格式控制符”,地址列表);

格式控制符:

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

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

◆格式%s输入字符串不包含空格,且对应地址表列是字符数组名。

◆默认分隔符:

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

◆格式控制符间不宜加其它字符,如加入其它字符,输入时应原样输入,否则数据接收错误。

如:

scanf(“%d,%d”,&a,&b);输入数据时两数据间要有逗号;scanf(“%d%d”,&a,&b);%d间有两个空格,则输入数据时至少有两个空格。

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

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

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

◆%*d表示跳过它对应的输入数据。

4..格式化输出:

printf(“格式控制符”,输出列表);

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

如:

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

◆输出列表:

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

◆转义字符:

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

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

◆注意:

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

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

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

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

%-12d

第三章

1.常量:

◆整型常量:

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

-12l、-065l、0x55l等。

◆实型常量:

小数形式、指数形式。

◆字符常量:

用单引号,如‘c’(注意转义字符)。

◆字符串常量:

用双引号,如“hglhg”、“a”,内存占用为实际长度加1。

◆符号常量:

无参宏(#define)。

2.变量:

◆标识符命名规则:

4条。

◆各种类型变量的长度。

◆数据类型转换:

自动、强制。

◆注:

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

如(float)(x+y)

3.各种运算符运算规则及其优先级页。

4.补充---逻辑表达式的优化运算:

◆&&运算:

只要算出第一个表达式为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。

5.其它运算符:

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

sizeof表达式或sizeof(数据类型))

第四章

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

如while(a=5)….

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

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

4.循环程序:

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

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

6.break、continue语句。

7.本章主要是算法构思。

(先考虑好需要那些变量,即数据结构,再考虑怎样求解问题)

第五章

1.数组定义:

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

#defineN10);

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

2.下标引用:

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

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

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

4.数组定义后如没有给任何一个元素赋初值,对于static类型,各元素初值为0;对于auto类型,各元素值不定。

5.数组不能整体赋值。

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

6.数组中的两种排序方法:

◆冒泡法:

外循环为i=0;i

(考试内容)

◆选择法:

外循环为i=0;i

(不做考试内容,但是希望同学们记住这种好的排序方法)

7.二维数组:

按行存放;赋初值的5种情况。

8.字符数组:

通常定义较长长度,如:

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

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

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

注意:

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

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

%c、%s。

9.字符串函数:

strcpy(s1,s2)、strcat(s1,s2)、strcmp(s1,s2)、strclen(s)、strupr(s)、strlwr(s)

第六章

1.函数定义:

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

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

2.声明:

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

函数声明的几种变通形式。

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

3.函数调用:

函数名(实参表);

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

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

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

◆补充:

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

◆嵌套调用:

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

◆递归调用:

一个函数调用它自身。

(考试不作要求)

4.数组作为函数参数:

voidfunc(inta[],intn);

◆传递的是实参数组的首地址。

调用时实参是数组名,如func(a,10);

5.多维数组:

voidfunc(inta[][5],intn);(可省略第一维,但不能省略其它高维)。

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

全局变量、局部变量。

◆局部变量:

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

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

◆全局变量:

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

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

 

7.变量的存储类别:

auto、static、register、extern。

voidfunc(intn)

{staticinta=1;

a+=n;

printf(“%d,”,a);

}

main()

{intb=2;

func(b);

func(b);

}程序运行结果为3,5,

 

8.局部变量的存储类别:

auto、static、register。

◆auto型的生存周期时函数被调期间,两次调用之间不保留值。

◆static型的生存期是整个程序运行期间,保留上一次调用后的值,且只赋一次初值(在程序运行前初始化,默认初值为0)。

如:

9.全局变量的存储类别:

static、extern。

◆全局变量总是存放在静态存储区间,生存期是整个程序运行期间,只赋一次初值,在程序运行前初始化,默认初值为0。

◆用extern对全局变量加以声明,可以将其作用域扩充到整个文件或其它文件。

例:

P113页、P114页。

◆定义全局变量时加上static,可将其作用域限制在本文件中,不能被其它文件使用。

例:

P114页。

10.函数的作用域是全局的,可被其它函数调用。

◆函数存储类别:

static、extern。

默认为extern型。

#defineSQR(x)x*x

main()

{inta,k=3;

a=++SQR(k+1);

printf("%d\n",a);

}

替换后的表达是为a=++k+1*k+1

结果为9

如:

staticintfunc(inta);则函数不被其它文件使用,所以两文件中的同名静态函数,互不干扰。

第七章

1.预处理命令以“#”开头,末尾不加分号。

在程序编译之前处理。

2.

2.宏替换:

将函数中出现宏名的地方用宏体进行替换。

◆宏体可以是数字、也可以是组成C表达式或语句的其它字符,还可以引用已定义的其它宏名。

◆宏的作用域:

定义宏之后到本源文件结束,可用#undef提前结束。

◆无参宏(符号常量):

#definePI3.14

注意:

函数中双引号内的宏名不替换,如printf(“PI”);

◆有参宏:

#define宏名(形参表)宏体

◆引用:

宏名(实参表)

◆注意有参宏如果宏体和参数没用括号括起,可能有副作用。

◆分析有参宏的程序时,必须先将宏替换后的表达式写到纸上,再分析结果。

◆文件包含:

#include<文件名>搜索系统标准目录

#include“文件名”先搜索当前目录,找不到再搜索系统标准目录

 

第八章

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.一维数组作为函数形参,实际上就是一个指针变量,如:

func(inta[],intn);

等同于func(int*a,intn);

◆函数声明的几种变通形式。

◆所以指针a在函数中值可以改变,如*a++,不同于函数内定义的数组如:

intb[5];这里b是指针常量。

8.指针与字符串:

char*p,s[50]=“fdjfjdfj”;p=s;

◆可用p间接访问字符串,如指针法:

for(;*p!

=‘\0’;p++)或下表法:

for(i=0;p[i]!

=‘\0’;i++)

9.指针形参在函数间传递字符串:

voidcopy(char*s1,char*s2){while(*s1++=*s2++);}

◆调用时用字符数组名或指向某字符串的指针做实参,

如:

char*p=“sdgygkh”;charss[50];func(ss,p);

◆函数调用的灵活形式:

func(ss+2,p)或func(ss,p+2)

◆注意:

输入字符串常用gets函数,但参数应是字符数组名,或已指向某字符数组的指针,如:

chars[50],*p;gets(s);是正确的,而gets(p)是错误的,因为p没被赋地址值,无任何指向。

改正:

p=s;gets(p);

10.数组指针与多维数组:

inta[3][4];int(*p)[4];p=a;

◆p指向a的一整行,此时*p就代表a[0];如果执行p++,则p指向下一行,即*p代表a[1],p跳过单元数为2*4=8个字节。

◆引用元素的两种形式:

p[i][j]或(*p)[j]

◆几个等价关系式:

由x[i]等价于*(x+i)和&x[i]等价于x+i得出:

a[i][j]等价(*(a+i))[j]等价*(a[i]+j)等价*(*(a+i)+j)

&a[i][j]等价*(a+i)+j等价a[i]+j

◆指针形参在函数间传递多维数组:

intfunc(int(*b)[4],intn);等价于intfunc(intb[][4],intn);

◆调用时用二维数组名做实参,如:

func(a,3);

11.指针数组:

char*s[3];表示数组s有3个元素,每一个元素都是一个指针变量,都可以指向一个字符串。

◆赋初值:

char*s[3]={“sdgg”,”ww”,”q”};或单独赋值:

s[0]=“sdgg”;s[1]=“ww”;s[2]=“q”;

◆用于指向多个字符串。

◆也可用字符数组存储多个字符串,只是占用内存空间大。

11.指向指针的指针:

二级指针,char**p;

◆用于访问指针数组,或在函数间传递指针数组,通常就是传递多个字符串。

12.char*s[3]={“sdgg”,”ww”,”q”};char**p;p=s;

◆p指向数组s的首地址,此时*p代表s[0],即指向第0个字符串,*p和s[0]都是第0个字符串的首地址,

◆可用gets(*p)或gets(p[i])来输入字符串,用puts(*p)或puts(p[i])来输出字符串。

◆在函数间传递多个字符串的参数形式:

func(char**s,intn)或func(char*s[],intn)或func(chars[][],intn)

◆总结:

1、通常在主调函数中定义指针数组指向多个字符串。

2、函数:

func(char**s,intn)或func(char*s[],intn)传递多个字符串首地址;

3、在函数内的使用形式:

s[i]或*(s+i),都代表第i个串首地址,或*s++;

4、一般都是整串操作,循环一般使用字符串个数进行控制,如:

for(i=0;i

◆字符串操作函数:

strlen()、strcpy()、strcmp()

13.返回指针值的函数:

char*func(char*s,charch)

◆切记:

返回的是地址,在主调函数中应使用指针类型变量接收函数返回值,

如:

char*p,a[]=“asdgg”;p=func(a,’d’);

14.动态内存分配:

掌握malloc函数的使用方法。

第九章

1.结构体:

struct,.定义的几种形式。

成员可以是任意类型。

成员引用:

结构体变量名.成员名

◆占用内存大小为:

各成员占用内存之和。

◆结构体数组:

同普通数组一样使用。

初始化时注意双重括号。

◆结构体指针:

(*p).成员名或p->成员名

注意:

只能用结构体变量地址赋值,不能赋某成员的地址,如:

p=&stu.name;是错误的。

◆通常定义变量或形参时必须加上struct,如:

voidfunc(structstudent*p)

{structstudenta[4],temp;……}

2.共用体:

union,定义形式同结构体。

成员引用:

共用体变量名.成员名

◆占用内存大小为:

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

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

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

 

3.枚举类型:

如:

enumweek{sun,mon,tues,wen,thur,fri,sat}day;

◆枚举元素就是枚举变量的可能取值,如:

day=mon;

◆枚举元素视为常量,其值就是序号(0~n-1)。

也可以在定义时改变其值,如:

enums{a=3,b=1,c=2};

4.类型标识符自定义:

typedef,如:

typedefintINTEGER;typedefstruct{……}STU;

typedefintARR[10];以后可直接使用INTEGER、ARR、STU类型进行变量定义,书写简略。

◆注意:

只能为类型另起新名,不能创造新类型,也不能为变量或函数重新命名(define)。

第十章文件

1.流式文件:

文本文件、二进制文件。

◆文本文件:

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

◆二进制文件:

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

2.文件操作:

读操作、写操作。

使用有关文件函数来完成,需包含头文件stdio.h

3.操作步骤:

①定义文件类型指针②打开文件③检测指针④读/写⑤关闭文件。

4.打开文件时的使用方式各6种,P207页。

5.读/写函数:

fgetc(fp)、fputc(ch,fp)、fread(*p,size,n,fp)、fwrite(*p,size,n,fp)、fgets(*str,n,fp)、fputs(*str,fp)

fscanf(fp,“格式控制符”,地址列表)、fprintf(fp,“格式控制符”,输出列表),以上函数是简要书写,具体参考P238页。

6.三个标准设备文件指针:

stdin、stdout、stderr

7、有关文件操作函数ferror(fp)、feof(fp)、clearerr(fp);

10.控制循环:

while((ch=fgetc(fp))!

=EOF)或while(!

feof(fp))

EOF是在头文件中定义的符号常量,值为-1代表文件结束。

 

C语言程序设计第1~3章练习题

一、选择题

1、一个C语言程序总是从__B__

A、主过程开始执行   B、主函数开始执行

C、子程序开始执行   D、主程序开始执行

2、若num、a、b和c都是int型变量,则执行表达式num=(a=4,b=16,c=32)后num的值为_C

A、4    B、16    

C、32   D、52

3、下面四个选项中,均是C语言关键字的选项是__B__

A、autoenuminclude

B、switchtypedefcontinue

C、signedunionscanf

D、ifstructtype

4、下面四个选项中,均是合法整型常量的选项是_A___

A、160-0xffff011  B、-0xcdf01a0xe

C、-01986,0120668 D、-0x48a2e50x

5、下面四个选项中,均是合法浮点数的选项是_D__

A、+1e+15e-9.403e2

B、-.6012e-4-8e5

C、123e1.2e-.4+2e-1

D、-e3.8e-45.e-0

6、下面四个选项中,均是合法转义字符的选项是__A__

A、'\'''\\''\n'  B、'\''\017''\"'

C、'\018''\f''xab' D、'\\0''\101''xlf'

7、下面正确的字符常量是_B___

A、'\X17'B、'\80'C、'\\'D、"\n"

8、下面四个选项中,均是正确的八进制数和十六进制数的选项是__C__

A、-100x8f-011

B、0abc-0170xc

C、010-0x110xf1

D、0a12-0x123-0xa

9、下面四个选项中,均是正确的数值常量或字符常量的选项是__D__

A、0.00f8.9e'&'

B、"a"3.9E-2.51e1'\"'

C、'3'0110xFF000a

D、+0010xabcd2e250.

10、若有代数式

,则正确的C语言表达式是_D___

A、2*ln(x)*cos(x)/3*x

B、2*ln(x)*cos(x)/(3*x)

C、2*log(x)*cos(x)/3*x

D、2*log(x)*cos(x)/(3*x)

11、若有说明语句:

charch1='\065';charch2="2";charch3='2';则:

ch1中__A__,ch2中__B__,ch3中__A__

A、包含1个字符  B、包含2个字符

C、包含3个字符D、字符个数不确定,说明不正确

12、若有运算符:

>、*=、?

、%、sizeof,则将它们按运算的优先级排列的正确次序为(由低至高)__B__

A、*=→?

→%→>→sizeofB、?

→*=→>→%→sizeof

C、*=→>→?

→sizeof→%D、*=→?

→>→%→sizeof

13、若有以下类型说明语句:

chara;intb;floatc;doubled;

则表达式a*b+d-c的结果类型为__D__

A、float  B、char  C、int  D、double

14、若有变量说明:

inta=0,b=0,c=0;,以下符合C语言语法的赋值表达式是__B__

A、a=9+b+c=a+9   B、a=9+b;c=a+9;

C、a=(9+b,b++)   D、a=9+b++=a+7

15、已知字母A的ASCII码为(65)10,变量ch1为字符型,则执行语句ch1='A'+'6'-'3';后,ch1中的值为__A__

  A、D B、68 C、一个不确定的值 D、C

16、以下运算符中优先级最高的运算符是__A__

A、&&  B、++  C、?

:

  D、!

=

17、若有定义:

intk=7

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

当前位置:首页 > 农林牧渔 > 林学

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

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