AP计算机科学A:实现技术

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

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

例子问题

例子问题1:实现技术

考虑以下代码:

Int [] vals = {6,1,41,5,1};

int[][] newVals = new int[vals.length][];

For (int I = 0;我< vals.length;我+ +){

newVals[i] = new int[vals[i]];

For (int j = 0;J < vals[i];j++) {

newVals[i][j] = vals[i] * (j+1);

上面的代码做什么?

可能的答案:

它创建了一个二维矩阵瓦尔斯数组用于每一行。

它把这些值加起来瓦尔斯,把结果放在newVals

它执行矩阵乘法运算瓦尔斯而且newVals,将最终结果存储在newVals

的成员的倍数,该代码创建了一个2D数组瓦尔斯,使用其中的每个值来确定要计算的倍数的数量。

的成员的所有倍数从1到5,该代码创建了一个2D数组瓦尔斯。

正确答案:

的成员的倍数,该代码创建了一个2D数组瓦尔斯,使用其中的每个值来确定要计算的倍数的数量。

解释

让我们看看这个程序的主循环:

For (int I = 0;我< vals.length;我+ +){

newVals[i] = new int[vals[i]];

For (int j = 0;J < vals[i];j++) {

newVals[i][j] = vals[i] * (j+1);

第一个循环显然贯穿瓦尔斯数组表示该数组中的项数。之后,它在newVals二维数组是与输入数组中的值一样长的第二个维度瓦尔斯.因此,对于41,它在中创建第三行newVals这是41列宽。

然后,我们进入第二个循环。这个迭代从0到存储在中的当前位置的值瓦尔斯.它将值的倍数放在给定的2D数组位置中。想到的j + 1.对于41的情况,这将从1到41(对于所有值也是如此)。因此,您创建了一个具有初始值的所有倍数的2D数组瓦尔斯数组中。

例子问题1:实现技术

考虑以下c++伪代码:

类车{

Const int wheels = 4;

浮动milesPerGallon;

字符串;

字符串模型;

Car sportscar =新车;

这两个班有什么区别,和对象跑车?

可能的答案:

跑车实例化的的车。

他们没有亲戚关系。

它们都是从其他东西实例化的。

它们是一样的。

实例化的跑车

正确答案:

跑车实例化的的车。

解释

在面向对象范式内编程时,请将类视为蓝图,而将对象视为基于该蓝图构建的房子。

是一个抽象的规范,不引用任何一个特定的实例。这只是一个协议,所有想成为汽车的物体都应该遵守。的跑车对象是汽车蓝图的实现。这是一个特定的实例。在编程术语中,”跑车实例化的."

例子问题1:实现技术

Java显式类型转换

考虑以下JAVA代码:

public static void main(字符串[]参数)

双倍数字1 = 99.05;

intNumber2 = (int) number1;

system . out。Println ("number1 = " + number1);

system . out。Println ("number2 = " + number2);

控制台的输出是什么?

可能的答案:

number1 = 99.05

科学= 99.00

number1 = 99

科学= 99

number1 = 99.05

科学= 99

number1 = 99.05

科学= 99.05

正确答案:

number1 = 99.05

科学= 99

解释

类型强制转换处理的是将一个变量的值赋给另一个不同类型的变量。在这个例子中,我们有两个变量一个是double,另一个是整数。Number1是值为99.05的双精度值。但是,当number2被赋值为number1时,将进行一些显式的类型转换。当一个整数被赋值为double类型时,它的小数点位置就会下降。这意味着number2的值为99。

例子问题1:实现技术

类人{

int高度;

浮子重量;

公众:

int获得();

空白setHeight (int);

浮动getWeight ();

空白setWeight(浮动);

};

的访问级别是什么高度而且重量?

可能的答案:

受保护的

朋友

私人

公共

虚拟

正确答案:

私人

解释

在给出访问说明符之前,所有类成员都是隐式私有的。使用访问说明符之后定义的所有成员都将具有该访问级别,直到显式调用另一个访问说明符为止。由于没有使用访问说明符,重量而且高度自动私有的。

请注意,虚拟不是访问关键字。

例子问题1:信息隐藏

考虑以下代码:

公共静态类时钟{

私人int秒;

公共时钟(int s) {

秒= s;

公共无效setTime(int s) {

秒= s;

公共无效setSeconds(int s) {

int hoursMinutes = seconds - seconds % 60;

seconds = hoursMinutes + s;

公共无效setMinutes(int min) {

Int hours = seconds / 3600;

int currentSeconds = seconds % 60;

seconds = hours + min * 60 + currentSeconds;

下面哪个选项表示返回时钟的分钟值的方法?

可能的答案:

公共int getMinutes() {

返回秒* 60;

公共int getMinutes() {

Int hours = seconds / 3600;

返回(秒-小时* 3600);

公共int getMinutes() {

Int hours = seconds / 3600;

返回(秒-小时* 3600)/ 60;

公共int getMinutes() {

返回秒数/ 60;

公共int getMinutes() {

返回分钟;

正确答案:

公共int getMinutes() {

Int hours = seconds / 3600;

返回(秒-小时* 3600)/ 60;

解释

这个时钟类被定义为其字段中只有秒,因此必须为任何访问器和突变器转换此值。因此,您需要为这个转换执行仔细的(虽然简单)计算。要计算给定秒数中的分钟数,首先需要从总计数中删除小时数。首先,使用整数除法(这将去掉小数部分)计算小时数。这是:

Int hours = seconds / 3600;

接下来,您需要计算出小时的值中有多少秒。这很有帮助,因为整数除法去掉了小数点部分。因此,你将减去:

小时* 3600

从总秒数来看。

这将给出应用于时间的分和秒的秒。因此,您最终需要除以60来分离分钟。

例子问题1:实现技术

考虑以下代码

公共类时钟{

私人int秒;

公共时钟(int s) {

秒= s;

公共无效setTime(int s) {

秒= s;

公共无效setSeconds(int s) {

int hoursMinutes = seconds - seconds % 60;

seconds = hoursMinutes + s;

公共无效setMinutes(int min) {

Int hours = seconds / 3600;

int currentSeconds = seconds % 60;

seconds = hours + min * 60 + currentSeconds;

下面哪个选项定义了atoString方法,该方法将以以下形式以24小时格式输出时间:

1:51:03

(注意你需要填充分钟和秒。你可以称12午夜为“0”。)

可能的答案:

公共字符串toString() {

Int hours = seconds / 3600;

Int min =(秒-小时* 3600);

字符串minString = ""+分钟;

If (min < 10) {

minString = "0" + minString;

Int secs = seconds % 60;

String secString = "" + secs;

If (secs < 10) {

secString = "0" + secString;

return hours +":"+ minString+":"+secString;

公共字符串toString() {

Int hours = seconds / 3600;

Int min =秒-(小时* 3600)/ 60;

字符串minString = ""+分钟;

If (min < 10) {

minString = "0" + minString;

Int secs = seconds * 60;

String secString = "" + secs;

If (secs < 10) {

secString = "0" + secString;

return hours +":"+ minString+":"+secString;

公共字符串toString() {

Int hours =秒/ 60;

Int min =秒-(小时* 3600)/ 60;

字符串minString = ""+分钟;

If (min < 10) {

minString = "0" + minString;

Int secs = seconds * 60;

String secString = "" + secs;

If (secs < 10) {

secString = "0" + secString;

return hours +":"+ minString+":"+secString;

公共字符串toString() {

Int hours = seconds / 3600;

Int min =(秒-小时* 3600)/ 60;

字符串minString = ""+分钟;

If (min < 10) {

minString + = " 0 ";

Int secs = seconds % 60;

String secString = "" + secs;

If (secs < 10) {

secString + = " 0 ";

return hours +":"+ minString+":"+secString;

公共字符串toString() {

Int hours = seconds / 3600;

Int min =(秒-小时* 3600)/ 60;

字符串minString = ""+分钟;

If (min < 10) {

minString = "0" + minString;

Int secs = seconds % 60;

String secString = "" + secs;

If (secs < 10) {

secString = "0" + secString;

return hours +":"+ minString+":"+secString;

正确答案:

公共字符串toString() {

Int hours = seconds / 3600;

Int min =(秒-小时* 3600)/ 60;

字符串minString = ""+分钟;

If (min < 10) {

minString = "0" + minString;

Int secs = seconds % 60;

String secString = "" + secs;

If (secs < 10) {

secString = "0" + secString;

return hours +":"+ minString+":"+secString;

解释

在这段代码中有几点需要注意。首先,您需要根据存储在类中的时间计算每个组成部分。秒的“显示值”相对容易。这只是除以60的余数。考虑:

这实际上是1分零1秒。

这实际上是2分35秒。

所以,你知道显示秒是:

% 60秒

您必须使用整数除法(这将去掉小数部分)来计算小时数。这是:

Int hours = seconds / 3600;

接下来,您需要计算出小时的值中有多少秒。这很有帮助,因为整数除法去掉了小数点部分。因此,你将减去:

小时* 3600

从总秒数来看。

这将给出应用于时间的分和秒的秒。因此,您最终需要除以60来分离分钟。

然后,您必须填充值。这是通过使用+ =,它将在字符串的末尾添加“0”字符。相反,它是通过表单完成的:

secString = "0" + secString;

例子问题1:实现技术

给定一个int类型的vector "intVec",编写一个"远程for"循环,有时也称为"for each"循环,使vector中所有元素的f值翻倍。(c++)

可能的答案:

for(int& i: intVec(){

我* 2;

for(int& i: intVec(){

I * = 2;

for(int i: intVec(){

I * = 2;

For (int I = 0;我< intVec.size ();+ + i) {

intVec[我]* = 2;

For (int I = 0;我< intVec.size ();+ + i) {

intVec[我]* 2;

正确答案:

for(int& i: intVec(){

I * = 2;

解释

c++ 11中引入了“for each”循环,它允许用户在不编写传统循环的情况下循环遍历包含项的容器。让我们看看所有的选项。

for(int i: intVec(){

I * = 2;

虽然这看起来像是正确答案,但其实不是。for循环第一部分中的int i被“by value”传入,这意味着将生成intVec的副本,副本内的整数将翻倍。原始intVec向量中的整数将不受影响。为了解决这个问题,int i需要被“通过引用”传递到for循环中,这是通过在“int”后面添加一个“&”符号来实现的。

正确的循环是:

for(int& i: intVec(){

I * = 2;

让我们来看看其他的选择:

for(int& i: intVec(){

我= 2;

这个将不起作用,因为它将intVec中的所有项设置为2,而不是将它们加倍。

所有其他的for循环都不是“for each”循环,所以即使它们完成了相同的输出,它们也是不正确的。

大学导师的学习工具