南开《程序设计基础(上)》19秋期末考核答案

● 函数fun1()、fun2()的定义如下所示,已知调用fun1 时传递给形参x的值是-5,若以引用调用(call by reference)的方式调用fun2,则函数fun1的返回值为 (33) ;若以值调用(call by value)的方式调用fun2,则函数fun1的返回值为 (34) 。

fun1(int x) fun2(int x) int a=x-1;

x = fun2(a);

return a-x; x=x+10;

return 3*x;

(33)A. -18 B. -11 C. -8 D. 0

(34)A. -18 B. -11 C. -8 D. 0


答案:A、C

值调用时,原传递参数值不会被修改!

如果是值传递:那么对于fun1中:a=x-1=-6;x=fun2(a)=fun2(-6);那么在fun2中,x=x+10=-6+10=4,返回3*x=12;这时原参数a=-6并不会被修改,也就是说a的值还是-6;这时,a-x=-6-12=-18;

对于引用调用,在fun2中执行语句x=x+10=-6+10=4时,这时a的值也被修改,变为4,所以返回到fun1中执行a-x时应该为a-x=4-12=-8。

 


下列函数原型声明中错误的是

A.void Fun(int x=O,int y=0);

B.void Fun(int x,int y);

C.void Fun(int x,int y=0);

D.void Fun(int x=0,int y);


正确答案:D
解析:本题考核函数的定义方法和调用方法。说明一个函数的格式为:函数类型>函数名>,(下函数参数表>);在C++中,允许在函数的说明或定义时给一个或多个参数指定默认值。但一旦为某个给定参数定义了缺省值,必须为后继的所有参数也定义缺省值。由此可知,选项D是错误的。


以下正确的函数头定义形式是

A.double fun(int x,int y)

B.double fun(int x;int y)

C.double fun(int x,int y);

D.double fun(int x,y);


正确答案:A


以下正确的函数原型语句是( )。

A、double fun(int x,int y)

B、double fun(int x;int y)

C、double fun(int,int);

D、double fun(int x,y);


参考答案C


已知函数定义“voidfun(inta,intb){b++;a++;}”,则执行“intx=2,y=3;fun(x,y);”后,变量x、y的值分别为()。

A.3,4

B.3,3

C.2,4

D.2,3


正确答案B


程序设计基础(上)19秋期末考核-0001试卷总分:100 得分:68一、单选题 (共 15 道试题,共 30 分)1.一个浮点法表示的数值由( )两部分组成。A.阶码和尾数B.整数和小数C.指数和基数D.尾数和小数答案:A2.已知“char s=南开大学;”,则数组s的长度为#。A.9B.8C.5D.4答案:A3.计算机系统中采用补码运算的目的是( )。A.简化计算机的设计B.提高运算的精度C.减少存储空间D.与手工运算方式保持一致答案:A4.已知函数定义“void fun(int &a, int b) b+; a+;”,则执行“int x=2,y=3; fun(x,y);”后,变量x、y的值分别为#。A.3,4B.3,3C.2,4D.2,3答案:B5.默认形参值不可以是#。A.静态全局变量B.局部变量C.函数调用D.全局变量答案:B6.已知“int a=1,2,3,4,5,*p=a;”,则以下各选项中对数组元素访问错误的是#。A.pp-aB.*(p+2)C.a5D.a3答案:C7.已知字母“a”的ASCII码是97,则字母“f”的ASCII码是( )。A.103B.102C.101D.100答案:B8.在32位计算机系统中,已知“int a23; fun(a);”,fun函数的形参变量名为p,则在fun()函数体中通过sizeof(p)计算得到的结果为#。A.6B.4C.24D.12答案:B9.已知程序段: int a34,*p3=a0, a1, a2,*pp=p,i; for (i=0; i12; i+) ai/4i%4=i; 则pp12的值是#。A.6B.5C.4D.3答案:A10.二进制数1001101011转换为等值的八进制数是( )。A.9ACB.4651C.26BD.1153答案:D11.字符的ASCII码的表示方法是:使用8位二进制码并且( )。A.最高位为1B.最高位为0C.最低位为1D.最低位为0答案:B12.下面的描述,不正确的是#。A.语句for(i=0;i+)表示无限循环B.语句for(;)表示无限循环C.语句for( )表示无限循环D.while(1)表示无限循环答案:C13.已知“char a=abcd”,*p=a+2;,则语句“couty-2”是算数表达式。答案:错误31.? 高维数据都可以使用一维数组进行存储。答案:正确32.静态局部变量在定义时若没有初始化,则自动初始化为0。答案:正确33.语句for(i=0;i+)和for(;)都表示一次也不循环。答案:错误34.使用全局变量会降低函数之间的独立性,在编写程序时尽量减少全局变量的使用。答案:正确35.将浮点型赋值给整型时,转换后的值可能丢失小数部分,原来的值也可能超出目标类型的取值范围导致结果错误。答案:正确三、问答题 (共 2 道试题,共 20 分)36.下面程序的运行结果是什么?#include using namespace std;int main() char a210=Xyccw, XYcCw ; int i; for (i=0; i5; i+) if(a0i!=a1i) break; if (i=5) cout两个字符串相同a1i) cout较大的字符串为:a0endl; else cout较大的字符串为:a1endl; return 0;答案:较大的字符串为:Xyccw37.下面程序的运行结果是什么?#include using namespace std;void fun(int a, int b, int &sum, int sub) sum = a+b; sub = a-b;int main() int a=5, b=10, sum=0, sub=0; fun(a, b, sum, sub); coutsumendl; coutsubendl; return 0;答案:              150四、简答题 (共 1 道试题,共 10 分)38.请设计“求斐波那契数列”的递归算法,并用C+代码写出求前10项斐波那契数列的完整程序。答案:

对下列程序段的描述正确的是()。includeint Fun(int,int)void main(){cout<

对下列程序段的描述正确的是( )。 #include<iostream.h> int Fun(int,int) void main() { cout<<Fun(5,50)<<endl; } int Fun(int x,int y) { return X*X+y*y; }

A.该函数定义正确,但函数调用方式错误

B.该函数调用方式正确,但函数定义错误

C.该函数定义和调用方式都正确

D.该函数定义和调用方式都错误


正确答案:C


有以下函数定义: void fun(int n, double x) {……} 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是( )。

A.fun(int y,double m);

B.k=fun(10,12.5);

C.fun(x,n);

D.void fun(n,x);


正确答案:C
解析:本题考查函数调用。函数调用时,实参前不需加类型说明,选项A)错误;题目中的函数没有返回值,所以选项B)错误;函数调用前不需要加类型说明,选项D)错误。


对下列程序段的描述正确的是( )。 include int fun(int,int); void main(

对下列程序段的描述正确的是( )。 #include<iostream.h> int fun(int,int); void main() { cout<<fun(1,2)<<endl; } int fun(int x,int y) { return x+y; }

A.该函数定义正确,但函数调用方式错误

B.该函数调用方式正确,但函数定义错误

C.该函数定义和调用方式都正确

D.该函数定义和调用方式都错误


正确答案:C
解析:函数定义的一般形式为:类型标识符函数名(形式参数列表){声明部分;语句}。函数调用的一般格式为:函数名(实参列表)。而“int fun(int,int)”为函数声明,是可以不写形参名,只写形参的类型。所以,可以看出函数fun的定义和调用都是正确的。


主调函数中的两个变量a和b,要求调用函数交换a、b的值,返回交换结果,则以下正确的函数是______。

A.funa(int*x,int*y) {int*p; *p=*x;*x=*y;*y=*p; }

B.funb(int x,int y) {int t; t=x;x:y=y=t;}

C.func(int*x,int*y) {*x=*y;*y=*x;}

D.fund(int *x,int*y) {*x=*x+*y;*y=*x-*y;*x=*x-*y;}


正确答案:D
解析:选项A中指针变量p没有明确的指向,选项B是值传递方式,显然不能改变实参中的值,选项C不能完成交换,实参中的值都变成一样的,只有选项D是正确的。


下列函数参数默认值定义错误的是( )。

A.f(int x,int y=O)

B.fun(int x=100)

C.f(int x=0,int y)

D.fun(int x=f())(函数f()已经定义)


正确答案:C
解析:允许在函数的说明或定义时给一个或多个参数指定默认值。参数默认值必须从右向左定义,即在一个指定了默认值的参数的右边,不能出现没有指定默认值的参数。

更多 “南开《程序设计基础(上)》19秋期末考核答案” 相关考题
考题 在下面C语言的函数说明语句中,正确的是()。A、int fun(int x, int y);B、int fun(int x,y);C、int fun(x,y);D、int fun(int x; int y);正确答案:A

考题 单选题以下正确的函数定义形式是()。A double FUN(int x;int y)B double FUN(int x,int y)C double FUN(int x,int y);D double FUN(int x,y)正确答案:C解析:暂无解析

考题 单选题对于函数定义:  void FUN(int n, double x)  {  … }  若以下选项中的变量都已定义并赋值,则对函数FUN的正确调用的语句是()。A k=FUN(x,n);B void FUN(n,x);C FUN(int y,double m);D FUN(10,12.5);正确答案:A解析:暂无解析

考题 对于函数定义:  void FUN(int n, double x)  {  … }  若以下选项中的变量都已定义并赋值,则对函数FUN的正确调用的语句是()。 A、k=FUN(x,n);B、void FUN(n,x);C、FUN(int y,double m);D、FUN(10,12.5);正确答案:D

考题 已知一个函数的定义如下:double fun(int x,double y){⋯⋯}则该函数正确的函数原型声明为()A、double fun(intx,doubley)B、fun(int x,doubley)C、double fun(int,double);D、fun(x,y);正确答案:C

考题 下列函数参数默认值定义错误的是( )。A.Fun(int x,int y=0)B.Fun(int x=100)C.Fun(int x=0,int y)D.Fun(int x=f())(假定函数f()已经定义)正确答案:D

考题 下列带缺省值参数的函数说明中,正确的说明是 ______。A.int Fun(int x, int y=2,int z=3);B.int Fun(int x=1,int y,int z=3);C.int Fun(int x, int y=2,iht z);D.int Fun(int x=1,int y, int z=3);正确答案:A

考题 主调函数中的两个变量a和b,要求调用函数交换a、b值,返回交换结果,则以下正确的函数是______。A.funa(int*x,int*y) { int*p; *p=*x;*x=*y;*y=*p; }B.funb (int x,int y) {int t;t=x;x=y;y=t;}C.func(int *x,int*y) {*X=*y;*y=*x;}D.fund(int *x,int *y) {*x=*x+*y;*y=*x-*y;*x=*x-*y;}正确答案:D

考题 单选题下面给出的四个关于函数定义形式中,正确的是()。A double FUN(int x,int y);B double FUN(int x,int y)C double FUN(int x;int y);D double FUN(int x,y)正确答案:D解析:暂无解析

考题 下面正确的函数定义形式为( )。A.void fun();{}B.void fun(int x;int y) {}C.void fun() {}D.void fun(int x,y) {}正确答案:C解析:选项A函数声明与函数体之间没有分号;选项D形参之间用逗号隔开;选项D形参y没有类型。