c# 基础习题答案 20240709

一、实现一个冒泡排序函数

csharp 复制代码
using System;

public class Program
{
    public static void Main()
    {
        int[] arr = { 22,11,33 };

        BubbleSort(arr);

        foreach (var item in arr)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();

    }

    // 冒泡排序函数
    public static void BubbleSort(int[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = i; j < array.Length; j++)
            {
                if (array[i] < array[j])
                {
                    int temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }
    }
}

二、实现一个二分法函数

csharp 复制代码
   class Program
    {
        static void Main(string[] args)
        {                                         // 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16, 17, 18,                
            Console.WriteLine(TestFun(new int[19] { 1,2,3,4,5,6,7,8,9,9,11,11,11,11,14,15,119,122,133},119));
            Console.ReadLine();
        }

        private static int TestFun(int[] source, int target)
        {
            //数组左边界索引值
            int left = 0;
            //数组的右边界索引值
            int right = source.Length;
            //数组的中位值的索引值
            int mid = 0;

			//在循环中,根据中位值与目标值对比,更新左(右)边界的值,从而缩小检索范围,直到找到目标值。
            while(left <= right)
            {   //每循环一次,中位值索引也要随着左(右)边界的改变而改变
                mid = (left + right) / 2;
                
                if(source[mid].Equals(target))
                {
                    return mid;
                }      //中位值在目标值左边时更新左边界索引
                else if(source[mid] < target)
                {
                    left = mid + 1;
                }    //中位值在目标值右边时更新右边界索引
                else if(source[mid] > target)
                {
                    right = mid - 1;
                }
            }


            return -1;
        }
    }

三、写出继承、封装、多态的定义,并根据定义写出对应代码示例

1. 继承(Inheritance):
  • 继承允许一个类(称为子类或派生类)基于另一个类(称为父类或基类)的定义来构建。子类继承了父类的字段和方法,可以在此基础上添加新的功能或修改现有功能。
  • 示例代码:
csharp 复制代码
// 父类
public class Animal
{
    public string Name { get; set; }
    
    public virtual void Speak()
    {
        Console.WriteLine("Animal speaks");
    }
}

// 子类继承父类
public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Woof!");
    }
}

// 使用继承后的子类
class Program
{
    static void Main()
    {
        Dog myDog = new Dog();
        myDog.Name = "Buddy";
        myDog.Speak(); // 输出: "Woof!"
    }
}
2. 封装(Encapsulation):
  • 封装是将数据(字段)和操作数据的方法(函数)封装在一个类中的概念。通过使用访问修饰符来限制对类的部分内容的访问,可以控制对象的访问级别和安全性。

  • 示例代码:

csharp 复制代码
public class Car
{
    private int _mileage; // Private variable

    public void Drive(int miles)
    {
        _mileage += miles;
    }

    public int GetMileage()
    {
        return _mileage;
    }
}

class Program
{
    static void Main()
    {
        Car myCar = new Car();
        myCar.Drive(100);
        Console.WriteLine(myCar.GetMileage()); // 输出: 100
    }
}
3. 多态(Polymorphism):
  • 多态允许使用同一个方法名在不同的类中产生不同的行为。这提高了代码的灵活性,可以根据不同的对象类型调用相同的方法而表现出不同的行为。
  • 示例代码:
csharp 复制代码
public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal speaks");
    }
}

public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Woof!");
    }
}

public class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Meow!");
    }
}

class Program
{
    static void MakeSound(Animal animal)
    {
        animal.Speak();
    }

    static void Main()
    {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        MakeSound(myDog); // 输出: "Woof!"
        MakeSound(myCat); // 输出: "Meow!"
    }
}

四、写出函数重载的定义,并根据定义写出对应代码示例

  • 函数重载(Function
    Overloading)是指在同一个类中包含多个同名函数,但是这些函数的参数类型、参数个数或顺序不同。这样,可以通过传递不同类型的参数或不同数量的参数来调用同一个函数名,而编译器能够根据传入的参数类型和数量来分辨到底要调用哪个函数。
csharp 复制代码
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }

    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }

    public int Add(params int[] numbers)
    {
        int sum = 0;
        foreach (var number in numbers)
        {
            sum += number;
        }
        return sum;
    }
}

class Program
{
    static void Main()
    {
        Calculator calculator = new Calculator();

        int result1 = calculator.Add(1, 2); // 使用第一个Add函数
        double result2 = calculator.Add(1.5, 2.5); // 使用第二个Add函数
        int result3 = calculator.Add(1, 2, 3); // 使用第三个Add函数
        int result4 = calculator.Add(1, 2, 3, 4, 5); // 使用第四个Add函数,使用params特性

        Console.WriteLine($"Result 1: {result1}");
        Console.WriteLine($"Result 2: {result2}");
        Console.WriteLine($"Result 3: {result3}");
        Console.WriteLine($"Result 4: {result4}");
    }
}

五、下面是创建三张数据表并插入数据的SQL语句,以及基于这些数据表的20条基础SQL查询问题。

表1: 员工 (Employees)

-- 创建员工表

sql 复制代码
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    DepartmentID INT,
    Salary DECIMAL(10, 2),
    HireDate DATE
);

-- 插入员工数据

sql 复制代码
INSERT INTO Employees VALUES
(1, '张伟', '李', 101, 60000.00, '2020-01-15'),
(2, '王芳', '刘', 102, 75000.00, '2019-05-20'),
(3, '李娜', '张', 101, 55000.00, '2021-03-10'),
(4, '陈杰', '王', 103, 65000.00, '2018-11-28'),
(5, '赵强', '刘', 102, 70000.00, '2020-09-05');

表2: 部门 (Departments)

-- 创建部门表

sql 复制代码
CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName NVARCHAR(100),
    Manager NVARCHAR(100)
);

-- 插入部门数据

sql 复制代码
INSERT INTO Departments VALUES
(101, '人力资源部', '张经理'),
(102, '财务部', '李经理'),
(103, '信息技术部', '王经理');

表3: 订单 (Orders)

-- 创建订单表

sql 复制代码
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    EmployeeID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2)
);

-- 插入订单数据

sql 复制代码
INSERT INTO Orders VALUES
(1, 1, '2023-01-10', 1500.00),
(2, 2, '2023-01-12', 2500.00),
(3, 1, '2023-02-05', 1800.00),
(4, 3, '2023-02-15', 3200.00),
(5, 2, '2023-03-20', 2000.00);

20条基础SQL查询问题

  1. 查询所有员工的信息。
sql 复制代码
SELECT * FROM Employees;
  1. 查询所有薪资大于60000的员工。
sql 复制代码
SELECT * FROM Employees WHERE Salary > 60000.00;
  1. 列出所有部门及其经理姓名。
sql 复制代码
SELECT DepartmentName, Manager FROM Departments;
  1. 统计每个部门的员工数量。
sql 复制代码
SELECT d.DepartmentName, COUNT(e.EmployeeID) AS EmployeeCount
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
GROUP BY d.DepartmentName;
  1. 查询2020年之前入职的员工。
sql 复制代码
SELECT * FROM Employees WHERE HireDate < '2020-01-01';
  1. 计算人力资源部的总薪资预算。
sql 复制代码
SELECT SUM(Salary) AS TotalSalaryBudget
FROM Employees
WHERE DepartmentID = 101;
  1. 查询所有员工中最早和最新的入职日期。
sql 复制代码
SELECT MIN(HireDate) AS OldestHireDate, MAX(HireDate) AS NewestHireDate
FROM Employees;
  1. 按薪资从高到低排序查询所有员工。
sql 复制代码
SELECT * FROM Employees ORDER BY Salary DESC;
  1. 计算所有员工的平均薪资。
sql 复制代码
SELECT AVG(Salary) AS AverageSalary FROM Employees;
  1. 查询2023年1月的所有订单。
sql 复制代码
SELECT * FROM Orders WHERE OrderDate >= '2023-01-01' AND OrderDate < '2023-02-01';
  1. 列出所有下过订单的员工。
sql 复制代码
SELECT DISTINCT e.FirstName, e.LastName
FROM Employees e
JOIN Orders o ON e.EmployeeID = o.EmployeeID;
  1. 查询员工及其对应的部门名称。
sql 复制代码
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID;
  1. 统计总订单数量。
sql 复制代码
SELECT COUNT(*) AS TotalOrders FROM Orders;
  1. 查询订单金额最高的订单。
sql 复制代码
SELECT MAX(TotalAmount) AS HighestOrderAmount FROM Orders;
  1. 计算每个订单的平均金额。
sql 复制代码
SELECT AVG(TotalAmount) AS AverageOrderAmount FROM Orders;
  1. 列出所有员工及其下的订单(如果有的话)。
sql 复制代码
SELECT e.FirstName, e.LastName, o.OrderID, o.TotalAmount
FROM Employees e
LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID;
  1. 查询没有下过订单的员工。
sql 复制代码
SELECT e.FirstName, e.LastName
FROM Employees e
LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID
WHERE o.OrderID IS NULL;
  1. 计算公司的总薪资支出。
sql 复制代码
SELECT SUM(Salary) AS TotalSalaryExpense FROM Employees;
  1. 查询薪资最高的员工。
sql 复制代码
SELECT TOP 1 * FROM Employees ORDER BY Salary DESC;
  1. 查询2021年入职的员工。
sql 复制代码
SELECT * FROM Employees WHERE YEAR(HireDate) = 2021;
相关推荐
小吴同学·2 小时前
.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】
c#·.netcore·.net core
LNTON羚通3 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
哭泣的眼泪4085 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Microsoft Word6 小时前
c++基础语法
开发语言·c++·算法
天才在此6 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
莫叫石榴姐7 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
bluefox19797 小时前
使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别
开发语言·c#
茶猫_8 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
鲤籽鲲8 小时前
C# MethodTimer.Fody 使用详解
开发语言·c#·mfc
工业3D_大熊9 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化