① 线性方程组求解——C语言程序设计代码,高手们,拜托啦!急急急啊!!!
这是矩阵运算的两个文件,调用相应的函数即可:
// Matrix.h: interface for matrix calculation functions.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_)
#define AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
////求矩阵matrix的行列式值,n为维数
float CalculateLiner(float *matrix,int n);
////求矩阵matrix的第i行,j列的代数余子式,n为维数
float CalculateCofacter(float *matrix,int i,int j,int n);
////matrixAT=(matrixA)T,m,n为matrixA的行、列数
void CalculateAT(float *matrixA,float *matrixAT,int m,int n);
////matrixAB=matrixA*matrixB,i,j为matrixA的行、列数,j,k为为matrixB的行、列数
void CalculateAB(float *matrixA,float *matrixB,float *matrixAB,int i,int j,int k);
////matrixATA=(matrixA)T*matrixA,m,n分别为matrixA的行、列数
void CalculateATA(float *matrixA,float *matrixATA,int m,int n);
////matrixA_为matrixA的逆,m为matrixA的行、列数
void CalculateA_(float *matrixA,float *matrixA_,int m);
///*矩阵求逆子程序(Good)*/
int Invers_matrix(float *m1,int n);
////求正定矩阵a的逆矩,n为阶数
int MatrixInversion(float *a, int n);
void MatInversion(float *a,int n);
////解矩阵方程matrixA*matrixX=matrixL,m,n分别为matrixA矩阵的行,列数
void EquationResolution(float *matrixA,float *matrixL,float *matrixX,int m,int n);
#endif // !defined(AFX_MATRIXCALCULATE_H__CCBC1D7D_4466_4E8B_87DD_0A98B462C18D__INCLUDED_)
// Matrix.cpp: implementation of the matrix calculation functions.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Matrix.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
////求矩阵matrix的行列式值,n为维数
float CalculateLiner(float *matrix,int n)
{
float liner=0;
int i=0,j=0,k=0;
int p=0,q=0;
if(n==1)
return matrix[0];
else
{
float *tr=(float *)calloc((n-1)*(n-1),sizeof(float));
for(k=0;k<n;k++)
{
p=0;
for(i=0;i<n;i++)
{
if(i!=0)
{
q=0;
for(j=0;j<n;j++)
{
if(j!=k)
{
tr[p*(n-1)+q]=matrix[i*n+j];
q++;
}
}
p++;
}
}
liner+=matrix[k]*pow(-1,k)*CalculateLiner(tr,n-1);
}
free(tr);
return liner;
}
}
////求矩阵matrix的第i行,j列的代数余子式,n为维数
float CalculateCofacter(float *matrix,int i,int j,int n)
{
int x=0,y=0;
int p=0,q=0;
if(n==1)
return matrix[0];
else
{
float *tr=(float *)calloc((n-1)*(n-1),sizeof(float));
p=0;
for(x=0;x<n;x++)
{
if(x!=i)
{
q=0;
for(y=0;y<n;y++)
{
if(y!=j)
{
tr[p*(n-1)+q]=matrix[x*n+y];
q++;
}
}
p++;
}
}
float cc=pow(-1,i+j)*CalculateLiner(tr,n-1);
free(tr);
return cc;
}
}
////matrixAT=(matrixA)T,m,n为matrixA的行、列数
void CalculateAT(float *matrixA,float *matrixAT,int m,int n)
{
for (int i=0;i<m;i++)
{
for (int j=0;j<n;j++)
{
matrixAT[j*m+i]=matrixA[i*n+j];
}
}
}
////matrixAB=matrixA*matrixB,i,j为matrixA的行、列数,j,k为为matrixB的行、列数
void CalculateAB(float *matrixA,float *matrixB,float *matrixAB,int i,int j,int k)
{
for (int m=0;m<i;m++)
{
for (int n=0;n<k;n++)
{
matrixAB[m*k+n]=0;
for (int s=0;s<j;s++)
{
matrixAB[m*k+n]+=matrixA[m*j+s]*matrixB[s*k+n];
}
}
}
}
////matrixATA=(matrixA)T*matrixA,m,n为分别为matrixA的行、列数
void CalculateATA(float *matrixA,float *matrixATA,int m,int n)
{
float *at=(float *)calloc((m)*(n),sizeof(float));
CalculateAT(matrixA,at,m,n);
CalculateAB(at,matrixA,matrixATA,n,m,n);
free(at);
}
////matrixA_为matrixA的逆,m为matrixA的行、列数
void CalculateA_(float *matrixA,float *matrixA_,int m)
{
float liner=CalculateLiner(matrixA,m);
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
matrixA_[j*m+i]=CalculateCofacter(matrixA,i,j,m)/liner;
}
}
////////////////////////////////////////////////////////////////////
////求正定矩阵a的逆矩,n为阶数
int MatrixInversion(float *a, int n)
{
int i, j, k, m;
float w, g, *b;
b = new float [n];
for(k = 0; k <= n - 1; k++)
{
w = a[0];
w=a[0]+1.0e-15;
/*
if(fabs(w)+1.0 == 1.0)
{
delete b;
printf("fail\n");
return(-2);
}
*/
m = n - k - 1;
for(i = 1; i <= n - 1; i++)
{
g = a[i * n];
b[i] = g / w;
if(i <= m)
b[i] = -b[i];
for(j = 1; j <= i; j++)
a[(i - 1) * n + j - 1] = a[i * n + j] + g * b[j];
}
a[n * n - 1] = 1.0 / w;
for(i = 1; i <= n - 1; i++)
a[(n - 1) * n + i - 1] = b[i];
}
for(i = 0; i <= n - 2; i++)
for(j = i + 1; j <= n - 1; j++)
a[i * n + j] = a[j * n + i];
delete b;
return(2);
}
////求正定矩阵a的逆矩,n为阶数
void MatInversion(float *a,int n)
{
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
if(i!=k) *(a+i*n+k) = -*(a+i*n+k)/(*(a+k*n+k));
}
*(a+k*n+k)=1/(*(a+k*n+k));
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k) *(a+i*n+j) += *(a+k*n+j)* *(a+i*n+k);
}
}
}
for(j=0;j<n;j++)
{
if(j!=k) *(a+k*n+j)*=*(a+k*n+k);
}
}
}
/*矩阵求逆子程序(Good)*/
int Invers_matrix(float *m1,int n)
{
int *is,*js;
int i,j,k,l,u,v;
float temp,max_v;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
if(is==NULL||js==NULL)
{
printf("out of memory!\n");
return(0);
}
for(k=0;k<n;k++)
{
max_v=0.0;
for(i=k;i<n;i++)
{
for(j=k;j<n;j++)
{
temp=fabs(m1[i*n+j]);
if(temp>max_v)
{
max_v=temp; is[k]=i; js[k]=j;
}
}
}
if(max_v==0.0)
{
free(is); free(js);
printf("invers is not availble!\n");
return(0);
}
if(is[k]!=k)
{
for(j=0;j<n;j++)
{
u=k*n+j; v=is[k]*n+j;
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
}
if(js[k]!=k)
for(i=0;i<n;i++)
{
u=i*n+k; v=i*n+js[k];
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
l=k*n+k;
m1[l]=1.0/m1[l];
for(j=0;j<n;j++)
{
if(j!=k)
{
u=k*n+j;
m1[u]*=m1[l];
}
}
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=0;j<n;j++)
{
if(j!=k)
{
u=i*n+j;
m1[u]-=m1[i*n+k]*m1[k*n+j];
}
}
}
}
for(i=0;i<n;i++)
{
if(i!=k)
{
u=i*n+k;
m1[u]*=-m1[l];
}
}
}
for(k=n-1;k>=0;k--)
{
if(js[k]!=k)
for(j=0;j<n;j++)
{
u=k*n+j; v=js[k]*n+j;
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
if(is[k]!=k)
for(i=0;i<n;i++)
{
u=i*n+k; v=i*n+is[k];
temp=m1[u]; m1[u]=m1[v]; m1[v]=temp;
}
}
free(is); free(js);
return(1);
}
void EquationResolution(float *matrixA,float *matrixL,float *matrixX,int m,int n)
{
if (m<n) return;
float *at=(float *)malloc((m)*(n)*sizeof(float));
float *ata=(float *)malloc((n)*(n)*sizeof(float));
float *atl=(float *)malloc((n)*sizeof(float));
CalculateATA(matrixA,ata,m,n);
MatrixInversion(ata,n);
CalculateAT(matrixA,at,m,n);
CalculateAB(at,matrixL,atl,n,m,1);
CalculateAB(ata,atl,matrixX,n,n,1);
free(at);
free(ata);
free(atl);
}
② 线性表的C语言实现,要完整代码,不要伪码!谢谢!
怎么一点悬赏都没有,谁高兴啊
③ 在气相色谱中,什么叫程序升温在GC中为什么要采用程序升温
程序升温是指色谱柱的温度按设置的程序连续地随时间线性或非线性逐渐升高,以使低沸点组分和高沸点组分在色谱柱中都有适宜的保留、色谱峰分布均匀且峰形对称。各组分的保留值可用色谱峰最高处的相应温度即保留温度表示。要采用程序升温是因为程序升温具有改进分离、使峰变窄、检测限下降及节约省时间等优点。
另外加上可选作固定相的物质很多,因此气相色谱法是一个分析速度快和分离效率高的分离分析方法。近年来采用高灵敏选择性检测器,使得它又具有分析灵敏度高、应用范围广等优点。
具体分类:
气相色谱可分为气固色谱和气液色谱。
气固色谱指流动相是气体,固定相是固体物质的色谱分离方法。例如活性炭、硅胶等作固定相。
气液色谱指流动相是气体,固定相是液体的色谱分离方法。例如在惰性材料硅藻土涂上一层角鲨烷,可以分离、测定纯乙烯中的微量甲烷、乙炔、丙烯、丙烷等杂质。
④ 求个c语言实现的线性回归代码
我写过一个GVBasic的,其实很简单,比如一个数组x[NUM],一个数组y[NUM],求一些中间值比如 x[i]*y[i]的求和,x[i]*x[i]的求和,y[i]*y[i]的求和,照公式看吧,就得到回归系数和偏差了。
⑤ 什么是程序升温
7、升温降温法 人为升高微机运行环境的温度,可以检验微机各部件(尤其是CPU)的耐高温情况,因而及早发现事故隐患。 人为降低微机运行环境的温度,如果微机的故障出现率大为减少,说明故障出在高温或不能耐高温的部件中,此举可以帮助缩小故障诊断范围。 事实上,升温降温法是采用的是故障促发原理,以制造故障出现的条件来促使故障频繁出现以观察和判断故障所在的位置。 8、程序测试法 随着各种集成电路的广泛应用,焊接工艺越来越复杂,同时,随机硬件技术资料较缺乏,仅靠硬件维修手段往往很难找出故障所在。而通过随机诊断程序、专用维修诊断卡及根据各种技术参数(如接口地址),自编专用诊断程序来辅助硬件维修则可达到事半功倍之效。程序测试法的原理就是用软件发送数据、命令,通过读线路状态及某个芯片(如寄存器)状态来识别故障部位。此法往往用于检查各种接口电路故障及具有地址参数的各种电路。但此法应用的前提是CPU及总线基本运行正常,能够运行有关诊断软件,能够运行安装于I/O总线插槽上的诊断卡等。编写的诊断程序要严格、全面、有针对性,能够让某些关键部位出现有规律的信号,能够对偶发故障进行反复测试及能显示记录出错情况。软件诊断法要求具备熟练编程技巧、熟悉各种诊断程序与诊断工具(如debug、DM等)、掌握各种地址参数(如各种I/O地址)以及电路组成原理等,尤其掌握各种接口单元正常状态的各种诊断参考值是有效运用软件诊断法的前提基础。 死机现象的故障一般检查处理方法 在微机故障现象中,死机是一种较常见的故障现象,同时也是难于找到原因的故障现象之一。由于在“死机”状态下无法用软件或工具对系统进行诊断,因而增加了故障排除的难度。 死机现象一般表现为:系统不能启动、显示黑屏、显示“凝固”、键盘不能输入、软件运行非正常中断等。 死机可以由软件和硬件两方面的原因引起,本文主要分析由硬件引起的死机故障以及检查处理方法。 掌握下面的方法,可以加快对死机故障原因的确认,收到事半功倍的效果。 ⒈排除系统“假”死机现象 ①首先排除因电源问题带来的“假”死机现象。应检查微机电源是否插好,电源插座是否接触良好,主机、显示器以及打印机、扫描仪、外置式MODEM、音箱等要外接电源的设备电源插头是否可靠地插入了电源插座,上述各部件的电源开关是否都置于了开(ON)的位置。 ②检查微机各部件间数据、控制连线是否连接正确和可靠,插头间是否有松动现象。尤其是主机与显示器的数据线连接不良常常造成“黑屏”的假死机现象。 ⒉排除病毒和杀毒因素引起的死机现象 用无毒干净的系统盘引导系统,然后运行KV300、KILL、AV95、SCAN等防病毒软件的最新版本对硬盘进行检查,确保微机安全,排除因病毒引起的死机现象。 另外,如果在杀毒后引起了死机现象,这多半是因为病毒破坏了系统文件、应用程序及关键的数据文件;或是杀毒软件在消除病毒的同时对正常的文件进行了误操作,破坏了正常文件的结构。碰到这类问题,只能将被损坏(即运行时引起死机)的系统或软件进行重装。 3.不同时候死机的处理方法 如果是在系统启动期间发生的死机,请转到第6步;如果是在系统启动后,软件运行期间发生的死机,请转到第5步;如果是“黑屏”类的死机请转到第11步;其它死机请继续下一步。 ⒋越来越频繁的死机现象的故障判断 如果死机现象是从无到有,并且越来越频繁,一般有以下两个原因: ①使用维护不当,请参见第7步; ②微机部件品质不良或性能不稳定,请参见第10步。 5.排除软件安装、配置问题引起的死机现象 ①如果是在软件安装过程中死机,则可能是系统某些配置与安装的软件冲突。这些配置包括系统BIOS设置、CONFIG.SYS和AUTOEXEC.BAT的设置、WINDOWS.INI、SYSTEM.INI的设置以及一些硬件驱动程序和内存驻留程序。 可以试着修改上述设置项。对BIOS可以取其默认设置,如“LOAD SETUP DEFAULT”和“LOAD BIOS DEFAULT”;对CONFIG.SYS和AUTOEXEC.BAT则可以在启动时按F5跳过系统配置文件或按F8逐步选择执行以及逐项修改CONFIG.SYS和AUTOEXEC.BAT中的配置尤其是EMM386中关于EMS、XMS的配置情况来判断与安装程序什么地方发生了冲突;一些硬件驱动程序和内存驻留程序则可以通过不装载它们的方法来避免冲突。 ②如果是在软件安装后发生了死机,则是安装好的程序与系统发生冲突。一般的做法是恢复系统在安装前的各项配置,然后分析安装程序新装入部分使用的资源和可能发生的冲突,逐步排除故障原因;删除新安装程序也是解决冲突的方法之一。 ③如果是因为病毒或杀毒引起的软件运行死机,请参见第2步。 ⒍系统启动过程中的死机现象 系统启动过程中的死机现象又有两种情况: ①致命性死机,即系统自检过程未完成就死机,一般系统不给出提示 ②非致命性死机,在自检过程中或自检完成后死机,但系统给出声音、文字等提示信息 。 对于第一种情况,可以根据开机自检时致命性错误列表的情况,再结合其它方法对故障原因做进一步的分析,如:硬件安装情况(请参见第8步),系统配置(请参见第9步),硬件设备品质(请参见第10步)以及显示器黑屏(请参见第11步)等。 对于第二种情况,可以根据开机自检时非致命性错误代码表,开机自检时非致命性错误代码表]和开机自检时鸣笛音响对应的错误代码表;开机自检时鸣笛音响对应的错误代码表,中所列的情况对可能出现故障的部件做重点检查,但也不能忽略相关部件的检查,因为相当多的故障并不是由提示信息指出的部件直接引起,而常常由相关部件故障引发。一些关键系统部件(如:CPU、内存条、CACHE、电源、系统后备电池、主板、总线等)的故障也常常以各种相关或不相关部件故障的形式表现出来,因此这些部件的检查也应在考虑范围之内。 ⒎排除因使用、维护不当引起的死机现象 微机在使用一段时间后会因为使用、维护不当而引起死机,尤其是长时间不使用微机后常会出现此类故障。引起的原因有以下几种: ①积尘导致系统死机 灰尘是微机的大敌。过多的灰尘附着在CPU、芯片、风扇的表面会导致这些元件散热不良;电路印刷板上的灰尘在潮湿的环境中常常导致短路。上述两种情况均会导致死机。 可以用毛刷将灰尘扫去,或用棉签沾无水酒精清洗积尘元件。注意不要将毛刷和棉签的毛、棉留在电路板和元件上而成为新的死机故障源。 ②部件受潮 长时间不使用微机,会导致部分元件受潮而使用不正常。可用电吹风的低热挡均匀对受潮元件“烘干”。注意不可对元件一部分加热太久或温度太高,避免烤坏元件。 ③板卡、芯片引脚氧化导致接触不良 将板卡、芯片拔出,用橡皮擦轻轻擦拭引脚表面去除氧化物,重新插入插座。 ④板卡、外设接口松动导致死机 仔细检查各I/O插槽插接是否正确,各外设接口接触是否良好,线缆连接是否正常。 ⑤意外损坏 如:雷击电流通过未经保护的电源及MODEM电话线进入主机,损坏电源、主机板、MODEM及各种内外设备。 意外损坏是否发生、其对微机产生了什么破坏性的后果,都只能用交换法、拔插法测试主机各部件的好坏来判断。 8.排除因系统配置不当引起的死机现象 系统配置与微机硬件设备和系统BIOS、主板上跳线开关设置密切相关,常见的死机故障原因有: ①CPU主频设置不当 这一类的故障主要有CPU主频跳线开关设置错误、Remark CPU引起的BIOS设置与实际情况不符、超频使用CPU,CPU性能不良引起的死机 ②内存条参数设置不当 这一类的故障主要有内存条设置错误和Remark 内存条引起的BIOS设置与实际情况不符 ③CACHE参数设置不当 这一类的故障主要有CACHE设置错误、Remark CACHE引起的BIOS设置与实际情况不符 ④CMOS参数被破坏 由于频繁修改CMOS参数,或病毒对CMOS参数的破坏,常常导致CMOS参数混乱而很难恢复。可以采用对CMOS放电的方法并采用系统BIOS默认设置值重新设定CMOS参数。CMOS的放电方法可参照主板说明书进行。重设CMOS参数后,还必须对硬盘杀毒。 ⒐排除因硬件安装不当引起的死机现象 硬件外设安装过程中的疏忽常常导致莫名其妙的死机,而且这一现象往往在微机使用一段时间后才逐步显露出来,因而具有一定的迷惑性。 ①部件安装不到位、插接松动、连线不正确引起的死机 显示卡与I/O插槽接触不良常常引起显示方面的死机故障,如“黑屏”;内存条、CACHE与插槽插接松动则常常引起程序运行中死机,甚至系统不能启动;其它板卡与插槽(插座)的接触问题也常常引起各种死机现象。 要排除这些故障,只需将相应板卡、芯片用手摁紧,或从插槽(插座)上拔下从新安装。如果有空闲插槽 (插座),也可将该部件换一个插槽(插座)安装以解决接触问题。 线缆连接不正确有时也会引发死机故障。 ②安装不当导致部件变形、损坏引起的死机 口径不正确、长度不恰当的螺钉常常导致部件安装孔损坏、螺钉接触到部件内部电路引起短路导致死机;不规格的主板、零部件或不规范的安装步骤常常引起机箱、主板、板卡外形上的变异因而挤压该部件内部元件导致局部短路、内部元件损坏导致莫名其妙的死机。 如果只是微机部件外观变形,可以通过正确的安装方法和更换符合规格的零部件来解决;如果已经导致内部元件损坏,则只能更换新的零部件了。 10.排除因硬件品质不良引起的死机现象 一般说来,微机产品都是国际大厂商按照国际标准流水线生产出来的,部件不良率是很低的。但是计算机产品高利润的诱惑使许多非法厂商对微机标准零部件改头换面、进行改频、重新标记(Remark)、以次充好甚至将废品、次品当作正品出售,导致这些“超水平”发挥的产品性能不稳定,环境略有不适或使用时间稍长就会频繁发生故障,尤其是CPU、内存条、CACHE、主板等核心部件及其相关产品的品质不良,是导致无原因死机的主要故障源。 检查时应着重检查以下部件: ①CPU CPU是被假冒得最多也是极容易导致死机的部件。被Remark的CPU在低温、短时间使用时一切正常,但只要在连续高温的环境中长时间使用其死机弊端就很容易暴露。使用Windows、3DS等对CPU特性要求较高的软件比DOS等简单软件更能发现CPU的问题。 参照说明书将CPU主频跳低1到2个档次使用,如:将166降为150、133或120使用。如果死机现象大幅度减少或消失,就可以判断是CPU有问题。也可以用交换法,更换同型号的正常CPU如果不再死机一般可以断定是CPU的问题。 有些用户喜欢把CPU超频使用以获得高速的性能,这也是常导致计算机死机的原因。将CPU跳回原频率就能解决死机问题。 ②内存条 内存条常常被做的手脚有:速度标记被更改,如:70ns被Remark为60ns;非奇偶校验冒充奇偶校验内存;非EDO内存冒充EDO内存;劣质内存条冒充好内存条。 在BIOS中将内存条读写时间适当增加(如:从60ns升为70ns),如果死机消失可以断定是内存条速度问题。 如果是内存本身的质量问题,只有通过更换新的内存条才能解决。 ③CACHE CACHE也存在以次充好问题。另外,CACHE本身的损坏也导致严重的死机。系统BIOS设置中的关闭外部CACHE选项,如果死机消失,则必是CACHE问题。④CMOS芯片损坏 CMOS芯片一般不容易损坏,但一旦有物理损坏则必然引起死机,其中以黑屏不能启动为主。由于CMOS芯片目前都已集成到超大规模集成电路的芯片组中,所以,更换CMOS芯片往往要连主板一起更换。 ⑤主板 一般主板的故障常常是最先考虑然而却是要到最后才能确定的。除了印刷板上的飞线、断线和主板上元件被烧焦、主板受挤压变形、主板与机箱短路等明显的现象外,主板本身的故障只有在确认了主板上所有零部件正常(将你的板卡、CPU、内存条等配件拿到好的主板上使用正常,而别人使用正常的板卡、器件插到你的主板上就不能正常运行)时才能判断是否是主板故障。 如果更换了好的同型号主板死机依然存在,则可能是该主板与某个零部件不兼容。要么更换兼容的其它型号的主板,要么只能用拔插法依次测试各板卡、芯片,找出不兼容的零部件更换之。电源、风扇、机箱等 劣质电源、电源线缆故障、电源插接松动、电源电压不稳都是引起不明原因死机的罪魁祸首。CPU风扇、电源风扇转动不正常、风扇功率不足则会引起CPU和机箱内“产热大户”元件散热不良因而引起死机。11.系统黑屏故障的排除 系统死机故障的很大一部分现象表现为黑屏(即显示器屏幕上无任何显示),这类故障与显示器、显示卡关系很密切,同时系统主板、CPU、CACHE、内存条、电源等部件的故障也能导致黑屏。 系统黑屏的死机故障的一般检查方法如下: ①排除“假”黑屏 检查显示器电源插头是否插好,电源开关是否已打开,显示器与主机上显示卡的数据连线是否连接好、连接插头是否松动,看是否是因为这些因素引起的黑屏。 另外,应该动一下鼠标或按一下键盘看屏幕是否恢复正常。因为黑屏也可能是因为设置了节能模式(可在BIOS设置中查看和修改)而出现的假死机。 ②在黑屏的同时系统其它部分是否工作正常,如:启动时软/硬盘驱动器自检是否通过,键盘按键是否有反应等。可以通过交换法用一台好的显示器接在主机上测试,如果只是显示器黑屏而其它部分正常,则只是显示器出了问题,这仍是一种假死机现象。③黑屏发生在系统开机自检期间,请参见第6步 ④黑屏发生在显示驱动程序安装或显示模式设置期间,显然是选择了显示系统不能支持的模式,应选择一种较基本的显示方式。如:Windows下设置显示模式后黑屏或花屏,则应在DOS下运行Windows目录下的SETUP.EXE程序选择标准VGA显示方式。 ⑤检查显示卡与主板I/O插槽接触是否正常、可靠,必要时可以换一个I/O槽插入显示卡试试。 ⑥换一块已确认性能良好的同型号显示卡插入主机重新启动,若黑屏死机现象消除则是显示卡的问题。 ⑦换一块已确认性能良好的其它型号显示卡插入主机重新启动,若黑屏死机现象消除则是显示卡与主板不兼容,可以考虑更换显示卡或主板。 ⑧检查是否错误设置了系统的核心部件,如CPU的频率、内存条的读写时间、CACHE的刷新方式、主板的总线速率等,这些都可能导致黑屏的死机现象。 ⑨检查主机内部各部件连线是否正确,有一些特殊的连线错误会导致黑屏死机。 ⑩请参见本文的其它步骤所列的死机故障诊断步骤,这些故障导致的死机常常也伴随着黑屏。 12、排除死机故障的常用方法 在具体故障检查中常常用以下方法查找死机故障的原因: (清洁法 ·拨插法 ·交换法 ·振动敲击法 ·升温降温法 ·比较法) 微机不能启动有几种情况:一种是由于主机加了系统级保护口令;一种是在开机自检时死机;一种是硬盘不能启动,通过软驱、光驱或网络服务器仍能启动;另一种则是系统有效驱动器均不能启动;还有一种是能部分启动但不能启动完全。下面针对这几种情况分别阐述它们的处理方法。 1、系统级开机口令保护 由于忘记了口令而无法通过系统级口令保护导致微机不能启动的故障,CMOS口令遗忘的处理方法]中的相关叙述。 2、开机自检时死机 3、硬盘不能启动,通过软驱、光驱或网络服务器仍能启动 这种情况一般是硬盘启动信息不完整或遭到了破坏,可以利用工具软件进行恢复。如果以前制作有系统急救盘,可以利用软盘启动,然后用急救盘恢复硬盘系统信息;如果没有系统急救盘,可以按照系统CMOS信息、硬盘分区表、C盘引导扇区、DOS系统文件、系统配置文件的顺序对硬盘进行恢复。 ①判断系统是否能识别硬盘 ②若系统BIOS能识别硬盘,则判断主引导记录、系统分区表和逻辑C盘信息是否正确。 以A驱启动为例,若从A驱启动后DOS不能识别C盘,表明硬盘的主引导记录、分区信息已遭破坏,应使用FDISK重写主引导扇区并重新建立分区信息,然后用FORMAT C:命令对C盘进行高级格式化。 ③若从A驱启动后DOS能识别和进入C盘但不能从C盘启动,表明分区表和逻辑C盘信息正确,此时应判断C盘分区是否被激活。可运行FDISK查看并将C盘设为活动分区, ④若分区表信息正确且C盘已是活动分区但仍不能从C盘启动,表明C盘DOS引导记录已遭到破坏,应重建C盘引导系统。可从A驱启动,并执行SYS C:命令将DOS系统传到C盘上。 ⑤经上述步骤,C盘应能启动成功。若还不能,则应检查病毒。 ⑥在重装DOS引导系统的过程中如发现不能写入分区表信息或引导区记录,应检查BIOS设置中是否打开了病毒防护功能而阻止了程序向主引导分区的写操作。 ⑦如果系统BIOS不能识别硬盘,或在排除了软件和病毒原因后仍不能启动,则应打开机箱检查软/硬盘驱动器的电源、数据电缆是否正常,连接是否可靠,驱动器安装是否正确,驱动器本身质量是否有问题。涉及硬件的检查建议向专家请教。4、系统有效驱动器均不能启动 ①检查系统BIOS设置中是否正确设置了软/硬盘驱动器的各项参数,参数设置不正常会导致微机不能正确识别各个驱动器,则系统启动也无从说起。 ②若系统能正确识别各个驱动器,除硬盘外的驱动器都能启动系统,则可参照本文第3节的方法对硬盘进行处理。 ③若仍不能从A驱或CDROM上启动,应该检查A驱或CDROM的安装、连线是否正常。 ④若A驱或CDROM安装正常仍不能启动,应该检查启动软盘或启动光盘是否安装了完整的DOS引导系统,该步骤只能在其它确认正常的计算机上进行检查。完整的DOS系统应该包括BOOT区程序、IO.SYS、MSDOS.SYS、COMMAND.COM,并且BOOT区程序必须占据引导盘的引导扇区位置,其余三个文件在数据区的最前位置并要连续存放。有些版本的DOS系统中用IBMBIO.COM 代替IO.SYS,用IBMDOS.COM代替MSDOS.SYS,但其存放要求是一致的。 ⑤若系统引导盘也无问题,则应检查软驱磁头或CDROM 的光头是否太脏,可用清洗剂或无水酒精进行清洗。 ⑥仍不能引导的,可能是驱动器本身有故障,建议向专家请教。5、能部分启动但不能启动完全 ①启动过程中在出现“Starting MS-DOS”时按F5键能启动成功而不按F5键启动失败,则问题出在CONFIG.SYS和AUTOEXEC.BAT的配置上。可在启动过程中在出现“Starting MS-DOS”时按F8键然后一句一句地执行CONFIG.SYS和AUTOEXEC.BAT中的语句找出死机的位置把该句删除或进行修改。 ②启动过程中在出现“Starting MS-DOS”时按F5键启动失败或者根本不出现“Starting MS-DOS”,这主要是DOS引导系统遭到破坏或没有安装完全。较简单的方法是重新安装DOS系统,如:用正常的驱动器和引导盘启动,然后用SYS x:将系统传入x驱动器,这里的x是要重新安装DOS系统的驱动器盘符。③在重装DOS引导系统的过程中如发现不能写入分区表信息或引导区记录,应检查BIOS设置中是否打开了病毒防护功能而阻止了程序向主引导分区的写操作。 ④如果屡次重装DOS系统仍启动失败,有可能是盘片上存储引导系统的部分有物理介质损坏,建议向专家请教。
www.pcyoy.com
⑥ 求线性表的C语言程序
第一个文件commom.h
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
第二个文件seqlist.h
#define ElemType int
#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/
typedef struct
{
ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/
int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;
第三个文件locate.cpp
#include "common.h"
#include "seqlist.h"
int Locate(SeqList L, ElemType e)
{
int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while ((i<=L.last)&&(L.elem[i]!=e)) /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
i++;
if (i<=L.last)
return(i+1); /*若找到值为e的元素,则返回其序号*/
else
return(-1); /*若没找到,则返回空序号*/
}
void main()
{
SeqList l;
int p,q,r;
int i;
printf("请输入线性表的长度:");
scanf("%d",&r);
l.last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=l.last; i++)
{
scanf("%d",&l.elem[i]);
}
printf("请输入要查找的元素值:\n");
scanf("%d",&q);
p=Locate(l,q);
if(p == -1)
printf("在此线性表中没有该元素!\n");
else
printf("该元素在线性表中的位置为:%d\n",p);
}
第四个文件InsList.cpp
#include "common.h"
#include "seqlist.h"
/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,
i的合法取值范围是 1≤i≤L->last+2 */
int InsList(SeqList *L,int i,ElemType e)
{
int k;
if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->last>= MAXSIZE-1)
{
printf("表已满无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e; /*在C语言数组中,第i个元素的下标为i-1*/
L->last++;
return(OK);
}
void main()
{
SeqList *l;
int p,q,r;
int i;
l=(SeqList*)malloc(sizeof(SeqList));
printf("请输入线性表的长度:");
scanf("%d",&r);
l->last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=l->last; i++)
{
scanf("%d",&l->elem[i]);
}
printf("请输入要插入的位置:\n");
scanf("%d",&p);
printf("请输入要插入的元素值:\n");
scanf("%d",&q);
InsList(l,p,q);
for(i=0; i<=l->last; i++)
{
printf("%d ",l->elem[i]);
}
}
第五个文件DelList.cpp
#include "common.h"
#include "seqlist.h"
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{
int k;
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法!");
return(ERROR);
}
*e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/
for(k=i; i<=L->last; k++)
L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/
L->last--;
return(OK);
}
void main()
{
SeqList *l;
int p,r;
int *q;
int i;
l = (SeqList*)malloc(sizeof(SeqList));
q = (int*)malloc(sizeof(int));
printf("请输入线性表的长度:");
scanf("%d",&r);
l->last = r-1;
printf("请输入线性表的各元素值:\n");
for(i=0; i<=l->last; i++)
{
scanf("%d",&l->elem[i]);
}
printf("请输入要删除的元素位置:\n");
scanf("%d",&p);
DelList(l,p,q);
printf("删除的元素值为:%d\n",*q);
}
第六个文件merge.cpp
#include "common.h"
#include "seqlist.h"
void merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
int i,j,k;
i=0;j=0;k=0;
while(i<=LA->last&&j<=LB->last)
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]= LA->elem[i];
i++;
k++;
}
else
{
LC->elem[k]=LB->elem[j];
j++;
k++;
}
while(i<=LA->last) /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
{
LC->elem[k]= LA->elem[i];
i++;
k++;
}
while(j<=LB->last) /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/
{
LC->elem[k]= LB->elem[j];
j++;
k++;
}
LC->last=LA->last+LB->last+1;
}
void main()
{
SeqList *la,*lb,*lc;
int r;
int i;
la=(SeqList*)malloc(sizeof(SeqList));
printf("请输入线性表A的长度:");
scanf("%d",&r);
la->last = r-1;
printf("请输入线性表A的各元素值:\n");
for(i=0; i<=la->last; i++)
{
scanf("%d",&la->elem[i]);
}
lb=(SeqList*)malloc(sizeof(SeqList));
printf("请输入线性表B的长度:");
scanf("%d",&r);
lb->last = r-1;
printf("请输入线性表B的各元素值:\n");
for(i=0; i<=lb->last; i++)
{
scanf("%d",&lb->elem[i]);
}
lc=(SeqList*)malloc(sizeof(SeqList));
merge(la,lb,lc);
printf("合并后线性表C中的元素为:\n");
for(i=0; i<=lc->last; i++)
{
printf("%d ",lc->elem[i]);
}
}
包含了线性表插入,查找,删除,合并运算。
⑦ C语言数据结构线性表源代码问题
#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAXSIZE 100#define TRUE 1#define ERROR 0typedef int ElemType;typedef struct list { ElemType *elme; int length;}Sqlist;int initlist(Sqlist *L) { L->elme = (ElemType *)malloc(MAXSIZE * sizeof ElemType); if(L->elme == NULL) return ERROR; L->length = 0; return TRUE;}int insertlist(Sqlist *L,int pos,ElemType e) { int i; if(L->length == 0) { // 第一元素无条件插入 L->elme[0] = e; L->length = 1; return TRUE; } if(L->length >= MAXSIZE) { printf("表满。length = %d。\n",L->length); return ERROR; } if(pos < 1 || pos > L->length) { printf("插入位置不合理。\n"); printf("表长:%d,位置:%d\n",L->length,pos); printf("元素%d未能插入。\n",e); return ERROR; } for(i = L->length; i > pos - 1; --i) L->elme[i] = L->elme[i - 1]; L->elme[pos - 1] = e; ++L->length; return TRUE;}int deletelist(Sqlist *L,int pos) { int i; if(pos < 1 || pos > L->length) { printf("删除位置不合理。\n"); printf("表长:%d,位置:%d\n",L->length,pos); printf("第%d个元素未能删除。\n",pos); return ERROR; } for(i = pos - 1; i < L->length - 1; ++i) L->elme[i] = L->elme[i + 1]; --L->length; return TRUE;}void displaylist(Sqlist *L) { int i; for(i = 0;i < L->length; i++) printf("%d ",L->elme[i]); printf("\n");}int main(void){ Sqlist *L = (Sqlist *)malloc(sizeof(Sqlist)); int i,n,pos,res; initlist(L); printf("Enter n:"); scanf("%d",&n); srand((unsigned)time(NULL)); for(i = 0; i < n; ++i) { res = insertlist(L,i,rand() % 100); if(res == ERROR) --i; } displaylist(L); printf("Enter pos:"); scanf("%d",&pos); deletelist(L,pos); displaylist(L); return 0;}
⑧ C语言 线性表代码的问题:
SqList.c:19: warning: incompatible implicit declaration of built-in function \u2018malloc\u2019:
你使用了malloc库函数,但可能没有添加对声明这个函数的头文件的引用(malloc.h)
另外,如果是多文件工程,检查其他文件中是否缺少头文件引用,或者是否有类型名混淆等问题。
⑨ 求一元线性回归分析的c语言代码
//利用最小二乘法进行线形拟合
#include"stdio.h"
#include"math.h"
#define max_size 100
void main()
{
float data[max_size][2];
//用data数组来存放x,y的值.
float x_sum=0,y_sum=0;
float x_avg,y_avg;
float x,y;
float Lxy=0,Lxx=0,Lyy=0;
float r;
float a,b;
int i;
int count=0;
next:
printf("输入至少2组x,y的值,输入格式为 x,y");
printf("输入 -999,-999 表示输入结束!\n");
while(1)
{
scanf("%f,%f",&x,&y);
//实数最好不直接用"=="或"!="比较大小。
if(fabs(x+999)==0&&fabs(y+999)==0) break;
data[count][0]=x;
data[count][1]=y;
count++;
}
for(i=0;i<count;i++)
{
x_sum=data[i][0]+x_sum;
y_sum=data[i][1]+y_sum;
}
x_avg=x_sum/count;
y_avg=y_sum/count;
for(i=0;i<count;i++)
{
Lxy=(data[i][0]-x_avg)*(data[i][1]-y_avg)+Lxy;
Lxx=(data[i][0]-x_avg)*(data[i][0]-x_avg)+Lxx;
Lyy=(data[i][1]-y_avg)*(data[i][1]-y_avg)+Lyy;
}
//r用于计算相关系数,相关系数越接近1,表示相关性越好.
r=Lxy/sqrt(Lxx*Lyy);
if(r>0.5)
{
printf("数据的线形关系较好。\n");
a=Lxy/Lxx;
b=y_avg-a*x_avg;
}
else
{
printf("数据的线形关系不好!请重新输入数据!\n");
goto next;
}
printf("线形拟合的结果为:\n");
if(fabs(b)==0)
printf("y=%3.1fx\n",a);
else if(b>0)
printf("y=%3.1fx+%3.2f\n",a,b);
else if(b<0)
printf("y=%3.1fx%3.2f\n",a,b);
printf("相关系数为:%3.1f\n",r);
}