Member 14869002 Ответов: 4

Что вычисляется в приведенном ниже коде? Каково условие, что строка затем перепишет этот код без goto на языке Си.


для (i=0; i < n; i++){
для (j=0; j < n; j++){
если (x[i][j]!=0)
перейти отклонить;
}
printf(“первая строка, удовлетворяющая условию, равна %d\n”, i);
перерыв;
отклонять:
}

Что я уже пробовал:

на самом деле я этого не понимаю

4 Ответов

Рейтинг:
1

Patrice T

Цитата:
на самом деле я этого не понимаю

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
-----
Совет: Научитесь правильно отступать ваш код, он показывает свою структуру (это делает структуру визуальной), и это помогает читать и понимать. Это также помогает выявлять структурные ошибки.
for (i=0; i < n; i++){
	for (j=0; j < n; j++){
		if (x[i][j]!=0)
			goto reject;
	}
	printf("First row that satisfies the condition is %d\n", i);
	break;
	reject:
}

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


Рейтинг:
1

Afzaal Ahmad Zeeshan

Скорее всего, это задание, поэтому мы не можем вам помочь.

Однако я могу дать вам очень простое объяснение.

В приведенном выше коде у вас есть два цикла и массив (x). Вы проверяете наличие значений, и если значение в этих 2 индексах не равно нулю, то вы используете goto выражение для достижения метки (reject).

Во-вторых, этикетка reject просто достигает конца функции, что заставляет функцию возвращать элемент управления. Какая еще языковая структура в языке Си заставила бы функцию возвращать элемент управления? Используйте это вместо goto reject;.

Если вы все еще сталкиваетесь с проблемами, пожалуйста, обсудите это с вашим учителем и проверьте предоставленные им заметки.


Member 14869002

спасибо Вам за помощь но я все еще получаю ошибки
#включить <stdio.h>
тап_п()
{
int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};

for (int i=0; i < 3; i++){
for (int j=0; j < 4; j++){
если (a[i][j]!=0)
перейти отклонить;
}
printf(“первая строка, удовлетворяющая условию, равна %d\n”, i);
перерыв;
отклонять:
}
}

Рейтинг:
1

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


Рейтинг:
0

Rick York

Во - первых, начните с отступа кода. Это гораздо легче понять таким образом.

for( i = 0; i < n; i++ )
{
    for( j = 0; j < n; j++ )
    {
        if( x[i][j] != 0 )
            goto reject;
    }

    printf( "First row that satisfies the condition is %d\n", i );
    break;

    reject:
}
Затем подумайте о том, что делает оператор goto в этом коде. Он делает две вещи - он вырывается из цикла for и пропускает оператор printf, и это делается только в том случае, если найдено ненулевое значение. Вот один из способов, который можно сделать без goto :
bool found;  // if bool, true, or false are not defined then define them
for( i = 0; i < n; i++ )
{
    found = false;
    for( j = 0; j < n; j++ )
    {
        if( x[i][j] != 0 )
        {
            found = true;
            break;        // goto reject;
        }
    }

    if( ! found )
    {
        printf( "First row that satisfies the condition is %d\n", i );
        break;
    }
    // reject:
}
Я рекомендую прочитать документацию по оператору break, чтобы вы полностью его поняли. Также читайте о его родственнике - continue, а также о внутренней работе циклов for, do и while.