#define MAXSIZE 100 你的这个设置太大了。。堆栈溢出当然程序无法调试了。。
typedef struct
{
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix;
控制台输出了“!!!!!!!12”,可是并没有输出 “!!!!!1”,然后就报错了,小白不知道哪里错了,求大神赐教
#include
using namespace std;
#define MAXSIZE 12500
#define Elemtype int
#define Status int
#define ERROR 0
#define OK 1
typedef struct{
int i, j;
Elemtype e;
}Triple;
typedef struct{
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix;
int num[1000];
int cpot[1000];
Status CreateSMatrix(TSMatrix &M){
cout << "请输入行数:" < cin >> M.mu;
if(M.mu == 0){
return ERROR;
}
cout << "请输入列数:" < cin >> M.nu;
if(M.nu == 0){
return ERROR;
}
cout << "请输入非零元个数:" < cin >> M.tu;
if(M.tu == 0){
return ERROR;
}
cout << "请输入" << M.tu << "个数的行列值:" < for(int i = 0; i cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
Status PrintSMatrix(TSMatrix M){
if(!(M.tu && M.nu && M.mu)){
return ERROR;
}
//cout << M.tu << endl;
for(int i = 0; i < M.tu; i++){
cout << M.data[i].i << " " << M.data[i].j << " " << M.data[i].e << " " << endl;
}
cout << endl;
return OK;
}
Status CopySMatrix(TSMatrix M, TSMatrix &T){
if(!(M.tu && M.nu && M.mu)){
return ERROR;
}
T.mu = M.mu;
T.nu = M.nu;
T.tu = M.tu;
for(int i = 0; i < T.tu; i++){
T.data[i].i = M.data[i].i;
T.data[i].j = M.data[i].j;
T.data[i].e = M.data[i].e;
}
return OK;
}
int com(Triple M, Triple T){
if(M.i == T.i){
if(M.j == T.j) return 0;
if(M.j > T.j) return 1; //T
if(M.j < T.j) return -1;//M
}
else if(M.i > T.i){
return 1;
}
else{
return -1;
}
}
Status AddSMatrix(TSMatrix M, TSMatrix T, TSMatrix &Q){
if(M.mu != T.mu || M.nu != T.nu){
return ERROR;
}
Q.mu = T.mu;
Q.nu = T.nu;
int Mtu = 0, Ttu = 0, Qtu = 0;
while(Mtu < M.tu && Ttu < T.tu){
if(com(M.data[Mtu], T.data[Ttu]) == 1){
Q.data[Qtu].i = T.data[Ttu].i;
Q.data[Qtu].j = T.data[Ttu].j;
Q.data[Qtu].e = T.data[Ttu].e;
Qtu++;
Ttu++;
}
else if(com(M.data[Mtu], T.data[Ttu]) == -1){
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e;
Qtu++;
Mtu++;
}
else{
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e + T.data[Ttu].e;
Qtu++;
Mtu++;
Ttu++;
}
}
while(Mtu < M.tu){
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e;
Qtu++;
Mtu++;
}
while(Ttu < T.tu){
Q.data[Qtu].i = T.data[Ttu].i;
Q.data[Qtu].j = T.data[Ttu].j;
Q.data[Qtu].e = T.data[Ttu].e;
Qtu++;
Ttu++;
}
Q.tu = Qtu;
return OK;
}
Status TransposeSMatrix(TSMatrix M, TSMatrix &T){
if(!(M.tu && M.nu && M.mu)){
return ERROR;
}
for(int i = 0; i < M.tu; i++){
num[M.data[i].j]++;
}
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
cpot[0] = 1;
for(int i = 1; i < M.nu; i++){
cpot[i] = cpot[i - 1] + num[i - 1];
}
int ccol;
for(int i = 0; i < M.tu; i++){
int a;
ccol = M.data[i].j;
a = cpot[ccol];
T.data[i].i = M.data[i].j;
T.data[i].j = M.data[i].i;
T.data[i].e = M.data[i].e;
cpot[ccol]++;
}
return OK;
}
int main(){
TSMatrix M, T, Q, M2, Q1;
cout << "建立M三元组" <<endl;
CreateSMatrix(M);
cout << "输出M三元组" <<endl;
PrintSMatrix(M);
cout << "用三元组M创建相同的三元组T" <<endl;
CopySMatrix(M, T);
cout << "输出T三元组" <<endl;
PrintSMatrix(T);
cout << "建立M2三元组" <<endl;
CreateSMatrix(M2);
cout << "输出M三元组" <<endl;
PrintSMatrix(M2);
cout << "将三元组M与M2相加得到三元组Q" <<endl;
AddSMatrix(M, M2, Q);
cout << "输出Q三元组" <<endl;
PrintSMatrix(Q);
cout << "将三元组Q转置得到三元组Q1" <<endl;
TransposeSMatrix(Q, Q1);
cout << "输出Q1三元组" <<endl;
PrintSMatrix(Q1);
return 0;
}
上面是代码,对了,我用vs2015报错,用DEV完美运行
#include
using namespace std;
#define MAXSIZE 12500
#define Elemtype int
#define Status int
#define ERROR 0
#define OK 1
typedef struct {
int i, j;
Elemtype e;
}Triple;
typedef struct {
Triple data[MAXSIZE + 1];
int mu, nu, tu;
}TSMatrix;
int num[1000];
int cpot[1000];
Status CreateSMatrix(TSMatrix &M) {
cout << "请输入行数:" << endl;
cin >> M.mu;
if (M.mu == 0) {
return ERROR;
}
cout << "请输入列数:" << endl;
cin >> M.nu;
if (M.nu == 0) {
return ERROR;
}
cout << "请输入非零元个数:" << endl;
cin >> M.tu;
if (M.tu == 0) {
return ERROR;
}
cout << "请输入" << M.tu << "个数的行列值:" << endl;
for (int i = 0; i < M.tu; i++) {
cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
Status PrintSMatrix(TSMatrix M) {
if (!(M.tu && M.nu && M.mu)) {
return ERROR;
}
//cout << M.tu << endl;
for (int i = 0; i < M.tu; i++) {
cout << M.data[i].i << " " << M.data[i].j << " " << M.data[i].e << " " << endl;
}
cout << endl;
return OK;
}
Status CopySMatrix(TSMatrix M, TSMatrix &T) {
if (!(M.tu && M.nu && M.mu)) {
return ERROR;
}
T.mu = M.mu;
T.nu = M.nu;
T.tu = M.tu;
for (int i = 0; i < T.tu; i++) {
T.data[i].i = M.data[i].i;
T.data[i].j = M.data[i].j;
T.data[i].e = M.data[i].e;
}
return OK;
}
int com(Triple M, Triple T) {
if (M.i == T.i) {
if (M.j == T.j) return 0;
if (M.j > T.j) return 1; //T
if (M.j < T.j) return -1;//M
}
else if (M.i > T.i) {
return 1;
}
else {
return -1;
}
}
Status AddSMatrix(TSMatrix M, TSMatrix T, TSMatrix &Q) {
cout << "!!!!!!" << endl;
if (M.mu != T.mu || M.nu != T.nu) {
return ERROR;
}
Q.mu = T.mu;
Q.nu = T.nu;
int Mtu = 0, Ttu = 0, Qtu = 0;
while (Mtu < M.tu && Ttu < T.tu) {
if (com(M.data[Mtu], T.data[Ttu]) == 1) {
Q.data[Qtu].i = T.data[Ttu].i;
Q.data[Qtu].j = T.data[Ttu].j;
Q.data[Qtu].e = T.data[Ttu].e;
Qtu++;
Ttu++;
}
else if (com(M.data[Mtu], T.data[Ttu]) == -1) {
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e;
Qtu++;
Mtu++;
}
else {
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e + T.data[Ttu].e;
Qtu++;
Mtu++;
Ttu++;
}
}
while (Mtu < M.tu) {
Q.data[Qtu].i = M.data[Mtu].i;
Q.data[Qtu].j = M.data[Mtu].j;
Q.data[Qtu].e = M.data[Mtu].e;
Qtu++;
Mtu++;
}
while (Ttu < T.tu) {
Q.data[Qtu].i = T.data[Ttu].i;
Q.data[Qtu].j = T.data[Ttu].j;
Q.data[Qtu].e = T.data[Ttu].e;
Qtu++;
Ttu++;
}
Q.tu = Qtu;
return OK;
}
Status TransposeSMatrix(TSMatrix M, TSMatrix &T) {
if (!(M.tu && M.nu && M.mu)) {
return ERROR;
}
for (int i = 0; i < M.tu; i++) {
num[M.data[i].j]++;
}
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
cpot[0] = 1;
for (int i = 1; i < M.nu; i++) {
cpot[i] = cpot[i - 1] + num[i - 1];
}
int ccol;
for (int i = 0; i < M.tu; i++) {
int a;
ccol = M.data[i].j;
a = cpot[ccol];
T.data[i].i = M.data[i].j;
T.data[i].j = M.data[i].i;
T.data[i].e = M.data[i].e;
cpot[ccol]++;
}
return OK;
}
int main() {
TSMatrix M, T, Q, M2, Q1;
cout << "建立M三元组" << endl;
CreateSMatrix(M);
cout << "输出M三元组" << endl;
PrintSMatrix(M);
cout << "用三元组M创建相同的三元组T" << endl;
CopySMatrix(M, T);
cout << "输出T三元组" << endl;
PrintSMatrix(T);
cout << "建立M2三元组" << endl;
CreateSMatrix(M2);
cout << "输出M三元组" << endl;
PrintSMatrix(M2);
cout << "将三元组M与M2相加得到三元组Q" << endl;
cout << "!!!12" << endl;
AddSMatrix(M, M2, Q);
cout << "!!!13" << endl;
cout << "输出Q三元组" << endl;
PrintSMatrix(Q);
cout << "将三元组Q转置得到三元组Q1" << endl;
TransposeSMatrix(Q, Q1);
cout << "输出Q1三元组" << endl;
PrintSMatrix(Q1);
return 0;
}
单步调试下,检查下最后一次编译是否有报错,如果有,那么可能调试的代码不同步。如果代码定义了,肯定会执行的。