C语言期末复习资料2011北理工版

更新时间:2024-06-20 04:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

期末复习资料 第1页-总26页

《C语言程序设计》期末复习指导

《C语言程序设计》是98级电子、电气计算机应用专业的一门必修课。由于课程内容比较多、范围比较广,学生在期末复习时会遇到一些困难。为此,我们按课程大纲要求,对教材进行归纳、总结、以帮助同学们掌握课程重点、难点,进一步理解教材内容;同时,我们提供模拟试题供同学们参考练习,以期进一步做好期末复习工作。 一、考试要求 (一)、C语言的结构

1.程序的构成,main函数和其它函数 2.头文件、数据说明、函数的开始和结束标志 3.源程序的书写格式 4.C语言的风格

(二)、数据类型及其运算

1.C的数据类型(基本类型,构造类型,指针类型,空类型)及其定义方法 2.C运算符的种类、运算优先级、结合性 3.不同类型数据间的转换与运算

4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则 (三)、基本语句

1.表达式语句,空语句,复合语句

2.数据的输入与输出,输入输出函数的调用 3.复合语句

4.goto语句和语句标号的使用 (四)、选择结构程序设计 1.用if语句实现选择结构

2.用switch语句实现多分支选择结构 (五)、循环结构程序设计 1.For循环结构

2.While和do while循环结构 3.Continue语句和break语句 4.循环的嵌套

(六)、数组的定义和引用

1.一维数组和多维数组的定义,初始化和引用 2.字符串与字符数组 (七)、函数

1.库函数的正确调用 2.函数的定义方法 3.函数的类型和返回值

4.形式参数与实在参数,参数值的传递

1

期末复习资料 第2页-总26页

5.函数的正确调用,嵌套调用 6.局部变量和全局变量

7.变量的存储类别(自动、静态、寄存器、外部)变量的作用域 (八)、编译预处理

1.宏替换(字符串宏替换,带参的宏替换) 2.“文件包含”修理 (九)、指针

1.指针与指针变量的概念,指针与地址运算符

2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量通过指针引用以上各类型数据。 3.用指针作函数参数 4.返回指针值的指针函数

5.指针数组,指向指针的指针,main函数中的参数 (十)、结构体与共用体

1.结构体和共用体类型数据的定义方法和引用方法 2.用结构体和指针构成链表 (十一)、位运算

1.位运算符的含义及使用 2.简单的位运算 (十二)、文件操作

只要求缓冲文件系统,对非标准缓冲文件系统不要求 1.文件类型指针(File类型指针) 2.文件的打开与关闭( forpen,fclose)

3.文件的读写(fpute,fgetc,fread,fwrite,fprint,fscauf函数)文件的定位(rewind,fseek函数)

期末复习

第一部分:C中的数据

首先,从主调函数和被调函数(模块间)要处理的任务数据的角度来总结数据的知识点:

C语言中所讲授的数据有基本类型(整型、实型和字符型)和构建类型(数组、结构体、共用体、链表结点)之分。构建类型是由基本类型构建而成,因此我们有必要对基本类型的数据做以更细致的研究。

一.基本类型的数据

2

期末复习资料 第3页-总26页

程序中的数据无非是以常量和变量两种形式描述。在这里我们不妨思考两个问题:(1)为什么要用变量?(2)常量经常用在什么地方?

(一)常量

对于基本类型常量我们要掌握:常量分几类?每类的书写规则是什么? (1)整型常量:有十、八、十六进制三种表示形式。(3.3.1、3.3.3) (2)实型常量:有小数和指数两种表示形式.(3.4.1、3.4.3)

(3)字符型常量:有普通字符(可以是ASCII码表中的任何一个字符)、转义字符(表示控制命令的转义字符和用八进制十六进制描述的转义字符)(3.5.1)

(4)字符串常量(3.5.4)

(5)符号常量:实际上是不带参数的宏定义(3.2.1 、9.1.1)

对于常量部分的考察无非是辨别书写形式,字符类的常量特别注意转义字符的辨认。这就要求我们熟记书写规则。例如以下题目: t-1:下面哪个是正确的整型常量表示

A)019

B)0X34g

C)-123

D)o56

E) 12,000

t-2: 下面哪个是错误的实型常量表示

A).23

B)3.8E-4.5 C)45E12

D)92.45

t-3: 下面哪个是正确的字符常量表示:

A)”b”

B)’\\\\’

C)’\\34’

D)’\\0x9’ E)?0123?

t-4: 下面那个是正确的字符串常量表示:

A)?abc? E)”abRT\\0\\\\” F)”A”

B)“”

C)“ ”

D)

\\0x120

t-5: 字符串“ab034\\0\\\\t\\v\\012”存储需要多少个字节?先组合转义字符,11个字节

3

期末复习资料 第4页-总26页

t-6: puts(“ab034\\0\\\\t\\v\\012”);的结果是ab034?strlen(“ab034\\0\\\\t\\v\\012”)的值是5?

(二)变量

对于基本类型的变量,我们知道要使用变量必须先定义变量,定义的基本格式是:数据类型 变量名;要正确定义变量就必须清楚两点(1)什么样的变量名才是合法的?(3.2.2)(2)如何用类型符来描述所要定义的变量,这就涉及到变量所分配的字节数、存储特点、有无符号及各自表示的数值范围等。

变量的三大类: (1) 整型变量(3.3.2)

分配字节:2字节(int/short) 4字节(long)(TC2.0) 存储特点:存储的是数值的补码形式 符号标识:signed unsigned 表示数值范围:表3-1

(2) 实型变量(3.4.2)

分配字节:4字节(float) 8字节(double) 16字节(long double) 存储特点:图3-7 表示数值范围:表3-2

(3) 字符型变量(3.5.2、3.5.3)

分配字节:1字节(char) 存储特点: 存储字符的ASCII值 符号标识:signed unsigned

表示数值范围:signed char: -128~+127 Unsigned char: 0~255 基本类型变量这部分知识主要的考察形式:

4

期末复习资料 第5页-总26页

(1)变量名(标识符)的正确与否鉴别 (2)变量类型标识符的识别与应用

(3)变量定义语句中对变量进行初始化的形式正确与否鉴别(3.6) 例如以下题目:

t-7: 以下正确的变量标识符是:

A)3sum B)INT

C)_3max

D)case

E)p&sum F)s_m_a

t-8: 以下正确的变量类型声明是:

A)signed int

B)int long C)unsigned long

D)short long

t-9: 下面程序段在tc2.0和cfree3.0运行时的输出各为-1 / 65535?

unsigned int a=65535; printf(\t-10: 以下正确的定义语句是:

A)int a=b=5 ; B)char ch=97 ; C)unsigned int x, y=-5; D)int a=3,b=5;E)int c=3 (二)建构类型的数据

程序给出的任务数据可以是基本类型的,也可以是集合性质的。集合中的所有数据可以是同类型的即数组(7.1.1~7.1.3、7.2.1~7.2.3、7.3.1~7.3.4),也可以是不同类型的(例如学生记录)即结构体(11.1~11.5)。

在这部分知识中主要考察的形式有: (1) 数组及结构体的定义、初始化和引用

(2) 计算集合(数组、结构体变量)存储所需要的空间 (3) 数组定义时缺省形式的一些规则:

? 在定义一维数组时,若给出了所有初始值则一维中括号内的数值可以省

5

期末复习资料 第6页-总26页

略,由初始值的个数来确定其值。但若没有给出初始值,则不能省略中括号内的值。例如:int a[]={1,2,3}; int b[]={3};都对。int a[]; 不对。 ? 二维数组的第2维列数任何情况下都不能缺省,第1维中的数值若在给出初始值的按情况下可以缺省。例如int a[2][]={{1,2}{3,4}}不对。 int a[][2]={1,2,3,4,5};正确。

(4) 只有在数组定义时可以给数组整体赋值,不能单独用赋值运算“=”给数组整

体赋值,特别是字符串数组。例如int a[3]; a={1,2,3}; char b[10]; b=”china”; char c[2][10]; c[0]=”chian”;c[1]=”japan”都不对, 只能是int a[3]={1,2,3};char b[10]=”china”; char c[2][10]={“china”,”japan”};

(5) 函数体内定义的数组名是地址常量,而由数组名表示的一些表达式也是常

量表达式。如int a[3]={1,2,3}; a,a+i都是常量。int b[3][3]={..}; b,b[0],b+i,*(b+i)也都是常量形式。常量形式意味着该式只能出现在等号的右边,而不能作为左值。

例如以下题目:

t-11: 以下正确的数组定义形式是: A)int n; scanf(“%d”,&n) ; int a[n] ;

B)#define N 10 int a[N]; C)int b[3][4]; D)char b[ ][4];

t-12: 以下不正确的数组定义和初始化形式是:

A)int a[]={1,2,3}; B) int a[]={0}; C) int a[][3]={1,2,3,4}; D)int a[2][2]={{1,1},{2,2},{3,3}} E) char a[10]={“hello”}; F) char a[]=”hello”;

G)int a[2][]={{1,1},{2,2}}; H) char a[10]; a=”hello” ;

I)char a[2][10]; a[0]=”hello ” ;a[1]=”tom” ; J) char a[2][10]={“hello”,

6

期末复习资料 第7页-总26页

“tom”};

t-15: 若有数组int a[2][2]={1,2,3,4},则能引用数组元素4的形式为:

A) a[1][2] B) *(a+1) C) *(*(a+1)+1) D) *(a+3) E) a[1][1] F) *(a[1]+1)

t-16: 若有数组int a[3]={1,2,3};则能引用数组元素2的形式为:

A) a[1] B) *(a+1) C) &a[1] D) a+1t-11: 以下正确的数组定义形式是: A)int n; scanf(“%d”,&n) ; int a[n] ; B)#define N 10 int a[N]; C)int b[3][4]; D)char b[ ][4];

t-17: 若有如下程序段,则对于“TOM”串中首字符T的正确引用形式为: struct A{ int age; char name[10]; };

Struct A t[2]={1,”TOM”,2,”MIKE”},*p=t;

A)(*p).name B) t[2].name C)t[1].name[0] D)p->name[0] 第二部分:数据的输入输出

讨论完C中的数据我们再讨论各种数据的输入与输出。如果数据输入不当再完美的程序也不可能显示出预期的结果。这部分作业的输入出现的问题较多,我们要熟记输入规则但不能死记硬背。下面的这三对函数都包含在文件“stdio.h“中,因他们的输入输出终端是标准设备-键盘和显示器,因此称为标准的IO函数,标准IO函数的使用与缓冲区有密切的联系。学习本部分时最重要的是要理解输入缓冲区中数据流和输入函数格式匹配的输入机制(参见本章手册中的参考资料)

7

期末复习资料 第8页-总26页

C中的输入输出是调用系统库函数来实现的,常见有三对库函数:

(1) scanf()/printf(): 可输入输出任何类型的数据。一次函数调用可以实现多

个数据的IO。

(2) gets()/puts(): 只对字符串数据进行输入输出操作。一次函数调用只可实

现一个串的IO。

(3) getchar()/putchar():只对字符数据进行输入和输出操作。一次函数调用只

可实现一个字符的IO。 对于这几对函数的使用主要考察:

(1) scanf、printf的使用规则(4.5,可参考本章教学目标) (2) getchar和putchar的使用格式(4.4) (3) gets与scanf的使用区别 例如以下题目:

t-18:若有程序段int a; float x; char c[10];scanf(“-%f%s”,&a,&x,c);

当程序执行时从键盘输入 23456.78abcd ,a=23 x=456.78、和 c=”abcd” t-19:若有定义int a ;float b ; 则scanf(“a=%d;b=%f”,&a,&b) ;的输入形式是 a=3 ;b=4.5

t-20:若有定义float x ;则语句scanf(“%5.2f”,&x)是否正确?不正确

t-21:若有定义char a,b ;对于scanf(“%c%c”,&a,&b );若输入A B,则a=A b=空格?

t-22:若用getchar()函数输入一个字符存储到字符变量ch中再将其输出,则以下正确的写法是:

A)getchar(ch) ; B) ch=getchar() ; C) ch=putchar(); D) putchar(ch); t-23: 若有语句scanf(“%s”,a); 程序运行时若输入hello tom!,则存储到a中的串是“hello”

8

期末复习资料 第9页-总26页

t-24: 若有int a=97; float x=34.56; char c=?B? ;则语句printf(“%c %d %d”,a,x,c )的输出是a 34 66 t-25: 若有程序段:

char a, b , s[10],t[10]; a=getchar();b=getchar(); gets(s);gets(t);

printf(\ 程序运行时若输入A B Hello TOM

程序输出是 a=A,b= ,s=B,t=HELLO t-26: 若有如下定义 ,写出每个变量对应的格式符。

int a ; %d long int b; %ld unsigned long c; %lu

float x; %f long double y; %lf char ch; %c

t-27: 若要分别输入两个串“hello”和“tom”至数组s 和t中,下面四个程序段运行结果是否一样?可以有什么样的推论?若运行后输入的两个串以回车为结束符

程序段1: 程序段2: 程序段3:

char s[10],t[10]; char s[10],t[10]; char s[10],t[10];

gets(s);gets(t); scanf(“%s”,s); gets(t); gets(s); scanf(“%s”,t);

9

期末复习资料 第10页-总26页

程序段4:

char s[10],t[10];

scanf(“%s”,s); scanf(“%s”,t);

程序段2结果不一样。Scanf和gets连用时对回车符的处理不同。Scanf将回车符留在缓冲区中,而gets的回车符带走。 t-28: 第4章实验一的强化练习。

第三部分:函数之间对任务数据的处理方法

在编写多模块程序也即存在函数调用这样的程序时,我们必须首先设计模块之间任务数据的交接方法,即主调函数如何让被调函数得到要访问的任务数据。部分初学者对此不解,不明白为什么在子函数中不能通过直接引用主调函数中的变量名来访问主调函数中的任务数据,例如这样的题目:在main函数中定义了变量x和变量y并赋予值,而子函数sum的任务就是对主函数中的这两个数据求和,部分初学者也许认为在sum函数中直接用表达式x+y就可以求出主调函数中这两个变量的和了。

要明白这个错误的原因我们还是要对程序的模块化设计思想做以分析。这个思想的设计起因很简单,正如我们可以理解为什么学校里要划分院系,而院系里再分班;也正如为什么公司里都划分各个职能部门一样。变量的作用域属性和存储属性也就是这个设计思想规则的体现。模块之间只能通过接口(实参/形参 返回值)来互通信息。

为了保证模块内部信息(数据)的隐藏性,规定模块内部定义的变量也只能在本块内被引用,这就是作用域规则下的局部变量。在某些时候可能几个模块需要共享一些数据,这些数据可以被多个模块访问,这就是作用域规则下的全局变量。例如在战争游戏中,指挥部和后勤部都会需要战士的人数,指挥部用这个数目来调兵遣将,后勤部用这个数目来供给口粮和装备。

不同的模块之间存在信息共享(全局变量),而同一个模块的多次调用之间也可以共享某些信息(静态局部变量)。

10

期末复习资料 第16页-总26页

函数调用: 函数定义头部: t-31 :

函数原型: char *fun(char *,char ) ; 函数调用: 函数定义头部: t-32 :

函数原型: int fun(int [], int) ;或者 int fun(int *, int) ; 函数调用: 函数定义头部: t-33 :

函数原型: int fun(int (*)[3], int,int) ; 函数调用: 函数定义头部: t-34 :

函数原型: int fun(int **, int,int) ; 函数调用: 函数定义头部: t-35 : 函数原型:

函数调用: p=fun(a,b) ; /* 若以有定义 char *p ,a[10] ,b[10] ;*/ 函数定义头部: t-36 : 函数原型:

16

期末复习资料 第17页-总26页

函数调用: sum=fun(a,5) ; /* 若以有定义 int sum,a[5]={..} ;*/ 函数定义头部: t-37 : 函数原型:

函数调用: sum=fun(a,5,5) ; /* 若以有定义 int sum,a[5][5]={..} ;*/ 函数定义头部: t-38 : 函数原型:

函数调用: fun(p,3) ; /* 若以有定义 char (*p)[3]={“..”,“..”,“..”}*/ 函数定义头部: t-39 : 函数原型:

函数调用: sum=fun(&a[0][0],9) ; /* 若以有定义 int sum, a[3][3]={...}*/ 函数定义头部: t-40 : 函数原型:

函数调用: fun(x) ; /* 若以有定义 struct A x={...}*/ 函数定义头部: t-41: 函数原型:

函数调用: fun(a,3) ; /* 若以有定义 struct A a[3]={...}*/ 函数定义头部: t-42: 函数原型:

17

期末复习资料 第18页-总26页

函数调用:

函数定义头部:int sum(int (*p)[3],int m,int n) t-43: 函数原型: 函数调用:

函数定义头部:int *sum(int *p)

在这部分内容中,对于给出的程序我们要非常明确程序采用的调用方式是传值还是传址,两个模块的接口处实参和形参的匹配,子函数返回值和主函数接收值的匹配。

第四部分:模块内部的任务实现(算法:解题思路)

多数题目在解题的过程中可能都会用到选择和循环,因此我们有必要首先对程序的这两种结构进行讨论。

选择结构的应用比较简单,只是把我们思维中的选择逻辑依葫芦画瓢的用计算机语句翻译出来就可以,而循环结构的应用对于初学者来说需要花费一定的精力,理解循环的构成,分析每一类题目循环的应用特点。

C语言中的分支语句(第5章)只提供了四种,其中三种if语句(简单if/两分支if/多分支if),一种switch语句。而应用这四种语句或嵌套能实现任何复杂情况的选择逻辑。

按选择逻辑分类,可有两分支的选择逻辑和多分支的选择逻辑,两分支的逻辑可由简单if语句和两分支if语句实现,课堂上我们曾推论过这两种结构之间的转换关系,希望大家还记得。多分支的逻辑可有三种方法实现:(1)由两分支语句嵌套实现多分支(2)应用多分支if语句实现(3)应用switch语句实现。作业中我们曾以三分支的逻辑(分段函数)为例,要求大家尽可能写出由两分支嵌套实现的三分支各种写法,其中有一种是if...else...的else分支中又嵌套了一个if...else...,而这种逻辑结构实质上就是多分支if语句的变形,由此我们推论出(1)和(2)之间的关

18

期末复习资料 第19页-总26页

系,继而又用实例演示了(2)和(3)之间的转换关系,这样我们就把选择结构的所有形式有机的串联起来,它们之间是存在紧密联系的,明白了这一点在编写程序的时候用什么形式来编写选择逻辑就很清楚了。

对于循环的应用(第6章),我们在课堂讲解时首先用较简单的例题演示了三种循环语句(while循环,do-while循环,for循环)的使用,然后总结了循环的三个构成:循环变量的初始化、循环条件的设置、循环变量步长的修改。然后对用常见的应用循环的题目根据任务性质做了分类,有数值型求解题目(主要是数学类,如1+1/2 !+1/3 !+...等)和事务管理类题目(学生成绩统计等),对于数值求解类题目有迭代算法的,有穷举算法的,也有其他算法的,它们对于循环的应用形式各有千秋,在学习时应多归纳总结规律。

选择结构这部分内容中主要会考察:

(1) 对于给定的应用选择结构的程序能清楚的找出配对关系。 (2) 各分支语句之间的转换

(3) 对于判断条件条件的理解,应会书写和计算条件

(4) 对于switch语句的理解,switch中缺省break语句对结果的影响 (5) 应用分支语句来编写程序。

(请参考第5章手册里的课后自测部分的题目) 例如以下题目:

t-44.若有a=1,b=3,c=5,d=4,x=6,则下面程序段执行后x的值是: if(a

if(c

else if(b

t-45.将下列switch语句改写为if语句实现 swicth(x)

{ case 0 : y=0 ;break ;

19

期末复习资料 第20页-总26页

case -1: y=-1;break; case 1: y=1;break; default: y=10; }

t-46.将下列if语句改写为switch实现: if(x<0) y=-1 ; else if(x==0) y=0; else y=1;

t-47.下面程序段输出是什么? int x=1;

if(x=2) putchar(?*?); else putchar(?#?); t-48.下面程序段输出是什么? Char a[10]=”hello”,b[10]=”hi,liou”; Char *p1,*p2; p1=a;p2=b+3;

if(*p1==*p2) putchar(?*?); else putchar(?#?);

t-49: if(printf(?*?))的条件与下面哪一个等价 A)if(?1?) B)if(a=0) t-50:下面程序段的输出是什么? int x=3,s=0; switch(x) { case 3:

20

期末复习资料 第21页-总26页

case 2: s++; default: s++; case 1: s++; }

printf(“s=%d”,s); 循环结构这部分主要考察: (1) 三种循环的互相改写 (2) 循环条件的判定与书写

(3) 循环中执行的跳转(break/continue) (4) 嵌套循环的应用(特别是对一二维数组的访问) (5) While与do-while的区别 例如以下题目:

t-51:将下面的for循环改写成while循环: for(i=0;i<=10;i++) { if(i==6 ) continue; printf(“*”);} t-52: 以下程序段的输出是 int a=1,b=2,c=3,s=1; while(c>b>a)

{ if(s++>3) printf(“%d”,s);} printf(“%d”,s);

t-53:下面的循环条件哪个为真

A)char ch=?0? ; while(ch){…} B)int a=1;while(a=0){..} C) int a=0; while(a++){…}

21

期末复习资料 第22页-总26页

t-54:下面程序段的功能是什么? char a[10],*p1=a,*p2=”hello”; while( *p1++ = *p2++); t-55: 下面程序段的输出是什么?

char a[10]= “abcdef”,*p1=a, b[10]= “ABC”,*p2=b ; while(*p1 && *p2) { *p1=*p2;p1++;p2++} puts(a);puts(b); puts(p1);puts(p2);

t-56:若有定义int a[3][3]={1,2,3,4,5,6,7,8,9},i,j;则下面程序段的输出是什么?

for(i=0;i<3;i++) { for(j=0;j<3;j++)

{printf(\ printf(\}

算法中使用的分支或者循环结构是构建框架的体现,而框架内就需要具体的语句来填充,算法描述中相当一部分语句是各种运算表达式语句,这就需要我们对C中的运算做以全面的了解。应将课本附录C中运算符的优先级和结合性以及图3-10记住,对于计算混合表达式有用。对于字符型数据应牢记在运算时取其ASCII值进行运算,牢记常用的几个字符(?A? ?a? ?0? ?\\0?)的ASCII码值. C中经常使用的运算有:

(1) 算术运算(3.8):掌握/ 与 %运算的特殊规则,掌握++ --在表达式中前置与

后置结果的区别

(2) 关系运算(5.1):掌握关系运算的计算和书写

(3) 逻辑运算(5.2):掌握逻辑表达式的计算和书写及一些特殊的判定规则

22

期末复习资料 第23页-总26页

(4) 赋值运算(3.9):掌握复合赋值运算符的使用,了解赋值运算中的类型转换,

整型与字符型的赋值

(5) 逗号运算(3.10):区分各项的结果值与整个逗号表达式的结果值 (6) 强制类型转换运算:注意括号应用的位置 (7) 长度运算符

(8) 对于各类指针的有限运算:算术运算、关系运算、赋值运算(参见课堂内容) 例如以下题目:

t-57: 计算 8/3 与8/3.0 有何不同? t-58: 6 % 2.0是否合法?

t-59:混合运算表达式8+6%(int)3.4 *2 + 8.0 的结果是什么,结果值是什么类型?

t-60: 若x=4,则y=x++ + 2 与 y=++x +2 有什么不同? t-61:条件“a在10 和20(包括10和20)之内”如何表达?

t-62:若 a=1,b=3,c=?A?,则表达式 !a < b||0 && (c-=32)的值是多少?变量c的值是多少?

t-63: ?a?-32 是多少? ?B?+?0? –?3? 的值是多少? t-64:执行下面程序段后a 和b的值各是多少?

int a=2,b=3; b=a++; a=a+b; b=a-b; a=a+b; t-65: 执行表达式x=1>2? 3: 4<5?6:7 后,x的值是多少?

t-66:若有float a=9.8 ;则表达式(int)a+0.3 执行后表达式的值是多少?变量a的值是多少?

t-67:sizeof(int) 与 int a ;sizeof(a)的结果一样吗?

t-68: 若有int a[5]={…},*p; p=a; 则 a+i 或者 p+i表示什么意思? t-69:若有int a[3][3]={…},(*p)[3]; p=a; 则a+i或者 p+i表示什么意思?

23

期末复习资料 第24页-总26页

*a+i或者*p+i表示什么意思?

t-70: 若有int a[3][3]={…},*p[3];则表达式p[i]=a+i 是否正确? t-71: 程序段int *p[3], *q;q=p;是否正确?

因字符串的存储特点(含有结束标记)决定了对串的处理不同于数值型数组。对于字符串的这部分内容主要考察:

(1) 存储串的字符数组的定义和初始化 (2) 串的输入和输出 (3) 遍历串的循环条件的书写

(4) 理解常见的串处理函数strcmp/strcpy/strcat/strlen的使用特性 (5) 理解串的比较规则

t-72: 以下串的正确的定义和初始化语句是

A)char a[]=”hello”;B) char a[5]=”hello”; C)char a[5]={?h?,?e?,?l?,?l?,?o?};D) char *p=”hello”; E)char

a[10];

a=”hello”;

F)

char

*p;

p=”hello”

G)

char

a[3][10]={“hello”,”tom”,”jack”};

H) char a[3][10]; a[0]=”hello”,a[1]=”tom”,a[2]=”jack”;

t-73:若有串“hello tom”,则输入时用scanf(“%s”,a);和用gets(a);(设a为字符型数组)是否都能正确输入?

t-74:若有char a[3][10]={ “hello”,”tom”,”jack”},(*p)[3]=a; 则下面哪种写法能输出串“tom”:

A)puts(a[1]); B) puts(*(p+1)) C)puts(p[1]) D) puts(*(a+1)) E)puts(a+1) F)puts(p+1) t-75: 若有如下访问结构图:

24

期末复习资料 第25页-总26页

指针数组q 二维字符数组a p Hello\\0 Tom\\0 Jack\\0

(1) 分别写出p 、 q和a的定义

(2) 根据图中的指针指向写出p、q各变量的赋值 (3) 用q的引用形式输出三个串。 (4) 用p的引用形式输出三个串。

(5) 用p的引用形式来输入三个串至二维数组中。 (6) 用q的引用形式来输入三个串至二维数组中。

t-76: 若有char a[80]=”hello”,则遍历整个串时的循环条件是a[i]<80还是 a[i]!=?\\0??

t-77: 若有char a[20]=”tom”, b[10]= “jack”,*p1,*p2 ; p1=a;p2=b;则 (1)strcpy(a,b)执行后a和b中的内容各是什么? (2)strcpy(a+3,b) 执行后a和b中的内容各是什么? (3)strcmp(a,b)的结果是什么?

(4)strlen(strcat(p1,p2+2))的结果是什么?

(5) 如果要描述“a中的串大于b中的串”,则下面哪个写法是正确的? A) a>b B)p1>p2 C) strcmp(a,b)>0 D) strcmp(p1,p2)>0

t-78:若有定义char a[5]={?h?,?e?,?l?,?l?,?o?},b[3]={?t?,?o?,?m?};则表达式strcmp(a,b)的结果是什么? 第五部分:其它

(一)宏的使用(9.1),例如以下题目:

t-79:下面程序的运行结果是什么?若带参宏S的定义为#define S(r) PI*(r)*(r)结果又如何?我们要总结什么?

#define PI 3.14

25

期末复习资料 第26页-总26页

#define S(r) PI*r*r void main()

{ float a=2,b=5, area; area=S(a+b);

printf(\}

若第2行改为#define S(r) PI*(r)*(r) 再运行程序结果如何?什么原因造成的?

希望能给大家提供一个将所学知识系统化的参考资料,更多的复习和总结还需要大家自己来做。预祝各位期末考试能顺利过关!对于本学期付出辛勤劳动的课代表和各位组长表示衷心的感谢! 2010.6

26

本文来源:https://www.bwwdw.com/article/q113.html

Top