
4. Объявление переменных
В С все переменные, используемые в программе должны быть объявлены вместе с указанием соответствующих им типов.
Объявление переменной имеет следующий формат:
Тип_переменной <список переменных через запятую>;
Переменные можно инициализировать при описании.
Инициализация – задание начального значения или списка начальных значений переменной (переменным) при объявлении.
Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const. Объекты с типом const представляют собой данные используемые только для чтения, т.е. этой переменной не может быть присвоено новое значение. Отметим, что если после слова const отсутствует спецификатор-типа, то подразумевается спецификатор типа int.
Пример 3 Объявление и инициализация переменных и констант
int a, b, c;
float f, a, b;
int a=1, b, c=2;
const double A=2.128E-2;
const B=286; //подразумевается const int B=286
Задание 3
Определите идентификаторы и типы всех переменных, констант для вычисления площади окружности. Запишите операцию присваивания.
5. Структура программы на с
Общая структура программы на С следующая:
директивы_препроцессора
int main()
{
тело программы
}
Директива препроцессора – это инструкция, которая включает в текст программы файл, содержащий описание множества функций, что позволяет правильно компилировать программу. Смысл препроцессор в том, что директива выполняется до того, как текст программы поступает на вход компилятора.
Внимание
все директивы препроцессора начинаются со знака #;
после директивы препроцессора точка с запятой не ставится.
Запустим Visual C++ и создадим новое консольное приложение. В результате на экране получим:
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
Эта простая программа печатает сообщение «Hello World!» на стандартном устройстве вывода (которым, как правило, является монитор (дисплей).
Рассмотрим структуру программы.
В первой строке программы расположен комментарий, далее следует директива препроцессора #include, встретив которую, компилятор заменяет её на полный текст файла, на который она ссылается. В данном случае эта строка будет заменена стандартным заголовочным файлом stdafx.h (h – от header, заголовок).
Строка программы
using namespace System;
означает, что компилятор должен использовать пространство имен System. Пространство имен (namespace) создает декларативную область, в которой могут размещаться различные элементы программы. Ключевое слово using информирует компилятор об использовании заявленного пространства имен (в данном случае System).
Функция с именем main является особенной, так как выполняется первой при запуске программы, то есть служит так называемой точкой входа в программу. Фигурные скобки после функции main обозначают её определение. Слово int говорит, что функция main возвращает (вычисляет) целое число.
В фигурных скобках формируется тело программы.
Тело программы – программный блок, содержащий операторы описания, присваивания, управляющих конструкций, функции и др.
В примере 4 тело программы содержит два оператора – оператор WriteLine и return.
Инструкция return обеспечивает механизм завершения работы функции main.
Последняя фигурная скобка обозначает конец определения функции main.
Для запуска программы на выполнение необходимо нажать сочетание клавиш Ctrl+F5:
6. Категории операторов в С/С++. Консольный ввод/вывод
Оператор – действие, которое должен выполнить компьютер.
Все операторы языка С/С++ могут быть условно разделены на следующие категории:
оператор объявления;
операторы ввода/вывода;
оператор-выражение;
операторы управления: условные операторы, к которым относятся оператор условия if и оператор выбора switch; операторы цикла (for, while, do while); операторы перехода (break, continue, return, goto); оператор возврата return;
другие операторы.
Ввод/вывод информации в программировании – процесс обмена информацией между оперативной памятью и внешними устройствами: клавиатурой, дисплеем, внешней памятью и т.п. Ввод – это занесение информации с внешних устройств в оперативную память, а вывод – извлечение информации из оперативной памяти на внешние устройства.
Существует несколько способов консольного ввода и вывода.
Первый способ – это использование функции ввода printf() и функции вывода scanf() (унаследована в С++ от С).
Второй способ – это использование оператора ввода Cin >> и оператора вывода Cout <<.
Назначение операторов ввода и вывода легче запомнить, если считать, что >> указывает в сторону перемещения данных. Например,
>> x – перемещает данные в x, а << x – перемещает данные из x.
Внимание
Для работы с функциями printf();и scanf() необходимо подключить библиотеку базовых функций <stdio.h> директивой #include<stdio.h>
Для работы с операторами Cin и Cout необходимо подключить библиотеку <iostream> директивой #include<iostream> (таблица 7).
Таблица 7 – Функции и операторы ввода/вывода информации
|
Библиотека stdio.h |
Библиотека iostream |
Вывод |
Функция printf(); |
Оператор Cout |
Ввод |
Функция scanf(); |
Оператор Cin |
Примечание
Угловые скобки в записи <stdio.h> указывают компилятору искать файл stdio.h в каталоге стандартных заголовочных файлов. Если посмотреть содержимое текстового файла stdio.h, то можно увидеть большое количество строк, являющихся объявлениями функций.
В дальнейшем будем также подключать библиотеку <conio.h> (директивой #include<conio.h>). Библиотека conio.h содержит функции для работы с терминалом в текстовом режиме, в частности getch();которая выполняет задержку выполнения программы до нажатия клавиши и обеспечивает закрытие приложения по нажатию на клавишу.
Формат функции вывода:
printf("строка_формата", список_переменных);
Формат функции ввода:
scanf("строка_формата", &список_переменных);
Символы в строке формата делятся на три категории:
обычные символы;
управляющие символы (см. табл. 2);
спецификатор формата.
Спецификатор формата – запись, которая начинается со знака % и которая определяет форму внешнего представления выводимой величины.
Спецификаторы:
%d – целое число;
%u – целое число без знака (для типа unsigned);
%c – символ;
%s – строка;
%f – вещественное число c фиксированной точкой;
%e – вещественное число с плавающей точкой (с мантиссой и порядком)
Внимание
Спецификатор должен соответствовать типу выводимой переменной.
Пример 4 Ввод/вывод данных с использованием функций
Напишем программу, запрашивающую длины трех сторон треугольника.
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
using namespace System;
int main(array<System::String ^> ^args)
{
int a,b,c;
printf("введите длины трех сторон треугольника\n");
scanf("%d %d %d",&a,&b,&c);
printf("ввод выполнен\n");
getch();
return 0;
}
Тестирование:
В данном примере оператор ввода scanf("%d %d %d",&a,&b,&c); в строке формата содержит три спецификатора %d, т.к. вводятся три целочисленных числа a,b,c , соответствующих сторонам треугольника.
Задание 4
Измените текст программы примера 4 так, чтобы можно было выполнить ввод вещественных значений переменных a,b,c.
Совет
При написании кода для повышения читабельности программы используйте отступы.
Примечание
При использовании оператора вывода Cout и оператора ввода Cin в пространстве имен System
using namespace System;
с библиотекой iostream необходимо писать:
std::cout и
std::cin
т.к. в iostream все классы объявлены в пространстве std (в iostream.h все классы объявлены в глобальном пространстве имен).
Пример 5 Ввод/вывод данных с использованием операторов
Рассмотрим две программы с пространством имен std и System.
Программа 1 |
Программа 2 |
#include "stdafx.h" #include<iostream> #include<conio.h> using namespace std;
int main(array<System::String ^> ^args) { int a,b,c; cout << "введите длины трех сторон треугольника\n"; cin >> a >> b >>c; cout << "ввод выполнен\n"; getch(); return 0; } |
#include "stdafx.h" #include<iostream> #include<conio.h> using namespace System;
int main(array<System::String ^> ^args) { int a,b,c; std::cout << "введите длины трех сторон треугольника\n"; std::cin >> a >> b >>c; std::cout << "ввод выполнен\n"; getch(); return 0; } |
Задание 5
На основе примера 5 разработайте программу-запрос на ввод (по вариантам):
1) текущего года, номера месяца и дня;
2) возраста, роста и веса пользователя;
3) года поступления пользователя в Вуз, группы и номера по списку;
4) года, номера месяца рождения и числа полных лет пользователя;
5) года, номера месяца и дня рождения пользователя;
6) номера домашнего, рабочего и сотового телефона пользователя и др.
Завершите программу сообщением «Ввод данных закончен».
Составьте две программы – с использованием функций printf(); scanf(); и операторов Cout и Cin.
Примечание
При вводе и выводе информации следует обратить внимание на то, что консольное приложение создается в Windows, а выполняется как программа DOS. В DOS используется кодировка OEM (866), а в Windows — ANSI (1251), буквы русского алфавита в них имеют разные коды. Первые 128 символов совпадают – это ASCII, стандарт английских символов (плюс служебные). Следовательно, для работы с русскими буквами (кириллицей) необходимо в Visual C++ обеспечить преобразование символьной информации между этими двумя кодировками.
7. Директива #define
Если в программе возникает необходимость часто печатать или выводить на экран дисплея значение какой-либо переменной (или выполнять другие действия), то целесообразно ввести сокращенное обозначение с использование директивы #define, например
#define V printf("выполните ввод\n");
#define Pi 3.14
После этих директив в программе можно использовать операторы V и Pi.