AP计算机科学A:程序设计

学习AP计算机科学A的概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

←之前 1

问题21:面向对象程序设计

考虑下面的代码:

私有静态类哲人{

私有字符串名称;

私有字符串favoritessubject;

公共哲学家(字符串n,字符串f) {

Name = n;

favoritessubject = f;

}

公共字符串getName() {

返回名称;

}

getfavoritessubject () {

返回favoriteSubject;

}

Public void speak() {

system . out。println(“Hello, World !我的名字是“+name +”。我最喜欢的科目是“+ favoritessubject”;

}

}

私有静态类Nominalist扩展哲学家{

布尔方济会的;

public Nominalist(String n,boolean frank) {

超级(n,“逻辑”);

方济各=坦率;

}

Public void speak() {

super.speak ();

如果(方济会修士){

system . out。println(“我是方济会教徒”);

} else {

system . out。println(“我不是方济各会教徒”);

}

}

公共字符串谁的ighthavetaughtme () {

如果(方济会修士){

回复“也许是奥卡姆的威廉?....”;

} else {

“也许是圣波拉达兰的杜兰杜斯——一个丑八怪,一个多明尼加的唯名论者!”

}

}

}

如果你想做一个toString ()两种方法哲学家唯名论的,使用与每个类的电流相同的输出说话()方法,组织代码的最佳方式是什么?

我有toString()调用两个类。说()方法。

2有说()方法调用newtoString()方法。

3创建一个新的子类并编写toString ()方法。

可能的答案:

3

2

I和III

正确答案:

2

解释

toString ()方法必须返回字符串值。因此,让这个方法生成当前生成的输出是最有意义的说()。那么,你可以说()调用toString ()方法输出相同的字符串数据。

问题1:使用功能分解

给定一个类Thing和代码:

一件事,二件事;

下面的函数调用等价于什么?

thingTwo = thingOne;

可能的答案:

运算符= (thingTwo thingOne);

thingOne使用了thingTwo的复制构造函数

stream& Thing::operator=(const Thing& rhs);

thingTwo。operator = (thingOne);

以上皆非

正确答案:

thingTwo。operator = (thingOne);

解释

给我们的是,thingOne和thingTwo已经被创建了,这是一个至关重要的信息。我们来看看每个选项

运算符= (thingTwo thingOne);

这行代码毫无意义,而且在语法上是错误的。

stream& Thing::operator=(const Thing& rhs);

这行代码表示从“Thing”类访问“operator=”方法并将其放入ostream,这与将thingOne赋值给thingTwo无关。

当我们遇到选择复制构造函数的问题时,我们必须记住,只有当对象使用to创建另一个对象时才使用复制构造函数,例如我们有一个名为Foo的给定类:

Foo Foo;

Foo foobar = Foo;

在本例中,我们使用foo来创建foobar。

唯一有效的选择是:

thingTwo.operator = (thingOne);

这行代码意味着thingOne对象被分配给了thingTwo。

问题1:识别类层次结构

考虑一下以下流行编程语言的历史:

PHP

Java

objective - c

Python

下面哪一种是所有这些语言共同的最接近的祖先?

可能的答案:

Smalltalk

艾达

鲁比(人名)

C

口齿不清

正确答案:

C

解释

所有这些语言都是基于c语言的。

  • Ruby是在1995年发明的,和PHP同年,所以它不可能影响像Objective-C和Python这样的早期语言。
  • Lisp确实影响了至少一种语言,Python,但它没有影响任何其他语言。
  • Ada直接影响了Java,因为它影响了C语言,所以可以认为它是这些其他语言的祖先;然而,正因为如此,艾达并不是最近的祖先。
  • Smalltalk影响了Objective-C,但在这个列表中没有其他语言。

一个线索是答案“目标——”C,它是C的严格超集,增加了面向对象功能。

问题1:识别类层次结构

运行以下代码后,字符串kitchen的值是什么?

  1. 班回家
  2. {
  3. 公众:
  4. 回家(字符串);
  5. 空白searchhome ();
  6. int buyhome ();
  7. 私人:
  8. 字符串厨房();
  9. };
  10. ::家庭(字符串)
  11. {
  12. 厨房= c;
  13. }
  14. int main ()
  15. {
  16. str =“大”;
  17. 回家(str);
  18. }
可能的答案:

c

“小”

“大”

str

无效

正确答案:

“大”

解释

类定义第4行中的构造函数是棘手的地方。在构造函数的初始化中,我们注意到输入是一个字符串。

往下看第10行,在定义构造函数的地方,我们看到一个输入为c的构造函数,它被定义为一个字符串,将把kitchen的值设置为c。

最后,回到main代码,我们看到main中构造函数的值是'big',定义在str中。

所以厨房=‘大’。

问题1:选择合适的数据结构

将函数声明为void和将其声明为int有什么区别?

可能的答案:

没有区别。

int函数需要在函数内部声明一个整型变量,而void函数则不需要。

void声明不期望输出到该函数,而int函数声明期望输出一个整型值。

void函数没有输入,而int函数至少有一个整数输入。

void函数可以有任何返回类型,而int函数只能有一种返回类型。

正确答案:

void声明不期望输出到该函数,而int函数声明期望输出一个整型值。

解释

函数声明非常重要,因为必须定义函数的返回类型。void函数不需要返回类型,而int函数必须以整数值作为其返回类型。

问题1:选择合适的数据结构

下面的代码有什么问题?

空白printsometext ()
{
cout < <“印刷文本\ n”;
(int i = 0; < 3;我=我+ 1)
{
我cout < < < <“\ n”
}
返回2;
}

可能的答案:

void函数不能返回输出。

Cout不能输出数字。

在函数声明之后需要分号。

循环格式不正确。

字符\n不存在。

正确答案:

void函数不能返回输出。

解释

在创建函数时选择返回类型是非常重要的。如果你希望你的函数返回一个整数,你可以在你的函数前加上"int"来表示这个函数期望一个整数输出。在这种情况下,函数被声明为void,这意味着没有输出。但是,代码指出返回值为2,这与void关键字冲突。要解决此问题,要么删除返回语句,要么将void更改为int。

问题2:程序设计

选择循环

想象一下,我想为一家银行写一段代码,询问用户他/她是想取款、存款还是退出。为了确保用户在按下quit结束程序之前能够执行尽可能多的事务,最好使用哪种类型的循环?

可能的答案:

一个延伸的循环。

一个无限循环。

一个循环。

一个循环。

正确答案:

一个延伸的循环。

解释

在我们的问题中,程序必须至少运行一次才能向用户呈现所有选项。由于这个原因,最好的选择是do-while循环,因为该循环中的语句至少执行一次,并且退出循环的条件在末尾。在本例中,退出条件是用户按下quit(在选项至少显示一次之后)。

在这种情况下,while循环可能会起作用;然而,这并不一定是最明智的选择。这是因为在循环内执行任何操作之前都要测试条件。这意味着,无论while循环内是什么,都不一定要执行。

对于这个问题,for循环也不是一个好的选择,因为for循环要执行一定的次数。在这种情况下,我们不知道用户是想做1个事务还是10个事务。因此,for循环不是最好的选择。

无限循环也不是我们想要的,因为它会永远运行下去。在我们的示例中,我们希望代码停止提示用户并在“quit”之后结束。

问题311:计算机科学

使用指针

研究下面的伪代码。

Int * var1;

Int foo = 63;

Var1 = &foo;

Var2 = *var1;

var1和var2的值是多少?

可能的答案:

Var1被赋值为63

Var2被赋值为63

Var1被分配给foo的内存地址值

Var2被分配了var1的内存地址值

Var1被赋值为63

Var2被分配了var1的内存地址值

Var1被分配给foo的内存地址值。

Var2被赋值为63

正确答案:

Var1被分配给foo的内存地址值。

Var2被赋值为63

解释

指针存储另一个变量的地址。指针的声明方式是先命名类型,然后加上星号,最后加上变量名。在我们的例子中,var1被声明为一个指向整数的指针:

Int * var1;

接下来在代码中,我们看到创建了一个名为“foo”的整型变量,并将其赋值为63。

然后使用寻址运算符(&)来获取变量的地址。现在让我们看看下一行代码:

Var1 = &foo;

这里的&符号用于在内存中获取foo的地址。这意味着var1包含foo在内存中存储的地址值。

接下来,在代码中,我们有以下语句:

Var2 = *var1;

这里使用了解引用操作符(*)。每当需要获取指针所指向的变量的值(而不是地址)时,就使用该操作符。在本例中,var1存储foo的地址。但是,通过使用解引用操作符,我们可以获得地址存储在var1中的变量的实际值。在本例中,对var1解引用,我们得到foo的实际值63。因此,var2 = 63。

问题1:选择合适的数据结构

二维阵列

给定以下初始化数组:

int第四;

int[][] myArray = {{1,2,3},

{4,5,6},

{7,8,9}};

使用myArray,我如何存储在变量“第四”,数字4?

可能的答案:

第四= myArray[2][1];

第四= myArray[1][0];

= myArray[0][1];

[1][1];

正确答案:

第四= myArray[1][0];

解释

当创建和初始化二维数组时,访问矩阵内部项目的方式是通过调用行和列的数组(即myArray[row][column])。记住,数组从0开始,数字4应该在第1行,第0列。因此,为了将该数字保存到变量“fourth”中,我们将执行以下操作:

第四= myArray[1][0];

*注意:myArray[1][0]与myArray[0][1]不同。

myArray[1][0] =4,因为它是位于行=1和列= 0的项。

myArray[0][1] =12,因为它是位于行=0和列=1的项。

问题1:选择合适的数据结构

对于库来说,最好的数据结构是什么?数据以标题和标题副本的形式存在。

可能的答案:

散列映射

静态值

ArrayList

数组

正确答案:

散列映射

解释

哈希映射-键是标题,值是副本的数量

哈希映射是(键,值)对的集合。

哈希映射有O(1)个访问,所以这将是存储数据的最快和最好的方法。

←之前 1
大学导师提供的学习工具