⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jzcj.c

📁 这是用c语言编写的
💻 C
📖 第 1 页 / 共 2 页
字号:
        key=bioskey(0);/*接收按键*/
        gotoxy(79,1);
        switch(key)
        {
        case ESC:/*退出循环*/
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            flag=0;
            break;
        case LEFT:/*移到左边的选项*/
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            if(n==0)/*往左移动越界的话移到最后一个选项*/
                DrawMl(2);
            else
                DrawMl(n-1);
            flag=0;
            break;
        case RIGHT:/*移动右边的选项*/
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            if(n==2)/*往右移动越界的话移到第一个选项*/
                DrawMl(0);
            else
                DrawMl(n+1);
            flag=0;
            break;
        case UP:/*具体选项往上移动*/
            WriteText(n,x,ml[n].str[x-3]);/*输出红色字体*/
            if(x==3)/*移到最上面再按上键,就移到最下面*/
                x=3+ml[n].n-1;
            else
                x--;/*移动到新的要显示的内容*/
            BlackText(n,x,ml[n].str[x-3]);/*输出黑色字体*/
            flag=1;
            break;
        case DOWN:/*具体选项往下移动*/
            WriteText(n,x,ml[n].str[x-3]);
            if(x==(3+ml[n].n-1))/*移动到最底下再按下键就移到最上面*/
                x=3;
            else
                x++;/*移动到新的要显示的内容*/
            BlackText(n,x,ml[n].str[x-3]);
            flag=1;
            break;
        case ENTER:
            puttext(1,1,80,25,save);/*恢复打开菜单前的样子*/
            Enter(n,x-3);/*菜单选项的具体功能*/
            flag=0;
            break;
        }
        gotoxy(79,1);
    }
}
 /*菜单选项的具体功能*/
void Enter(int m,int n)
{
    switch(m)
    {
    case 0:switch(n) /*选择了编辑菜单选项*/
        {
        case 0:ClrScr();break;/*调用输入函数*/
        case 1:exit(0);break;/*退出系统*/
        }break;
    case 1: switch(n) /*选择了查询菜单选项*/
        {
        case 0:display();break;/*调用转置函数*/
        case 1:displaycj();break;/*调用矩阵乘积函数*/
        }break;
    case 2:switch(n) /*选择了帮助菜单选项*/
        {
        case 0:about();break;

        }
    }/*结束外switch*/
}

float comput_D(float *p,short int n)  
{
    short int i,j,m;
    short int lop=0;
    float result=0;
    float mid=1;
    
    if (n!=1)
    {
        lop=(n==2)?1:n;    /*控制求和循环次数,若为2阶,则循环1次,否则为n次*/

        for(m=0;m<lop;m++)
        {
            mid=1;         /*顺序求和*/
            for(i=0,j=m;i<n;i++,j++)
                mid = mid * ( *(p+i*n+j%n) );
            result+=mid;
        }

        for(m=0;m<lop;m++)
        {                       
            mid=1;         /*逆序相减*/
            for(i=0,j=n-1-m+n; i<n; i++,j--)
                mid=mid * ( *(p+i*n+j%n));
            result-=mid;
        }
       }
    else result=*p;
    return(result);
}

float Creat_M(float *p, short int m,short int n,short int k)
{
    short int len;
    short int i,j;
    float mid_result=0;
    short int quo=1;
    float *p_creat,*p_mid;

    len=(k-1)*(k-1);
    p_creat = (float *)calloc(len, sizeof(float));    
    p_mid=p_creat;
    for(i=0;i<k;i++)
        for(j=0;j<k;j++)
        {
            if (i!=m && j!=n)
                *p_mid++ =* (p+i*k+j);            
        } 
    quo = (m + n) %2==0 ? 1:-1; 
    mid_result = (float ) quo * comput_D(p_creat,k-1);
    free(p_creat);
    return(mid_result);
}

void Print( float *p,short int n)    
{
    int i,j;
    for (i=0;i<n;i++)
    {
        for (j=0; j<n;j++)
            printf("%10G ",*p++);
        printf("\n");
    }
}
void display()
{   float *buffer,*p;  /*定义数组首地址指针变量*/
    short int row,num; /*定义矩阵行数row及矩阵元素个数*/
    short int i,j;
    float determ;     /*定义矩阵的行列式*/

    gotoxy(3,3);
    printf("请输入行数(输入元素时,元素之间请用空格分开): ");
    scanf("%d",&row);
    
    num=2 * row * row;
    buffer = (float *)calloc(num, sizeof(float));    /*分配内存单元*/

    p=buffer;
    if(p != NULL)
    {
        for(i=0;i<row;i++)                  /*输入各单元值*/
        {   gotoxy(3,4+i);
            printf("第 %d 行 ",i+1);
            for(j=0;j<row;j++)
            {
                scanf("%f",p++);
            }
        }  
    }
    else
        printf( "Can't allocate memory\n" );

    ClrScr();
    printf("原距阵为:\n");
    Print(buffer,row);  

    determ=comput_D(buffer,row);    /*求整个矩阵的行列式*/
    p=buffer + row * row;
    if (determ != 0)
    {
        for (i=0;i<row; i++)      /*求逆矩阵*/
            for (j=0; j<row; j++)
                   *(p+j*row+i)=  Creat_M(buffer,i,j,row)/determ;    
        gotoxy(2,4+row);
        printf("距阵的值: %G\n",determ);

        p=buffer + row * row;
        gotoxy(2,4+row+1);
        printf("逆距阵为:\n");
        Print(p,row);    /*打印该矩阵*/
    }
    else
        printf("距阵值为0,并且无逆距阵!\n");
    free( buffer );
}
void chengji(float *p,short int n)
{
    int len,k;
    static float *p_c;
    float *pl,*p2;
    len=n*n;
     pl = (float *)calloc(len, sizeof(float));
     p2=pl;
    printf("输入矩阵A(输入元素时,元素之间请用空格分开):\n");
     for(i=0;i<n;i++)                  /*输入各单元值*/
        {   gotoxy(2,6+n+i);
            printf("第 %d 行 ",i+1);
            for(j=0;j<n;j++)
            {
                scanf("%f",pl++);
            }
        }
        pl=p2;
    p_c = (float *)calloc(len, sizeof(float));
    if(p_c!=NULL)
    {
     for(i=0;i<n;i++)
       for(j=0;j<n;j++)
       {
         for(k=0;k<n;k++)
            *(p_c+i*n+j)+=*(p+i*n+k)*(*(pl+k*n+j));
      }
    }
    p=p_c;
    gotoxy(2,7+n+i);
    printf("距阵的积为:\n");
    Print(p,n);    /*打印该矩阵*/
    free(p_c);
    free(pl);
}
void displaycj()
{ float *buffer,*p;  /*定义数组首地址指针变量*/
  short int row,num; /*定义矩阵行数row及矩阵元素个数*/
  float determ;     /*定义矩阵的行列式*/

    ClrScr();
    gotoxy(3,3);
    printf("请输入B的行数(输入元素时,元素之间请用空格分开): ");
    scanf("%d",&row);
    
    num=2* row * row;
    buffer = (float *)calloc(num, sizeof(float));    /*分配内存单元*/

    p=buffer;
    if(p != NULL)
    {
        for(i=0;i<row;i++)                  /*输入各单元值*/
        {   gotoxy(3,4+i);
            printf("第 %d 行 ",i+1);
            for(j=0;j<row;j++)
            {
                scanf("%f",p++);
            }
        }  
    }
    else
        printf( "Can't allocate memory\n" );

    ClrScr();
    determ=comput_D(buffer,row);    /*求整个矩阵的行列式*/
    p=buffer + row * row;
    if (determ != 0)
    {
        for (i=0;i<row; i++)      /*求逆矩阵*/
            for (j=0; j<row; j++)
                   *(p+j*row+i)=  Creat_M(buffer,i,j,row)/determ;    

        p=buffer + row * row;
        gotoxy(2,4);
        printf("B的逆距阵为:\n");
        Print(p,row);    /*打印该矩阵*/
    }
    else
        printf("距阵值为0,并且无逆距阵!\n");
   p=buffer + row * row;
   gotoxy(2,5+row);
   chengji(p,row);
   free( buffer );
}

void about()
{
   ClrScr();
   DrawFrame(27,10,60,12,0,7);
   gotoxy(28,11);
   printf("作者:郑燕琳");
   gotoxy(79,1);
   getch();
   ClrScr();
}
void ClrScr()/*自定义清屏函数*/
{
    puttext(2,3,78,23,c);/*刚开始已经用gettext把蓝色的一块地方保存下来,现在再还原*/
    gotoxy(2,3);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -