主题:[讨论]编程时出现unknown software exception()
为什么我编程的时候没有语法错误,运行的时候老是弹出:应用程序发生异常 unknown software exception(0xc00000fd),位置为0x00401787。
大家可以看一个我编写的程序:
#include<stdio.h>
#define MAXSIZE 12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
/*创建并初始化一个稀疏矩阵*/
TSMatrix CreateSMatrix(int mu,int nu,int num)
{
TSMatrix T;
int i,h,l,elem;
T.mu=mu,T.nu=nu;T.tu=num;
printf("请输入矩阵的行,列以及非零元素的值:\n");
for(i=1;i<=num;i++)
{
scanf("%d%d%d",&h,&l,&elem);
T.data[i].i=h; T.data[i].j=l; T.data[i].e=elem;
}
return T;
}
/*打印矩阵*/
void print(TSMatrix *T,int num)
{
int i;
printf("矩阵为:\n");
for(i=1;i<=num;i++)
{
printf("%d %d %d\n",T->data[i ].i,T->data[i].j,T->data[i].e);
}
}
/*直接矩阵转置*/
TSMatrix TransposeSMatrix(TSMatrix *M)
{
int col,s,t;
TSMatrix T;
TSMatrix *at_T=&T;
T.mu=M->nu;T.nu=M->mu;T.tu=M->tu;
if(T.tu)
{
t=1;
for(col=1;col<=M->nu;++col)
for(s=1;s<=M->tu;++s)
if(M->data[s].j==col)
{
T.data[t].i=M->data[s].j;
T.data[t].j=M->data[s].i;
T.data[t].e=M->data[s].e;
++t;
}
}
return T;
}
/*快速矩阵转置*/
TSMatrix FastTransposeSMatrix(TSMatrix M)
{
int t,col,p,q,num[100],cpot[100];
TSMatrix D;
D.mu=M.nu;D.nu=M.mu;D.tu=M.tu;
if(M.tu)
{
for(col=1;col<=M.nu;col++) num[col]=0;
for(t=1;t<=M.tu;t++) ++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;p++)
{
col=M.data[p].j;q=cpot[col];
D.data[q].i=M.data[p].j;
D.data[q].j=M.data[p].i;
D.data[q].e=M.data[p].e;
++cpot[col];
}
}
return D;
}
/*主调函数*/
void main()
{
int num,mu,nu;
TSMatrix *p,*q;TSMatrix x,y,z;
printf("请输入行数、列数及非零元素的个数:\n");
scanf("%d%d%d",&mu,&nu,&num);
while(num<1||num>MAXSIZE)
{
printf("\n输入违法!请重新输入:\n");
scanf("%d%d%d",&mu,&nu,&num);
}
x=CreateSMatrix(mu,nu,num);
p=&x;
printf("你创建的");
print(p,num);
printf("直接转置后的");
y=TransposeSMatrix(p);
q=&y;
print(q,num);
printf("原");
print(p,num);
printf("快速转置后的");
FastTransposeSMatrix(x);
q=&z;
print(q,num);
}
大家可以看一个我编写的程序:
#include<stdio.h>
#define MAXSIZE 12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
/*创建并初始化一个稀疏矩阵*/
TSMatrix CreateSMatrix(int mu,int nu,int num)
{
TSMatrix T;
int i,h,l,elem;
T.mu=mu,T.nu=nu;T.tu=num;
printf("请输入矩阵的行,列以及非零元素的值:\n");
for(i=1;i<=num;i++)
{
scanf("%d%d%d",&h,&l,&elem);
T.data[i].i=h; T.data[i].j=l; T.data[i].e=elem;
}
return T;
}
/*打印矩阵*/
void print(TSMatrix *T,int num)
{
int i;
printf("矩阵为:\n");
for(i=1;i<=num;i++)
{
printf("%d %d %d\n",T->data[i ].i,T->data[i].j,T->data[i].e);
}
}
/*直接矩阵转置*/
TSMatrix TransposeSMatrix(TSMatrix *M)
{
int col,s,t;
TSMatrix T;
TSMatrix *at_T=&T;
T.mu=M->nu;T.nu=M->mu;T.tu=M->tu;
if(T.tu)
{
t=1;
for(col=1;col<=M->nu;++col)
for(s=1;s<=M->tu;++s)
if(M->data[s].j==col)
{
T.data[t].i=M->data[s].j;
T.data[t].j=M->data[s].i;
T.data[t].e=M->data[s].e;
++t;
}
}
return T;
}
/*快速矩阵转置*/
TSMatrix FastTransposeSMatrix(TSMatrix M)
{
int t,col,p,q,num[100],cpot[100];
TSMatrix D;
D.mu=M.nu;D.nu=M.mu;D.tu=M.tu;
if(M.tu)
{
for(col=1;col<=M.nu;col++) num[col]=0;
for(t=1;t<=M.tu;t++) ++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;p++)
{
col=M.data[p].j;q=cpot[col];
D.data[q].i=M.data[p].j;
D.data[q].j=M.data[p].i;
D.data[q].e=M.data[p].e;
++cpot[col];
}
}
return D;
}
/*主调函数*/
void main()
{
int num,mu,nu;
TSMatrix *p,*q;TSMatrix x,y,z;
printf("请输入行数、列数及非零元素的个数:\n");
scanf("%d%d%d",&mu,&nu,&num);
while(num<1||num>MAXSIZE)
{
printf("\n输入违法!请重新输入:\n");
scanf("%d%d%d",&mu,&nu,&num);
}
x=CreateSMatrix(mu,nu,num);
p=&x;
printf("你创建的");
print(p,num);
printf("直接转置后的");
y=TransposeSMatrix(p);
q=&y;
print(q,num);
printf("原");
print(p,num);
printf("快速转置后的");
FastTransposeSMatrix(x);
q=&z;
print(q,num);
}