Для цикла не выполняется - PullRequest
0 голосов
/ 10 июля 2010

Формула просто не выполняется. Я попытался использовать printf для отладки, и он напечатал 0 для i в конце кода

#include <stdio.h>

int main()
{
 int i, base, height;
 printf("Lumber  Cross-Sectional   Moment of Section\n");
 printf("Size  Area    Inertia  Modulus\n");
 for (i = 0; i > 35; i++)
 {
  if (i == 6 || i == 12 || i == 18|| i == 24 || i == 30)
  {
   base = base * 2;
   height = 2;
  }
  if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30)
  {
   height = height * 2;
  }
  printf("%d x %d %d  %d   %d \n", base, height, base * height, base * 2 + height); 

 }//for  
 return (0);
}//main

Ответы [ 6 ]

16 голосов
/ 10 июля 2010

Должно быть

for (i = 0; i < 35; i++)

Тело цикла будет выполняться только при выполнении условия.

4 голосов
/ 10 июля 2010

должно быть

for (i = 0; i < 35; i++)

как сказал Билл Ящерица.

for (i = 0; i > 35; i++)

никогда не имеет значения true в своем состоянии, поскольку 0 <35 и, следовательно, тело цикла никогда не выполняется. </p>

3 голосов
/ 10 июля 2010

Вы должны подумать, что означают ваши условия.Причина, по которой цикл не выполняется, упоминается другими.Давайте посмотрим на другое условие:

if (i != 6 || i != 12 || i != 18 || i != 24 || i != 30)

Когда вы думаете, что вышеприведенное условие будет ложным?Нам нужно рассмотреть два случая:

  • i равно 6. Итак, i != 6 ложно, но любая другая часть условия (i != 12 и т. Д.) Верна,Это потому, что 6 равно только 6, и нет другого числа.Таким образом, общее условие истинно.
  • i не равно 6. Теперь i != 6 верно, и, следовательно, все условие истинно.

Итак, вашеif условие, указанное выше, всегда выполняется.

Кроме того, подумайте о том, что произойдет, если вы зациклились до большого числа, скажем, 215. Хотите ли вы иметь условие, подобное:

if (i == 6 || i == 12 || ... || i == 210)

Конечно, должно быть лучше делать то, что ты хочешь.Я думаю, что вам нужно умножить base на 2 и сбросить height, когда i делится на 6;в противном случае умножьте height на 2. Структура кода:

/* not legal C */
if (i is divisible by 6) {
} else {
}

Чтобы проверить делимость на 6, помните, что для чисел n и m, n % m дает остаток от n делится на m.

0 голосов
/ 10 июля 2010

Первый цикл никогда не будет выполнен. Первый раз для проверок (i> 35), в вашем случае i <35, поэтому цикл не будет выполнен. </p>

0 голосов
/ 10 июля 2010

Я думаю, если вы измените код и условия, это будет намного лучше.Можете ли вы изменить цикл for на for (i=1 ; i<36 ; i++)?Таким образом, вы можете упростить условие if внутри цикла, как видите, вы проверяете, кратно ли оно 6 в коде.Вы можете просто подумать об этих строках.

Еще несколько указателей:

  1. Инициализировать все переменные значениями по умолчанию.
  2. Вывести вывод в более удобочитаемом видеУдалить х из него.Также поместите значения одинаково, используя \ t.
0 голосов
/ 10 июля 2010

Как сказано выше, два сопряжения для цикла не будут выполняться, пока условие не станет истинным.Прежде чем спрашивать это здесь, вы должны были отладить это самостоятельно.:)

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