- •Литература
- •1. Базовые средства языка
- •Алфавит языка
- •1.5. Типы данных Си
- •1.5.4. Логический тип
- •1.8. Операции и выражения
- •Операции присваивания
- •Арифметические операции
- •Логические операции
- •1.10. Структура программы
- •1.11. Ввод и вывод данных
- •Функции ввода- вывода
- •1.12. Объектно-ориентированные средства ввода-вывода.
- •2. Операторы управления
- •2.1. Понятие алгоритма
- •2.2. Изображение алгоритма в виде блок-схемы
1.12. Объектно-ориентированные средства ввода-вывода.
Описание объектов для управления вводом-выводом содержится в заголовочном файле iostream.h.
При подключении этого файла с помощью директивы
#include <iostream.h>
в программе автоматически создаются объекты-потоки3
cin для ввода с клавиатуры,
cout для вывода на экран,
а так же операции
помещения в поток <<,
чтения из потока >>.
С помощью объекта cin и операции >> можно присвоить значение любой переменной.
Например, если переменная i описана как целочисленная, то команда
cin>>i;
означает, что в переменную i будет записано некое целое число, введенное с клавиатуры.
Если нужно ввести несколько переменных, следует написать
cin>>x>>y>>z;.
Объект cout и операция << позволяют вывести на экран значение любой переменной или текст.
Текст необходимо заключать в двойные кавычки.
Допустимо применение специальных символов
\t - табуляция
\n – перевод на новую строку.
Запись cout<<i; означает вывод на экран значения переменной i.
Команда
cout<<x<<”\t”<<y;
выведет на экран значения переменных x и y разделенные символом табуляции.
ЗАДАЧА 2. Известны плотность , высота h и радиус основания R цилиндрического слитка, полученного в металлургической лаборатории. Найти объем V, массу m и площадь S основания слитка.
Входные данные: , h, R.
Выходные данные: S, V, m.
Учитывая, что S=2R, V=R2h и m=V составим текст программы:
#include "stdafx.h"
#include <iostream.h>
//Опред. константы
#define pi 3.14159
int main()
{
double R,h,r,S,V,m;
cout<<"R=";
cin>>R;
cout<<"h=";
cin>>h;
cout<<"r=";
cin>>r;
S=2*pi*R;
V=pi*R*R*h;
m=r*V;
cout<<"S="<<S;
cout<<"\n V="<<V;
cout<<"\n m="<<m;
}
2. Операторы управления
Решение любой задачи на ЭВМ разбивают на следующие этапы:
разработка алгоритма;
составление программы на алгоритмическом языке;
ввод программы в ЭВМ;
отладка программы;
выполнение программы;
анализ результатов.
2.1. Понятие алгоритма
Алгоритм – четкое описание последовательности действий, которые необходимо выполнить при решении задачи (иначе, алгоритм – описание процесса преобразования исходных данных в результаты).
Разработка алгоритма решения задачи – это разбиение задачи на последовательно выполняемые этапы.
Способы представления алгоритмов:
на естественном языке;
в виде блок-схемы;
2.2. Изображение алгоритма в виде блок-схемы
Блок-схемой называется наглядное графическое изображение алгоритма.
В блок-схеме отдельные этапы алгоритма изображают при помощи различных геометрических фигур – блоков.
Последовательность выполнения этапов указываются при помощи стрелок, соединяющих эти фигуры. Блоки сопровождаются надписями.
Типичные действия алгоритма изображаются следующими геометрическими фигурами:
Блок начала (конца) алгоритма
Надпись: «начало» («конец»).
Блок ввода-вывода данных
Надпись: «ввод» («вывод»)
и список переменных вводимых (выводимых).
Блок решения (арифметический)
Надпись: операция или группа операций.
Условный блок
Надпись: логическое условие.
2.3. Составной оператор
Это группа операторов, отделенных друг от друга точкой с запятой, начинающихся с открывающей фигурной скобки { и заканчивающихся закрывающейся фигурной скобкой }.
{
оператор_1;
...
оператор_n
}
Транслятор воспринимает составной оператор как один оператор.
2.4. Операторы ветвления
Алгоритмы разветвленной структуры применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.
Условный оператор, соответствующий приведенной блок-схеме, имеет вид:
if (выражение) оператор_1;
else оператор_2;
Вычисляется выражение. Если оно не равно нулю, т.е. имеет значение true, выполняется оператор_1, в противном случае (выражение равно нулю, т.е. false) – оператор_2.
Если в зависимости от некоторого условия выполняется некоторое действие, а в противном случае ничего не происходит, то алгоритм имет вид:
Условный оператор в этом случае имет конструкцию:
if (выражение) оператор;
Эту запись можно назвать «пропуск оператора else».
Здесь оператор либо выполняется, либо пропускается, в зависимости от значения выражения.
Если в какой-либо ветви условного процесса требуется выполнить несколько операторов, следует использовать составной оператор.
2.5. Примеры программ
Задача 2. Известны коэффициенты а, b и с квадратного уравнения ax2+bx+c=0. Вычислить корни квадратного уравнения.
Входные данные: a, b, c.
Выходные данные: х1, х2.
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,d,x1,x2;
printf("\n vvedite a \n");
scanf("%f",&a);
printf("\n vvedite b \n");
scanf("%f",&b);
printf("\n vvedite c \n");
scanf("%f",&c);
d=b*b-4*a*c;
if (d<0) printf("reshenij net \n");
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/2/a;
printf("x1=%f \n", x1);
printf("x2=%f \n", x2);
}
}
Задача 2. Решить ax4+bx2+c=0 биквадратное уравнение (y=x2).
Дано: a,b,c.
Найти: х1, х2, х3, х4.
Алгоритм:
1. Вычисление дискриминанта уравнения d.
2. Если d 0, определяются y1 и y2, а иначе корней нет.
3. Если y1, y2 < 0 , то корней нет.
4. Если y1, y2 0 , то вычисляются четыре корня по формулами выводятся значения корней.
5. Если условия 3) и 4) не выполняются, то необходимо проверить знак y1. Если y10, то вычисляются два корня по формуле . Если жеy20, то вычисляются два корня по формуле . Вычисленные значения корней выводятся.
#include <iostream.h>
#include <math.h>
void main()
{
float a,b,c,d,y1,y2,x1,x2,x3,x4;
cout<<"\n a="; cin>>a;
cout<<"\n b="; cin>>b;
cout<<"\n c="; cin>>c;
d=b*b-4*a*c;
if (d<0) cout<<"resh.net"<<endl;
else
{
y1=(-b+sqrt(d))/2/a;
y2=(-b-sqrt(d))/2/a;
if (y1<0 && y2<0)
cout<<"resh.net"<<endl;
else
if (y1>=0 && y2>=0)
{
x1=sqrt(y1); x2=-x1;
x3=sqrt(y2); x4=-sqrt(y2);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"x3="<<x3<<endl;
cout<<"x4="<<x4<<endl;
}
else
if (y1>=0)
{
x1=sqrt(y1); x2=-x1;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
}
else
{
x1=sqrt(y2); x2=-x1;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
}
}
}
Задача 3. Решить кубическое уравнение:
(1)
После деления на a уравнение (1) принимает канонический вид:
(2)
где ,,.
В уравнении (2) сделаем замену и получим приведенное уравнение (3)
, (3)
Где ,.
Число действительных корней приведенного уравнения (3) зависит от знака дискриминанта :
Количество корней кубического уравнения
Дискриминант |
Кол-во действительных корней |
D≥0 |
1 |
D<0 |
3 |
При положительном дискриминанте кубического уравнения (3) действительный корень вычисляется по формулам:
(4)
где .
При отрицательном дискриминанте уравнение (3) имеет 3 действительных корня:
, (5)
Где ,.
После расчета корней приведенного уравнения (3) по формулам (4) или (5) необходимо перейти к корням заданного кубического уравнения (1):
1Текстовые файлы, в которых содержится описание используемых в программе элементов.
2Служат для уточнения внутреннего представления и диапазона значений стандартных типов
3Поток – виртуальный канал связи, создаваемый в программе для передачи данных