
- •Л. Б. Бузюков, о. Б. Петрова
- •Учебное пособие
- •Предисловие
- •Глава 1. Введение в язык с
- •1.1. История создания и особенности языка с
- •1.3. Элементы языка с
- •1.3.1. Основные символы
- •1.3.2. Ключевые слова
- •1.3.3. Идентификаторы
- •1.3.4. Константы
- •1.3.5. Лексемы
- •1.3.6. Комментарии
- •Глава 2. Типы данных языка c
- •2.1. Числовые типы данных
- •2.2. Объявление переменных
- •2.3. Данные целого типа
- •2.4. Данные вещественного типа
- •Глава 3. Выражения
- •3.1. Операции
- •3.1.1. Арифметические операции
- •3.1.2. Операция присваивания
- •Глава 4. Составление простейших программ
- •4.1. Препроцессор и его функции
- •4.2. Основные директивы препроцессора
- •4.2.1. Директива include
- •4.2.2. Директива define
- •4.2.3. Директива undef
- •4.3. Структура и правила составления программ
- •4.3.1. Структура функции
- •4.3.2. Функция main()
- •4.3.3. Структура простой программы
- •4.3.4. Правила записи объявлений, операторов и комментариев
- •4.3.5. Пример простейшей программы
- •Глава 5. Средства ввода/вывода
- •5.1. Общие замечания
- •5.2. Функция форматированного вывода printf()
- •5.2.1. Основные форматы
- •5.2.2. Модификации форматов
- •5.3. Функция форматированного ввода scanf()
- •Глава 6. Управляющие операторы
- •6.1. Условные операторы
- •6.1.1. Логические выражения
- •6.1.2. Формы оператора if
- •6.1.3. Оператор выбора switch
- •6.2. Операторы цикла
- •6.2.1. Оператор while
- •6.2.2. Оператор for
- •6.2.3. Оператор do-while
- •6.3. Операторы перехода
- •6.3.1. Оператор break
- •6.3.2. Оператор continue
- •6.3.3. Оператор return
- •6.3.4. Применение оператора goto и меток
- •Глава 7. Функции
- •7.1. Основные понятия
- •7.2. Определение функции
- •7.3. Прототип функции
- •7.4. Вызов функции
- •Глава 8. Классы памяти
- •8.1. Логическаяструктура памяти программы
- •8.2. Особенности классов памяти
- •8.3. Объявления переменных
- •8.4. Объявления функций
- •8.5. Время жизни и область видимости программных объектов
- •8.6. Инициализация глобальных и локальных переменных
- •Глава 9. Указатели
- •9.1. Операция получения адреса
- •9.2. Операции над указателями
- •Глава 10. Массивы
- •10.1. Общие сведения о массивах
- •10.2. Одномерные массивы
- •10.3. Двумерные массивы
- •10.4. Массивы и указатели
- •10.5. Массивы и функции
- •Глава 11. Строки
- •11.1. Представление символьной строки при помощи одномерного массива
- •11.2. Указатель на символьную строку
- •11.3. Ввод/вывод символьных строк
- •11.4. Массивы символьных строк
- •11.5. Функции работы состроками
- •Глава 12. Структуры
- •12.1. Определение структуры
- •12.2. Структуры и функции
- •12.3. Указатели на структуру
- •12.4. Массивы структур
- •12.5. Вложенные структуры
- •12.6. Использование синонима типа
- •12.7. Объединения
- •Глава 13. Файлы
- •13.1. Работа с файлами
- •13.2. Функции ввода/вывода
- •Глава 14. Динамическая память
- •14.1. Распределение памяти
- •14.2. Функции управление памятью
- •Глава 15. Проект
- •15.1. Основы создания проекта
- •15.2. Пример создания проекта
- •Глава 17. Основы объектно-ориентированного программирования
- •17.1. Объектно-ориентированный подход
- •17.3. Конструкторы и деструкторы
- •17.4. Инкапсуляция
- •17.5. Полиморфизм
- •17.6. Наследование
- •17.7. Виды взаимодействия классов
- •17.8. Способы графического представления объектно-ориентированной задачи
- •18.2. Библиотека Win32 api
- •18.3. Библиотека owl
- •18.4. Библиотека vcl
- •18.5. Библиотека clx
- •18.6. Библиотека mfc
- •18.7. Библиотека OpenGl
- •19.3. Создание проекта
- •19.4. Редактирование проекта
- •19.5. Компиляция и выполнение программы
- •19.6. Файловая структура проекта
- •19.7. Создание консольного приложения
- •Глава 20. Разработка приложений для операционных систем windows
- •20.1. Взаимодействие программы и Windows
- •20.2. Компоненты библиотеки Win32 api
- •20.3.Функция WinMain()
- •20.4. Оконная процедура
- •20.5. Структура программы для ос Windows
- •20.6. Ресурсы Windows
- •20.7. Взаимодействие прикладной программы и устройств в Windows
- •Глава 21. Создание приложений для ос windows на основе библиотеки mfc
- •21.1. Обзор классов библиотеки mfc
- •21.2. Класс cString
- •21.3. Класс cFile
- •21.4. Класс cPoint
- •21.5. Класс cRect
- •21.7. Приложение, основанное на диалоге
- •21.8. Использование в приложении элементов управления
- •21.9. Мастер классов mfc ClassWizard
- •21.10. Установка начального значения элементам управления
- •21.11. Элементы управления Picture
- •21.12. Элемент управления Group Box
- •21.13. Элемент управления Radio Button
- •21.14. Элемент управления Check Box
- •21.15. Элемент управления List Box
- •21.16. Создание меню
- •21.17. Приложение с двумя диалоговыми панелями
- •21.18. Приложение sdi
- •21.19. Создание панели инструментов
- •21.20. Приложение mdi
- •21.21. Контекстыустройств в mfc
- •21.22. Графические объекты Windows в mfc
- •21.23. Графические операции в mfc
- •П.1. Основы методологии конструирования программ
- •П.1.1. Основные понятия. Программа и алгоритм
- •П.1.2. Этапы разработки программ
- •П.2. Алгоритмы
- •П.2.1. Алгоритм и его свойства
- •П.2.2. Способы описания алгоритмов
- •П.2.3. Средства графического изображения алгоритмов Схемы алгоритмов
- •Псевдокоды
- •Структурограммы
- •П.3. Основные приемы программирования
- •П.3.1. Разновидности структур программирования
- •П.3.2. Программирование линейных и разветвляющихся процессов
- •П.3.3. Программирование циклических процессов
- •Арифметический цикл (цикл с параметром)
- •Итерационный цикл
- •Вложенный цикл
- •Литература
6.1.2. Формы оператора if
В общем виде синтаксис оператора if следующий:
if (ЛВ) OP1;
else OP2.
При истинном значении ЛВ выполняется оператор ОР1, в противном случае – ОР2, иногда используется и иная форма условного оператора
if (ЛВ) OP;
если ЛВ истинно - выполняется OP, в противном случае OP пропускается.
Если при ЛВ, имеющем значение «истина», необходимо выполнение нескольких операторов, то их надо заключить в фигурные скобки {}.
Для иллюстрации работы оператора if рассмотрим ряд примеров.
A. Что напечатает ЭВМ?
#include <stdio.h>
int main(void)
{
float x=2.;
if (x==1) printf("\n x=%f",x);
else printf("\n y=%f",x+4);
return 0;
}
Ответ: y=6.
B. Даны два числа x, y. Выбрать наибольшее из них.
Первый вариант программы
#include <stdio.h>
int main(void)
{
float x,y;
printf("\n Input x→");
scanf("%f",&x);
printf("\n Input y→");
scanf("%f",&y);
if (x>y) printf("\n max=%f",x);
else printf("\n max=%f",y);
return 0;
}
Второй вариант программы
Определим операцию вывода с помощью директивы PR:
#include <stdio.h>
#define PR(Z) printf("\n max=%f",Z)
int main(void)
{
float x,y;
printf("\n Input x→");
scanf("%f",&x);
printf("\n Input y→");
scanf("%f",&y);
if (x>y) PR(x); else PR(y);
return 0;
}
В структуре операторов if действия OP1 и OP2 могут быть представлены любыми операторами, в том числе и условными. В этом случае, если порядок выполнения операций не полностью определен скобками {}, правило реализации следующее: к каждому if относится ближайшее else и т. д.
C. Найти максимальное из трех чисел.
#include <stdio.h>
#define PR(Z) printf("\n max=%f",Z)
int main(void)
{
float x,y,z;
printf("\n Input x,y,z→");
scanf("%f%f%f",&x,&y,&z);
if ((x>y)&&(x>z)) PR(x);
else
if (y>z) PR(y);
else PR(z);
return 0;
}
6.1.3. Оператор выбора switch
Оператор выбора switch (или переключатель) предназначен для выбора ветви вычислительного процесса исходя из значения управляющего выражения. Использование данного оператора целесообразно при сложном условном ветвлении.
Структура оператора следующая:
switch (выражение)
{
case константное выражение : оператор или группа операторов
break;
case константное выражение : оператор или группа операторов
break;
……………
default : оператор или группа операторов
}
Значение выражения оператора switch должно быть целочисленным. Это означает, что в выражении можно использовать переменные только целого или символьного типа. Результат вычисления выражения по очереди сравнивается с каждым из константных выражений. Если в какой-либо строке находится совпадение, управление передается на соответствующую метку case, и выполняется связанная с ней группа операторов. Выполнение продолжается до конца тела оператора switch или пока не встретится оператор break, который передает управление из тела switch оператору, следующему за закрывающей данную конструкцию фигурной скобкой.
Применение оператора break в контексте блока switch является обычным. Без него после выполнения варианта case, который соответствует значению управляющего выражения, оператор switch продолжит свою работу, при этом будут выполнены все последующие варианты case и ветка default.
Оператор, связанный с default, выполняется, если выражение не совпало ни с одним из константных выражений в case. Оператор default не обязательно располагается в конце конструкции. Кроме того, он и сам не обязателен. В этом случае при отсутствии совпадений не выполняется ни один оператор. Не допускается совпадение константных выражений.
Пример 1. По номеру дня недели, введенному с клавиатуры, вывести на экран название дня недели:
#include <stdio.h>
int main(void)
{
char day;
printf("Введите номер дня недели\n");
scanf("%c",&day);
switch (day)
{
case'1': printf("Понедельник\n");break;
case'2': printf("Вторник\n");break;
case'3': printf("Среда\n");break;
case'4': printf("Четверг\n");break;
case'5': printf("Пятница\n");break;
case'6': printf("Суббота\n");break;
case'7': printf("Воскресенье\n");break;
default: printf("Ошибка ввода\n");
}
return 0;
}
В этом примере переменная day, управляющая оператором switch, имеет символьный тип. При вводе с клавиатуры символов 1, 2, … 7 на экран выводится название соответствующего дня недели. При вводе любого другого символа на экран выводится сообщение об ошибке.
Пример 2. По номеру месяца, введенному с клавиатуры, вывести на экран название времени года:
#include <stdio.h>
int main(void)
{
int month;
printf("Введите номер месяца в году\n");
scanf("%d",&month);
switch (month)
{
case 12:
case 1:
case 2: printf("Зима\n");break;
case 3:
case 4:
case 5: printf("Весна\n");break;
case 6:
case 7:
case 8: printf("Лето\n");break;
default: printf("Ошибка ввода\n");break;
case 9:
case 10:
case 11: printf("Осень\n");
}
return 0;
}
В этом примере оператор switch управляется целочисленной переменной month. При вводе в эту переменную значений 12, 1 или 2 выполняется одно и то же действие – вывод на экран слова "Зима", так как в ветвях case 12: и 1: нет ни одного оператора. При вводе значения 12, например, выполнение switch начнется со строчки case 12:, затем будет выполнена строка case 1:, затем операторы строки case 2:, последний из которых – break – завершит выполнение оператора switch. Обратите внимание также на положение ветви default – совсем не обязательно помещать ее последней в switch.