Лекции по Си и C++ для начинающих. Рассмотрены основные темы и простейшие примеры, работающие на современных компиляторах.
Приведённый ознакомительный фрагмент книги Лекции по C++ для начинающих предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других
ТЕМА 1 — ТИПЫ ДАННЫХ. ВЫРАЖЕНИЯ. ОПЕРАТОРЫ
1) ДЕТАЛИ ЯЗЫКА
Важным понятием языка является идентификатор, который в языке программирования используется для обозначения имен переменных, функций и меток, применяемых в программе. Идентификатором может быть произвольная последовательность латинских букв, цифр и символа подчеркивания, которая начинается с буквы или символа подчеркивания.
Необходимо помнить, что язык C++ различает прописные и строчные буквы. Язык C++, как говорят, является чувствительным к регистру. Имена «Summa», «SUMMA» и «summa» определяют три различных имени переменных. В именах переменных, как уже говорилось, можно использовать символ подчеркивания. Однако обычно с символа подчеркивания начинаются имена системных зарезервированных переменных и констант. Поэтому старайтесь не использовать имен, начинающихся с символа подчеркивания, и вам удастся избежать возможных конфликтов и взаимопересечений с множеством библиотечных имен.
Комментарий — часть программы, которая игнорируется компилятором и служит для удобочитаемости исходного текста программы. В процессе компиляции комментарий заменяется пробелом: следовательно комментарий может располагаться в любом месте программы, где допускается использование пробела. Комментарием в языке C++ является любая последовательность символов, заключенная между парами символов /* и */. Для однострочного комментария можно использовать символы //
2) СТРУКТУРА ФАЙЛА, С КОТОРОГО НАЧИНАЕТСЯ ПРОГРАММА
В языке СИ любая программа состоит из одной или более функции, которые нужно выполнить. Выполнение любой программы начинается с функции main. Далее в main мы пишем текст программы и вызываем другие функции. Таким образом, структура программы имеет вид:
int main() {
…
}
В самом простом случае функция main не имеет аргументов, поэтому в скобках ничего не содержится. Для работы программы, обеспечивающей ввод и вывод информации, перед функцией main необходимо поместить строку: #include <stdio.h>
#include <stdio.h>
int main() {
printf("Теперь можно идти устраиваться в Facebook!");
}
3) ТИПЫ ДАННЫХ В С++
ОБЩИЕ ТИПЫ ДАННЫХ В С++ И JAVA
ОСНОВНЫЕ ТИПЫ ДАННЫХ В С++ (С АНАЛОГАМИ В JAVA)
Все переменные должны быть объявлены до их использования. Общая форма объявления имеет вид: type name;
float A; int В = 6; char С;
4) ВЫРАЖЕНИЯ
Выражения формируются из констант, переменных, функции, знаков операции и круглых скобок по определенным синтаксическим правилам. Выражение — это единица языка, которая определяет способ вычисления некоторого значения.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
+ сложение
— вычитание
* умножение
/ деление
% деление по модулю
++ увеличение на единицу
– — уменьшение на единицу
Результатом деления по модулю является остаток от деления. Например, если b=5, с=2, то при выполнении операции а = b % с, переменная а получит значение 1.
Унарные операции ++ и — могут следовать перед или после операнда.
Три оператора х= х + 1; ++х; х++; имеют один результат, но имеют различие при использовании.
/* Пример старого способа ввода/вывода через"<stdio.h>"для С */
#include <stdio.h>
int main() {
printf("Я очень люблю C++!\n");
int a;
printf("Введите Ваше любимое число:");
scanf("%d", &a);
printf("Ваше число * 2 = %d\n", a * 2);
}
/* Пример нового способа ввода/вывода через"<iostream>"для С++ */
#include <iostream>
using namespace std;
int main() {
cout <<"Я очень люблю C++!\n";
int a;
cout <<"Введите Ваше любимое число:";
cin >> a;
cout <<"Ваше число * 2 ="<< a * 2 << endl;
}
/* Пример нового способа ввода/вывода через"<iostream>"без namespace для С++ */
#include <iostream>
int main() {
std::cout <<"Я очень люблю C++!\n";
int a;
std::cout <<"Введите Ваше любимое число:";
std::cin >> a;
std::cout <<"Ваше число * 2 ="<< a * 2 << std::endl;
}
Например (EX1):
#include <stdio.h>
int main() {
int x, y;
x = 5;
y = 60;
x++;
++y;
printf("x = %d y = %d \n", x, y);
printf("x = %d y = %d \n", x++, ++y);
}
Результат:
"x = 6 y = 61"
"x = 6 y = 62"
При x++ значение переменной х сначала используется в выражении, и лишь затем переменная увеличивается на единицу;
При ++х значение переменной х сначала увеличивается на единицу, а затем используется в выражении.
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
< меньше
<= меньше либо равно
== равно
>= больше либо равно
> больше
!= не равно
МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ
Перед аргументом и функцией указан допустимый тип (при программировании эта запись типа опускается). Для работы с математическими функциями необходимо перед функцией main поместить строку: #include <math.h>
#include <iostream>
#include <math.h>
using namespace std;
int main() {
double x;
cout <<"Введите число:";
cin >> x;
cout <<"sin(x)="<< sin(x) << endl;
cout <<"sqrt(x)="<< sqrt(x) << endl;
}
ШПАРГАЛКА ПО ВВОДУ-ВЫВОДУ
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int number1;
float number2;
/* Стиль С из <stdio.h> */
printf("Введите целое и вещественное число через пробел:");
scanf("\n%d %f", &number1, &number2);
printf("number1 = %d, number2 = %f \n", number1, number2);
puts("Спасибо!");
/* Стиль С++ из <iostream> */
cout <<"Введите еще число:";
cin >> number1;
cout <<"Вы ввели число"<< number1 << endl;
/* Создание задержки на экране. Стиль С++ из <iostream> */
cout <<"\nНажмите Enter для завершения программы…\n";
// Очистим ввод с клавиатуры и будем ожидать нажатие клавиши"Enter"
cin.ignore(); cin.get();
return 0;
}
Программы с линейной структурой являются простейшими и используются, как правило, для реализации простых вычислений по формулам. В программах с линейной структурой инструкции выполняются последовательно, одна за другой.
5) ОПЕРАТОР ПРИСВАИВАНИЯ
Оператор присваивания в языке C++ обозначается просто знаком =. В отличие от других языков в языке C++ оператор присваивания может использоваться в выражениях, которые включают в себя операторы сравнения или логические операторы.
Например (EX1):
#include <stdio.h>
int main() {
int C;
if ((C = 5 + 3) > 0) {
printf("Число C больше нуля!");
}
}
Сначала вычисляется величина 5 + 3, которая присваивается переменной С, затем сравнивается ее значение с нулем.
Существует также возможность многократного присваивания.
Например: int x = y = z = 5 * 3
Такое присваивание выполняется справа налево. Сначала вычисляется 5 * 3, затем это значение присваивается z, потом у, и лишь затем х.
Есть дополнительные операторы присваивания: +=, — =, *= и %=.
Вместо n = n + 2 можно использовать n += 2. += это аддитивная операция, в результате выполнения которой величина, стоящая справа, прибавляется к значению переменной, стоящей слева.
Аналогично:
n — = 2 это n = n — 2;
n *= 2 это n = n * 2;
n /= 2 это n = n / 2;
n %= 2 это n = n % 2.
Эти операции имеют тот же приоритет, что и операция присваивания =, то есть ниже, чем приоритет арифметических операций.
6) ОПЕРАТОР ВЫВОДА
Вначале рассмотрим функцию, определяющую форматный вывод:
printf("управляющая строка", аргумент1, аргумент2,…);
Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и команды формата, определяющие, как выводить аргументы. Команда формата начинается с символа %, за которым следует код формата.
ОСНОВНЫЕ КОДЫ КОМАНДЫ ФОРМАТА:
1. d — значением аргумента является десятичное целое число;
2. с — значением аргумента является символ;
3. s — значением аргумента является строка символов:
4. f — значением аргумента является вещественное число с плавающей точкой;
5. р — значением аргумента является указатель (адрес).
Функция printf использует управляющую строку, чтобы определить, сколько всего аргументов и каковы их типы. Например, в результате работы программы получена переменная i, имеющая значение 100, и переменная j, имеющая значение 25. Обе переменные целого типа. Для вывода этих переменных на экран в виде
int i = 100;
int j = 25;
необходимо применить функцию
printf("i = %d j = %d", i, j);
Как было описано выше, в кавычках задается формат вывода, перед знаком % записываются символы, которые будут непосредственно выданы на экран. После знака % применена спецификация d, т.к. переменные i и j имеют целый тип. Сами i и j приведены через запятую в списке аргументов.
Если после знака % стоит цифра, то она задает поле, в котором будет выполнен вывод числа. Приведем несколько функций printf, которые будут обеспечивать вывод одной и той же переменной S целого типа, имеющей значение 336.
Вызов функции printf("%2d", S);
Вывод: 336
В этом примере ширина поля (она равна двум) меньше, чем число цифр в числе 336, поэтому поле автоматически расширяется до необходимого размера.
Вызов функции printf("%6d", S)
Вывод: _ _ _336 (6 позиций)
То есть, в результате работы функции число сдвинуто к правому краю поля, а лишние позиции перед числом заполнены пробелами.
Вызов функции printf("%-6d", S);
Вывод: 336_ _ _ (6 позиций)
Знак «минус» перед спецификацией приводит к сдвигу числа к левому краю поля.
Рассмотрим вывод вещественных чисел. Если перед спецификацией f ничего не указано, то выводится число с шестью знаками после запятой, при печати числа с плавающей точкой перед спецификацией f тоже могут находиться цифры.
%6f — печать числа с плавающей точкой в поле из шести позиции;
%.2f — печать числа с плавающей точкой с двумя цифрами после десятичной точки;
%6.2f — печать числа с плавающей точкой в поле из шести позиций и двумя цифрами после десятичной точки.
Примеры:
float а = 3,687;
float b = 10,17;
Вызов функции printf("%7f %8f", a, b);
Вывод: _ _3.687_ _ _ _ 10.17
Как видно из примера, лишние позиции заполняются пробелами.
Вызов функции printf("%.2f %.2f", а, b);
Вывод: 3.69 10.17
В первом числе третья цифра после десятичной точки отброшена с округлением, т.к. указан формат числа с двумя цифрами после десятичной точки.
Вызов функции printf("%7.2f %e", a, b);
Вывод: _ _ _3.68 1.017000е+01
Поскольку для вывода значения переменной b применена спецификация е, то результат выдан в экспоненциальной форме. Следует отметить, что, если ширина поля меньше, чем число цифр в числе, то поле автоматически расширяется до необходимого размера.
Как было отмечено выше, в управляющей строке могут содержаться управляющие символьные константы. Среди управляющих символьных констант наиболее часто используются следующие:
\b — для перевода курсора влево на одну позицию;
\n — для перехода на новую строку;
\t — для горизонтальной табуляции;
Предположим, в результате работы программы переменная i получила значение 50.
Вызов функции printf("\t ЭBM\n%d\n", i);
Сначала выполнится горизонтальная табуляция (\t), т.е. курсор сместится от края экрана на 8 позиций, затем на экран будет выведено слово «ЭВМ» после этого курсор переместится в начало следующей строки (\n) затем будет выведено целое значение i по формату d, и окончательно курсор перейдет в начало новой строки (\n). Таким образом, результат работы этой функции на экране будет иметь вид:
_ _ _ _ _ _ _ _ ЭВМ
50
7) ОПЕРАТОРЫ ВВОДА
Для форматного ввода данных используется функция:
scanf("управляющая строка", аргумент1, аргумент2,…);
Если в качестве аргумента используется переменная, то перед ее именем записывается символ &. Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов, спецификации для определения типов аргументов такие же, как и для функции printf.
Если нам надо ввести значения для переменных i (целого типа) и а (вещественного типа). Эту задачу сможет выполнить функция: scanf("%d%f", &i, &a).
В управляющей строке спецификации трех типов могут быть отделены друг от друга различными знаками, в том числе и пробелом. Следовательно, при занесении значений переменных необходимо использовать указанный разделитель. Если функции не отделены одна от другой никакими значениями, то значения переменных заносятся через пробел.
/*
* Пример решения квадратного уравнения
*/
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a, b, c, x1, x2;
cout <<"Введите значение a:"; cin >> a;
cout <<"Введите значение b:"; cin >> b;
cout <<"Введите значение c:"; cin >> c;
if ((b * b — 4 * a * c) >= 0) {
x1 = (-b + sqrt(b * b — 4 * a * c)) / (2 * a);
x2 = (-b — sqrt(b * b — 4 * a * c)) / (2 * a);
cout <<"Первый корень ="<< x1 << endl;
cout <<"Второй корень ="<< x2 << endl;
} else {
cout <<"Нет решения: дискриминант меньше 0";
}
}
ПРИМЕР ЗАДАЧИ (EX2). Чему равна площадь трапеции, если основания равны, а = 6.5, b = 3.9, а высота h = 4.7?
#include <stdio.h>
int main() {
float a, b, h, s;
printf("Введите значения — a, b, h \n");
scanf("\n%f %f %f", &a, &b, &h);
s = (a + b) * h / 2;
printf("Площадь трапеции");
printf("\ns = %f", s);
}
ПРИМЕР ЗАДАЧИ (EX3). Решить пример.
#include <stdio.h>
#include <math.h>
int main() {
float x, y, a;
printf("Введите исходное значение X \n");
scanf("%f", &x);
a = x + 0.25;
y = a + sin(exp(a)) + sqrt(a / 2.5);
printf("x = %f y = %-f", x, y);
}
ПРИМЕР ЗАДАЧИ. Вычислить значения функций.
#include <stdio.h>
#include <math.h>
int main() {
float a, b, x, y, z;
printf("введите исходные данные a, b, x\n");
scanf("%f%f %f", &a, &b, &x);
y = pow(x, 3) + log(pow(x, 2) + 1.2) + sqrt(abs(x — 3.6));
z = exp(a * y) — sin(b * y — 2.37);
printf("x = %7.3f y=%7.3f z=%7.3f", x, y, z);
}
Приведённый ознакомительный фрагмент книги Лекции по C++ для начинающих предоставлен нашим книжным партнёром — компанией ЛитРес.
Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других