首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

当中一个函数执行完就停止了,求大神路过!

2013-04-09 
中间一个函数执行完就停止了,求大神路过!!题目是输入一个矩阵,并转置。。#includestdio.h#includestdlib.

中间一个函数执行完就停止了,求大神路过!!
题目是输入一个矩阵,并转置。。

#include<stdio.h>
#include<stdlib.h>
#define M 1
#define N 2
struct three
{
int r;   //行
int c;   //列
int d;   //元素值
};
struct trix
{
int row;
int col;
int num;   
    struct three data[M*N] ;
};
struct zhu
{
int p;
int q;
}l[N];

struct trix t;

void create();    //创一个矩阵
void pri();      //输出矩阵
void zhuan();     //矩阵转置

void main()
{
system("cls");system("color 02");
create();    //创一个矩阵
    pri();     //输出矩阵
zhuan();   //矩阵转置
printf("请按任意键继续");
system("pause");
pri();    //输出矩阵
}

void zhuan()
{
    struct trix th;int i,j,k;
th.col=M;th.row=N;
for(k=0;k<M*N;k++)
{
if(t.data[k].d==0) break;
i=t.data[k].c;
l[i].p++;
}
l[0].q=1;
for(j=1;j<N;j++)
  l[j].q=l[j-1].q+l[j-1].p;
    for(k=0;k<M*N;k++)
{
if(t.data[k].d==0) break;
i=t.data[k].c;
j=l[i].q;
th.data[j].c=t.data[k].r;
th.data[j].r=t.data[k].c;
th.data[j].d=t.data[k].d;
l[i].q++;
}
t=th;
}

void pri()
{
    int i,j,k=0;
printf("\n\n\n");
if(t.num<=0) return;
printf("矩阵为%d行、%d列,有%d个非0元素\n",t.row,t.col,t.num);
printf("---------------------------------\n");
for(i=0;i<t.row;i++)
{
for(j=0;j<t.col;j++)
{
if((t.data[k].r==i)&&(t.data[k].c==j))
{ printf("%d   ",t.data[k].d);k++;}
else
{ printf("0   ");}
}
printf("\n");
}
}

void create()
{
int i,j;int one[M][N];
t.row=M;t.col=N;t.num=0;
    printf("请输入%d行、%d列的矩阵元素:\n",M,N);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
  scanf("%d",&one[i][j]);
}
for(i=0;i<M;i++)
  for(j=0;j<N;j++)
     if(one[i][j]!=0)
 {
 t.data[t.num].r=i;t.data[t.num].c=j;
 t.data[t.num].d=one[i][j];t.num++;
 }
}



[解决办法]
我測試過沒有問題
t.data.r t.data.c t.data.d初始化都是0

[解决办法]
void zhuan()
{
    struct trix th;int i,j,k;
    th.col=M;th.row=N;
    th.num=t.num;//非0个数
    for(k=0;k<M*N;k++)
    {
        if(t.data[k].d==0) break;
        i=t.data[k].c;
        l[i].p++;
    }
    l[0].q=0;//开始地址0
    for(j=1;j<N;j++)
      l[j].q=l[j-1].q+l[j-1].p;
    for(k=0;k<M*N;k++)
    {


        if(t.data[k].d==0) break;
        i=t.data[k].c;
        j=l[i].q;
        th.data[j].c=t.data[k].r;
        th.data[j].r=t.data[k].c;
        th.data[j].d=t.data[k].d;
        l[i].q++;
    }
    t=th;
}
[解决办法]

引用:
问题是第二个pri()调用函数不能执行,直接跳过了。。

if(t.num<=0) return;
應該是這問題

热点排行