<think>我们正在寻找与C#数组查询操作相关的练习题。查询操作通常指的是在数组中查找满足特定条件的元素,例如:查找最大值、最小值、满足条件的元素、元素计数等。
根据引用内容,我们可以设计一些练习题,重点放在数组的查询操作上。
练习题1:查找数组中的最大值和最小值
要求:编写一个C#程序,定义一个整数数组,使用循环遍历数组,找出数组中的最大值和最小值,并输出。
练习题2:统计数组中满足条件的元素个数
要求:定义一个整数数组,统计数组中大于10且小于50的元素个数。
练习题3:查找数组中的第一个偶数
要求:编写一个C#程序,定义一个整数数组,使用循环查找第一个出现的偶数,并输出该元素及其索引。如果不存在偶数,则输出提示信息。
练习题4:查找数组中的质数
要求:定义一个整数数组,找出数组中的所有质数,并将它们存入一个新数组中输出。注意:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。
练习题5:数组元素求和与平均值
要求:定义一个整数数组,计算数组中所有元素的和以及平均值(保留两位小数)。
练习题6:查找数组中的重复元素
要求:定义一个整数数组,查找数组中重复出现的元素(每个重复元素只输出一次),并输出这些重复元素。
练习题7:数组元素反转
要求:不使用Array.Reverse方法,通过循环将数组元素反转(例如:[1,2,3]变成[3,2,1])。
练习题8:合并两个有序数组
要求:给定两个升序排列的整数数组,合并它们并保持升序排列。注意:不能使用内置排序函数。
练习题9:查找数组中的众数
要求:定义一个整数数组,找出数组中出现次数最多的元素(众数)。如果有多个众数,输出任意一个即可。
练习题10:二维数组查询
要求:定义一个二维整数数组(矩阵),查询该矩阵中所有元素的最大值,并输出其位置(行和列)。
下面我们给出其中两个练习题的示例代码:
练习题1示例代码(查找数组中的最大值和最小值):
```csharp
using System;
class Program
{
static void Main()
{
int[] numbers = { 3, 9, 5, 7, 1, 8, 4, 6, 2 };
int max = numbers[0];
int min = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > max)
max = numbers[i];
if (numbers[i] < min)
min = numbers[i];
}
Console.WriteLine($"最大值: {max}");
Console.WriteLine($"最小值: {min}");
}
}
```
练习题3示例代码(查找数组中的第一个偶数):
```csharp
using System;
class Program
{
static void Main()
{
int[] numbers = { 1, 3, 5, 7, 8, 9, 10 };
int firstEven = -1;
int index = -1;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
{
firstEven = numbers[i];
index = i;
break; // 找到第一个偶数就退出循环
}
}
if (index != -1)
Console.WriteLine($"第一个偶数是 {firstEven},索引为 {index}");
else
Console.WriteLine("数组中没有偶数");
}
}
```
练习题8示例代码(合并两个有序数组):
注意:两个数组都是升序排列,合并后仍然升序。
```csharp
using System;
class Program
{
static void Main()
{
int[] array1 = { 1, 3, 5, 7 };
int[] array2 = { 2, 4, 6, 8 };
int[] mergedArray = new int[array1.Length + array2.Length];
int i = 0, j = 0, k = 0;
// 合并过程
while (i < array1.Length && j < array2.Length)
{
if (array1[i] <= array2[j])
{
mergedArray[k++] = array1[i++];
}
else
{
mergedArray[k++] = array2[j++];
}
}
// 如果array1还有剩余元素
while (i < array1.Length)
{
mergedArray[k++] = array1[i++];
}
// 如果array2还有剩余元素
while (j < array2.Length)
{
mergedArray[k++] = array2[j++];
}
// 输出合并后的数组
Console.WriteLine("合并后的数组:");
for (int index = 0; index < mergedArray.Length; index++)
{
Console.Write(mergedArray[index] + " ");
}
}
}
```
这些练习题覆盖了数组查询的基本操作,包括查找、统计、条件筛选、合并等。通过这些练习,可以加深对C#数组操作的理解。
§§相关问题§§
1. 在C#中,除了循环,还有哪些方法可以查询数组(如LINQ)?
2. 如何优化数组查询操作的性能?
3. 在大型数组中,二分查找适用于什么情况?如何实现?</think>以下是针对 C# 数组查询操作的精选练习题与示例,涵盖基础查询、条件筛选、统计计算等常见场景:
---
### 练习题 1:查找数组中的最大值和最小值
**要求**:查询整数数组中的最大值和最小值
```csharp
int[] numbers = { 5, 3, 8, 6, 7, 2 };
int max = numbers[0];
int min = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > max) max = numbers[i];
if (numbers[i] < min) min = numbers[i];
}
Console.WriteLine($"最大值: {max}, 最小值: {min}");
// 输出: 最大值: 8, 最小值: 2
```
---
### 练习题 2:筛选满足条件的元素
**要求**:查询数组中所有大于 5 的偶数
```csharp
int[] data = { 2, 7, 4, 9, 6, 12, 3 };
List<int> result = new List<int>();
foreach (int num in data)
{
if (num > 5 && num % 2 == 0)
{
result.Add(num);
}
}
Console.WriteLine(string.Join(", ", result));
// 输出: 6, 12
```
---
### 练习题 3:统计元素出现频率
**要求**:查询数组中每个元素的出现次数
```csharp
int[] values = { 1, 2, 3, 2, 4, 1, 2 };
Dictionary<int, int> frequency = new Dictionary<int, int>();
foreach (int val in values)
{
if (frequency.ContainsKey(val))
{
frequency[val]++;
}
else
{
frequency.Add(val, 1);
}
}
// 输出统计结果
foreach (var pair in frequency)
{
Console.WriteLine($"{pair.Key}: {pair.Value}次");
}
/* 输出:
1: 2次
2: 3次
3: 1次
4: 1次
*/
```
---
### 练习题 4:二维数组条件查询
**要求**:查询矩阵中所有大于平均值的元素
```csharp
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
List<int> aboveAvg = new List<int>();
int total = 0, count = 0;
// 计算总和
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
total += matrix[i, j];
count++;
}
}
double average = (double)total / count;
// 筛选大于平均值的元素
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
if (matrix[i, j] > average)
{
aboveAvg.Add(matrix[i, j]);
}
}
}
Console.WriteLine($"大于平均值{average}的元素: " + string.Join(", ", aboveAvg));
// 输出: 大于平均值5的元素: 6, 7, 8, 9
```
---
### 练习题 5:使用 LINQ 实现高级查询
**要求**:查询数组中长度大于 3 的字符串并按字母排序
```csharp
string[] words = { "apple", "cat", "dog", "elephant", "bee" };
var query = from word in words
where word.Length > 3
orderby word
select word;
Console.WriteLine(string.Join(", ", query));
// 输出: apple, bee, elephant
```
---
### 练习题 6:查找缺失数字
**要求**:在 1-100 的数组中查找缺失的数字
```csharp
int[] fullSet = Enumerable.Range(1, 100).ToArray();
int[] testSet = fullSet.Where(n => n != 42).ToArray(); // 故意移除42
var missing = Enumerable.Range(1, 100).Except(testSet);
Console.WriteLine("缺失的数字: " + string.Join(", ", missing));
// 输出: 缺失的数字: 42
```
---
### 推荐练习方向
1. **多条件组合查询**:如查找年龄在 20-30 岁且工资高于 5000 的员工
2. **分组统计**:按部门分组计算平均工资
3. **数组交集/并集**:使用 `Intersect()` 和 `Union()` 方法
4. **动态条件查询**:允许用户输入查询条件进行过滤
5. **分页查询**:实现 `Skip()` 和 `Take()` 的分页效果
> 提示:对于复杂查询,可结合 LINQ 的链式调用:
> ```csharp
> var results = array.Where(x => x > 10)
> .OrderBy(x => x)
> .Select(x => x * 2);
> ```