Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.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++ 在c语言中将5x5矩阵缩减为25个元素的数组_C++_C_Arrays_Matrix - Fatal编程技术网

C++ 在c语言中将5x5矩阵缩减为25个元素的数组

C++ 在c语言中将5x5矩阵缩减为25个元素的数组,c++,c,arrays,matrix,C++,C,Arrays,Matrix,我有以下作业问题,我似乎找不到解决办法。 问题:创建一个5x5整数矩阵,检查矩阵中是否有元素在区间[-10,15]内,属于区间的元素添加到25个元素的数组中。该程序应该用C/C++实现。问题:现在我已经编写了以下代码,我遇到的问题是当我尝试在嵌套for循环中传输我发现符合条件的元素时。问题是我循环5个元素,同时迭代25个元素。我该怎么做?这是我的密码: #include <stdio.h> #include "stdafx.h" void main() { int i,

我有以下作业问题,我似乎找不到解决办法。 问题:创建一个5x5整数矩阵,检查矩阵中是否有元素在区间[-10,15]内,属于区间的元素添加到25个元素的数组中。该程序应该用C/C++实现。问题:现在我已经编写了以下代码,我遇到的问题是当我尝试在嵌套for循环中传输我发现符合条件的元素时。问题是我循环5个元素,同时迭代25个元素。我该怎么做?这是我的密码:

#include <stdio.h>
#include "stdafx.h"


void main()
{
    int i, j, k, l, m;
    int a[5][5];
    int b[25];


    printf("Please enter the elements of the matrix:\n");

    for ( i = 0; i < 5; i++)
    {
        for ( k = 0; k < 5; k++)
        {
            scanf_s("%d", &a[i][k]);
        }
    }

    for ( k = 0; k < 25; k++)
    {
        for ( l = 0; l < 5; l++)
        {
            if (a[k][l] > -10 && a[k][l] < 15) {
                b[k] = a[k][l];
            }
        }
    }
    printf("The elements which are in the range [-10, 15], are the   following:\n");

    for (m = 0; m < 25; m++)
    {
        printf("%d\n", b[m]);
    }
}
#包括
#包括“stdafx.h”
void main()
{
int i,j,k,l,m;
INTA[5][5];
int b[25];
printf(“请输入矩阵的元素:\n”);
对于(i=0;i<5;i++)
{
对于(k=0;k<5;k++)
{
scanf_s(“%d”、&a[i][k]);
}
}
对于(k=0;k<25;k++)
{
对于(l=0;l<5;l++)
{
如果(a[k][l]>-10和a[k][l]<15){
b[k]=a[k][l];
}
}
}
printf(“在[-10,15]范围内的元素如下:\n”);
对于(m=0;m<25;m++)
{
printf(“%d\n”,b[m]);
}
}

以下循环不正确:

for ( k = 0; k < 25; k++)
{
    for ( l = 0; l < 5; l++)
    {
        if (a[k][l] > -10 && a[k][l] < 15) {
            b[k] = a[k][l];
        }
    }
}
(k=0;k<25;k++)的

{
对于(l=0;l<5;l++)
{
如果(a[k][l]>-10和a[k][l]<15){
b[k]=a[k][l];
}
}
}
混合输入5x5矩阵和输出数组。它应该是这样的:

k = 0;
for ( i = 0; i < 5; i++)
{
    for ( l = 0; l < 5; l++)
    {
        if (a[i][l] > -10 && a[i][l] < 15) {
            b[k++] = a[i][l];
        }
    }
}
k=0;
对于(i=0;i<5;i++)
{
对于(l=0;l<5;l++)
{
如果(a[i][l]>-10和a[i][l]<15){
b[k++]=a[i][l];
}
}
}

我唯一忽略的是
k<25
条件。您可能也想使用它。

以下循环不正确:

for ( k = 0; k < 25; k++)
{
    for ( l = 0; l < 5; l++)
    {
        if (a[k][l] > -10 && a[k][l] < 15) {
            b[k] = a[k][l];
        }
    }
}
(k=0;k<25;k++)的

{
对于(l=0;l<5;l++)
{
如果(a[k][l]>-10和a[k][l]<15){
b[k]=a[k][l];
}
}
}
混合输入5x5矩阵和输出数组。它应该是这样的:

k = 0;
for ( i = 0; i < 5; i++)
{
    for ( l = 0; l < 5; l++)
    {
        if (a[i][l] > -10 && a[i][l] < 15) {
            b[k++] = a[i][l];
        }
    }
}
k=0;
对于(i=0;i<5;i++)
{
对于(l=0;l<5;l++)
{
如果(a[i][l]>-10和a[i][l]<15){
b[k++]=a[i][l];
}
}
}

我唯一忽略的是
k<25
条件。您可能也想使用它。

为B数组创建一个单独的索引

int b_i = 0;
然后循环5x5倍于数组的长度

for ( k = 0; k < 5; k++)  //only 5 times
{
    for ( l = 0; l < 5; l++)
    {
        if (a[k][l] > -10 && a[k][l] < 15) {
            b[b_i] = a[k][l];
            b_i++;
        }
    }
}
(k=0;k<5;k++)的
for//仅5次
{
对于(l=0;l<5;l++)
{
如果(a[k][l]>-10和a[k][l]<15){
b[b_i]=a[k][l];
b_i++;
}
}
}

为B数组提供单独的索引

int b_i = 0;
然后循环5x5倍于数组的长度

for ( k = 0; k < 5; k++)  //only 5 times
{
    for ( l = 0; l < 5; l++)
    {
        if (a[k][l] > -10 && a[k][l] < 15) {
            b[b_i] = a[k][l];
            b_i++;
        }
    }
}
(k=0;k<5;k++)的
for//仅5次
{
对于(l=0;l<5;l++)
{
如果(a[k][l]>-10和a[k][l]<15){
b[b_i]=a[k][l];
b_i++;
}
}
}

请记住,C中的数组是一个连续的内存区域。一个由五个数组组成的数组是一样的,它只是一块连续内存

现在为了简单起见,让我们取一个较小的矩阵,例如

int a[2][2];
在内存中,它的布局如下:

+---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[1][0] | a[1][1] | +---------+---------+---------+---------+ 它的布局像

+------+------+------+------+ | b[0] | b[1] | b[2] | b[3] | +------+------+------+------+ 对于您的特定用例,您可能希望以稍微不同的方式初始化数组
b
(以区分数组中“未使用”的元素与实际的零),当然还需要添加一个矩阵值检查


我意识到这可能不是您想要的,但上面显示的循环可能是一种解决方案。它也是一种解决方案,允许你在矩阵和数组之间来回移动。如果有数组索引,则可以计算矩阵索引;如果有矩阵索引,则可以计算数组索引


对于一个解决方案,您不需要像我一样在矩阵和数组之间映射,只需在数组中的下一个“可用”位置插入值,那么其他两个答案将告诉您如何进行映射。

请记住,C中的数组是一个连续的内存区域。一个由五个数组组成的数组是一样的,它只是一块连续内存

现在为了简单起见,让我们取一个较小的矩阵,例如

int a[2][2];
在内存中,它的布局如下:

+---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[1][0] | a[1][1] | +---------+---------+---------+---------+ 它的布局像

+------+------+------+------+ | b[0] | b[1] | b[2] | b[3] | +------+------+------+------+ 对于您的特定用例,您可能希望以稍微不同的方式初始化数组
b
(以区分数组中“未使用”的元素与实际的零),当然还需要添加一个矩阵值检查


我意识到这可能不是您想要的,但上面显示的循环可能是一种解决方案。它也是一种解决方案,允许你在矩阵和数组之间来回移动。如果有数组索引,则可以计算矩阵索引;如果有矩阵索引,则可以计算数组索引


对于一个解决方案,您不需要像我一样在矩阵和数组之间映射,只需在数组中的下一个“可用”位置插入值,那么其他两个答案将告诉您如何进行映射。

我认为,我们可以将两个循环压缩为一个。请看下面。 当我接受输入时,我正在检查条件并将其放入新的1D数组中。因为,在显示时,我有1D数组的计数器(随着新数字的插入而递增);我也可以用这个

    #include <stdio.h>


    int main()
    {
        int a[5][5];
        int b[15];
        int c=0;
printf("Please enter the elements of the matrix:\n");
        for(int i=0;i<5; i++){
            for(int j=0;j<5;j++){
               scanf("%d",&a[i][j]);
                if(a[i][j]>-10 && a[i][j]<15){
                    b[c++]=a[i][j];
                }
            }
        }
printf("\nThe numbers that meet the condition are:\n");
        for(int i=0;i<c;i++)
        printf("%d,",b[i]); 

        return 0;
    }
#包括
int main()
{
INTA[5][5];
int b[15];
int c=0;
printf(“请输入矩阵的元素:\n”);

对于(int i=0;i我认为,我们可以将两个循环压缩为一个。请参见下文。 当我接受输入时,我在那里检查条件并将其放入新的1D数组中