Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 矩阵第5列上所有数字的倒数_C - Fatal编程技术网

C 矩阵第5列上所有数字的倒数

C 矩阵第5列上所有数字的倒数,c,C,我有一个C问题,我需要反转2x5矩阵第5列上的所有数字 所以如果我有 1 2 3 4 89 3 8 6 8 91 这将成为 1 2 3 4 98 3 8 6 8 19 到目前为止,我编写的代码是: #include <stdio.h> void inverse() { int reversedNumber = 0, remainder, mat[10][10], i, j; for (i = 0; i < 2; i++) for (j =

我有一个C问题,我需要反转2x5矩阵第5列上的所有数字

所以如果我有

1 2 3 4 89
3 8 6 8 91
这将成为

1 2 3 4 98
3 8 6 8 19
到目前为止,我编写的代码是:

#include <stdio.h>

void inverse() {
    int  reversedNumber = 0, remainder, mat[10][10], i, j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 5; j++) {

            while (mat[i][j] != 0) {
                remainder = mat[i][j] % 10;
                reversedNumber = reversedNumber * 10 + remainder;
                mat[i][j] /= 10;
            }
        }
    printf("Reversed Number = %d", reversedNumber);
}

void main()
{
    int mat[10][10], i, j;

    printf("Enter your matrix\n");
    for (i = 0; i < 2; i++)
        for (j = 0; j < 5; j++) {
            scanf("%d", &mat[i][j]);
        }

    printf("\nHere is your matrix:\n");
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            printf("%d ", mat[i][j]);
        }
        printf("\n");
    }

    inverse(mat[1][5]);
}
#包括
void逆(){
int reversedNumber=0,余数,mat[10][10],i,j;
对于(i=0;i<2;i++)
对于(j=0;j<5;j++){
while(mat[i][j]!=0){
余数=材料[i][j]%10;
反向编号=反向编号*10+余数;
mat[i][j]/=10;
}
}
printf(“反向编号=%d”,反向编号);
}
void main()
{
int mat[10][10],i,j;
printf(“输入矩阵\n”);
对于(i=0;i<2;i++)
对于(j=0;j<5;j++){
scanf(“%d”、&mat[i][j]);
}
printf(“\n这是您的矩阵:\n”);
对于(i=0;i<2;i++){
对于(j=0;j<5;j++){
printf(“%d”,mat[i][j]);
}
printf(“\n”);
}
逆(mat[1][5]);
}

运行这个之后,我得到了一个可笑的大数字!我应该修改什么?

代码中有许多地方可以改进

  • 首先,您必须在最内部的循环中设置reversedNumber零,这就是您得到大数字的原因
  • 您将参数传递给函数,但该函数的定义不正确
  • 另外,您已经声明只需要反转第5列,最好调用反转单个数字的函数

    #include<stdio.h>
    int inverse(int num) {   
      int  reversednum = 0;
      while(num){
       reversednum = reversednum*10 + num%10;
       num /= 10;
      }
      return reversednum;
    }
    
    void main(){  
     int mat[10][10],i,j;
    
     printf("Enter your matrix\n");  
     for(i=0;i<2;i++)
      for(j=0;j<5;j++){  
       scanf("%d",&mat[i][j]);  
      }  
    
     printf("\nHere is your matrix:\n");   
     for(i=0;i<2;i++){  
      for(j=0;j<5;j++){  
       printf("%d ",mat[i][j]);  
       if(j == 4) mat[i][j] = inverse(mat[i][j]);
      }  
      printf("\n");  
      }  
     }
    
    #包括
    int逆(int num){
    int reversednum=0;
    while(num){
    reversednum=reversednum*10+num%10;
    num/=10;
    }
    返回反向数;
    }
    void main(){
    int mat[10][10],i,j;
    printf(“输入矩阵\n”);
    对于程序中的(i=0;i错误:
    -您的函数不需要任何东西,例如空参数,但您将矩阵作为参数发送

    当您的矩阵为2*5时,不要不必要地使用[10][10]大小的矩阵

    将“mat”作为参数(即矩阵地址)发送到函数反转

    #include <stdio.h>
    
    int main() {
        //code
        int mat[10][10], i, j;
    
        printf("Enter your matrix\n");
        for (i = 0; i < 2; i++)
            for (j = 0; j < 5; j++) {
                scanf("%d", &mat[i][j]);
            }
    
        printf("\nHere is your matrix:\n");
        for (i = 0; i < 2; i++) {
            for (j = 0; j < 5; j++) {
                if(j==4) //only for 5th column
                {
                   // int temp=mat[i][j]; // can use temporary variable instead of changing actual value matrix (better option)
                    int remainder, reverse =0;
                    while(mat[i][j]>0)
                    {
                    remainder=mat[i][j]%10;
                    reverse=reverse*10 + remainder;
                    mat[i][j]=mat[i][j]/10;
                    }
                    mat[i][j]=reverse;
                }
                printf("%d ", mat[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    #包括
    int main(){
    //代码
    int mat[10][10],i,j;
    printf(“输入矩阵\n”);
    对于(i=0;i<2;i++)
    对于(j=0;j<5;j++){
    scanf(“%d”、&mat[i][j]);
    }
    printf(“\n这是您的矩阵:\n”);
    对于(i=0;i<2;i++){
    对于(j=0;j<5;j++){
    如果(j==4)//仅适用于第5列
    {
    //int temp=mat[i][j];//可以使用临时变量而不是更改实际值矩阵(更好的选项)
    整数余数,反向=0;
    while(mat[i][j]>0)
    {
    余数=材料[i][j]%10;
    反向=反向*10+余数;
    mat[i][j]=mat[i][j]/10;
    }
    mat[i][j]=反向;
    }
    printf(“%d”,mat[i][j]);
    }
    printf(“\n”);
    }
    返回0;
    }
    
    已编辑:已修改问题中的代码

    #include <stdio.h>
    void inverse(int mat1[2][5]) {
        int   i, j;
        for (i = 0; i < 2; i++){
               int j=4;
               int  reversedNumber = 0, remainder=0;
                while (mat1[i][j] > 0) {
                    remainder = mat1[i][j] % 10;
                    reversedNumber = reversedNumber * 10 + remainder;
                    mat1[i][j] /= 10;
                }
    
                 printf("Reversed Number = %d\n",reversedNumber);
        }
    
    
    }
    
    void main()
    {
        int mat[2][5], i, j;
    
        printf("Enter your matrix\n");
        for (i = 0; i < 2; i++)
            for (j = 0; j < 5; j++) {
                scanf("%d", &mat[i][j]);
            }
    
        printf("\nHere is your matrix:\n");
        for (i = 0; i < 2; i++) {
            for (j = 0; j < 5; j++) {
                printf("%d ", mat[i][j]);
            }
            printf("\n");
        }
    
        inverse(mat);
    }
    
    #包括
    无效逆(int mat1[2][5]){
    int i,j;
    对于(i=0;i<2;i++){
    int j=4;
    int reversedNumber=0,余数=0;
    而(mat1[i][j]>0){
    余数=mat1[i][j]%10;
    反向编号=反向编号*10+余数;
    mat1[i][j]/=10;
    }
    printf(“反向编号=%d\n”,反向编号);
    }
    }
    void main()
    {
    int mat[2][5],i,j;
    printf(“输入矩阵\n”);
    对于(i=0;i<2;i++)
    对于(j=0;j<5;j++){
    scanf(“%d”、&mat[i][j]);
    }
    printf(“\n这是您的矩阵:\n”);
    对于(i=0;i<2;i++){
    对于(j=0;j<5;j++){
    printf(“%d”,mat[i][j]);
    }
    printf(“\n”);
    }
    逆(mat);
    }
    

    希望这有帮助。

    您必须将矩阵传递给逆函数,以便矩阵(
    mat
    )可以修改。如果在
    中声明一个单独的
    mat
    数组,则这是一个不同的范围。您还必须计算数字中有多少位。您可以使用
    函数,或者下面的示例使用基本计算

    void inverse(int mat[2][5])
    {
        for(int i = 0; i < 2; i++)
            for(int j = 0; j < 5; j++) 
            {
                int n = mat[i][j];
                int digits = 0;
                while(n > 0)
                {
                    digits++;
                    n /= 10;
                }
    
                n = mat[i][j];
                int rev = 0;
                while(digits > 0)
                {
                    int x = n % 10;
                    for(int c = 0; c < digits - 1; c++)
                        x *= 10;
                    rev += x;
                    n /= 10;
                    digits--;
                }
                mat[i][j] = rev;
            }
    }
    
    int main(void)
    {
        int mat[2][5] = {
            1, 2, 3, 4, 89,
            3, 8, 6, 8, 91 };
        inverse(mat);
        for(int i = 0; i < 2; i++)
        {
            for(int j = 0; j < 5; j++)
                printf("%d ", mat[i][j]);
            printf("\n");
        }
        return 0;
    }
    
    void逆(int mat[2][5])
    {
    对于(int i=0;i<2;i++)
    对于(int j=0;j<5;j++)
    {
    int n=材料[i][j];
    整数位数=0;
    而(n>0)
    {
    数字++;
    n/=10;
    }
    n=材料[i][j];
    int rev=0;
    while(数字>0)
    {
    int x=n%10;
    对于(int c=0;c
    检查您的
    inverse
    函数定义,例如,
    inverse
    声明为不带参数,但您正在传递一个参数。在该函数中,您使用的是一个局部的、不确定的
    mat
    ,从未填充任何确定的数据。因此,行为当然是未定义的(因此不可预测的)参数不匹配通常会导致致命错误。
    std::stringstream f;std::string k;fk;std::reverse(&k[0],&k[0]+k.length());f.str(k);f>>intarr[5][7];
    我提供的答案特定于提问者编写的问题和代码。假设答案只有2*5