array问题

合集下载

最短路线问题——标数法的应用

最短路线问题——标数法的应用

计数的基本方法——标数法例1:沿着下图所显示的线段,从A点到B点,有多少条最短路线
C
I
例2:沿着下图所显示的线段,从A点到B点,有多少条最短路线Array
(1)
(2)
例3:沿下图所示的线段,从A步行到Z,但行走方向只能向东或向南,他有多少种不同的行走路线
例4:如图,求A到B沿网格线的最短路线数:
(1)必须经过点C;
(2)必须经过线段EF;
(3)不经过点C;
(4)不经过线段EF;
例5:按下图箭头所指的方向行走,从A到达Z有多少种不同行走路线
本章小结:
1.什么是标数法
答:在每个点上标记出从起点出发到此点的路线数的一种计数方法。

2.如何使用标数法解决长方形网络图中的最短路线问题
答:
1.确定标数的方向;
2.将与起点共直线的点上标上数字1;
3.画出每个小方格对角线;
4.把每个小方格内对角线顶点上的两个数字相加,和标记在剩下的那个点上;
2.如何使用标数法解决路线数问题
答:
1.从某一点出发到另一点只有一条路线的时候,则后点上标记的数字应该和前一点相同;
2.如果到达某一点必须经过与这个点相邻的两个或几个点时,则该点上标记的数字是能够
到达这一点的相邻的两个或几个点上标记的数字之和。

hp 报错信息

hp 报错信息

Failure During Capacity Expansion. Select F1 to continue with logical drives disabled.Select F2 to accept data loss and to re-enable logical drives. ·阵列加速器模块被卸下或出现故障;扩展进程数据丢失·无法从阵列加速器中读取扩展进程数据·扩展因不可恢复的驱动器错误而终止·扩展因阵列加速器错误而终止1.按F2 键接受数据丢失并重新启用逻辑驱动器。

2.从备份里恢复数据。

3.如果是因驱动器质量有问题或阵列加速器故障而导致的,请更换相应的驱动器或阵列控制器。

1770-Slot X Drive Array - SCSI Drive Firmware Update Recommended 需要更新驱动器固件。

指定的驱动器运行已知会导致间歇问题的固件。

运行可选件ROM 将驱动器固件升级到最新版本。

从HP 官方网站下载对应ROM,网址为:1774-Slot X Drive Array - Obsolete Data Found in Array Accelerator 在另一个控制器上使用驱动器,同时驱动器重新连接到原始控制器上,而数据则位于原始控制器高速缓存中。

阵列加速器中找到的数据比驱动器上找到的数据旧,已自动被废弃。

检查文件系统以确定数据是否丢失。

1775-Slot X Drive Array - ProLiant Storage System Not Responding SCSI Port Y: ... Check storage system power switch and cables. Turn the system power off while checking the ProLiant power and cable connections, then turn the system power back on to retry. 检测到存储系统问题。

指定的参数已超过有效值的范围 参数名 index

指定的参数已超过有效值的范围 参数名 index

指定的参数已超过有效值的范围参数名index指定的参数已超过有效值的范围是很常见的错误之一。

当我们编写程序或使用软件时,往往需要提供一些参数来指定特定的行为或选项。

这些参数通常有其有效的范围,超出该范围就会导致错误的发生。

在这里,我们以参数名为index来讨论指定的参数已超过有效值的范围的问题。

首先,我们需要明确index参数的意义和用途。

在计算机编程中,index通常用于指定某个集合或数组中的元素的位置或索引。

例如,当我们想要访问数组中的某个特定元素时,需要使用index参数来指定所需元素的位置。

index的取值通常是一个非负整数,表示元素在集合中的位置。

当我们使用一个指定范围的index值时,程序会按照预期的方式运行,返回正确的结果。

但是,当我们使用超过有效范围的index值时,就会出现问题。

这可能会导致程序崩溃、数据损坏、错误的输出或其他不可预测的行为。

为了更好地理解这个问题,让我们考虑一个具体的例子。

假设我们有一个包含10个元素的数组,我们希望访问第11个元素。

根据正常的数组索引规则,这是不可能的,因为数组的索引从0开始,到9结束。

如果我们使用index=10来访问该数组的第11个元素,就会发生指定的参数已超过有效值的范围的错误。

错误的发生可能取决于编程语言或软件的实现方式。

在一些编程语言中,这样的错误可能会导致程序崩溃并显示错误消息,提示索引超出范围。

在其他情况下,程序可能会尝试继续执行,但返回错误的结果或导致其他不可预测的错误。

为了解决这个问题,我们需要在使用index参数之前,先检查其是否在有效范围内。

这可以通过使用条件语句来实现。

在上述例子中,我们可以添加一个条件判断来检查index是否小于数组的长度。

如果index的值大于或等于数组的长度,就说明超出了有效范围,可以采取相应的措施,如输出错误消息、抛出异常或进行其他的错误处理。

例如,在Python的代码中,我们可以使用以下方式来检查index 值是否超出范围:```pythonarray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]index = 11if index < len(array):value = array[index]print("The value at index", index, "is", value)else:print("Error: Index out of range")```在这个例子中,我们首先通过比较index和数组的长度来检查index值是否在有效范围内。

c++ cptrarray用法

c++ cptrarray用法

=========CPtrArray是一个常用的C++类,用于在C++程序中管理动态数组。

它提供了许多有用的函数和方法,可以方便地操作和管理数组中的元素。

在本篇文章中,我们将介绍CPtrArray的基本用法、创建、初始化、添加和删除元素,以及常见问题和解决方法。

一、基本用法------CPtrArray类继承自CArray类,提供了许多与数组相关的操作。

使用CPtrArray,您可以轻松地创建和管理动态数组,并使用各种函数和方法来操作数组中的元素。

二、创建和初始化--------要创建一个CPtrArray对象,您需要提供数组的大小。

可以使用默认构造函数创建一个空的CPtrArray对象,然后使用SetSize函数指定数组的大小。

例如:```cppCPtrArraymyArray;//创建一个空的CPtrArray对象myArray.SetSize(10);//指定数组的大小为10```您可以使用构造函数或SetAt函数将元素添加到数组中。

例如:```cppmyArray.SetAt(0,"Element0");//将元素添加到数组的第一个位置myArray.SetAt(1,"Element1");//将元素添加到数组的第二个位置```三、添加和删除元素---------可以使用InsertAt函数将元素插入数组的指定位置。

例如:```cppmyArray.InsertAt(2,"Element2");//将元素插入到数组的第三个位置```可以使用RemoveAt函数删除数组中的元素。

例如:```cppmyArray.RemoveAt(1);//删除数组中的第二个元素```您可以使用Count函数获取数组中的元素数量,使用IsEmpty函数检查数组是否为空。

例如:```cppintcount=myArray.Count();//获取数组中的元素数量boolisEmpty=myArray.IsEmpty();//检查数组是否为空```四、常见问题和解决方法-----------###问题:如何释放CPtrArray中的内存?解决方法:您可以使用Clear函数释放CPtrArray中的所有内存。

java 与 system.arraycopy 类似的方法 -回复

java 与 system.arraycopy 类似的方法 -回复

java 与system.arraycopy 类似的方法-回复问题:Java与System.arraycopy类似的方法有哪些?回答:在Java中,System.arraycopy是一个非常有用的方法,用于将一个数组中的元素复制到另一个数组中。

它可以通过一行代码实现快速的数组复制操作。

然而,除了System.arraycopy之外,还有一些其他方法可用于类似的操作。

本文将逐步回答这个问题,探讨其它类似的方法。

方法1:使用循环进行数组复制循环是实现数组复制的一种常见方法。

可以使用for循环或while循环从源数组中逐个复制元素到目标数组中。

以下是使用for循环实现的示例代码:javaint[] sourceArray = {1, 2, 3, 4, 5};int[] targetArray = new int[sourceArray.length];for (int i = 0; i < sourceArray.length; i++) {targetArray[i] = sourceArray[i];}这段代码通过逐个复制源数组中的元素到目标数组中实现了数组的复制。

方法2:使用Arrays.copyOf方法进行数组复制Java的Arrays类提供了一个copyOf方法,用于实现数组复制。

该方法可以将指定长度的源数组的元素复制到一个新数组中,或者将源数组的所有元素复制到一个长度更大的新数组中,如果目标数组长度小于源数组长度,则只复制目标数组长度的部分元素。

以下是使用Arrays.copyOf方法实现的示例代码:javaint[] sourceArray = {1, 2, 3, 4, 5};int[] targetArray = Arrays.copyOf(sourceArray, sourceArray.length);这段代码通过将源数组的所有元素复制到一个新数组中实现了数组的复制。

方法3:使用Arrays.copyOfRange方法进行数组复制Arrays类还提供了一个copyOfRange方法,用于将源数组的指定范围内的元素复制到一个新数组中。

php判断数组是否含有某个键值的方法

php判断数组是否含有某个键值的方法

在PHP中,判断数组是否含有某个键值的方法是我们在开发中经常会遇到的问题。

这个问题涉及到数组的操作和判断,对于初学者来说可能有些困惑,但实际上PHP提供了多种方法来解决这个问题。

本文将从简单到复杂的方式,来介绍几种常见的判断数组是否含有某个键值的方法,希望能帮助大家更深入地理解这个问题。

一、使用array_key_exists()函数进行判断array_key_exists()函数是用来判断数组中是否存在指定的键名。

它接受两个参数,第一个参数是要检查的键名,第二个参数是要检查的数组。

如果数组中存在指定的键名,则返回true,否则返回false。

以下是一个简单的示例:```$arr = array("a" => 1, "b" => 2, "c" => 3);if (array_key_exists("a", $arr)) {echo "数组中存在键名a";} else {echo "数组中不存在键名a";}```通过以上代码,我们就可以判断数组$arr中是否存在键名"a"。

二、使用isset()函数进行判断除了array_key_exists()函数外,我们还可以使用isset()函数来判断数组中是否存在某个键名。

isset()函数用来检查变量是否已经设置并且非null。

对于数组来说,isset()函数可以用来判断数组中是否存在指定的键名。

以下是一个示例:```$arr = array("a" => 1, "b" => 2, "c" => 3);if (isset($arr["a"])) {echo "数组中存在键名a";} else {echo "数组中不存在键名a";}```在以上代码中,我们使用isset()函数来判断数组$arr中是否存在键名"a"。

经典问题(c++python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全。。。

经典问题(c++python)素数、杨辉三⾓(⾦字塔型)、统计单词数、简单计算器、密码安全。

【编写程序,输⼈⼀个⼤于2的⾃然数,然后输出⼩于该数字的所有素数组成的列表。

】所谓素数,是指除了1和⾃⾝之外没有其他因数的⾃然数,最⼩的素数是2,后⾯依次是3、5、7、11、13...c++代码:#include<iostream>#include<bits/stdc++.h>#define int long longusing namespace std;signed main(){int x;cin >> x;for(int i = 2;i < x;i++){int flag = 0;for(int j = 2;j <= sqrt(i);j++){if(i % j == 0){flag = 1;break;}}if(flag == 0)cout << i << "";}cout << endl;return0;}python代码:import matha = input("请输⼊⼀个⼤于2的整数:")for i in range(2,int(a)):flag = 0for j in range(2,int(math.sqrt(i) + 1)):if i % j == 0:flag = 1breakif flag == 0:print("{} ".format(int(i)))print("\n")【编写程序,格式化输出杨辉三⾓。

】杨辉三⾓即⼆项式定理的系数表,各元素满⾜如下条件:第⼀列及对⾓线上的元素均为1;其余每个元素等于它上⼀⾏同⼀列元素与前⼀列元素之和。

c++代码:#include<bits/stdc++.h>#define int long long#define maxx 9999using namespace std;int a[maxx][maxx];signed main(){int n;cin >> n;//初始化边for(int i = 1;i <= n;i++)//先初始化第⼀列即对⾓线的数值,都为1{a[i][i] = 1;a[i][1] = 1;}//计算出杨辉三⾓的各个值for(int i = 3;i <= n;i++)//从第三⾏第⼆列开始for(int j = 2;j <= i - 1;j++)//每⼀⾏所拥有的列数最⼤值即为当前⾏数减⼀a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//杨辉三⾓的性质,当前元素的值=上⼀⾏同⼀列的值+上⼀⾏前⼀列的值//输出打印for(int i = 1;i <= n;i++)//注意观察以下两个for循环的边界条件,之和为n,这有助于你的理解{for(int j = 1;j <= n - i;j++)//先打印空格cout << "";for(int k = 1;k <= i;k++)//再打印数值(数值后带⼀个空格)cout << a[i][k] << "";cout << endl;}return0;}python代码:import mathimport numpy as npn = eval(input("请输⼊⼀个整数:"))#a = np.zeros((n,n),dtype = np.int)#下⾯使⽤了列表推导式。

VC中的CArray的使用

我们在使用vc进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。

由于C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。

有效的使用CArray类,可以提高程序的效率。

MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。

CArray即为其中的一个,用来实现动态数组的功能。

CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。

我们有一个类class Object,我们要定义一个Object的动态数组,那么我们可以用以下两种方法:CArray<Object,Object> Var1;CArray<Object,Object&> Var2;Var1与Var2哪一个的效率要高呢?Var2的效率要高。

为什么呢?接下来我们对CArray的源代码做一个剖析就清楚了。

先了解一下CArray中的成员变量及作用。

TYPE* m_pData; // 数据保存地址的指针int m_nSize; // 用户当前定义的数组的大小int m_nMaxSize; // 当前实际分配的数组的大小int m_nGrowBy; // 分配内存时增长的元素个数首先来看它的构造函数,对成员变量进行了初始化。

CArray<TYPE, ARG_TYPE>::CArray(){m_pData = NULL;m_nSize = m_nMaxSize = m_nGrowBy = 0;}SetSize成员函数是用来为数组分配空间的,从这里着手,看CArray是如何对数据进行管理的。

SetSize 的函数定义如下:void SetSize( int nNewSize, int nGrowBy = -1 );nNewSize 指定数组的大小nGrowBy 如果需要增加数组大小时增加的元素的个数。

查找数组元素的最大值和最小值、众数问题

《算法设计与分析》上机实验报告专业班级学号学生姓名完成日期1. 上机题目及实验环境1.1上机题目:1.1.1 用分治法查找数组元素的最大值和最小值1.1.2 众数问题1.2实验环境:CPU:Intel Core i3 2.30GHz内存:2.0G操作系统:Windows 7软件平台:Visual C++2. 算法设计与分析2.1 查找数组最值2.1.1 分治递归方法:●将max和min设置为静态全局变量;●将数据集array平均分为两个数据集;●分别求解两个数据集中的最大和最小值;●最终的最大和最小值通过与max和min的值比较;●采用同样的处理方法递归处理以分好的数据集。

2.1.2 细节处理:●数组的大小为n2,n=0,1,2,3......●数组中的数字随机产生,数字的范围为1~100;●静态全局变量:max的初值为0,min的初值为101。

2.2 众数问题2.2.1 快速排序算法:●设置两个变量i、j,排序开始的时候:i=left,j=right+1;●以第一个数组元素作为关键数据,赋值给temp,即temp=array[left];●从j开始向前搜索,即由后开始向前搜索(--j),找到第一个小于temp的值array[j];●从i开始向后搜索,即由前开始向后搜索(++i),找到第一个大于temp的array[i];●交换array[i]和array[j]的值;●重复搜索步骤,直到i=j;●将temp的值和array[j]的值交换,并以此为界,分别在对左右两边进行快速排序。

3. 核心代码3.1 查找最值3.1.1 流程图(如图1)(核心函数为void MaxAndMin(int array[N], int left, int right)):图1.查找最值的流程图3.1.2 核心代码如下:(注:max和min是静态全局变量)void MaxAndMin(int array[N], int left, int right) // 求最大值最小值函数,分治递归法{int mid; // 数组的分界点if ( (left + 1) == right) // 分治的数组只有两个值时,更新max和min的值{if ( array[left] < array[right] && max < array[right] ) // 判断、更新最大值max = array[right];if ( array[left] > array[right] && max < array[left] )max = array[left];if ( array[left] < array[right] && min > array[left]) // 判断、更新最小值min = array[left];if ( array[left] > array[right] && min > array[right])min = array[right];}else{mid = (left + right) / 2; // 对数组进行分治MaxAndMin(array, left, mid); // 对左边的数组进行分治递归MaxAndMin(array, mid + 1, right); // 对右边的数组进行分治递归}}3.2 众数问题3.2.1 流程图(如图图2.众数问题的流程图3.2.2 核心代码如下:void quickSort(int *array,int left,int right) // 用快速排序法排序数组{if(left < right){int i = left, j = right+1;int temp = array[left]; // 以第一个数为基准while(true){while(array[++i] < temp && i < right); // 从前面找大于基准的数while(array[--j] > temp); // 从后面找小于基准的数if(i >= j) // 当left>right时停止break;swap(array[i], array[j]); // 交换两值}array[left] = array[j];array[j] = temp;int part = j; // 以靠左的较小值为界,对左右两部分数继续快排quickSort(array, left, part-1);quickSort(array, part+1, right);}}4. 运行与调试4.1 查找数组最值产生随机数组并排序:(如图3、图4、图5)图3.随机数组之一及结果图4.随机数组之二及结果图5.随机数组之三及结果4.2 众数问题4.2.1 只有一个众数(如图6、图7)图6.只有一个众数的数组图7.只有一个众数的结果4.2.2 没有众数(如图8、图9)图8.没有众数的数组图9.没有众数的结果4.2.3 有两个众数(如图10、图11)图10.有两个众数的数组图11.有两个众数的结果5. 结果分析和小结5.1 结果分析:通过设置不同的测试数据及运行的结果,可以看出程序的算法思想是正确的,程序的运行也是有效的,全面的。

SAFEARRAY使用详解

SAFEARRAY(安全数组)使用详解一,何谓SAFEARRAY(安全数组):winddows操作系统与使用SAFEARRAY 定义。

下列SAFEARRAY 结构是SAFEARRAY 典型、一般定义:typedef struct FARSTRUCT tagSAFEARRAY {unsigned short cDims; // 安全数组的大小unsigned short fFeatures; //安全数组的标记,取值见下表#if defined(WIN32) //如果在windows系统上unsigned long cbElements; //安全数组元素的大小//不包括安全数组数据的大小unsigned long cLocks; // 被锁定次数#elseunsigned short cbElements;unsigned short cLocks;unsigned long handle; // 仅用在 Macintosh 系统上#endifvoid HUGEP* pvData; // 数据指针SAFEARRAYBOUND rgsabound[1]; //安全数组的下界,元素数, 结构见下说明} ;typedef struct tagSAFEARRAYBOUND {unsigned long cElements;// 元素数long lLbound;// 数组的下界} ;fFeatures; //安全数组的标记说明FADF_AUTO 0x0001 在栈上创建数组FADF_STATIC 0x0002 在堆上创建数组FADF_EMBEDDED 0x0004 在结构中创建FADF_FIXEDSIZE 0x0010 不能改变数组大小FADF_RECORD 0x0020 记录容器FADF_HAVEIID 0x0040 有IID 身份标记数组FADF_HAVEVARTYPE 0x0080 VT 类型数组FADF_BSTR 0x0100 BSTR数组FADF_UNKNOWN 0x0200 IUnknown* 数组FADF_DISPATCH 0x0400 IDispatch* 数组FADF_VARIANT 0x0800 VARIANTs数组FADF_RESERVED 0xF0E8 余留,将来使用Microsoft Windows 2000 和WindowsXP 等操作系统系统使用整个Win32API。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

等离子体 等离子体是和固体、液体、气体同一层次的一种物质存在形态,是由部分电子被剥夺后的原子及原子被电离后产生的正负电子组成的离子化气体状物质,又被称为电浆。其最特出的特征是: Coulomb Van der Waals 。可以同时存在中性原子、分子或由更多分子集团组成的微粒(如尘埃微粒、 cluster、等)。

 等离子体的简介 含有足够数量的自由带电粒子,有较大的电导率,其运动主要受电磁力支配的 物质状态。等离子体由带正电的离子和带负电的电子,也可能还有一些中性的原 子和分子所组成。等离子体在宏观上一般是电中性的,即它所含有的正电荷和负 电荷几乎处处相等。由于带电粒子之间的作用主要是长程的库仑力,每个粒子都 同时和周围很多粒子发生作用,因此等离子体在运动过程中一般表现出明显的集 体行为。等离子体的性质不同于固体、液体和气体,常称为物质的第四态。

闪电、极光等是地球上的天然等离子体的辐射现象。电弧、日光灯中发光的 电离气体,以及实验室中的高温电离气体等是人造的等离子体。 在地球以外,如围绕地球的电离层、太阳及其他恒星、太阳风、很多种星际 物质,都是等离子体。天然的等离子体在地球上虽不多见,但在宇宙间却是物质 存在的主要形式,它占宇宙间物质总量的绝大部分。

 等离子体的获得方式 等离子体由自然产生的称为自然等离子体(如北极光和闪电),由人工产生的称为实验室等离子体。实验室等离子体是在有限容积的等离子体发生器中产生的。如果环境温度较低,等离子体能够通过辐射和热传导等方式向壁面传递能量,因此,要在实验室内保持等离子体状态,发生器供给的能量必须大于等离子体损失的能量。不少人工产生等离子体的方法(如爆炸法、激波法等)产生的等离子体状态只能持续很短时间(10□~10□秒左右),而有工业应用价值的等离子体状态则要维持较长时间(几分钟至几十小时)。能产生后一种等离子体的方法主要有:直流弧光放电法、交流工频放电法、高频感应放电法、低气压放电法(例如辉光放电法)和燃烧法。前四种放电都用电学手段获得,而燃烧则利用化学手段获得。

 等离子体的条件 空间尺度要求 :等离子体线度远大于德拜长度 lD<< L 时间尺度要求:等离子体碰撞时间、存在时间远大于特征响应时间 t >> tp 集合体要求:在德拜球中粒子数足够多,具有统计意义 ND = ne (4 plD3 /3 ) >> 1  等离子体的分类 等离子体按其电子温度10000℃为界,分为高温等离子体和低温等离子体。 高温等离子体是高于10000℃的等离子体,如聚变、太阳核心 低温等离子体是低于10000℃的等离子体,分为: 冷等离子体Te≠Ti, Ta,如极光、日光灯 热等离子体Te=Ti, Ta,如电弧、碘钨灯  等离子体的应用 1 冷等离子体应用 等离子体的化学过程:刻蚀、化学气相沉积(成膜) 等离子体材料处理:表面改性、表面冶金 光源:冷光源(节能) 典型应用: 特征类金刚石表面制造 实验室与日本原子力所先进科学研究中心合作,开展了非平衡薄膜表面制造的研究,成功第地制备了纳米尺度的针状表面、波纹表面,树枝状表面、正弦表面等表面结构,其中波纹表面,是应用薄膜生长过程的自组织过程中直接形成的。

毫米级厚金刚石片制备研究 应用PCVD方法开展金刚石模制备研究开展了多年,对制备过程中物理化学及工艺过程进行了系统研究。可以稳定地制备高质量毫米量级厚度的金刚石片,并用金刚石膜加工成金刚石电子热沉片,热导率高达7.6W/(k·cm),可用于大功率电子器件。

2 热等离子体应用 高温加热:冶金、焊接、切割 材料合成、加工 陶瓷烧结、喷涂、三废处理 光源:强光源 3 等离子体军事及高技术应用 军事应用:等离子体天线、等离子体隐身、等离子体减阻、等离子体鞘套、等离子体诱饵 高技术:大功率微波器件、X射线激光、强流束技术、等离子体推进 溅射工艺是以一定能量的粒子(离子或中性原子、分子)轰击固体表面,使固体近表面的原子或分子获得足够大的能量而最终逸出固体表面的工艺。溅射只能在一定的真空状态下进行。

以一定能量的粒子(离子或中性原子、分子)轰击固体表面,使固体近表面的原子或分子获得足够大的能量而最终逸出固体表面的工艺。溅射只能在一定的真空状态下进行。 溅射用的轰击粒子通常是带正电荷的惰性气体离子,用得最多的是氩离子。氩电离后,氩离子在电场加速下获得动能轰击靶极。当氩离子能量低于5电子伏时,仅对靶极最外表层产生作用,主要使靶极表面原来吸附的杂质脱附。当氩离子能量达到靶极原子的结合能(约为靶极材料的升华热)时,引起靶极表面的原子迁移,产生表面损伤。轰击粒子的能量超过靶极材料升华热的四倍时,原子被推出晶格位置成为汽相逸出而产生溅射。对于大多数金属,溅射阈能约为10~25电子伏。 溅射产额,即单位入射离子轰击靶极溅出原子的平均数,与入射离子的能量有关。在阈能附近溅射,产额只有10-5~10-4个原子/离子,随着入射离子能量的增加,溅射产额按指数上升。当离子能量为103~104电子伏时,溅射产额达到一个稳定的极大值;能量超过104

电子伏时,由于出现明显的离子注入现象而导致溅射产额下降。溅射产额还与靶极材料、原子结合能、晶格结构和晶体取向等有关。一般说来,单金属的溅射产额高于它的合金;在绝缘材料中,非晶体溅射产额最高,单晶其次,复合晶体最低。 溅射工艺主要用于溅射刻蚀和薄膜淀积两个方面。溅射刻蚀时,被刻蚀的材料置于靶极位置,受氩离子的轰击进行刻蚀。刻蚀速率与靶极材料的溅射产额、离子流密度和溅射室的真空度等因素有关。溅射刻蚀时,应尽可能从溅射室中除去溅出的靶极原子。常用的方法是引入反应气体,使之与溅出的靶极原子反应生成挥发性气体,通过真空系统从溅射室中排出。 淀积薄膜时,溅射源置于靶极,受氩离子轰击后发生溅射。如果靶材是单质的,则在衬底上生成靶极物质的单质薄膜;若在溅射室内有意识地引入反应气体,使之与溅出的靶材原子发生化学反应而淀积于衬底,便可形成靶极材料的化合物薄膜。通常,制取化合物或合金薄膜是用化合物或合金靶直接进行溅射而得。在溅射中,溅出的原子是与具有数千电子伏的高能离子交换能量后飞溅出来的,其能量较高,往往比蒸发原子高出1~2个数量级,因而用溅射法形成的薄膜与衬底的粘附性较蒸发为佳。若在溅射时衬底加适当的偏压,可以兼顾衬底的清洁处理,这对生成薄膜的台阶覆盖也有好处。另外,用溅射法可以制备不能用蒸发工艺制备的高熔点、低蒸气压物质膜,便于制备化合物或合金的薄膜。溅射主要有离子束溅射和等离子体溅射两种方法。离子束溅射装置中,由离子枪提供一定能量的定向离子束轰击靶极产生溅射(图1)。离子枪可以兼作衬底的清洁处理(位置1)和对靶极的溅射(位置2)。为避免在绝缘的固体表面产生电荷堆积,可采用荷能中性束的溅射。中性束是荷能正离子在脱离离子枪之前由电子中和所致。离子束溅射广泛应用于表面分析仪器中,对样品进行清洁处理或剥层处理。由于束斑大小有限,用于大面积衬底的快速薄膜淀积尚有困难。

溅射工艺 等离子体溅射也称辉光放电溅射。产生溅射所需的正离子来源于辉光放电中的等离子区。靶极表面必须是一个高的负电位,正离子被此电场加速后获得动能轰击靶极产生溅射,同时不可避免地发生电子对衬底的轰击。 二极溅射是最简单的等离子体溅射装置。两个平行板电极间加上一个直流高电压:阴极为靶极,阳极为衬底。为使这种自持辉光放电保持稳定,除两极板间须保持一定电压外,极板间距和气体压强的大小也很重要。在两极板间距为数厘米的正常溅射间距下,放电气压一般高达10帕。在这样的气压下,粒子的平均自由程很短,对溅射不利。为保持更低气压下的溅射,可采用非自持放电,常用的是热电子激发法。直流四极溅射就是在原有的二极溅射设备上附加一对热灯丝和阳极组成的。从灯丝发出的强大电子流在流向阳极的途中,使处于低气压的氩气分子大量电离,从而提供足够的离子。这可使溅射在10-1~10-2帕的低气压下进行。外加磁场可使电子电离气体的效率增加。 对于绝缘体靶的溅射,必须采用高频溅射方法。在靶极上施加高频电压,气体击穿后等离子体中的电子和离子将在靶极高频电场的作用下交替地向靶极迁移。电子的迁移率比离子高得多。频率很高时,离子向靶极的迁移就会跟不上高频信号的频率变化。因为靶是绝缘的,靶极回路净电流必须保持为零。为此,必须在靶极表面维持一个负电势,用以抑制电子向靶极的迁移,同时加速正离子的迁移,使流向靶极的电子数与离子数相等。正是这一负电势加速氩离子,使绝缘靶的溅射得到维持。为使这一负电势保持足够的数值,靶上的高频电压的频率必须足够高。频率过高,高频损耗增大且难于匹配。常用的频率约为13.56兆赫。 等离子体溅射突出的问题是溅射速率低、衬底温度升高。从靶极发出的溅射原子流为E=Sj+。式中S为溅射产额,j+为轰击靶极的离子流密度。在S 确定以后,提高溅射速率必须增加离子流密度。另外,降低衬底温升,必须防止高能二次电子对衬底的轰击。磁控溅射能解决这两个问题。磁控溅射利用高频磁控管的原理,在溅射室中引入一个与电场方向正交的磁场。在此磁场的控制下,电子局限于靶极附近并沿螺旋形轨道运动,大大提高电子对氩原子的电离效率,增加轰击靶极的离子流密度j+,实现快速的大电流溅射。同时,又能避免电子直接向衬底加速,降低衬底的温升。磁控溅射有直流和高频两类。按结构又有同轴型、平面型和S枪等多种类型。图2为一平面型磁控溅射装置,图中虚线表示磁场方向。靶极上出现不均匀侵蚀,会使磁控溅射靶材利用率降低。

相关文档
最新文档