AP计算机科学A:测试

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

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

例子问题

例子问题1:程序分析

这个函数有趣的定义如下:

Public int fun(int[] a)
一个一个。长度- 1]= a[0];
返回一个[0]+(一个[0]% 2);
的价值是什么一个[0]在执行以下代码段后?
Int [] a = {3,6,9,12};
A[0] =有趣(A);
可能的答案:

9

6

12

13

3.

正确答案:

12

解释

第一部分有趣的将数组的最后一个位置的值赋给第一个位置。然后,它返回A [0] + (A [0] % 2).最后一部分是"1“如果一个[0]很奇怪,而且"0“如果一个[0]是偶数。自A [0] == 12,为偶数,表达式的计算结果为12 + 0,即12

例子问题2:测试

的价值是什么xy,z在执行以下代码后?
Int x = 4, y = 3, z;
For (int I = 0;I < 5;我+ +)

Z = x + y;
Y = x - Y;
X = z;
可能的答案:

X == 28, y == 4, z== 4

X == 28, y == 4, z== 28

X == 14, y == 2, z == 14

X == 16, y == 12, z== 16

X == 32, y == 24, z == 32

正确答案:

X == 28, y == 4, z== 28

解释

循环将运行5次。的价值xy,z每次运行后将如下:

  • I == 0: x == 7, y == 1, z == 7
  • 1: x == 8, y == 6, z == 8
  • I == 2: x == 14, y == 2, z == 14
  • I == 3: x == 16, y == 12, z == 16
  • I == 4 x == 28, y == 4, z == 28

最后,将等于5,并且值将不再改变。

例子问题1:测试

考虑方法
字符串之谜(String s)
字符串s1 = s.substring(0,1);
字符串s2 = s.substring(1,2);
字符串s3 = s.substring(2, s.length() - 2);
字符串s4 = s.substring(s.length() - 2, s.length() - 1);
字符串s5 = s.substring(s.length() - 1);
If (s.length() <= 5)
返回s5 + s4 + s3 + s2 + s1;
其他的
返回s1 + s2 + mystery(s3) + s4 + s5;

的输出是什么

System.out.println(神秘(“异常”));

可能的答案:

SEITRMALIONBA

这些答案没有一个是正确的。

ABNOILAMRTIES

SEITILAMRONBA

异常

正确答案:

ABNOILAMRTIES

解释

.substring ()方法获取参数中第一个数字的字符,并遍历String直到到达参数中的第二个数字,而不复制第二个数字的字符。

的第一部分神秘(),字符串s1, s2, s3, s4和s5被生成和填充。如果s中有n = #个字符,s1获取s中的第一个字符,s2获取s中的第二个字符,s3获取第三到n-2个字符,s4获取n-1个字符,s5获取最后一个字符。

字符串s1 = s.substring(0,1);
字符串s2 = s.substring(1,2);
字符串s3 = s.substring(2, s.length() - 2);
字符串s4 = s.substring(s.length() - 2, s.length() - 1);
字符串s5 = s.substring(s.length() - 1);

让我们看看第二部分神秘()。

If (s.length() <= 5)
返回s5 + s4 + s3 + s2 + s1;
其他的
返回s1 + s2 + mystery(s3) + s4 + s5;

如果语句检查s的长度,如果它小于或等于5,它返回一个由s5组成的字符串,后面跟着s4,等等。如果s等于"abcde",那么如果将求值为true,并返回"edcba"。在递归中,这被称为“基本情况”。

其他的语句用于长度大于5个字符的字符串。它返回s1,然后是s2,然后是mystery的结果(s3),然后是s4和s5。它调用自己的事实使得这个递归。

让我们逐步了解这个示例。关于神秘(), s为“abnormal”。在第一部分之后,结果如下:

s1 = "A"
s2 = "B"
s3 = "NORMALITI"
s4 = "E"
s5 = "S"
因为s大于5个字符,我们取其他的,因此它返回以下内容:
+名词+名词+名词+名词+名词+名词
接下来,我们重复新的论证。s = NORMALITI,所以在第一部分之后,结果是:
s1 = "N"
s2 = "O"
s3 = "RMALI"
s4 = "T"
s5 =“I”
因为s又比5个字符长,我们取其他的,因此它返回以下内容:
N + O +神秘(RMALI) + T + I
它会被添加到前一个返回中,使它变成这样:
A + B + N + O +神秘(RMALI) + T + I + E + S
我们再次使用s = RMALI参数重复。在第一部分之后,结果是:
s1 = "R"
s2 = "M"
s3 = "A"
s4 = "L"
s5 =“I”
因为s的长度小于等于5个字符,所以我们取如果这一次。它返回以下内容:
I + l + a + m + r
我们可以将所有的mystery(RMALI)实例替换为上面的,因此原始返回变成这样:
A + b + n + o + I + l + A + m + r + t + I + e + s
它被打印成ABNOILAMRTIES,答案。

例子问题2:程序分析

考虑数组

Int [] arr = {1,2,3,4,5};

其中的值是什么加勒比海盗在执行以下代码后?

For (int I = 0;我< r。长度- 2;我+ +)
Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
可能的答案:

OutOfBoundsException

15432

12345

23451

54321

正确答案:

23451

解释

我们从一个数组开始,加勒比海盗,大小为5,包含{1,2,3,4,5}。

代码中的循环,

For (int I = 0;我< r。长度- 2;我+ +)

循环遍历数组直到倒数第二个单元格加勒比海盗。长度- 2倒数第二个单元格的索引,它从第一个单元格开始。

让我们看看循环内部的代码。

Int temp = arr[i];
Arr [i] = Arr [i+1];
Arr [i+1] = temp;
当i = 0时,
Arr [0] == 1
Arr [1] == 2
Temp = 1
Arr [0] = 2
Arr [1] = 1
Arr [] == {2,1,3,4,5}
当i = 1时
Arr [1] == 1
Arr [2] == 3
Temp = 1
Arr [1] = 3
Arr [2] = 1
Arr [] == {2,3,1,4,5}

当i = 2时

Arr [2] == 1
Arr [3] == 4
Temp = 1
Arr [2] = 4
Arr [3] = 1
Arr [] == {2,3,4,1,5}
当i = 3时
Arr [3] == 1
Arr [4] == 3
Temp = 1
Arr [3] = 3
Arr [4] = 1
Arr [] == {2,3,4,5,1}

随着循环的进行,它将移动其中的任何值加勒比海盗[0]一直到数组的末尾。

例子问题1:程序分析

识别此程序中可能发生的用户错误

UserInput ui = new UserInput();//用户的输入

int s = (Integer)ui;

System.out.println(年代);

可能的答案:

用户输入不能是整数

用户永远不会做错任何事

parseInt语句不正确

没有什么问题

正确答案:

用户输入不能是整数

解释

用户可以输入一个字符串,而转换为(Integer)将导致运行时异常。如果运行时出现异常,程序将停止并向黑客开放漏洞。一旦黑客知道如何停止一个程序,他们就可以开始输入错误的数据来查看数据库模式来收集数据。解决这个问题的一种方法是使用实用方法,如parseInt(ui)。

大学导师的学习工具