算法第四版习题复习资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(n <= 0) "";
s;
}
答:这段代码中的基础情况永远不会被访问。调用2(3) 会产生调用2(0)、2(-3) 和2(-6),循环往复直到发生。可以修改为:
2( n)
{
(n <= 0) "";
s = 2(3) + n + 2(2) + n;
s;
}
1.1.18 请看以下递归函数:
( a, b)
{
(b 0) 0;
a. (a > b) c = 0;
b. a > b { c = 0; }
c. (a > b) c = 0;
d. (a > b) c = 0 b = 0;
答案:a. (a > b) c = 0; b. (a > b) { c = 0; }
1.1.5 编写一段程序,如果 类型的变量x 和y 都严格位于0 和1 之间则打印,否则打印。
(b % 2 0) (, 2);
(, 2) + a;
}
(2, 25) 和(3, 11) 的返回值是多少?给定正整数a 和b,()
计算的结果是什么?将代码中的+ 替换为* 并将 0 改为 1,然后回答相同
{
() {
}
([] ) {
5;
5;
[][] [m][n];
[][] [n][m];
(); 初始化二维数组
(); 转置二维数组
(b)输出转置二维数组
}
( [][] a)
{
("输出转置二维数组:");
( 0<)
{
( 0<a[0])
{
(a[i][j]+" ");
}
();
}
}
[][] ( [][] [][] b)
答案:a.1.618 b. 10.0 d.33
1.1.3 编写一个程序,从命令行得到三个整数参数。如果它们都相等则打印,否则打印 。
{
([] )
{
;
0;
(" ");
a ();
();
();
(()1)
{
("");
}
{
(" ");
}
}
( a b , c)
{
()
{
1;
}
{
0;
}
}
}
1.1.4 下列语句各有什么问题(如果有的话)?
( j = 0; j < 1000; )
;
();
答案:a.3.00009 b.499500 c. 10000
1.1.8 下列语句会打印出什么结果?给出解释。
a. ('b');
b. ('b' + 'c');
c. (() ('a' + 4));
答案:a. b b. 197 c. e
1.1.9 编写一段代码,将一个正整数N 用二进制表示并转换为一个 类型的值s。
{
( 0<)
{
( 0<a[0])
{
b[j][i][i][j];
}
}
b;
}
[][] ( [][] N)
{
("初始化二维数组:");
( 0<)
{
( 0<a[0])
{
a[i][j](N);
(a[i][j]+" ");
}
();
}
a;
}
}
1.1.14 编写一个静态方法(),接受一个整型参数N,返回不大于2N 的最大整数。不要使用 库。
解答: 有一个内置方法(N) 专门完成这个任务,但该题的目的就是给出这个方法的其他实现方法。
下面就是一个特别简洁的答案:
s = "";
( n = N; n > 0; n 2)
s = (n % 2) + s;
1.1.10 下面这段代码有什么问题?
ቤተ መጻሕፍቲ ባይዱ[] a;
( i = 0; i < 10; )
a[i] = i * i;
0;
( 0<)
{
( 0<)
{
([j])
{
;
}
b[i];
}
0;
}
( 0<)
{
[i];
}
b;
}
1.1.16 给出1(6) 的返回值:
1( n)
{
(n <= 0) "";
1(3) + n + 1(2) + n;
}
答案:311361142246
1.1.17 找出以下递归函数的问题:
2( n)
{
s = 2(3) + n + 2(2) + n;
解答:它没有用 为a[] 分配内存。这段代码会产生一个 a
的编译错误。
1.1.11 编写一段代码,打印出一个二维布尔数组的内容。其中,使用* 表示真,空格表示假。打印出行号和列号。
{
() {
}
([] ) {
[][] a = [10][10];
(a)随机初始化
(a)打印数组
}
( [][] a)
{
( 0<)打印行号
(" ");
(" ");
( 0<10)
{
(i);
( 0<10)
{
(a[i][j])
("*"+" ");
(" "+" ");
}
(" ");
}
}
[][] ( [][] a)
{
( 0<)
{
( 0<)
{
((0.1))
a[i][j];
a[i][j];
}
}
a;
}
}
1.1.12 以下代码段会打印出什么结果?
[] a = [10];
( M)
{
0;
(N>)
{
;
;
}
a;
}
1.1.15 编写一个静态方法(),接受一个整型数组a[] 和一个整数M 为参数并返回一个大小为M的数组,其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在0到1之间,返回数组中所有元素之和应该和 相等。
[] ( [] M)
{
[] [M];
0;
( i = 0; i < 10; )
a[i] = 9 - i;
( i = 0; i < 10; )
a[i] = a[a[i]];
( i = 0; i < 10; )
(i);
答案:0 1 2 3 4 5 6 7 8 9
如(a[i]);
0 1 2 3 4 4 3 2 1 0
1.1.13 编写一段代码,打印出一个M 行N 列的二维数组的转置(交换行和列)。
1.1.1给出以下表达式的值:
a. ( 0 + 15 ) / 2
b. 2.06 * 100000000.1
c.
答案:a.7.200.0000002
1.1.2 给出以下表达式的类型和值:
a. (1 + 2.236)/2
b. 1 + 2 + 3 + 4.0
c. 4.1 >= 4
d. 1 + 2 + "3"
1.1.7 分别给出以下代码段打印出的值:
a. t = 9.0;
((t - 9.0) > .001)
t = (9.0 + t) / 2.0;
("%.5f\n", t);
b. = 0;
( i = 1; i < 1000; )
( j = 0; j < i; )
;
();
c. = 0;
( i = 1; i < 1000; i *= 2)
{
([] )
{
x;
y;
();
();
((x) (y));
}
( x)
{
(x>0<1)
;
;
}
}
1.1.6 下面这段程序会打印出什么?
f = 0;
g = 1;
( i = 0; i <= 15; )
{
(f);
f = f + g;
g = f - g;
}
答案:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
s;
}
答:这段代码中的基础情况永远不会被访问。调用2(3) 会产生调用2(0)、2(-3) 和2(-6),循环往复直到发生。可以修改为:
2( n)
{
(n <= 0) "";
s = 2(3) + n + 2(2) + n;
s;
}
1.1.18 请看以下递归函数:
( a, b)
{
(b 0) 0;
a. (a > b) c = 0;
b. a > b { c = 0; }
c. (a > b) c = 0;
d. (a > b) c = 0 b = 0;
答案:a. (a > b) c = 0; b. (a > b) { c = 0; }
1.1.5 编写一段程序,如果 类型的变量x 和y 都严格位于0 和1 之间则打印,否则打印。
(b % 2 0) (, 2);
(, 2) + a;
}
(2, 25) 和(3, 11) 的返回值是多少?给定正整数a 和b,()
计算的结果是什么?将代码中的+ 替换为* 并将 0 改为 1,然后回答相同
{
() {
}
([] ) {
5;
5;
[][] [m][n];
[][] [n][m];
(); 初始化二维数组
(); 转置二维数组
(b)输出转置二维数组
}
( [][] a)
{
("输出转置二维数组:");
( 0<)
{
( 0<a[0])
{
(a[i][j]+" ");
}
();
}
}
[][] ( [][] [][] b)
答案:a.1.618 b. 10.0 d.33
1.1.3 编写一个程序,从命令行得到三个整数参数。如果它们都相等则打印,否则打印 。
{
([] )
{
;
0;
(" ");
a ();
();
();
(()1)
{
("");
}
{
(" ");
}
}
( a b , c)
{
()
{
1;
}
{
0;
}
}
}
1.1.4 下列语句各有什么问题(如果有的话)?
( j = 0; j < 1000; )
;
();
答案:a.3.00009 b.499500 c. 10000
1.1.8 下列语句会打印出什么结果?给出解释。
a. ('b');
b. ('b' + 'c');
c. (() ('a' + 4));
答案:a. b b. 197 c. e
1.1.9 编写一段代码,将一个正整数N 用二进制表示并转换为一个 类型的值s。
{
( 0<)
{
( 0<a[0])
{
b[j][i][i][j];
}
}
b;
}
[][] ( [][] N)
{
("初始化二维数组:");
( 0<)
{
( 0<a[0])
{
a[i][j](N);
(a[i][j]+" ");
}
();
}
a;
}
}
1.1.14 编写一个静态方法(),接受一个整型参数N,返回不大于2N 的最大整数。不要使用 库。
解答: 有一个内置方法(N) 专门完成这个任务,但该题的目的就是给出这个方法的其他实现方法。
下面就是一个特别简洁的答案:
s = "";
( n = N; n > 0; n 2)
s = (n % 2) + s;
1.1.10 下面这段代码有什么问题?
ቤተ መጻሕፍቲ ባይዱ[] a;
( i = 0; i < 10; )
a[i] = i * i;
0;
( 0<)
{
( 0<)
{
([j])
{
;
}
b[i];
}
0;
}
( 0<)
{
[i];
}
b;
}
1.1.16 给出1(6) 的返回值:
1( n)
{
(n <= 0) "";
1(3) + n + 1(2) + n;
}
答案:311361142246
1.1.17 找出以下递归函数的问题:
2( n)
{
s = 2(3) + n + 2(2) + n;
解答:它没有用 为a[] 分配内存。这段代码会产生一个 a
的编译错误。
1.1.11 编写一段代码,打印出一个二维布尔数组的内容。其中,使用* 表示真,空格表示假。打印出行号和列号。
{
() {
}
([] ) {
[][] a = [10][10];
(a)随机初始化
(a)打印数组
}
( [][] a)
{
( 0<)打印行号
(" ");
(" ");
( 0<10)
{
(i);
( 0<10)
{
(a[i][j])
("*"+" ");
(" "+" ");
}
(" ");
}
}
[][] ( [][] a)
{
( 0<)
{
( 0<)
{
((0.1))
a[i][j];
a[i][j];
}
}
a;
}
}
1.1.12 以下代码段会打印出什么结果?
[] a = [10];
( M)
{
0;
(N>)
{
;
;
}
a;
}
1.1.15 编写一个静态方法(),接受一个整型数组a[] 和一个整数M 为参数并返回一个大小为M的数组,其中第i个元素的值为整数i在参数数组中出现的次数。如果a[]中的值均在0到1之间,返回数组中所有元素之和应该和 相等。
[] ( [] M)
{
[] [M];
0;
( i = 0; i < 10; )
a[i] = 9 - i;
( i = 0; i < 10; )
a[i] = a[a[i]];
( i = 0; i < 10; )
(i);
答案:0 1 2 3 4 5 6 7 8 9
如(a[i]);
0 1 2 3 4 4 3 2 1 0
1.1.13 编写一段代码,打印出一个M 行N 列的二维数组的转置(交换行和列)。
1.1.1给出以下表达式的值:
a. ( 0 + 15 ) / 2
b. 2.06 * 100000000.1
c.
答案:a.7.200.0000002
1.1.2 给出以下表达式的类型和值:
a. (1 + 2.236)/2
b. 1 + 2 + 3 + 4.0
c. 4.1 >= 4
d. 1 + 2 + "3"
1.1.7 分别给出以下代码段打印出的值:
a. t = 9.0;
((t - 9.0) > .001)
t = (9.0 + t) / 2.0;
("%.5f\n", t);
b. = 0;
( i = 1; i < 1000; )
( j = 0; j < i; )
;
();
c. = 0;
( i = 1; i < 1000; i *= 2)
{
([] )
{
x;
y;
();
();
((x) (y));
}
( x)
{
(x>0<1)
;
;
}
}
1.1.6 下面这段程序会打印出什么?
f = 0;
g = 1;
( i = 0; i <= 15; )
{
(f);
f = f + g;
g = f - g;
}
答案:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610