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