}
本题主要考查的是C++语言中的变量作用域。
全程变量是可以在子函数中对其值作改变,且它也可作为函数间的值传递。
但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。
所以本题主函数的局部变量a,b把同名的全程变量屏蔽了。
23)执行下列程序语句后,屏幕输出为4。
#include
usingnamespacestd;
intn=5;
intmain()
{
intn=3;
n++;
:
:
n++;
cout<return0;
}
C++中变量有全局变量和局部变量。
不在任何函数之内声明的变量即为全局变量。
当在一个函数中声明的局部变量与全局变量重名时。
局部变量会将全局变量屏蔽掉。
如果要引用全局变量可以变量名的前面加“:
:
”。
24)有如下程序:
#include
usingnamespacestd;
intmain()
{
int*p;
*p=9;
cout<<"Thevalueatp:
"<<*p;
return0;
}
编译运行程序将出现的情况是运行时有可能出错
25)下面程序
#include
voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
cout<<*(p+2)<}
的输出是3。
*p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。
26)下列程序的输出结果是102030
#include
usingnamespacestd;
intn[][3]={10,20,30,40,50,60};
intmain()
{
int(*p)[3];
p=n;
cout<
return0;
}
二维数组每一行都对应一个指针,这个指针指向每行第一个元素。
题中p[0][0]与n[0][0]对应,*(p[0]+1)与n[0][1]对应,(*p)[2]与p[0][2]对应。
27)有以下程序
#include
#include
structNODE
{intnum;NODE*next;};
voidmain()
{NODE*p,*q,*r;
p=(NODE*)newNODE;
q=(NODE*)newNODE;
r=(NODE*)newNODE;
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
cout<num+q->next->num;
}
程序运行后的输出结果是40。
p->num即为10,q->next->num即为r->num,为30,所以p->num+q->next->num=10+30=40。
28)设有以下说明语句
structex
{intx;floaty;charz;}example;
则下面的叙述中不正确的是example是结构体类型名
example是结构体变量名
29)以下程序的功能是:
建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。
#include
stuctnode
{chardata;
node*next;};
node*CreatList(char*s)
{node*h,*p,*q;
h=(node*)newnode;
p=q=h;
while(*s!
='\0')
{p=(node*)newnode;
p->data=*s;
q->next=p;
q=p;
s++;
}
p->next='\0';
returnh;
}
voidmain()
{charstr[]="linklist";
node*head;
head=CreatList(str);
...
}
本题要求建立一个structnode类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填structnode*。
30)写出执行完下列程序段以后指定的变量的值:
boolx=true,y=false,z=false;
x=x&&y||z;
y=x||y&&z;
z=!
(x!
=y)||(y==z);
已知x=false,z=true,则y=0/false。
31)下列语句段的输出结果是1024
intk=1,n=10,m=1;
while(k<=n)
{
m*=2;
n--;
}
cout<while循环是当型循环,本题的条件是k<=n;k的初始值为1,而每次循环都会执行n--,循环执行10次,故最后输出1024。
32)以下程序中,函数SumColumMin的功能是:
求出M行N列二维数组每列元素中的最小值,并计算它们的和值。
和值通过形参传回主函数输出。
请填空。
#defineM2
#defineN4
voidSumColumMin(inta[M][N],int*sum)
{inti,j,k,s=0;
for(i=0;i{k=0;
for(j=1;jif(a[k][i]>a[j][i])k=j;
s+=a[k][i];
}
*sum=s;
}
voidmain()
{intx[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin(x,&s);
cout<
}
33)以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。
请填空:
#defineN3
#defineM4
voidLineMax(intx[N][M])
{inti,j,p;
for(i=0;i{p=0;
for(j=1;jif(x[i][p]cout<<"Themaxvalueinline"<
}
}
voidmain()
{intx[N][M]={1,.5,7,4,2,6,4,3,8,2,3,1};
LineMax(x);
}
34)以下程序的功能是调用函数fun计算:
m=1-2+3-4+…+9-10,并输出结果。
请填空。
intfun(intn)
{intm=0,f=1,i;
for(i=1;i<=n;i++)
{m+=i*f;
f=-f;
}
returnm;
}
voidmain()
{cout<<"m="<35)以下程序运行后的输出结果是3,2,2,3。
voidfun(intx,inty)
{x=x+y;y=x-y;x=x-y;
cout<voidmain()
{intx=2,y=3;
fun(x,y);
cout<}
被调函数fun()实现的功能是交换变量x和y的值并打印,由于该函数无返回值,所以在主函数中打印出的x和y的值仍然为2,3。
36)下面程序的运行结果是:
35。
voidswap(int*a,int*b)
{int*t;
t=a;a=b;b=t;
}
voidmain()
{intx=3,y=5,*p=&x,*q=&y;
swap(p,q);
cout<<*p<<*q;
}
观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。
1)若x和y都是int型变量,x=100、y=200,且有下面的程序片段
cout<<(x,y);
上面程序片段的输出结果是2
本题的考查点是逗号表达式。
在(x,y)中的","是一个特殊的运算符,叫做逗号运算符,它的一般形式为:
表达式1,表达式2,求解过程为:
先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。
2)以下程序的输出结果是101091
#include
voidmain()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
cout<}
for语句的一般格式为:
for(表达式1;表达式2;表达式3)语句执行中只要表达式2为真,则执行for语句中指定的内嵌语句。
所以,本题在条件为真的情况下,先执行printf函数。
x--是先使用后运算。
3)请读程序:
#include
#include
voidmain()
{
inta,b;
for(a=1,b=1;a<=100;a++){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5;
}
cout<}
上面程序的输出结果是8。
"%"是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b>=20)为假,跳出循环,此时共循环8次,即a=8。
4)当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为n-1。
5)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
#include
voidsort(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+1;jif(a[i]}
voidmain()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)cout<cout<}程序运行后的输出结果是1,2,3,8,7,6,5,4,9,10,。
本题的考查点是对数组的操作。
本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。
6)有以下程序
#include
voidmain()
{inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2)pa[1][i]=pa[1][i]-1;
elsepa[1][i]=1;
cout<}
执行后输出结果是7
本题的考查点是二维数组和指针数组的应用。
在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素pa[1][i]的值减1,当i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结果就是2+4+1=7。
7)以下程序的输出结果是520。
#include
voidmain()
{charst[20]="hello\0\t\\";
cout<}
本题主要考查C++语言的字符串与库函数。
C++语言中字符串是以'\0'字符结束的,且strlen()函数计算的是'\0'字符前的所有字符的个数。
本题中strlen(st)应为5。
数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。
sizeof()函数是计算变量或数组的所分配到的内存空间的大小。
所以本题的sizeof(st)为20。
8)执行下列程序后,输出的结果是10。
intfact(intn)
{
if(n<=1)
return1;
else
returnn+fact(n-1);
}
intmain()
{
cout<return0;
}
9)对于函数int&add(int*pa,intb);的重载函数,不正