Уменьшение цикла while в c - PullRequest
       1

Уменьшение цикла while в c

0 голосов
/ 30 сентября 2011

Возможно ли уменьшить размер массива в цикле while в C более чем на x--. Например, можете ли вы уменьшить массив на треть размера массива с каждой итерацией?

int n = 10;

while (n < 0)

// do something

(round(n/3))-- // this doesn't work, but can this idea be expressed in C?

Спасибо за помощь!

Ответы [ 4 ]

2 голосов
/ 30 сентября 2011

Вы можете использовать любое выражение:

int n = 10;
while (n > 0)   // Note change compared with original!
{
    // Do something
    n = round(n/3.0) - 1;  // Note assignment and floating point
}

Обратите внимание, что вы можете уменьшать только переменные, а не выражения.

Вы также можете использовать цикл for:

for (int n = 10; n > 0; n = round(n/3.0) - 1)
{
    // Do something
}

В этом случае последовательность значений для n будет одинаковой (n = 10, 2) независимо от того, округляете ли вы с плавающей запятой или нет, поэтому вы можете написать:

n = n / 3 - 1;

и выувидел бы те же результаты.Для других верхних пределов последовательность изменится (n = 11, 3).Оба метода хороши, но вы должны быть уверены, что знаете, чего хотите, вот и все.

2 голосов
/ 30 сентября 2011

Да, к вашей переменной можно добавить или вычесть любое число n.

Обычно, если вы хотите сделать что-то очень предсказуемое количество раз, вы должны использовать цикл for;когда вы не уверены, сколько раз что-то случится, а скорее тестируете какое-то условие, вы используете цикл while.

Самый редкий цикл - цикл do / while, который используется только в том случае, если вы хотите наверняка выполнить цикл один раз перед первой проверкой while.

Примеры:

// do something ten times
for (i = 0; i < 10; ++i)
    do_something();

// do something as long as user holds down button
while (button_is_pressed())
    do_something();

// play a game, then find out if user wants to play again
do
{
    char answer;
    play_game();
    printf("Do you want to play again?  Answer 'y' to play again, anything else to exit. ");
    answer = getchar();
} while (answer == 'y' || answer == 'Y');
0 голосов
/ 30 сентября 2011

Точно так же, как сказал К-Балло, в вашем примере кода нет массива, но вот пример с целочисленным массивом.

int n = 10;
int array[10];
int result;

// Fill up the array with some values
for (i=0;i<n;i++)
    array[i] = i+n;

while(n > 0)
{
    // Do something with array

    n -= sizeof(array)/3;
}

Но будьте осторожны в примере кода, который вы дали в то время как цикл while проверяет, меньше ли n, чем ноль. Поскольку n имеет значение 10, цикл while никогда не будет выполнен. Я изменил это в моем примере.

0 голосов
/ 30 сентября 2011

В вашем коде нет массива. Если вы не хотите n иметь треть своего значения на каждой итерации, вы можете сделать n /= 3; Обратите внимание, что поскольку n является интегральным, то применяется интегральное деление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...