模拟题3及参考答案.docx
《模拟题3及参考答案.docx》由会员分享,可在线阅读,更多相关《模拟题3及参考答案.docx(13页珍藏版)》请在冰点文库上搜索。
模拟题3及参考答案
《高级语言程序设计(C++)》模拟题(三)
一.单项选择题(每小题2分,共20分)
1.设有inta,b;下面()不是C++的正确表达式。
(A).!
a(B).b+'a'(C).a
“=”:
左操作数必须为左值
2.计算表达式x=a=4,b=x++后,变量x,a,b的值分别是:
()
(A)4,4,4(B)4,4,5(C)4,5,5(D)5,4,4
x++先赋值,后自加
3.以下运算符中,优先级最低的是:
()
(A)&&(B)>=(C)?
:
:
(D)->
从高到低依次是:
->,>=,&&,?
:
4.表达式1/2*2.0的值是:
()
(A)2(B)1(C)0.5(D)0
1/2两个整数相除的结果为整数,即为0,0*2.0还是0
如果题目改为1.0/2*2.0则结果为1
5.设有变量定义char*s1=”string”,*s2=”1234”;
执行语句cout<()
(A)10(B)6(C)5(D)4
s1在连接s2之后变成”string1234”,长度为10.
注意:
在VC下,因为strcat(s1,s2)的第一个参数指向的是常量字符串,所以会出错.
上面这段代码在TC下可以正常运行.
6.设有变量定义inta[]={3,5,7,9,11},*p=a+2,y;
执行语句y=*p;后,变量y的值是:
()
(A)6(B)7(C)8(D)9
*p=a+2实际上就是将p指向a[2],也就是7.
7.设有变量定义inti,j;与表达式i==0&&j==0等价的表达式是:
()
(A)i==j(B)i&&j(C)!
i&&!
j(D)i||j
!
i&&!
j也就是!
i和!
j都必须为1,也就是i和j都必须为0
8.设有变量定义inta[3][4];能够表示元素a[2][1]的值有:
()
(A)*a[2]+1(B)&a[2][1](C)*a[2][1](D)*(a[2]+1)
a[2]实际上就是a[2][0]的地址,a[2]+1实际上就相当于a[2][0]的地址再加一,也就是a[2][1]
9.以下正确的函数原型是:
()
(A)voidfun(int,int=0);(B)floatfun(x,y);
(C)voidfun(*,&);(D)intfun(int=0,int);
B,参数没有类型
C,参数类型不对
D,默认参数只能放在最后.
10.已知inta[3][2]={1,2,3,4};则a[1][1]的值是()。
(A).1(B).2(C).3(D).4
a[3][2]={1,2,3,4}相当于a[3][2]={{1,2},{3,4}}.
二.简答题(第1-4题每题2分,第5-6题每题4分,共16分)
1.表述问题“x和y都小于z”的C++表达式是?
参考答案:
x说明:
不能写成xy
2.设有变量定义inty=123;执行语句cout<参考答案:
173
说明:
按8进制输出
3.设有变量说明intw[]={1,3,5,7,9},*p=w;表达式*p+*(w+3)的值?
参考答案:
8
说明:
*p=w,也就是p指向w[]的第一个位置,*p也就是1了.
*(w+3),就是w的第三个位置上的值,也就是7了.
所以*p+*(w+3)=1+7=8;
4.函数原型intfun(int,int=0);中“int=0”的含义是什么?
参考答案:
在调用时如果不指定第二个参数,则第二个参数默认为0.
比如fun
(2)等同于fun(2,0)
5.请说明形参和实参的区别。
参考答案:
主调函数中调用一个函数实时,函数名后面的括弧中的参数称为实参。
在定义函数,函数名后的括弧中的变量名称叫形式参数就是形参。
1.在未被调用时。
不占内存单元。
2.实参可以是常量,变量或者表达式。
但要求有确定的值。
调用时将实参的值赋给形参(如果是形参是数组名则传递数组首地址而不是数组的值)
3.在被定义的函数中,必须指定形参的类型
4.实参与形参的类型应相同或赋值兼容
6.for语句可以实现直到型循环,请画出流程控制框图。
参考答案:
三.分析程序,写输出结果(每小题6分,共24分)
1.#include
voidmain()
{intx=4;
switch(2*x-1)
{case3:
cout<case5:
cout<<2*x+1<<"";
case7:
cout<<3*x-1<<"";
default:
cout<<"default";
}
cout<<"Switchend.\n";
}
参考答案:
11defaultSwitchend
说明:
2*x-1的值为7,所以直接跳到case7:
3*x-1的值为11.case7:
语句后面并无break;所以接续执行后面的default:
语句.
2.#include
#include
voidmain()
{intm,k,i;
for(m=1;m<=10;m+=2)
{k=m/3;
for(i=2;i<=k;i++)
if(m%i)cout<}
}
参考答案:
79
说明:
m/3,m为整数,所以结果只取整数.如m=7,则m/3的值是2.
m%i表示取模,如m=7,i=3,则m%i的值是1.
3.#include
intfind(char*str,charc)
{char*p=str;intn=0;
while(*p&&*p!
=c){p++;n++;}
return*p?
n:
-1;
}
voidmain()
{chara[]="programdesign";
cout<<}
参考答案:
38
4.#include
voidf(intm)
{cout<if(m>1)
f(m-1);
}
voidmain()
{f(4);
cout<}
参考答案:
4321
四.根据程序功能填空。
(每空3分,共21分)
1.以下程序的功能是计算并输出两个复数之差。
#include
structcomp{floatre;floatim;};
compM(___
(1)___)函数M的两个参数,从下面的代码看出x和y是没有声明的
{compz;
z.re=x.re-y.re;
z.im=x.im-y.im;
return(___
(2)___);变量z就是x,y这两个复数的差
}
voidmain()
{compa,b,t;
a.re=1;a.im=2;
b.re=3;b.im=4;
t=M(___(3)___);函数M的参数
cout<<"a-b=("<}
(1)compx,compy
(2)z
(3)a,b
2.以下程序建立一个66矩阵a,然后把矩阵a的主对角线元素放在数组b中。
主函数输出b的元素。
#include
__(4)___因为transform在定义之前就调用了,所以此处应该是transform的声明
voidmain()
{inta[6][6],b[6],i,j;
for(i=0;i<6;i++)
for(j=0;j<6;j++)cin>>a[i][j];
transform(__(5)___);transform的两个参数,根据类型判断,a和b刚好
for(i=0;i<6;i++)
cout<
cout<}
voidtransform(intx[6][6],int*p)
{for(inti=0;i<6;i++)
{*p=__(6)___;x[i][i]
__(7)___;指针加一
}
}
(4)voidtransform(intx[6][6],int*p)
(5)a,b
(6)x[0][i]
(7)p++
五.程序设计(第一题5分,其余每题7分,共19分)
编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通过参数传送。
#
##
##
#######
#include
usingnamespacestd;
voidPrintTrangle(constcharsign,constintline)
{
for(inti=1;i<=line;i++)
{
for(intj=i;jcout<<"";
for(intk=i;k<3*i-1;k++)
{
if((k==i||k==(3*i-2))||i==line)
{
cout<}
else
{
cout<<"";
}
}
cout<<"\n";
}
}
intmain(intargc,char*argv[])
{
charsign='#';
intline=4;
PrintTrangle(sign,line);
return0;
}
2.编写程序,打印如下杨辉三角。
1
11
121
1331
14641
#include
usingnamespacestd;
#defineLINE_COUNT5
intmain(intargc,char*argv[])
{
intA[LINE_COUNT][LINE_COUNT];
inti,j;
for(i=0;i{
A[i][0]=1;
A[i][i]=1;
}
for(i=2;i//从第三行开始
for(j=1;j
//两重循环,j从1到i
A[i][j]=A[i-1][j-1]+A[i-1][j];
for(i=0;i{
for(j=0;j<=i;j++)
//输出j从0到i
cout<cout<}
return0;
}
3.编写函数create把1-10十个数字建立一个以head为表头的单向链表
//定义结构体
typedefstruct_MY_NODE
{
intvalue;
_MY_NODE*next;//next的类型为自身的指针
_MY_NODE()//默认的构造函数
{
value=0;
next=0;
}
}MY_NODE;
voidcreate(intcount,MY_NODE**head)//第二个参数为指针的指针
{
MY_NODE*pNext=0;
MY_NODE*pTemp=0;
for(inti=0;i{
//首节点
if(i==0)
{
pNext=newMY_NODE;
*head=pNext;
}
else
{
pNext=pTemp;
}
pNext->value=i+1;//赋节点的值
//最后一个节点
if(i==count-1)
{
pNext->next=0;//
}
else
{
pTemp=newMY_NODE;
pNext->next=pTemp;//下一个节点
}
}
}
int_tmain(intargc,_TCHAR*argv[])
{
intcount=10;
MY_NODE*head=0;
create(count,&head);
MY_NODE*pNext=head;
for(inti=0;i{
MY_NODE*pTemp=pNext->next;
deletepNext;
pNext=pTemp;
}
return0;
}