С/С++ языки программирования, разработанные и используемые профессионалами для разработки мощных программных продуктов, в том числе операционных систем. Поэтому языки имеют разнообразные возможности для разработки программного кода, однако, контроль за правильностью и использования этих возможностей ложится, во многом на программиста, а не на компилятор. Однако, в данном пособии рассматриваются лиши введение в программирование на языках С/С++, основные приемы структурного (на С и С++) и объектно-ориентированного программирования (на языке С++).
Данные, обрабатываемые программой на языках С/С++, имеют разные типы и виды. Тип – это характеристика данного, которая определяет размер памяти, значения, операции, в которых оно может участвовать. Ниже приведена таблица простых типов, используемых в языках С/С++.
Таблица 1. Простые типы в языках С/С++.
|
Тип
|
Наимено-вание
|
Размер
(байт)
|
диапазон
|
|
void
|
Бес-типовый
|
-
|
Нет значений
|
|
char
|
целый
|
1
|
-128…+127
|
|
int
|
целый
|
2/4
|
Зависит от системы, в системах Microsoft 2147483647
|
|
float
|
Вещест-венный
|
4
|
+-(3.4E-38… 3.4E+38)
|
|
double
|
Вещест-венный
|
8
|
+-(1.7E-308… 1.7E+308)
|
Особенностями работы с данными в С/С++ являются:
- · использование типа char для работы с символами (хранятся коды символов). Например, описание char s1=`a`; дает возможность работать с переменной а типа char, начальным значением которой является символ а.
- · логического типа нет, однако, логические константы true и false имеются, являясь результатами вычисления логических выражений. Кроме того, значения целых переменных и констант могут рассматриваться 0 - как false, остальные значения –как true.
- · Строкового типа нет, но строковые константы (наборы символов в кавычках) допускаются. Более того, их можно присваивать массивам типа char, в результате каждый символ рассматривается как элемент массива.
Перед первым появлением переменной в программе, она должна быть объявлена с указанием типа. При этом может быть указано начальное значение:
int i,j=0;
char s1=`a`;
float f=0.0012F;
Выражения и операция присваивания
Для вычисления значений алгебраических выражений в языках С/С++ имеются операции +, -, *, /, % (остаток от деления нацело), ++ (инкремент), -- (декремент). При использовании унарной (требующей одного операнда) операции инкремента i++; значение переменной увеличивается на 1, а декремента – уменьшается на 1.
В выражениях могут использоваться математические функции, собранные, в основном, в библиотеке math.h, которую необходимо подключить оператором
#include < math.h>
Необходимо помнить, что имеются семейства родственных функций, отличающихся типом аргументов и значения. Например, можно использовать вещественную функцию возведения в степень одинарной точности powf() и двойной точности pow() с аргументами соответствующего типа. При выборе наименования функции необходимо пользоваться ее описанием в справочной литературе.
В С/C++ есть операция присваивания =, а не оператор присваивания. Поэтому присваивание может встречаться в неожиданном контексте, например:
x=sqrt(a=3*x); // сначала будет вычислено значение а, а затем корень
a=b=c; /*означает присвоение значение c переменной b, а затем a*/
Выше использованы комментарии языков С/C++, оформляемые двумя наклонными чертами или заключаемые внутри /* … */.
Операция присваивания может совмещаться с большинством бинарных операций:
a+=b /*означает a=a+b*/
x*=4 /* означает x=x*4 */
Форматированный ввод-вывод в С.
При подключении библиотеки <stdio.h> можно использовать форматированный ввод-вывод языка С. Общий вид оператора вывода на экран:printf(“ форматная строка “, список вывода);
где форматная строка – совокупность символов и спецификаций формата, показывающих, в каком виде выводятся данные. Спецификации формата начинаются с символа процента %. Символы выводятся без изменений, спецификации формата заменяются соответствующими значениями данных из списка вывода. В спецификацию формата могут входить указатель ширины поля (всего позиций, отводимых на число), точность (число знаков после десятичной точки), указатель типа и другая информация. Наиболее употребительные указатели типа представлены в таблице 2.
Таблица 2. Указатели типа в спецификации формата
форматированного ввода-вывода языка С
|
Указатель типа
|
Назначение
|
|
с
|
Вывод данных типа char
|
|
d
|
Вывод данных типа int
|
|
f
|
Вывод данных типа float в
форме числа с точкой
|
|
e
|
Вывод данных типа float в
нормализованной форме
|
|
lf
|
Вывод данных типа double
|
Примеры вывода на экран переменных числовых типов:
int i = 16;
printf (“i=%d i=%4d",i,i);
// Вывод на экран:
//i=16 i= 16
float a = 16;
printf (“a=%f %e",a,a);
// Вывод на экран:
// a=16.000000 1.600000е+01
double a = 16;
printf (“a(формат f)=%.3lf \n a(формат e)= %.1e",a,a);
// Вывод на экран:
// a(формат f)= 16.000
// a(формат e)= 1.6е+01
Специальная символьная константа \n вызывает перевод строки. Полезно использовать также символьную константу ”\t” для организации пробелов между выводимыми значениями.
Ввод значений переменных с клавиатуры производится оператором
scanf(“форматная строка“, список ввода);
В этом случае форматная строка должна состоять только из указателей типа, а у имени переменной (не являющейся указателем или ссылкой) необходимо поставить знак амперсанда &:
//прочитать вещественное число в переменную t;
scanf ("%f", &t);
//прочитать символ в переменную ch типа char
scanf ("%c", &ch);
//прочитать целые числа в переменные r,c;
scanf ("%d%d", &r,&c);
Потоки ввода-вывода в С++
Когда запускается программа на С++, автоматически создается несколько стандартных потоков:
cin (стандартный ввод с клавиатуры),
cout (стандартный вывод на экран).
Чтобы ими пользоваться нужно подключить заголовочный файл <iostream.h> (в системе программирования Visual Studio – класс <iostream>) и организовать единое стандартное пространство имен с помощью оператора using namespace std;
Приведем программу с простыми примерами использования потоков ввода-вывода в С++:
#include <iostream>
using namespace std;
void main()
{
int i = 16;
printf ("i=%d i=%4d \n",i,i);
// Вывод на экран:
//i=16 i= 16
float a = 16;
printf ("a=%f %e \n",a,a);
// Вывод на экран:
// a=16.000000 1.600000е+01
double b = 16;
printf (" b(format f)=%.3lf \n b(format e)= %.1e \n",b,b);
// Вывод на экран:
// a(формат f)= 16.000
// a(формат e)= 1.6е+01
}
Форматированный вывод в потоке можно организовать с помощью манипуляторов
- • fixed - вывод в формате числа с точкой
- • scientific - вывод в экспоненциальном формате
- • setw(n) -установить количество знаков при выводе
- • setprecision(n) -установить количество цифр после запятой при выводе вещественных чисел;
- • и других, доступных в библиотеке <iomanip>.
Комментариев нет:
Отправить комментарий