#c
#c
Вопрос:
В этом упражнении мне предлагается заполнить первую строку матрицы, затем поместить последний элемент каждой строки в первое поле следующей строки и перенести элементы предыдущей строки в следующую строку, как в следующем примере:
5 7 9 2
2 5 7 9
9 2 5 7
7 9 2 5
5 7 9 2
Проблема в том, чтобы начать со второй строки до конца в моем коде (программа не возвращает последнее значение строки 1 в строку 2), можете ли вы мне помочь
мой код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int rows=5,cols=4;
int T[rows][cols];
int p=1;
printf("The filling of this matrix :n");
for(int i=0;i<rows;i )
{
for(int j=0;j<cols;j )
{
if(i==0)
{
scanf("%d",amp;T[i][j]);
}
T[p][0]=T[p-1][cols-1];
for(int k=1;k<rows;k )
{
T[k][j 1]=T[k-1][j];
}
}
p ;
}
printf("nThe display of this matrix :n");
for(int i=0;i<rows;i )
{printf("n");
for(int j=0;j<cols;j )
{
printf("[%d]",T[i][j]);
}
}
}
Комментарии:
1. Извините, но «проблема в том, чтобы начать со второй строки до конца в моем коде» недостаточно ясна для меня, чтобы понять вашу проблему.
2. @Yunnosch программа не возвращает последнее значение строки 1 в строку 2
Ответ №1:
#include <stdio.h>
int main(void){
int rows = 5, cols = 4;
int T[rows][cols];
printf("Filling the first rown");
for(int i=0; i < cols; i ){
printf("Enter T[0][%d] = ",i)
scanf("%d",amp;T[0][i]);
}
printf("Filling the rest matrixn");
for(i=1; i < rows; i ){
for(j=0; j < cols; j ){
if(j == 0){
T[i][j] = T[i-1][cols-1];
}
else{
T[i][j] = T[i-1][j-1];
}
}
}
printf("display the matrixn");
for(i=0 ; i < rows; i ){
for(j=0 ; j < cols; j ){
printf(" %d ",T[i][j]);
}
printf("n")
}
}
Комментарии:
1. Добро пожаловать в stackoverflow, 1 за правильный ответ, но, пожалуйста, обратите внимание, что предоставление кода без объяснения причин не помогает OP
2. Спасибо за ваш совет @DavidRanieri. Я позабочусь об этом.
Ответ №2:
Здесь вы получаете доступ за пределы массива:
T[k][j 1]=T[k-1][j]; // j 1 = 4 in the last iteration in a range [0 ... 3]
Вы слишком усложняете ситуацию, вам не нужны ни дополнительный цикл ( k
), ни дополнительная переменная ( p
), вся необходимая информация уже находится во внутреннем цикле, просто проверьте положение i
и j
:
#include <stdio.h>
int main(void)
{
int rows = 5, cols = 4;
int T[rows][cols]; // Notice that this is a VLA, avoid using
// them and use enum {rows = 5, cols = 4}
// when values are known before hand
printf("The filling of this matrix :n");
for (int i = 0; i < rows; i )
{
for (int j = 0; j < cols; j )
{
if (i == 0)
{
scanf("%d", amp;T[i][j]);
}
else
{
if (j == 0)
{
T[i][j] = T[i - 1][cols -1];
}
else
{
T[i][j] = T[i - 1][j - 1];
}
}
}
}
printf("nThe display of this matrix :n");
for (int i = 0; i < rows; i )
{
for (int j = 0; j < cols; j )
{
printf("[%d]", T[i][j]);
}
printf("n");
}
}
Вы можете упростить:
if (j == 0)
{
T[i][j] = T[i - 1][cols -1];
}
else
{
T[i][j] = T[i - 1][j - 1];
}
использование троичного оператора:
T[i][j] = T[i - 1][(j == 0) ? cols - 1 : j - 1];