Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17111 / 2712 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 7:

Выбор вариантов

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Аннотация: Выбор вариантов. Оператор if. Расширение оператора if. Операции отношения. Логические операции. Операция условия: ?:. Множественный выбор.

Выбор вариантов

Язык Си обеспечивает три основные формы управления процессом выполнения программ. Согласно теории вычислительных систем, хороший язык должен обеспечивать реализацию следующих трех форм управления процессом выполнения программ:

  1. Выполнение последовательности операторов.
  2. Выполнение определенной последовательности операторов до тех пор, пока некоторое условие истинно.
  3. Использование проверки истинности условия для выбора между различными возможными способами действия.

Первая форма нам уже хорошо известна. Все наши предшествующие программы представляли собой некоторую последовательность операторов. Цикл while служит одним из примеров использования второй формы, другие способы будут рассмотрены в следующей лекции. Последняя форма делает программы гораздо более интеллектуальными, и чрезвычайно увеличивает эффективность работы компьютера

Оператор if

Подсчитаем число строк в файле. Это можно сделать путем счета числа символов "новая строка" в файле.

Пример:

/*подсчет строк */
#include <stdio.h>
main( )
{
  int ch;
  int line_count=0;
  while((ch = getchar( )) != EOF)
  if(ch == '\n') line_count++;
  printf("Мы насчитали %d строк. \n", line_count);
}

Оператор if служит указанием компьютеру увеличить значение переменной line_count на 1, если только что прочитанный символ, содержимое переменной ch, представляет собой символ "новая строка". Что происходит в случае, когда значение переменной ch не является символом "новая строка"? Тогда в цикле while производится чтение следующего символа. Оператор if считается одиночным оператором, начинающимся от ключевого слова if и завершающимся символом "точка с запятой". Модифицируем программу. Подсчитаем одновременно число символов и строк в файле:

/* подсчет числа строк и символов */
#include <stdio.h>
int main( )
{
  int ch = 0;
  int line_count = 0;
  int char_count = 0;
  while((ch = getchar( )) != EOF) {
    char_count++;
    if(ch == '\n')
      line_count++;
  }
  printf("Мы насчитали %d символов и %d строк.\n",
    char_count, line_count);
}

Теперь в цикл while входят два оператора, поэтому мы использовали фигурные скобки, чтобы отметить начало и конец цикла.

Расширение оператора if

Простейшей формой оператора if является

if(выражение)
оператор

Под выражением здесь понимаем условное выражение. С его помощью сравниваются значения двух величин. Если такое выражение истинно, то оператор выполняется. В противном случае он пропускается. В общем случае в качестве условия может быть использовано любое выражение, и если его значение равно 0, то оно считается ложным.

Оператор может быть простым или составным, т. е. блоком.

Пример:

/* пример одиночного оператора и блока */
#include <stdio.h>
int main( )
{
  int i;
  i=getchar( );
  if (i > 5) 
  /* одиночный оператор*/
  printf("Значение больше 5.\n"); 
  if (i < 5) {
    /* составной оператор*/
    printf("Значение\n");
    printf(" меньше 5.\n");
  }
  return 0;
}

Простая форма оператора if позволяет выбрать оператор, возможно, составной, или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.

Напишем программу, заменяющую каждый символ из таблицы ASCII на следующий символ, кроме символа "новая строка".

Пример:

/* код_1*/
#include <stdio.h>
int main( )
{
  int ch;
  while ((ch=getchar( )) != EOF) {
    /* оставить символ "новая строка неизменным" */
    if (ch == '\n') 
      putchar(ch); 
    else
    /* заменить остальные символы*/
      putchar(ch + 1); 
  }
}

Общий вид оператора if-else выглядит следующим образом:

if(выражение)
  оператор
else
  оператор

Если выражение истинно, то выполняется первый оператор, а если ложно, то выполняется оператор, следующий за ключевым словом else. Операторы могут быть простыми или составными.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Александр Коровников
Александр Коровников
Россия, г. Санкт-Петербург
Владимир Крюков
Владимир Крюков
Казахстан