return0;
}
二、选择题
1、设有如下定义:
nt(*ptr)();则以下叙述中正确的是(D)
A、ptr是指向一维组数的指针变量
B、ptr是指向int型数据的指针变量
C、ptr是指向函数的指针变量,该函数返回一个int型数据
D、ptr是一个函数名,该函数的返回值是指向int型数据的指针
2、若用数组名作为函数调用的实参,传递给形参的是(A)
A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
3、以下程序的输出结果是哪一项(D)
#include
main()
{
inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf("%d\n",p[3][2]);
}
A.输出项不合法B.6C.8D.12
4、以下有关宏替换和函数的调用叙述不正确的是:
(A)
A、宏替换和函数的调用均占用运行时间。
B、宏名无类型,函数有类型
C、宏替换只是字符替换,不分配内存,但函数调用要分配内存
D、再调用宏时程序的长度要加长,而函数调用不变
5、下列运算符中不能被重载的是(D)
A、&& B、!
= C、. D、->
6、实现运行时多态的机制是(A)
A、虚函数 B、重载函数 C、静态函数 D、模板函数
7、下列关于this指针的叙述中,正确的是(D)
A、任何与类相关的函数都有this指针
B、类的成员函数都有this指针
C、类的友元函数都有this指针
D、类的非静态成员函数才有this指针
8、下列表达式使用正确的是(D)
A、int &n=10;B、inta[10];int&ra[10]=a;
C、chr*p;strcpy(p,”hello”);D、intm=10;constint&n=m;m=12;
三、大题
1、构造一个学生类,封装学生信息的录入和打印函数,然后输入一个学生的信息并打印出来。
(8分,提示:
学生信息包括姓名学号,其他可以任意添加。
)
#include
using namespace std;
class student
{
public:
student(){}
~student(){}
void insert();
void show();
private:
char name[20]
int num;
};
void student:
:
insert()
{
cout << "输入学生姓名:
";
cin >> this->name;
cout << "\n输入学生学号:
";
cin >> this->num;
cout << endl;
}
void student:
:
show()
{
cout << this->name << " " << this->num << endl;
}
int main()
{
class student stu;
stu.insert();
stu.show();
return 0;
}
2、使用你学过的排序方法,并用到指针对数组a[10]进行排序。
(8分,提示:
手动输入任意10个数。
并输出排序结果。
)
#include
voidsort(int*a,intn)
{
intt;
intj,i;
for(i=0;i{
for(j=i+1;j{
if(*(a+i)>*(a+j))
{
t=*(a+i);
*(a+i)=*(a+j);
*(a+j)=t;
}
}
}
}
voidoutput(int*a,intn)
{inti;
for(i=0;iprintf("%d",*(a+i));
printf("\n");
}
voidinput(int*a,intn)
{inti;
for(i=0;iscanf("%d",(a+i));
}
intmain()
{
inta[10];
input(a,10);
sort(a,10);
output(a,10);
return0;}
3、编程实现:
找出两个字符串中最大公共子字符串。
(10分,提示:
如"abccade","dgcadde"的最大子串为"cad"。
)
#include
#include
voidmain()
{
chara[500],b[500];
intc[500][500];
intla,lb;
inti,j;
while(scanf("%s",&a)!
=EOF)
{
scanf("%s",&b);
la=strlen(a);
lb=strlen(b);
for(i=0;i<=lb;i++)
c[i][0]=0;
for(i=0;i<=la;i++)
c[0][i]=0;
for(i=1;i<=lb;i++)
for(j=1;j<=la;j++)
{
if(a[j-1]==b[i-1])
{
c[j][i]=c[j-1][i-1]+1;
}
else
{
c[j][i]=c[j-1][i]>c[j][i-1]?
c[j-1][i]:
c[j][i-1];
}
}
printf("%d\n",c[la][lb]);
}
}
4、结构体:
typedefstructstudent
{
intage;
charname[10];
charsex;
structstudent*next;
}stu;
要求:
创建有头节点的链表,
(1)写出输入函数对链表赋值,长度不少于3,
(2)写出一个输出函数输出链表信息,(3)写出删除一个节点信息的函数,并输出删除结果。
【15分】
5、求n!
的未尾有几个0,n小于等于1000。
(17分,提示:
输入n值10,则10!
=3628800有俩0,则输出2。
可用素数相乘的方法来做,如72=2*2*2*3*3);
#include
#defineNUM1000
intfind5(intnum){
intret=0;
while(num%5==0){
num/=5;
ret++;
}
returnret;
}
intmain(){
intresult=0;
inti;
for(i=5;i<=NUM;i+=5)
{
result+=find5(i);
}
printf("thetotalzeronumberis%d\n",result);
return0;
}
以下叙述正确的是(B)
A、在C程序中,main函数必须位于程序的最前面。
B、语言本身没有输入输出语句。
C、程序的每行只能写一条语句。
D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误
1、若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”。
则以下不能满足要求的表达式是(C)
A、A%2==1B、!
(A%2==0)
C、!
(A%2)D、A%2
3、设有如下定义:
int(*ptr)();
则以下叙述中正确的是(D)
A、ptr是指向一维组数的指针变量
B、ptr是指向int型数据的指针变量
C、ptr是指向函数的指针变量,该函数返回一个int型数据
D、ptr是一个函数名,该函数的返回值是指向int型数据的指针
4、若用数组名作为函数调用的实参,传递给形参的是(A)
A、数组的首地址
B、数组第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
5、以下程序的输出结果是哪一项(D)
#include
main()
{
inta[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf("%d\n",p[3][2]);
}
A.输出项不合法B.6
C.8D.12
6、以下有关宏替换和函数的调用叙述不正确的是:
(A)
A、宏替换和函数的调用均占用运行时间。
B、宏名无类型,函数有类型
C、宏替换只是字符替换,不分配内存,但函数调用要分配内存
D、再调用宏时程序的长度要加长,而函数调用不变
C++
7、下列运算符中不能被重载的是(C)
A、&& B、!
= C、 . D、->
8、实现运行时多态的机制是(A)
A、虚函数 B、重载函数 C、静态函数 D、模板函数
9、下列关于this指针的叙述中,正确的是(D)
A、任何与类相关的函数都有this指针
B、类的成员函数都有this指针
C、类的友元函数都有this指针
D、类的非静态成员函数才有this指针
10、下列表达式使用正确的是(D)
A、int &n=10;B、inta[10];int&ra[10]=a;C、chr*p;strcpy(p,”hello”);D、intm=10;constint&n=m;m=12;
二、填空题
1、阅读下列程序写出程序结果:
a=_0__,b=__1_,c=__1_
#include
usingnamespacestd;
voiddisp(inta1,int&b1,int*c1)
{
a1=1;
b1=1;
*c1=1;
}
intmain()
{
inta=0,b=0,c=0;
int&d=b;
disp(a,d,&c);
cout<<"a="<}
2、请写出释放下面new申请空间的代码
(1)、int*a=newint;
_____deletea;________________
(2)、int*a=newint[5];
_______delete[]a;________________
3、简述类与结构体的区别:
结构体的成员默认是公有的,类中是私有的
4、写出下面代码的运行结果:
___hello你好!
_________
_______4________
#include
#include
usingnamespacestd;
intmain()
{
stringstr="good",str1="hello",str2="你好!
";
str1+=str2;
cout<cout<return0;
}