Visual Studio 与 SQL Server 常见报错解决方案(工作向)

前言

这篇文章从今天创建开始,会一直更新下去,以后遇到常见但是比较容易解决的报错会在本文进行更新,有需要的朋友可以收藏再看

目录

  • Visual Studio
    • lc.exe已退出,代码为-1
    • 无法导入以下密钥文件xxx.pfx,该密钥文件可能受密码保护
  • SQL Server
    • SQL SERVER在与服务器建立连接时出错
  • 知识拓展 — 对话AI
    • 什么是封装?
    • 什么是序列化?
    • 什么是程序集?
    • 什么是元素据?
  • 总结

Visual Studio

lc.exe已退出,代码为-1

起因

我们在修改完项目代码时,需要重新生成项目,以便在前端页面查看效果,在点击重新生成时,经常会遇到这样的一个报错

在这里插入图片描述

lc.exe是什么?

lc.exe 的全称是 “License Compiler”,它是一个许可证编译器,通常与.NET应用程序中使用的许可证文件(.licx 文件)相关联。这个工具被用于编译包含许可证信息的文件,以便在运行时验证和授权许可证。

在.NET开发中,lc.exe 主要与第三方控件或组件一起使用,这些组件可能需要许可证文件来确认用户是否有权使用它们。.licx 文件包含了项目中使用的需要许可证验证的组件信息,lc.exe 会处理这个文件,生成许可证的二进制文件(.licenses 文件),然后这个二进制文件通常会被嵌入到应用程序中。

例如,当使用一些商业组件(如Infragistics控件、DevExpress控件等)时,你可能会在项目中看到 .licx 文件,并在构建项目时 lc.exe 会被调用来处理这个文件。

报错:lc.exe已退出,代码为-1的可能原因

1. 许可证文件路径错误:如果指定的许可证文件路径不正确,或者无法找到指定的许可证文件,可能会导致 lc.exe 无法正确执行。

许可证文件一般在properties文件夹下,

在这里插入图片描述

2. 许可证文件格式错误:许可证文件可能损坏或格式不正确,导致 lc.exe 无法解析该文件。
在这里插入图片描述
以上是某个license.licx文件里的所有内容,也就是许可证信息。每一行都表示一个许可证信息,格式为:

CompanyName.ControlName, CompanyName.ControlAssembly, Version=ControlVersion, Culture=neutral, PublicKeyToken=ControlPublicKeyToken

其中:

  • CompanyName 是控件供应商的名称。
  • ControlName 是控件的名称。
  • ControlAssembly 是包含控件的程序集名称。
  • ControlVersion 是控件的版本号。
  • Culture 用于表示特定的语言和文化信息。
  • ControlPublicKeyToken 是控件的公钥标记。

例如,第一行表示 DevExpress.XtraEditors.TextEdit 控件的许可证信息,具体如下:

  • CompanyName: DevExpress.XtraEditors
  • ControlName: TextEdit
  • ControlAssembly: DevExpress.XtraEditors.v12.1
  • ControlVersion: Version=12.1.6.0
  • Culture=neutral :表示该程序集中的代码和资源不依赖于特定的语言或文化设置,可以在任何文化环境中使用
  • ControlPublicKeyToken: PublicKeyToken=b88d1754d700e49a

licenses.licx 文件中的每一行都指定了相应控件的许可证信息。

以上是比较常见的原因,以下是不可抗力因素导致的原因,需要具体问题具体分析
这里只提供参照
3. 许可证生成工具配置错误lc.exe 的配置选项可能不正确,例如,指定的输入或输出参数不符合预期。
4. 权限问题:可能是由于执行 lc.exe 的用户没有足够的权限来访问指定的文件或目录,导致执行失败。
5. 许可证生成过程中的错误:如果在许可证生成过程中发生了错误,例如由于无效的密钥或参数,lc.exe 可能会以退出代码 -1 结束。
6. 系统资源不足:系统资源不足,例如内存不足,可能导致 lc.exe 执行失败。
7. lc.exe 版本不匹配:如果使用的是与项目不兼容的 lc.exe 版本,可能会导致执行期间的错误。

解决方案

1、删除properties文件夹下的license.licx文件

licenses.licx 文件是 Visual Studio 中用于许可证管理的文件,通常包含与项目中使用的第三方控件或组件相关的许可证信息。其主要作用是确保使用受许可证保护的组件时,在运行时能够正常执行而不触发许可证错误。该文件会在编译时生成相关代码用于验证这些组件的许可证。通过自动生成代码,它简化了许可证验证的处理,避免了手动管理的复杂性。每行包含一个控件或组件的完全限定名,标识需要进行许可证验证的组件。注意,通常由 Visual Studio 自动生成和管理,手动编辑可能导致许可证验证错误。
删除了license.licx文件后, lc.exe 会从控件的程序集中提取许可证信息,从而保证受许可证保护的组件能够正常运行

2、在NuGet程序包中安装EmptyLicensesLicx

安装步骤在我的这篇文章 中已有详细介绍,在此不赘述
文件夹内部如下图
在这里插入图片描述

原理

EmptyLicensesLicx是一种简化构建应用程序的方法,特别适用于使用公司(如Telerik、DevExpress、Infragistics等)的第三方控件的项目。通过引用EmptyLicensesLicx.targets并将其链接到构建管道,确保在每次编译项目的Properties\licenses.licx文件之前,该文件始终为空。这意味着尽管Visual Studio会继续修改Properties\licenses.licx文件以反映项目更改,但每次编译时,该文件都会被清空,然后进行编译。请务必将Properties\licenses.licx文件排除/忽略,以避免将其添加到源代码控制系统中。

就是说,在使用这个方法的时候,properties文件夹下不能有licenses.licx文件

3、删除properties文件夹下的.licenses后缀名的文件

原理同删除license.licx文件相似,对于每个在 licenses.licx 文件中列出的控件,lc.exe 将查找对应的 .licenses 文件。这些文件通常由控件供应商提供。lc.exe 使用找到的 .licenses 文件中的信息来生成项目所需的许可证信息。

就是说,删除.licenses后缀名的文件等于告诉lc.exe去程序集里找许可证信息吧!

以上是我目前对于lc,exe文件的理解,其中若有出错遗漏的地方,请道友们不吝赐教
如要了解更多lc.exe的信息,点此跳转Microsoft官方文档

无法导入以下密钥文件xxx.pfx,该密钥文件可能受密码保护

这个报错是我在删除license.licx后重新生成项目时出现的

什么原因?

我们首先来理解一下生成重新生成的概念
在Visual Studio和其他集成开发环境(IDE)中,“生成”和“重新生成”是两个不同的操作,它们的区别在于:

  1. 生成: 当你点击“生成”按钮时,IDE会检查项目中的源代码文件的修改日期和与之相关的依赖项。如果只有一部分源代码或相关文件发生了更改,IDE只会重新编译这些已更改的部分,以提高构建速度。如果没有文件发生更改,它可能不会执行任何编译操作。
  2. 重新生成: 当你点击“重新生成”按钮时,IDE会忽略源代码和依赖项的修改日期,强制重新编译整个项目。这确保了所有的源代码都会被重新编译,而不仅仅是已更改的部分。重新生成有助于确保项目的完整性,但可能需要更长的时间。

也就是说重新编译整个项目后,需要手动输入密码,那么密码在哪里输入呢?

按部就班

如下图所示,右击项目,点击属性
在这里插入图片描述
在属性页面点击签名
在这里插入图片描述
点击文件弹出下拉框在这里插入图片描述
点击密钥文件弹出输入密码框,这个密码得问你的同部门同事要
在这里插入图片描述
输入密码,问题解决,以下是chatgpt给出的解决方案,仅供参考

在这里插入图片描述

解决方案

  1. 检查密码保护

    • 如果你的密钥文件受到密码保护,确保在导入时提供了正确的密码。在 Visual Studio 中,当导入 pfx 文件时,通常会提示你输入密码。
    • 如果密码丢失或不确定,你可能需要重新创建或获取没有密码保护的密钥文件。
  2. 重新导入证书

    • 在 Visual Studio 中,打开项目,然后在解决方案资源管理器中找到项目。
    • 右键单击项目,选择“属性”。
    • 转到“签名”选项卡,然后确保正确的密钥文件已选择。
    • 如果密钥文件存在问题,可以尝试重新导入或选择正确的密钥文件。
  3. 手动安装证书

    • 打开证书管理工具。可以按 Win + R 打开运行对话框,输入 certmgr.msc,然后按 Enter。
    • 在证书管理器中,找到你的证书,右键单击并选择“安装证书”。
    • 在安装向导中,选择“当前用户”或“本地计算机”(根据你的需求),然后选择“将所有证书放入以下存储”并浏览到“个人”存储。
    • 完成向导,确保证书已正确安装。
  4. 检查密钥容器名称

    • 在错误信息中提到了密钥容器名称。确保你的密钥文件与正确的密钥容器名称相关联。
    • 如果密钥容器名称不匹配,可以在项目属性中更正它。
  5. 重新生成项目

    • 在完成上述步骤后,尝试重新生成项目,看看是否仍然出现错误。

SQL SERVER

在与SQL SERVER建立连接时出错

在这里插入图片描述

起因

使用SSMS连接服务器报错

溯源

我们在使用SSMS连接数据库的道友一定对下图非常熟悉
在这里插入图片描述
我们无论是连接本地数据库还是远程服务器中的数据库都是通过以下画面点击连接,由于我一直用的是本地的数据库,所以一直没有出过问题,这次问题的出现是因为我要链接远程服务器的数据库,而以UserName/MYSQLSERVER格式的数据库名称,是连不上服务器中的数据库的

解决

一个必知的解决办法就是——IP地址
使用服务器的IP地址,搭配管理员的用户名和密码,目前来看,是一定可以连接到远程服务器的,当然,这个操作成立的前提就是,本机的IP和服务器的IP共用内网,如下图
在这里插入图片描述

知识拓展 — 对话AI

什么是封装?

程序员

在编程领域,如何理解封装这一概念,精简回答

在这里插入图片描述

封装是面向对象编程中的概念,指的是将数据操作封装在一个单一的单元(类)中,同时对外部隐藏实现的细节。这提供了一种保护和隔离代码的方式,使得对象的内部状态和行为对外部是私有的,只有通过对象提供的公共接口才能进行访问和操作。封装有助于提高代码的模块性、可维护性和安全性。

程序员

写一个c#中三层封装的方法

在这里插入图片描述

在C#中,三层封装通常指的是数据访问层(Data Access Layer,DAL)、业务逻辑层(Business Logic Layer,BLL)、和表示层(Presentation Layer,通常是UI层)。以下是一个简单的示例,演示了这三层封装的方法:

  1. 数据访问层(DAL):
// DataAccessLayer.csusing System;
using System.Data.SqlClient;
using System.Data;namespace YourNamespace
{public class DataAccessLayer{private string connectionString = "your_database_connection_string";public DataTable GetUserData(){using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();SqlCommand command = new SqlCommand("SELECT * FROM Users", connection);SqlDataAdapter adapter = new SqlDataAdapter(command);DataTable dataTable = new DataTable();adapter.Fill(dataTable);return dataTable;}}// 其他数据库操作方法...}
}
  1. 业务逻辑层(BLL):
// BusinessLogicLayer.csusing System;
using System.Data;namespace YourNamespace
{public class BusinessLogicLayer{private DataAccessLayer dataAccessLayer = new DataAccessLayer();public DataTable GetUserData(){// 在这里可以添加业务逻辑处理return dataAccessLayer.GetUserData();}// 其他业务逻辑方法...}
}
  1. 表示层(Presentation Layer):
// PresentationLayer.csusing System;
using System.Data;namespace YourNamespace
{class Program{static void Main(string[] args){BusinessLogicLayer businessLogicLayer = new BusinessLogicLayer();DataTable userData = businessLogicLayer.GetUserData();// 在这里可以处理用户界面显示等操作foreach (DataRow row in userData.Rows){Console.WriteLine($"User ID: {row["UserId"]}, Username: {row["Username"]}");}}}
}

这只是一个简单的示例,实际项目中可能会更加复杂。在这个示例中,数据访问层负责与数据库交互,业务逻辑层处理业务规则,表示层用于展示数据和与用户交互。这种结构有助于提高代码的可维护性和扩展性。

其实,到这里我才稍稍明白领导口中的业务逻辑的概念

什么是序列化?

程序员

什么是序列化?精简回答

在这里插入图片描述

序列化是将对象转换为可传输或存储的格式的过程,通常是字节流或文本。它便于在网络传输、文件存储或内存中保存对象,并可在需要时还原为原始对象。应用场景包括网络通信、持久化和跨平台数据交换。各编程语言提供内置序列化机制或库。

程序员

举个形象的例子

在这里插入图片描述

想象你有一个玩具,要通过邮寄给朋友。序列化就像把这个玩具放进一个包裹,然后写下它的特征和组成部分的清单。你的朋友在收到包裹后,能够根据清单重新组装出完整的玩具。

程序员

C#中用于序列化的关键字

在这里插入图片描述

在C#中,用于序列化的关键字是 [Serializable]。通过在类前面加上 [Serializable] 特性,表示该类可以被序列化。

程序员

被序列化后的类会怎么样?

在这里插入图片描述

被序列化后的类会被转换为一种格式,通常是二进制、JSON、XML等,以便于存储或传输。这允许将对象的状态保存下来,或在不同系统之间进行数据交换。在反序列化时,可以重新创建原始对象并恢复其状态。

程序员

举个代码实例

在这里插入图片描述

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;[Serializable]
public class MyClass
{public int Id { get; set; }public string Name { get; set; }
}class Program
{static void Main(){// 创建一个对象MyClass myObject = new MyClass { Id = 1, Name = "Example" };// 序列化对象SerializeObject(myObject, "serializedObject.dat");// 反序列化对象MyClass deserializedObject = DeserializeObject<MyClass>("serializedObject.dat");// 输出反序列化后的对象属性Console.WriteLine($"Deserialized Object - Id: {deserializedObject.Id}, Name: {deserializedObject.Name}");}static void SerializeObject<T>(T obj, string fileName){// 创建文件流using (FileStream fs = new FileStream(fileName, FileMode.Create)){// 创建二进制格式化程序BinaryFormatter formatter = new BinaryFormatter();// 序列化对象到文件流formatter.Serialize(fs, obj);}}static T DeserializeObject<T>(string fileName){// 创建文件流using (FileStream fs = new FileStream(fileName, FileMode.Open)){// 创建二进制格式化程序BinaryFormatter formatter = new BinaryFormatter();// 反序列化对象return (T)formatter.Deserialize(fs);}}
}

这个例子演示了一个带有 [Serializable] 特性的类 MyClass 的序列化和反序列化过程。

什么是程序集?

程序员

c#中,什么是程序集?

在这里插入图片描述

在C#中,程序集(Assembly)是一个部署单元,它是一个包含可执行代码和相关元数据的文件。程序集可以是可执行文件(如.exe文件)或动态链接库(如.dll文件)。程序集包含了应用程序的代码、类型信息、资源、以及清单(manifest)等。

程序集可以分为两种主要类型:

  • 可执行程序集(Executable Assembly): 包含了应用程序的入口点,通常是.exe文件。可执行程序集可以直接运行。

  • 类库程序集(Library Assembly): 包含了一组相关的类、接口、枚举等类型,通常是.dll文件。类库程序集用于提供可供其他程序集引用和使用的功能。

程序集的元数据包含了有关其中包含的类型的信息,以及对其他程序集的引用等。清单是程序集的一部分,它包含了有关程序集本身的信息,如版本号、文化特定信息、强名称(strong name)等。

程序集的引入使得C#具有了模块化的特性,允许将代码划分为独立的单元,并且可以轻松地在不同的应用程序中重用和共享这些单元。

程序员

除了C#,其他编程语言中有程序集吗?

在这里插入图片描述

术语可能会有所不同,但是在许多编程语言中,类似的概念存在。以下是一些编程语言中与C#中的程序集类似的概念:

  1. Java: 在Java中,类似于C#中的程序集的概念是Java Archive(JAR)文件。JAR文件包含了Java字节码、资源文件和清单,它是一种可移植的打包格式,可以包含多个相关的类。

  2. C++: 在C++中,可执行文件和动态链接库也包含了可执行代码和元数据。对于动态链接库,通常使用.dll(Windows)或.so(Unix/Linux)扩展名。

  3. Python: Python中的概念类似于模块和包。模块是包含Python代码的文件,而包是一个包含多个模块的目录,通常包含一个__init__.py文件。

  4. C: 在C语言中,可执行文件和静态库或动态链接库包含了编译后的机器代码和符号信息。

虽然术语和具体实现可能有所不同,但大多数编程语言都有一种方式来组织和封装可执行代码以及相关的元数据。这些概念都有助于模块化、组织和重用代码。

什么是元数据?

程序员

在C#中,如何理解元数据?

在这里插入图片描述

在C#中,元数据是关于程序集(assembly)模块(module)类型(type)成员(member)等程序结构的信息。这些信息可以在运行时通过反射访问。以下是在C#中理解元数据的一些关键点:

  1. 反射: C#中的反射机制允许在运行时获取和使用程序集、类型和成员的信息。通过反射,你可以动态地探索和操作代码中的元数据。

  2. Assembly(程序集)元数据: 程序集是C#中的基本部署单元,包含了一个或多个模块。程序集的元数据包括程序集的名称、版本信息、清单、模块列表等。

  3. Module(模块)元数据: 模块是程序集的组成部分,它包含一个或多个类型。模块的元数据包括模块的名称、版本信息、类型定义等。

  4. Type和Member(类型和成员)元数据: 元数据描述了类型的结构,包括字段、属性、方法等成员信息。每个成员都有相关的元数据,用于描述其名称、数据类型、访问修饰符等。

  5. Custom Attributes(自定义属性): C#中支持自定义属性,它们允许你向程序结构添加元数据。自定义属性本身也是元数据,并可以在运行时通过反射读取。

  6. Metadata Tokens(元数据标记): 每个程序集、模块、类型和成员都有一个唯一的元数据标记,可以通过反射使用这些标记来快速访问元数据。

理解C#中的元数据对于一些高级应用场景很重要,例如动态代码生成、插件系统的实现以及一些特殊需求的处理。通过反射和元数据,开发人员可以更灵活地操作和扩展代码。

程序员

举一个元数据的动态代码生成的实例

在这里插入图片描述

假设我们想要动态生成一个包含属性的简单类,并在运行时设置和获取属性的值。我们可以使用C#的反射和元数据来实现这个动态代码生成的例子。以下是一个简化的示例:

using System;
using System.Reflection;
using System.Reflection.Emit;class Program
{static void Main(){// 创建一个动态程序集AssemblyName assemblyName = new AssemblyName("DynamicAssembly");AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);// 创建一个动态模块ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");// 创建一个动态类型TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicClass", TypeAttributes.Public);// 添加一个属性PropertyBuilder propertyBuilder = typeBuilder.DefineProperty("DynamicProperty", PropertyAttributes.None, typeof(string), null);// 添加属性的Get方法MethodBuilder getMethodBuilder = typeBuilder.DefineMethod("get_DynamicProperty", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(string), Type.EmptyTypes);ILGenerator getIlGenerator = getMethodBuilder.GetILGenerator();getIlGenerator.Emit(OpCodes.Ldstr, "DynamicPropertyValue");getIlGenerator.Emit(OpCodes.Ret);propertyBuilder.SetGetMethod(getMethodBuilder);// 创建类型Type dynamicType = typeBuilder.CreateType();// 创建类的实例object dynamicObject = Activator.CreateInstance(dynamicType);// 使用反射获取和设置属性的值PropertyInfo dynamicProperty = dynamicType.GetProperty("DynamicProperty");string propertyValue = (string)dynamicProperty.GetValue(dynamicObject);Console.WriteLine("Dynamic Property Value: " + propertyValue);// 输出结果应为:Dynamic Property Value: DynamicPropertyValue}
}

这个例子演示了如何使用反射和元数据在运行时动态生成一个包含属性的类,并在实例中设置和获取属性的值。在实际应用中,动态代码生成常用于创建插件系统、ORM(对象关系映射)框架等场景。

总结

本文介绍了几种常见报,及其可能的原因以及解决办法,往后,本文将不定期更新,大家若有什么报错无法解决,欢迎在本文下留言,或私信博主,共商解决之策,喜欢本文的话,点赞收藏关注三连支持一下博主吧!道友们的支持就是我更新的源动力!
回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413059.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go实现判断20000数据范围内哪些是素数(只能被1和它本身整除的数),采用多协程和管道实现

实现一个并发程序&#xff0c;用于寻找 20000 以内的所有素数。使用了 Goroutines 和 Channels 来分发和处理任务&#xff0c;并通过 WaitGroup&#xff08;实现为 exitChan&#xff09;来同步 Goroutines 的退出。 一.GO代码 package mainimport ("fmt""time…

【OJ】牛客链表刷题

题目 1. 链表分割1.1 题目分析1.2 代码 2. 链表的回文结构2.1 题目分析2.2 代码 这里两道与链表有关的题目均来自牛客。 1. 链表分割 1.1 题目分析 因为这里代码不能选择用c语言写&#xff0c;所以选择用c,因为c兼容c。 题目要求分割链表&#xff0c;我们可以直接弄成两个带哨…

Spring 中 HttpServletRequest 作为成员变量是安全的吗?

在使用spring框架开发的时候&#xff0c;经常会在controller类中看到 HttpServletRequest 对象参数&#xff0c;一般我们都是直接使用&#xff0c;但是它是何时、怎么注入到 spring 容器的呢 &#xff1f;另外以成员变量注入的 request 是线程安全的吗 ? Controller public c…

SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 三、使用Core API访问与操作…

计算机网络——运输层(1)暨小程送书

计算机网络——运输层&#xff08;1&#xff09;暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层概述两个主要协议运输层和网络层的关系网络层运输层总结 多路复用与多路分解多路复用多路分解不同的技术实现时分复用&#xff08;TDM&#xff09;频分复…

C语言从入门到实战——结构体与位段

结构体与位段 前言一、结构体类型的声明1.1 结构体1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 二、 结构体内存对齐2.1 对齐规则2.2 为什么存在内存对齐2.3 修改默认对齐数 三、结构体传参四、 结构体实现位段4.1 什么是位段4.2 位段…

【C语言】- 设置控制台文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API&#xff0c;所以需要包含头文件…

C++大学教程(第九版)5.19求Π的值

题目 代码 #include <bits/stdc.h> using namespace std;int main() {double pai 0;for (int count 1, i 1; count < 1000; i 2, count){int flag 1;if (count % 2 0){flag -1;}pai flag * (4.0 / (i * 1.0));cout << "当取前" << co…

西门子1200和西门子200smart S7通讯

S7通讯是西门子以太网络通讯中最简单最常用的通讯。 下面来介绍200smart和1200之间如何进行S7通讯: 由于200smart和1200使用不同的编程软件&#xff0c;所以只能使用单端组态&#xff0c;我们这里以1200为客服端组态。 1.首先打开博图软件添加1200设备&#xff0c;这里选择1…

(C语言)冒泡排序

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现buble_sort函数&#xff1b; void buble_sort(int arr[], int sz) {//初始化变量值&#xff1b;int i 0;//嵌套循环冒泡排序&#xff1b;//外层循环&…

无人售卖饮品机的优势与选购指南

无人售卖饮品机作为一种新型的自动售货设备&#xff0c;已经越来越受到人们的关注和喜爱。它具有许多优势&#xff0c;为消费者提供了更加便捷、高效的购买体验。同时&#xff0c;面对市场上琳琅满目的无人售卖饮品机&#xff0c;如何挑选适合自己的产品也成为了消费者关心的问…

2018年认证杯SPSSPRO杯数学建模B题(第一阶段)动态模糊图像全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 B题 动态模糊图像 原题再现&#xff1a; 人眼由于存在视觉暂留效应&#xff0c;所以看运动的物体时&#xff0c;看到的每一帧画面都包含了一段时间内 (大约 1/24 秒) 的运动过程&#xff0c;所以这帧画面事实上是模糊的。对电影的截图来说&…