内容正文:
举一反三考点练
《算法与程序设计-C#》算法与程序基础-课后自测
知识点一 算法与程序的基本概念
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 5, 2, 9, 1, 5, 6 };
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】该代码实现了冒泡排序算法,对数组`arr`进行升序排序,并输出排序后的结果。
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 6, 9, 12, 15 };
int target = 9;
int left = 0;
int right = arr.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
【答案】该代码实现了二分查找算法,在有序数组`arr`中查找目标值`target`,并输出目标值在数组中的索引,如果数组中不存在目标值则输出相应提示信息。
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 5, 7, 9, 11 };
int target = 8;
int left = 0;
int right = arr.Length;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
【答案】将`int right = arr.Length;`改为`int right = arr.Length - 1;`,因为数组的索引是从0开始的,最大索引应该是`arr.Length - 1`。
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现冒泡排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 6, 3, 9, 1, 5, 6 };
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
(____________);
}
}
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】`arr[j + 1] = temp;`
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现顺序查找算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 2, 4, 6, 8, 10 };
int target = 6;
bool found = false;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + i);
(____________);
}
}
if (!found)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
【答案】`found = true;`
知识点二 算法与程序的实现过程
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int n = 5;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * Factorial(n - 1);
}
}
}
【答案】该代码实现了递归算法计算阶乘,计算`n`的阶乘,并输出结果。
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】该代码实现了选择排序算法,对数组`arr`进行升序排序,并输出排序后的结果。
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] > arr[minIndex])
{
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】将`if (arr[j] > arr[minIndex])`改为`if (arr[j] < arr[minIndex])`,因为选择排序是找最小值的索引,所以应该是`arr[j]`小于`arr[minIndex]`时才更新`minIndex`。
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现选择排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
(____________);
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】`minIndex = j;`
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现递归计算阶乘。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 0)
{
return 1;
}
else
{
return n * (____________);
}
}
}
【答案】`Factorial(n - 1);`
知识点三 典型算法与程序实例
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 2, 4, 6, 8, 10 };
int target = 6;
bool found = false;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + i);
found = true;
break;
}
}
if (!found)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
【答案】该代码实现了顺序查找算法,在数组`arr`中查找目标值`target`,并输出目标值在数组中的索引,如果数组中不存在目标值则输出相应提示信息。
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Fibonacci(n);
Console.WriteLine(n + "的斐波那契数列值是:" + result);
}
static int Fibonacci(int n)
{
if (n <= 1)
{
return n;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
}
【答案】该代码实现了递归算法计算斐波那契数列,计算`n`的斐波那契数列值,并输出结果。
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 0)
{
return 1;
}
else
{
return n * Factorial(n);
}
}
}
【答案】将`return n * Factorial(n);`改为`return n * Factorial(n - 1);`,因为递归调用时应该是`n - 1`,否则会导致无限递归。
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现二分查找算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 5, 7, 9, 11 };
int target = 8;
int left = 0;
int right = arr.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
(____________);
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
【答案】`left = mid + 1;`
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现选择排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
(____________);
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
【答案】`minIndex = j;`
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$
举一反三考点练
《算法与程序设计-C#》算法与程序基础-课后自测
知识点一 算法与程序的基本概念
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 5, 2, 9, 1, 5, 6 };
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 6, 9, 12, 15 };
int target = 9;
int left = 0;
int right = arr.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 5, 7, 9, 11 };
int target = 8;
int left = 0;
int right = arr.Length;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现冒泡排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 6, 3, 9, 1, 5, 6 };
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
(____________);
}
}
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现顺序查找算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 2, 4, 6, 8, 10 };
int target = 6;
bool found = false;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + i);
(____________);
}
}
if (!found)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
知识点二 算法与程序的实现过程
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int n = 5;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * Factorial(n - 1);
}
}
}
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] > arr[minIndex])
{
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现选择排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
(____________);
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现递归计算阶乘。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 0)
{
return 1;
}
else
{
return n * (____________);
}
}
}
知识点三 典型算法与程序实例
1.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int[] arr = { 2, 4, 6, 8, 10 };
int target = 6;
bool found = false;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + i);
found = true;
break;
}
}
if (!found)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
2.(程序分析题)阅读以下代码,分析其功能。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Fibonacci(n);
Console.WriteLine(n + "的斐波那契数列值是:" + result);
}
static int Fibonacci(int n)
{
if (n <= 1)
{
return n;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
}
3.(程序改错题)以下代码存在错误,请找出并改正。
using System;
class Program
{
static void Main()
{
int n = 6;
int result = Factorial(n);
Console.WriteLine(n + "的阶乘是:" + result);
}
static int Factorial(int n)
{
if (n == 0)
{
return 1;
}
else
{
return n * Factorial(n);
}
}
}
4.(程序填空题)请在以下代码的空白处填入合适的代码,实现二分查找算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 3, 5, 7, 9, 11 };
int target = 8;
int left = 0;
int right = arr.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
Console.WriteLine("目标值在数组中的索引为:" + mid);
break;
}
else if (arr[mid] < target)
{
(____________);
}
else
{
right = mid - 1;
}
}
if (left > right)
{
Console.WriteLine("数组中不存在目标值");
}
}
}
5.(程序填空题)请在以下代码的空白处填入合适的代码,实现选择排序算法。
using System;
class Program
{
static void Main()
{
int[] arr = { 4, 2, 8, 5, 1 };
for (int i = 0; i < arr.Length; i++)
{
int minIndex = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[minIndex])
{
(____________);
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
}
}
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$