Язык Си - руководство для начинающих
Шрифт:
б. неправильно, поскольку опушен знак операции переключения. (Позже вы научитесь писать программы, для которых не нужно будет использовать операцию переключения)
в. правильно, при выполнении этой команды число символов, полученное в результате работы программы count из вопроса 3, появится в виде сообщения на экране.
г. неправильно, имя выполняемой программы должно стоять первым
УПРАЖНЕНИЯ
1. Напишите программу, описанную в п. 3, т. е. программу, подсчитывающую число символов в файле.
2.
7. Выбор вариантов
Хотите научиться создавать мощные, "интеллектуальные", универсальные и полезные программы? Тогда вам потребуется язык, обеспечивающий три основные формы управления процессом выполнения программ. Согласно теории вычислительных систем (которая является наукой о вычислительных машинах, а не наукой, создаваемой такими машинами), хороший язык должен обеспечивать реализацию следующих трех форм управления процессом выполнения программ:
1. Выполнение последовательности операторов.
2. Выполнение определенной последовательности операторов до тех пор, пока некоторое условие истинно.
3. Использование проверки истинности условия для выбора между различными возможными способами действия.
ОПЕРАТОР if
Начнем с очень простого примера. Мы уже видели, как нужно написать программу, подсчитывающую число символов в файле. Предположим, вместо символов мы хотим подсчитать строки. Это можно сделать путем счета числа символов "новая строка" в файле. Ниже приводится соответствующая программа:
/* подсчет строк */
#include < stdio.h>
main
{
int ch;
int linecount = 0;
while((ch = getchar) != EOF)
if(ch =='\n')
linecount ++;
printf(" Янасчитала%d строк\n", linecount);
}
Сердцевиной" программы является оператор
if(ch == '\n') linecount ++;
Этот "оператор if" служит указанием компьютеру увеличить значение переменной linecount на 1, если только что прочитанный символ (содержимое переменной ch) представляет собой символ "новая строка". Знак == не является опечаткой; его смысл выражается словами "равняется". Не путайте эту операцию с операцией присваивания (=).
Что происходит в случае, когда значение переменной ch не является символом "новая строка"? Тогда в цикле while производится чтение следующего символа.
Оператор if, который мы только что применили в программе, считается одиночным оператором, начинающимся от ключевого слова if и завершающимся символом "точка с запятой". Вот почему мы не использовали фигурные скобки,
Совсем несложно усовершенствовать программу так, чтобы она подсчитывала символы и строки одновременно; давайте попробуем это сделать.
/* 1cс - подсчет числа строк и символов */
#include
main
{
int ch;
int linecount = 0;
int charcount = 0;
while((ch = getchar) != EOF)
{
charcount ++ ;
if(ch == '\n' ) linecount++ ;
}
printf(" Я насчитала %d символов и %d строк.\n", charcount, linecount);
}
Теперь в цикл while входят два оператора; поэтому мы использовали фигурные скобки, чтобы отметить начало и конец тела цикла.
Мы вызываем скомпилированную программу Icc и используем операцию переключения, чтобы подсчитать число символов и строк в файле с именем chow.
Ice <chow Я насчитала 8539 символов и 233 строки
Следующий шаг в "развитии" этой программы - придание ей способности подсчитывать число слов. Это лишь немного труднее того, что мы делали до сих пор, но сначала нам нужно изучить ряд дополнительных вопросов, связанных с использованием операторов if.
РАСШИРЕНИЕ ОПЕРАТОРА if С ПОМОЩЬЮ else
Простейшей формой оператора if является та, которой мы только что воспользовались:
if(выражение)оператор
Обычно под выражением здесь понимают условное выражение, с его помощью сравниваются значения двух величин (например x > y или c == 6). Если такое выражение истинно (x больше у или c равно 6), то оператор выполняется. В противном случае он пропускается. Вообще говоря, в качестве условия может быть использовано любое выражение, и если его значение равно 0, то оно считается ложным– дальнейшие детали мы обсудим чуть позже. Оператор может быть простым, как в нашем примере, или составным (блоком), начало и конец которого отмечены фигурными скобками:
if (score > big) printf(" Полная победа!\n"); /* простой оператор */
if (jое > rоn) /* составной оператор */
{
joecash + + ; printf(" Ты проиграл, Рон.\n");
}
Простая форма оператора if позволяет выбрать оператор (возможно, составной) или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.