问答题
问答题1:以下程序统计给定输入中每个大写字母的出现次数
void AlphabetCounting(char a[], int n) {
int count[26] = {
}, i, kind = 0;
for (i = 0; i < n; ++i){
// pass 1
}
for (i = 0; i < 26; ++i) {
if (++kind > 1) putchar(';');
printf("%c=%d",'Z'-i,count[i]);
}
}
提示:第一个循环是一个计数,但是数组只能容纳26大小的字符,对于A-Z的ASCII码值过大,所以需要 Z-a[i] 进行计算.
答案:pass1 为: ++count['Z'-a[i]];
问答题2:请找出下面程序中有哪些错误?
int main(){
int i=10;
int j=1;
const int *p1;//(1)
int const *p2=&i; //(2)
p2=&j;//(3)
int *const p3=&i;//(4)
*p3=20;//(5)
*p2=30;//(6)
p3=&j;//(7)
return 0;
}
提示:const int * p1 = &i;
表示 p1 指向了 i 的地址,它的地址值不可改变,和 int const * p1 = &i
的意思一样,而 int * const p1 = &i;
的意思是指针 p1 的指向不可改变.
答案:(6),(7)
问答题3:假定有类AB,有相应的构造函数定义,能正确执行
AB a(4),b(5),c[3],*p[2]={&a,&b};语句,请问执行完此语句后共调用该类的构造函数次数为?
提示:a,b 为有参构造,c为三次的无参数构造,对于指针数组只是进行定义指向一个地址而已,并没有 new 出来一个对象,所以不进行内存的分配,因此没有发生构造.
问答题4:有如下程序,执行后输出的结果是?
#include <iostream.h>
class cla{
public:
cla(){
n++;}
~cla(){
n--;}
static int get_n(){
return n;
}
private:
static int n;
};
int cla::n= 0;
int main(){
cla *p =new cla;
delete p;
cout<<"n="<<cla::get_n()