东南大学c++复习一含答案Word文件下载.docx
《东南大学c++复习一含答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《东南大学c++复习一含答案Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
![东南大学c++复习一含答案Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/30/ce275740-6e59-471c-9ce1-2b6ec18abb5d/ce275740-6e59-471c-9ce1-2b6ec18abb5d1.gif)
x,s)B.fun(x,s)C.fun(x,*s)D.fun(&
x,*s)
6.设s和t分别为指向两个长度相同的字符数组指针,则循环语句while(D)可以正确实现字符串t到s的完整复制功能。
A)*s=*t&
&
t!
=0B)s++=t++&
*t!
=0
C)*(++s)=*(++t)D)*s++=*t++
7.当数组名为函数的实参时,它传递给函数的是A。
A)数组的首地址B)数组名
C)数组第一个元数值D)数组全部元数
8.有关内存分配的说法中,是B错误的。
A、指针变量可以保存动态分配的存储空间
B、数据元素存储在堆区的数组在建立时就被初始化(清零)
C、用new为指针变量分配的存储空间可以是一个数组。
D、指向静态变量的指针不必用delete释放.
9.以下语句中不正确的是C。
A)int*p=0;
B)floatp=(float)50;
C)int*p=new50;
D)float*p=newfloat[50];
10.设有说明:
chars1[10],*s2=s1;
则以下正确的语句是:
A.s1[]=”computer”;
B.s1[10]=”computer”;
C.s2=”computer”;
D.*s2=”computer”;
11.设有说明intb[4][4],以下不能等价表示元素b[3][3]的是:
A.*&
b[3][3]B.(*(*(b+3))+3)
C.*(b[3]+3)D.*(*(b+3)+3)
12.设有以下说明语句:
chars1[20]=”hello”,s2[20]=”China”,constchar*ptr=s1;
以下语句中不符合C++语法规则的语句是D
A.strcpy(s2,ptr)B.ptr=s2C.ptr=ptr+4D.*ptr=*s2
13.设有如下定义,则以下 A 是正确的。
intnum=20406;
int*np;
float*mp;
A.np=&
numB.*np=&
numC.mp=&
npD.mp=floatnp
14.设一程序中声明了两个数组inta[20][30];
intb[600];
现要将数组a中的元素按行序为主的顺序(一行接一行)复制到b数组中,例如用赋值语句b[k]=a[i][j];
则k值的计算应为 B 。
A.k=i*20+jB.k=i*30+jC.k=j*20+i+1D.k=i*30+j+1
15.已知某函数有如下定义:
intdata[4][3]={1,3,5,7,9,2,4,6,8,10,11,12};
int(*p)[3];
p=data;
则:
*(p+2) 表示 A 。
A.数组data的元素4的地址;
B.数组data的元素5的地址;
C.数组data的元素8的地址;
D.数组data的元素9的地址。
16.以下程序执行后a的值是_C_
A)4B)1C)0D)a无定值,运行时出错
#include<
iostream.h>
voidmain()
{inta,k=4,m=6,*p1=&
k,*p2=&
m;
a=p1==&
a<
endl;
}
17.设有说明:
inta[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);
则值为9的表达式是:
A.p+=3,*p++B.p+=4,*(p++)C.p+=4,*++pD.p+=4,++*p
18.以下枚举类型定义中,正确的是_A_
A.enumdata{f1=5,f2=3,s1,s2,a=0,b,c};
B.enumdata{f1,‘f2’,‘s1’,‘s2’,a=0,b,c};
C.enumdata{‘x’,‘y’,‘z’,s2,a,b,c};
D.enumdata{5,3,s1,s2,a,b,c};
19.设有说明:
char(*p)[10];
和语句:
p=newchar[5][10];
则语句delete[5]p;
表示释放二维数组B
A)第0行所占空间B)所占的所有空间
C)第10行所占空间D)第5行所占空间
20.设有说明:
float*p;
执行语句:
p=newfloat;
*p=1.5;
后,再执行deletep;
表示释放A
A)动态分配的空间,但不释放指针p
B)动态分配的空间,同时释放指针p
C)动态分配的数据1.5,但不释放指针p
D)动态分配的数据1.5,同时释放指针p
二.阅读程序
1.统计一行英文文字的单词个数。
#include<
string.h>
voidmain(void)
{
chars[200];
intcount,i,j;
”输入一行字符串:
\n”;
cin.getline(s,200);
for(count=0,j=strlen(s),i=0;
i<
j;
)
{
while(s[i]==‘‘&
j)i++;
//A
if(i<
j)count++;
//B
while(s[i]!
=’‘&
//C
}
”字符串中包含的单词数为:
”<
count<
’\n’;
程序中单词的个数是通过变量count输出的;
统计工作的结束条件是2;
字符串的长度是通过库函数3获得的,
其头文件为4;
该函数的参数可以是
5也可以是6
A行while语句的功能是7;
C行while语句的功能是8;
A行与C行可否互换,为什么?
9
B行中的if条件不存在,会出现10错误结果。
2.统计全班的C++成绩。
structstudent{
intid
charname[10];
floatcScore;
studentInput(studentx)
”输入学号、姓名、C++成绩:
”;
cin>
>
x.id>
x.name>
x.cScore;
returnx;
voidOutput(student&
x)//A
{cout<
x.id<
’\t’<
x.name<
x.cScore<
voidmain(void)
studentsts[30];
//B
inti,n=averageC=sum=0;
”请输入全班人数:
n;
”
for(i=0;
i++)sts[i]=Input(sts[i]);
//C
i++)sum+=sts[i].cScore;
//D
averageC=sum/n;
for(i=0;
i++)Output(sts[i]);
”AverageofC++scoreis:
averageC;
A行的形参为11类型的结构体变量。
B行定义了一个12,其数组元素有13个,每个元素均为(14)型变量,包含有15、16、17三个数据成员。
完成数据输入的是函数18,其参数是19型变量,其形参与实参的结合是
20传递,如果将函数定义改为21,程序的运行效率何以提高,且22行可以简略为23
D行是通过24运算符,将每位学生的C++成绩计入sum变量计算25;
3.设有以下说明,请根据说明语句的顺序回答以下问题:
1)constfloata=1;
2)float&
x=a;
3)floatb[3],&
t=b[2];
4)int&
top=*newint;
5)constint*p=&
sum;
6)constchar*consts1;
7)constfloat*consts2=b;
8)constfloat*consts3=&
b;
9)enumgrade{math,eng,phy,com};
10)enumgrade=math;
11)gradesum=math;
问题一:
以上正确的说明语句是:
26
问题二:
含有正确表示引用类型说明的语句是:
27
问题三:
正确的常量说明语句是:
28
问题四:
正确说明枚举变量的语句是:
29
4.阅读以下程序,回答问题:
#include<
voidmain()
{char*p[]={“BOOL”,”OPK”,”H”,”SP”};
inti;
for(i=3;
i>
=0;
i--,i--)
*p[i];
变量p是30数据类型
表达式*p[i]等效于A、B中的31
A.*(p[i])B.(*p)[i]
当i值为3时,如果执行语句cout<
*p+i;
输出结果是32
程序输出是33
问题五:
当将A行语句改为:
(*p)[i];
后,输出结果是34
5.阅读程序后回答问题。
#include<
charch[2][5]={"
693"
825"
},*p[2];
inti,j,s=0;
2;
i++)p[i]=ch[i];
i++)
for(j=0;
p[i][j]>
='
0'
&
p[i][j]<
9'
j+=2)
s=10*s+p[i][j]-'
"
\n"
s<
A行语句执行完毕后,指针p[0]和p[1]分别指向35和36;
该程序的执行结果为:
37。
6.阅读程序后回答问题。
fut(int**s,intp[2][3])//A
{return**s=p[1][1];
//B}
{inta[2][3]={1,3,5,7,9,11},*p;
p=newint;
fut(&
p,a);
*p<
该程序A行形参表中**S表示将变量S定义为38指针。
该程序B行中赋值语句的左值**S表示39。
该程序运行后,输出结果是:
40
7.以下程序运行后,输出结果是:
41。
voidfun(char*w,intn)
{chart,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<
s2)
{t=*s1++;
*s1=*s2;
*s2=t;
s2--;
{charp[]="
1234567"
fun(p,strlen(p));
p<
8.以下程序运行后,如果从键盘上输入:
book<
回车>
空格>
则输出结果是:
42。
如果从键盘上输入:
43。
{chara1[10],a2[10],*s1=a1,*s2=a2;
cin.getline(s1,10);
cin.getline(s2,10);
if(!
strcmp(s1,s2))cout<
*"
elsecout<
#"
strlen(strcat(s1,s2))<
9.下面程序的输出结果是:
44。
charb[]="
ABCD"
{char*chp;
for(chp=b;
*chp;
chp++)cout<
chp<
\t'
三、完善程序
1.下列程序功能是:
在给定的学生信息结构体数组a中添加和删除学生信息。
程序说明:
1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;
2)添加,删除后count数据要相应变化。
charname[20];
floatmath;
};
voidadd(studentb[10],
(1),studentx){
inti,j;
number+=1;
for(i=0;
(2)i++){
if((3)){
for(j=number;
j>
i;
--j)
b[j]=(4);
b[i]=(5);
break;
voiddel((6),int&
number,studentx)//数组中如有重名,此算法不能全删
{inti=0,j,flag=0;
number;
i++)
if(strcmp(d[i].name,x.name)==0){
flag=1;
for((7);
j<
j++)d[j]=d[j+1];
number-=1;
}
if(flag==0)cout<
noresult!
voidmain()
studenta[10]={{"
张三"
90},{"
李四"
85},{"
王五"
73}};
studenta1={"
赵二"
96};
intcount=3,i;
add(a,count,a1);
count;
cout<
a[i].name<
a[i].math<
del(a,count,a1);
2.下列程序的功能是:
将字符串中连续出现的数字作为一个整数取出依次存入b数组中。
如,若字符串的值为“45as8hgyu86trfg2356hfg877df”,则b数组中的各元素值分别是整数45、8、86、2356、8。
函数的返回值为所提取整数的个数。
intselect(char*a,int*b);
{inti,count,b[10];
Chara[100];
pleaseinputasting:
cin.getline((8));
count=select((9));
count="
b[i]<
intselect(char*a,int*b){
char*p=(10);
intj=0;
while((11)){
b[j]=0;
while((*p<
||*p>
)&
*p!
=0)
p++;
while((12)&
=0)
b[j]=(13);
j++;
returnj-1;
3.以下程序的功能是:
从给出的字符串中依次取出被空格隔开的子串,将各子串分别存入动态分配的内存空间,让一维指针数组的各指针依次指向各个动态空间中的子串。
例如:
给出的字符串为“copyfile.datfile2.dat”,则p指针数组分别指向子串“copy”,“file.dat”、“file2.dat”。
intfun(char*s,char*p[]);
{char*p[5],s[100]="
copyfile.datfile2.dat"
intn;
n=fun(s,p);
n="
n<
for(inti=0;
i++)cout<
(14)<
i++)delete(15);
}
intfun(char*s,char*p[]){
inti=0;
char*ps,*ts;
while(*s){
while(*s=='
'
)s++;
//跳过子串前的空格
ps= (16) ;
while(*s!
*s!
=0)s++;
//扫描子串
if(ps<
s){
p[i]=ts=(17);
while(ps<
s)*ts++=(18);
*ts=0;
i++;
}}
return(19);
4.下面程序的功能是:
首先建立一条链表,顺序从链表中找到data为最大的结点,从链表中删除该结点,并将其值返回。
最终删除整个链表.同时得到按降序排序的数组x。
其中,函数Insert(inta,node*head)的功能是:
用参数a产生一个新结点,将其插在链首,并返回链首的指针。
DelleteMax(noe*&
head),从head所指向的链表中找到data值为最大的结点,从链表中删除该结点并将该结点值返回。
算法提示:
当链表为空时,返回-1,在查找过程中,始终让pmax指向当前data值为最大的结点,并让pmax1指向pmax的前一个结点,找到data值为最大的结点后,将其从链表中删除该结点,并返回其值。
structnode{
intdata;
node*next;
20Insert(intx,node*head){
node*p=newnode;
p->
data=x;
21;
head=p;
returnhead;
intDeleteMax(node*&
head){
node*p1,*p2,*pmax,*pmax1;
intmax;
p1=p2=head;
head)return-1;
max=p1->
data;
pmax=p1;
while(p1){
if(max<
p1->
data){
max=p1->
pmax=p1;
pmax1=p2;
}
p2=p1;
22;
if(pmax==head)head=head->
next;
else23;
deletepmax;
returnmax;
voidmain(){
inta;
intx[200],count=0;
node*head=0;
cin>
a;
while(a!
=-1){
head=Insert(a,head);
cin>
while(head){
x[count]=24;
count++;
x[i]<
一、
选择题(共30分)
1
B
2
C
3
A
4
5
6
D
7
8
9
10
11
12
13
14
15
16
17
18
19
20
二、阅读程序(每空1分,共26分)
(1)_____count____
(2)_____i<
strlen(s)(3)strlen
(4)string.h(5)字符数组(6)字符串常量
(7)跳空格字符(8)跳非空格字符(9)前空时单词数多1
(10)后空时单词数多1(11)引用(12)结构体数组
(13)30(14)结构体类型(15)id
(16)name(17)cScore(18)Input
(19)结构体变量(20)值(21)引用
(22)C行的循环语句(23)Input(sts[i])(24)+=
(25)平均成绩(26)1,3,4,7,9,11(27)3,4
(28)1,7(29)11(30)字符指针数组
(31)A(