c# 基础习题答案 20240709

news/2024/7/24 8:22:50 标签: c#, 算法

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

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;
                }
            }
        }
    }
}

二、实现一个二分法函数

   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):
  • 继承允许一个类(称为子类或派生类)基于另一个类(称为父类或基类)的定义来构建。子类继承了父类的字段和方法,可以在此基础上添加新的功能或修改现有功能。
  • 示例代码:
// 父类
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):
  • 封装是将数据(字段)和操作数据的方法(函数)封装在一个类中的概念。通过使用访问修饰符来限制对类的部分内容的访问,可以控制对象的访问级别和安全性。

  • 示例代码:

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):
  • 多态允许使用同一个方法名在不同的类中产生不同的行为。这提高了代码的灵活性,可以根据不同的对象类型调用相同的方法而表现出不同的行为。
  • 示例代码:
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)是指在同一个类中包含多个同名函数,但是这些函数的参数类型、参数个数或顺序不同。这样,可以通过传递不同类型的参数或不同数量的参数来调用同一个函数名,而编译器能够根据传入的参数类型和数量来分辨到底要调用哪个函数。
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)
– 创建员工表

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

– 插入员工数据

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)
– 创建部门表

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName NVARCHAR(100),
    Manager NVARCHAR(100)
);

– 插入部门数据

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

表3: 订单 (Orders)
– 创建订单表

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    EmployeeID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2)
);

– 插入订单数据

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. 查询所有员工的信息。
SELECT * FROM Employees;
  1. 查询所有薪资大于60000的员工。
SELECT * FROM Employees WHERE Salary > 60000.00;
  1. 列出所有部门及其经理姓名。
SELECT DepartmentName, Manager FROM Departments;
  1. 统计每个部门的员工数量。
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年之前入职的员工。
SELECT * FROM Employees WHERE HireDate < '2020-01-01';
  1. 计算人力资源部的总薪资预算。
SELECT SUM(Salary) AS TotalSalaryBudget
FROM Employees
WHERE DepartmentID = 101;
  1. 查询所有员工中最早和最新的入职日期。
SELECT MIN(HireDate) AS OldestHireDate, MAX(HireDate) AS NewestHireDate
FROM Employees;
  1. 按薪资从高到低排序查询所有员工。
SELECT * FROM Employees ORDER BY Salary DESC;
  1. 计算所有员工的平均薪资。
SELECT AVG(Salary) AS AverageSalary FROM Employees;
  1. 查询2023年1月的所有订单。
SELECT * FROM Orders WHERE OrderDate >= '2023-01-01' AND OrderDate < '2023-02-01';
  1. 列出所有下过订单的员工。
SELECT DISTINCT e.FirstName, e.LastName
FROM Employees e
JOIN Orders o ON e.EmployeeID = o.EmployeeID;
  1. 查询员工及其对应的部门名称。
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID;
  1. 统计总订单数量。
SELECT COUNT(*) AS TotalOrders FROM Orders;
  1. 查询订单金额最高的订单。
SELECT MAX(TotalAmount) AS HighestOrderAmount FROM Orders;
  1. 计算每个订单的平均金额。
SELECT AVG(TotalAmount) AS AverageOrderAmount FROM Orders;
  1. 列出所有员工及其下的订单(如果有的话)。
SELECT e.FirstName, e.LastName, o.OrderID, o.TotalAmount
FROM Employees e
LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID;
  1. 查询没有下过订单的员工。
SELECT e.FirstName, e.LastName
FROM Employees e
LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID
WHERE o.OrderID IS NULL;
  1. 计算公司的总薪资支出。
SELECT SUM(Salary) AS TotalSalaryExpense FROM Employees;
  1. 查询薪资最高的员工。
SELECT TOP 1 * FROM Employees ORDER BY Salary DESC;
  1. 查询2021年入职的员工。
SELECT * FROM Employees WHERE YEAR(HireDate) = 2021;

http://www.niftyadmin.cn/n/5547020.html

相关文章

SpringCloud学习Day7:Seata

概念 Seata是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务 工作流程 TC以Seata服务器形式独立部署&#xff0c;TM和RM则是以Seata Client的形式集成在微服务中运行

Redis 集群模式

文章目录 前言1. Redis Cluster 搭建1.1 准备节点1.2 准备配置文件1.3 查看集群状态 2. 客户端访问3. Python 连接集群4. Redis 集群维护4.1 新增节点4.2 手动分配 slot4.3 节点移除 5. 集群运维5.1 集群倾斜5.2 手动切换 前言 Redis 3.0 提供了 Redis Cluster 架构&#xff0…

Qt Qwt 图表库详解及使用

文章目录 Qt Qwt 图表库详解及使用一、Qwt 概述二、安装 Qwt1. 下载和编译 Qwt2. 在项目中使用 Qwt三、Qwt 的基本使用1. 创建一个简单的折线图2. 添加图例和自定义样式四、Qwt 的交互功能1. 启用缩放和平移2. 启用数据点选择五、Qwt 的高级特性1. 实时数据更新2. 多轴绘图六、…

Linux C++ 045-设计模式之工厂模式

Linux C 045-设计模式之工厂模式 本节关键字&#xff1a;Linux、C、设计模式、简单工厂模式、工厂方法模式、抽象工厂模式 相关库函数&#xff1a; 简单工厂模式 基本简介 从设计模式的类型上来说&#xff0c;简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法&…

接口测试(1)

什么是接口测试 路线&#xff1a; 项目介绍 URL&#xff1a;统一资源定位符 HTTP协议 请求URL 请求行 请求方法 post/put 请求行 请求数据类型 content-type json 请求数据 请求体 响应状态码 响应行 响应数据类型 content-type json 响应数据 请响应体 用户名&#xf…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接? 常见的激光焊接技术详解

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业&#xff1a;消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

【高校科研前沿】中国农业大学姚晓闯老师等人在农林科学Top期刊发表长篇综述:深度学习在农田识别中的应用

文章简介 论文名称&#xff1a;Deep learning in cropland field identification: A review&#xff08;深度学习在农田识别中的应用&#xff1a;综述&#xff09; 第一作者及单位&#xff1a;Fan Xu&#xff08;中国农业大学土地科学与技术学院&#xff09; 通讯作者及单位&…

SpringBoot 实现视频分段播放(通过进度条来加载视频)

需求&#xff1a;现在我本地电脑中有一个文件夹&#xff0c;文件夹中都是视频&#xff0c;需要实现视频播放的功能。 问题&#xff1a;如果通过类似 SpringBoot static 文件夹的方式来实现&#xff0c;客户端要下载好完整的视频之后才可以播放&#xff0c;并且服务端也会占用大…