C语言培训班老师发的资料包C语言题集三答案.docx

上传人:b****4 文档编号:4889368 上传时间:2022-12-11 格式:DOCX 页数:26 大小:50.93KB
下载 相关 举报
C语言培训班老师发的资料包C语言题集三答案.docx_第1页
第1页 / 共26页
C语言培训班老师发的资料包C语言题集三答案.docx_第2页
第2页 / 共26页
C语言培训班老师发的资料包C语言题集三答案.docx_第3页
第3页 / 共26页
C语言培训班老师发的资料包C语言题集三答案.docx_第4页
第4页 / 共26页
C语言培训班老师发的资料包C语言题集三答案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言培训班老师发的资料包C语言题集三答案.docx

《C语言培训班老师发的资料包C语言题集三答案.docx》由会员分享,可在线阅读,更多相关《C语言培训班老师发的资料包C语言题集三答案.docx(26页珍藏版)》请在冰豆网上搜索。

C语言培训班老师发的资料包C语言题集三答案.docx

C语言培训班老师发的资料包C语言题集三答案

第1章函数

选择题

1.解析:

本题综合考查函数的调用方式。

函数的形参和实参具有以下特点:

①形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。

因此,形参只有在函数内部有效。

函数调用结束返回主调函数后则不能再使用该形参变量。

②实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。

因此应预先用赋值,输入等办法使实参获得确定值。

③实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。

④函数调用中发生的数据传送是单向的。

即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。

因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

本题中A)和C)选项是最常识的问题,希望考生能通过以上分析掌握相关知识点。

2.解析:

本题考查函数的综合知识。

首先,我们可以利用强制转换类型转换运算符将一个表达式转换成所需类型。

如:

(double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。

本题可按部就班地逐步运算:

fun((int)fun(a+c,b),a-c)

fun((int)fun(10,5),2-8)

fun((int)15.000000,-6)

fun(15,-6)

9

3.解析:

C语言的程序是由主函数main()开始运行,由主函数来调用其他函数,所以,选项A)错误。

C语言中定义的函数必须是并列的,不能在一个函数中定义其他函数,选项B)错。

函数必须先定义后使用,在调用函数以前要定义函数,而main()函数不必放在最前面,故选项D)错。

4.解析:

如果实参是简单变量,它与对应形参之间的数据传递方式是由参传给形参,而形参值的改变不能改变实参的值。

5.解析:

选项A)中定义函数时,形参的类型说明应该放在形参表列内说明。

老版本C语言中,对形参类型的声明是放在函数定义的第2行,也就是不在第1行的括号内指定形参的类型,而在括号外单独指定。

选项B)中return后面的值可以是一个表达式。

选项D)中实参与形参的类型应相同或赋值兼容。

如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准。

6.解析:

在main函数中,对f

(1)和f

(2)的值进行了累加。

f

(1)=1

f

(2)=f

(1)+1=2

最后,j的值为1+2=3

7.解析:

C语言规定,一个函数中调用另一个函数(即被调用函数)需要具备的条件有:

①首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。

②如果使用库函数,一般还应该在本文件开头用#include命令将函数调用有关库函数时所需要到的信息“包含”到本文件中来。

③如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明,即向编译系统声明将要调用此函数,并将有关信息通知编译系统。

在C语言中,可以使用函数原型进行声明,函数原型的一般形式为:

函数类型函数名(参数类型1,参数类型2)或

函数类型函数名(参数类型1参数名1,参数类型2参数名2)

8.解析:

在C语言中,对于自定义函数要遵循“先定义,后使用”的规则,如定义时,不指定函数类型,C编译系统都默认函数的返回值是int型。

9.解析:

在C语言中,对于返回值是其他类型的函数,若把函数定义放在调用之后,应该在调用之前对函数进行说明,或称为函数原型说明。

函数说明句中的类型必须与函数返回类型一致,函数说明可以是一条独立的语句,也可以与普通变量一起出现在同一个语句中。

对于函数值为整型的函数的说明,prtchar中定义时是void类型,那天返回值与k=prtchar();矛盾。

所以本题的错误之处在于“函数说明和函数调用语句之间有矛盾。

10.解析:

C语言在函数中说明的变量为局部变量,只在函数内起作用但不会影响到其他函数。

所以在不同的函数中使用相同的函数名不代表是同一函数,A)项正确。

在函数定义时声明的参数只在函数内部起作用,是函数的局部变量,B)正确。

在一个函数中定义的变量是这个函数的局部变量,所以只在这个函数内起作用,C)正确。

复合语句中定义的变量其作用域是这个复合语句,不会扩大到整个函数,所以D)项错误。

11.解析:

用户调用标准库函数前不必重新定义,而只需使用预编译命令将该函数所在文件包括到用户源文件中即可。

而且,系统允许用户重新独定义标准库函数,但此时该函数将失去原有含义。

因此,正确答案为选项B)。

调用函数时,必须要注意以下语法:

①函数名必须与所调用的函数名字完全一致;

②实参的个数与形参的个数一致;

③函数必须先定义,后调用。

如果被调用的函数的返回值为int型或char型,则被调用函数的定义也可以放在调用的位置之后。

如果在函数调用之前没有对函数作声明,则编译系统会把第一次遇到的该函数形式作为函数的声明,并将函数类型默认为int型。

12.解析:

有参函数的定义一般形式是:

类型标识符函数名(形式参数表列)

{声明部分

语句

}

形式参数之间是以逗号“,”隔开,本题的doublefun(intx,inty)语句后没有任何符号。

13.解析:

本题考查的函数形参与实参的传递规则,当形参与实参都是简单的数据类型时,形参值的改变不能影响实参值的改变,即本题中c的值未改变,仍然是6。

14.解析:

函数调用相当于f(2,3),程序运算应得结果为“-1”。

15.解析:

C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函数不必要有返回值,若有返回值,则返回值类型必确定。

16.解析:

本题考查函数中变量的作用范围,在主函数中给变量x,y,z赋值,然后将其作为实参传递给了函数fun(),虽然在函数fun()中改变了这3个变量的值,但只是同名的局部变量,不影响函数中变量的值,所以在调用函数fun()结束后,主函数3个变量的值未改变,即形参值的改变不能影响实参的值。

17.解析:

函数返回语句return中返回的是一个指针的值也就是一个地址,所以返回的是形参p中存放的地址值。

18.解析:

C语言中关于形参与实参的说明:

①实参可以是常量、变量或表达式;②实参与形参的类型应相同或赋值兼容,实参类型可以为C语言中的任何一种数据类型,而形参不能是常量或表达式,只能是某种类型的变量。

19.解析:

该题考查的是递归函数的调用,题中读fun函数进行了递归调用,第1次调用:

fun(3)n=3s=3-fun

(2)第二次调用时:

fun

(2)n=2s=2返回第一次调用后,s=3-2=1。

20.解析:

在C语言中,函数首部的一般形式为:

函数类型标识符函数名(参数类型1参数名1,参数类型2参数名2...)

本题中,选项A)不属于C语言的写法,是PASCAL语言中函数首部的写法,选项D)是BASIC语言中的写法,选项B)中的变量b前缺少类型的定义。

21.解析:

函数调用的一般形式为:

函数名(形参表)若函数无形参,调用形式为:

函数名(),当所调用的函数用于求出某个值时,函数的调用可作为表达式出现在允许表达式出现的任何地方,本题中调用语句的参数个数为2个。

22.解析:

本题题设的函数定义中,在函数名前没有函数返回值的类型名,按照C语言的规则,缺省函数返回值类型默认为int型。

23.解析:

C语言容许函数返回一个值,通过return语句实现,其格式是:

return(表达式);或return表达式;功能是把表达式的值带回主调函数的调用处,作为函数的返回值。

函数返回值的类型以函数类型为准,为了明确表示“不带回值”,可用“void”类型说明符定义“空类型”。

在以下几种情况下,可不在调用函数中对被调用函数类型声明:

①如果函数值是整型或字符型,可不进行声明,系统自动默认函数值是整型。

②如果被调用函数的定义出现在调用函数之前,可不进行声明。

24.【命题目的】考查对于函数的基础知识的掌握情况。

【解题要点】函数不一定有返回值(void类型),C语言规定,在一个函数的内部不能再定义函数,函数可以递归调用,一个C程序允许由多个文件组成,C语言支持函数的外部调用,不一定有调用关系的所有函数都放在同一个源程序文件中。

【错解分析】选项A)函数不一定有返回值,选项B)函数不可以嵌套定义,选项D)函数可以外部调用。

【考点链接】C语言函数间传递参数规则是值传递,即单向传递。

25.【命题目的】考查对于函数调用的语法要求掌握的情况。

【解题要点】如果没有指明函数值类型,则默认函数返回值的类型为int型。

【错解分析】这个题目实现的是m,n的立方差。

【考点链接】C程序中,函数可以直接或间接地调用自己。

26.【命题目的】考查对于函数说明的掌握情况。

【解题要点】函数说明语句中的类型名必须与函数返回值的类型一致。

【错解分析】这个题目实现的是在字符′A′的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。

【考点链接】字符在进行数学计算的时候都是以ASCII码值的形式计算。

27.【命题目的】考查对于函数定义语法掌握的情况。

【解题要点】函数定义的格式如下:

一般形式为,函数返回值的类型函数名(类型名形式参数1,类型名形式参数2,……){函数体},老版本的C函数的定义形式为:

函数返回值的类型名函数名(形式参数1,形式参数2,……)形式参数类型说明;{函数体}。

【错解分析】选项B)应改为doubleadd(doublea,doubleb),选项C)应在定义形参时用逗号分隔;选项D)应将形参的类型说明放在函数体外。

【考点链接】定义的函数可以没有形参,但函数名后的一对圆括号不能省略。

填空题

1.【命题目的】考查对于函数的调用和返回值的掌握情况。

【解题要点】函数调用的时候,函数名字必须与所调用的函数名完全一致,形参与实参类型要一致,在没有给出函数返回值类型的情况下,默认为整形,当返回值为整型的函数放到主函数后面时,可以不需要事先说明就调用这个函数。

【考点链接】retrun既可以返回一个普通常量,也可以返回一个指针变量。

2.解析:

本题中,欲求p的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。

第2章指针

选择题

1.解析:

“&”是求址运算符,“*”是指针变量的说明符,说明该变量只能存放所定义类型变量的地址。

本题中选项D)中均代表地址,注意&*point等价于point。

2.解析:

尽管C语言以传值方式进行函数调用,但也可以通过传递指针的值(变量的地址)来达到修改实参变量值的目的,这是此题主要说明的问题。

其次,应注意表达式*(z++)的值是*z,其后的z++在程序中无实际作用。

函数调用时,由于x,y和z分指向a,b和c,因此,*x,*y和*z就是a,b和c。

第一次调用函数时,*x=a=10,*y=b=40,*z=c=20输出结果为11,41,20,至此,已经可以肯定选项B)是正确的。

在第一次输出后,a=11,b=41,c=20,第二次输出为:

12,42,20。

3.解析:

本题考查函数返回值的知识。

函数返回值是通过函数中的return语句获得,return语句中的表达式的值就是所求函数的值。

此表达式的值必须与函数首部所说明的类型一致。

若类型不一致,则以函数值的类型为准,由系统进行转换。

4.解析:

通过定义语句int*p后,p本身就是一个整型指针,p=&n是使p指向变量n,p本身就是一个地址,在用输入时不需在取地址了。

5.解析:

选项A),B),C)的指针赋值表达方式都不正确,*p=5表达整数5放到指针p所指向的存储单元中。

6.解析:

在函数体语句中的b+=*a;的*是指针运算符(也称间接访问运算符),*a就是main函数中a的值。

7.解析:

inta,b,k=4,m=6,*p1=&k,*p2=&m;声明整型变量a,b,k,m和指针p1,p2,并分别将4和6赋给k和m,将k和m的地址赋给p1和p2;a=p1==&m;等价于a=(p1==&m);将p1是否等于地址m的值(0)赋给变量a,b=(*p1)/(*p2)+7;该句的含义是将后面表达式的的值7赋给变量b。

8.解析:

该程序的执行过程是:

首先声明整型指针变量p和整型变量i,字符型指针变量q和字符型变量ch,将i的地址赋给指针变量p,将ch的地址赋给指针变量q,将40赋给*p,此时,q已经指向了一个具体的存储单元,但ch的值不确定,即*p没有确定的值,所以不能执行*p=*q语句。

9.解析:

“&”是求址运算符,“*”是指变量说明符。

选项A)、B)应改为scanf(“%d”,p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险建议不使用。

10.解析:

p=&a表达式的含义是将变量a的地址赋给指针变量p;a=*p+b表达式的含义是指针变量p所存地址对应的值与b的和赋给a。

11.解析:

指针变量m和z分别指向整型变量y,i,所以这两个指针变量中存储的地址是不同的,变量x接受的是一个关系运算的结果,因为两个地址是不同的,所以相等的判断结果为0。

12.解析:

本题的选项A)和B)犯了一个同样的错误,即指针变量p定义后并没有指向具体的变量。

也就是说,p中没有确定的地址值,它的值是不可预见的,所指向的单元也是不可预见的,因此不能进行赋值操作。

另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。

13.解析:

在C语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

了解了实参指针变量的改变情况,本题只剩下简单的“加减法”了。

14.解析:

解答本题时,首先我们应该明白“&”运算符和“*”说明符的含义,++N说明的是对变量N的自增运算,本题中++*x要求先给指针变量x自增1,再指向其他地址,结果为26。

15.解析:

本题函数fun中形参是两个指针变量,函数fun只是将这两个指针的指向的地址交换了一下而并没有交换它们所指向的地址中的数据。

虽然,主函数中声明的变量a,b是整型变量而函数fun中的形参是两个指针变量,这两个变量仅仅是两个参数,与主函数中的那两个变量含义是不同的。

16.解析:

本题应该把swap()函数改成这样:

swap(int*p,int*q)

{intt;

t=*p;*p=*q;*q=t;}

这时执行程序时,先将a的地址传递给指针变量p,b的地址传递给指针变量q,然后将*p(a的值)的值传递给t,将*q(b的值)传递给*p,将t的值传递给*q,从而将a和b互换。

17.【命题目的】考查对于指针说明的掌握情况。

【解题要点】定义指针变量的一般格式为:

类型名*指针变量名1,*指针变量名2,…;指针可以通过求地址运算符(&)获得地址值,还可以通过指针变量获得地址值。

【错解分析】选项A)定义的不是一个指针,而是一个类型变量;选项B)定义的是指针,但是赋值给指针应该是一个地址值;选项D)定义的是指针,但是赋值与选项B)的错误类似,a不是指针型的变量,加了*号没有意义。

【考点链接】指针变量必须区分基类型,基类型不同的指针变量不能混合使用。

18.【命题目的】考查对于指向指针的指针的掌握情况。

【解题要点】**t中的t表示指向指针的指针。

【错解分析】选项A)指向char变量的指针应该是*t。

19.【命题目的】考查形参为指针变量时,实参和形参之间的数据传递。

【解题要点】通过传送地址值,在被调用函数中直接改变调用函数中的变量值。

【错解分析】本题目是将指针指向的变量x,y的地址传给了函数fun(),在fun函数中对x,y的内容进行了修改,这样就改变了原先x,y的值。

【考点链接】通过传送地址值,在被调用函数中直接改变调用函数中的变量值,是又一种函数之间传递数据的重要手段。

20.【命题目的】考查函数返回地址值的掌握情况。

【解题要点】函数的返回值的类型不仅可以是简单的数据类型,而且可以是指针类型。

【错解分析】在函数内部实现的相当于是y=x+y-3。

【考点链接】函数值的类型可以是整型、实型、字符型和指针型。

填空题

1.解析:

C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。

指针变量作函数也要遵循这一规则。

调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

2.【命题目的】考查对于函数的地址传递的掌握情况。

【解题要点】通过地址传递可以在被调函数中对调用函数中的变量进行引用。

3.

第3章数组

选择题

1.解析:

x数组共有10个元素,在花括弧内只提供3个初值,这表示只给前面的3个成员赋值,后7个元素的值为0,所以,一共有20个字节。

2.解析:

本题中,表达式将5个初值赋给a[0]至a[4],后面的部分,将自动会被依次补零处理。

3.解析:

本题考查二维数组的基本概念。

对于二维数组,只可以省略第一个括号中的常量表达式,而不能省略第二个括号中的常量表达式。

第一维的大小按以下规则决定:

①当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小。

②当初值的个数不能被第二维的常量表达式的值除尽时,则:

第一维的大小=所得的商数+1

③数组中未赋初值的元素系统会自动对它们赋初值0。

4.解析:

本题经过定义语句和赋值后,p表示的是变量a的地址,*p表示的是变量a的值。

5.解析:

在C语言的数组元素的引用方法,我们在前面已经讲过了,比如数组元素a[0],可以用表达式*(p+0),即*p来引用,对于数组元素a[1],可以用表达式*(p+1)来引用,在这里,p+1的值就是数组元素a[1]的地址,对此地址使用“间接访问运算符”:

*(p+1)就代表存储单元a[1],注意:

一对圆括号不可少。

同样,对于数组元素a[2],则可以用表达式*(p+2)来引用…,对于数组元素a[9],可以用表达式*(p+9)来引用。

因此,当指针变量p指向a数组的起始地址时,若0≤i<10,则数组元素a[i]可以用*(p+i)来表示。

6.解析:

函数定义的一般形式为:

类型说明符函数名()

{类型说明

语句

}

根据fun函数的调用语句可知,fun函数的第二个参数是一个地址值。

7.解析:

本题定义a为3行×4列的数组,它可用的行下标最大为2,列下标最大为3,用a[0][4]超过了数组的范围,注意数组的下标是从零开始的。

8.解析:

在C语言中,对于数组元素下标的定义只能是整型常量或整型表达式。

9.解析:

函数之间数据传递的过程是一个赋值过程,实参将值赋予对应的形参。

函数的实际参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。

它的作用是将一个变量的地址传递到另一个函数中。

当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值随之发生变化。

10.解析:

C语言中,实参变量和形参变量之间的数据传递是赋值过程、是单向的“值传递”方式。

指针变量作函数参也要遵循这一规则,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

11.解析:

如果定义数组时没有进行初始化,则其各个成员的值不确定,所以k=s[1]*10的值也不定。

12.解析:

请注意:

该题目所要求的是最大数的位置(下标),而不是最大数的数值!

因此,在进行逐个比较的过程中,需要记录下的是最大数的下标i,根据给出的程序可知,该下标记录在变量p中,所以,如果a[i]>a[p]这一关系成立,应该把i的值值赋给p,这样才满足题目的要求。

13.解析:

我们可以把二维数组的常量表达式看做是矩阵或者表格的行数与列数,要注意每个元素有两个下标,第一个是方括号中的下标代表行号,称行下标;第二个是方括号中的下标代表列号。

行下标和列下标总是从0开始的,二维数组在不赋初值时,不能得到确定。

14.解析:

本题中,a[1][2]是二维数组中的第6个元素,对应for循环中i的值为5,p[5]=5+1。

15.解析:

本题中的二维数组的每个元素就是一个由三个元素构成的一维数组,根据条件for(k=0;k<3;k++)和要求的a[k][k]可以得出本题的答案应该是951。

16.解析:

在C语言中,数组元素是从0开始的。

指针变量p指向数组的首地址,(p+2)就会指向数组中的第3个元素。

题目中要求输出的是元素的值。

17.解析:

p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9。

18.解析:

通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。

本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。

19.解析:

在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,选项B)中定义有5个元素,但赋初值时有6个元素,所以是错误的。

20.解析:

本题的知识点主要是:

在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。

for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。

21.解析:

在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7]...b[9]的值相加,结果为22。

22.解析:

本题考查二维数组的定义方式。

第一维的大小由以下方法判断:

①当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;2)当初值的个数不能被第二维的常量表达式的值除尽时,则第一维的大小=所得的商数+1。

23.解析:

在一维数组中要注意的是下标表达式的常量表达式的值必须是大于等于零,并且小于自身元素的个数,既数组长度,选项B)的下标不是整数,所以错误

24.解析:

本题考查数组指针的应用。

选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。

25.解析:

指针变量p指向数组a的首地址,并把指针变量p的地址赋于指向指针的指针变量k。

26.解析:

此题的关键是要分清指针数组与指向一组数组指针之间的不同,题中的说明语句定义了一个指针变量prt,它指向包含三个整数元素的一维组数。

应注意:

*prt两侧的圆括号不能缺少,如果写成*ptr[3],则p与[3]先结合,是数组,然后再与前面的*号结合,则*ptr[3]将是一个指针数组。

27.解析:

函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。

它的作用是将一个变量的地址传送到另一个函数中去。

在本题解析中,我们试图将这一问题解释清楚!

大家可以考虑一下利用下面这函数可不可以实现a和b的互换。

swap(x,y)

intx,y;

{intt;

t=x;

x=y;

y=t;

}

如果在main函数中用swap(a,b),会有什么结果呢?

在函数调用开始时,a的值传送给x,b的值传递给y。

执行完swap函数后,x和y的值是互换了,但main函数中的a和b并未互换。

也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。

为了使在函数中改变了的变量值能被main函数所用,不能采取上述把要改变值的变量作为参数的办法,而应该用指针变量做函数参数。

在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值

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

当前位置:首页 > 求职职场 > 简历

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

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