Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.1Линейный процесс.docx
Скачиваний:
1
Добавлен:
23.11.2019
Размер:
53.28 Кб
Скачать

Определение объекта

Перед тем как использовать переменную в C++ надо ее объявить . В самом простом случае оператор определения объекта состоит из спецификатора типа и имени объекта и заканчивается точкой с запятой. Например:

int a ;

Можно объявить несколько переменных одного типа в одной строке:

int a , b, c ;

Можно инициализировать(присвоить значение) переменной при объявлении:

int a, b=1, c=10, d ;

Имя переменной

Имя переменной, или идентификатор, может состоять из латинских букв, цифр и символа подчеркивания. Прописные и строчные буквы в именах различаются. Язык С++ не ограничивает длину идентификатора, однако пользоваться слишком длинными именами типа gosh_this_is_an_impossibly_name_to_type неудобно.

Некоторые слова являются ключевыми в С++ и не могут быть использованы в качестве идентификаторов; ниже приведен их полный список.

Ключевые слова C++

asm

auto

bool

break

case

catch

char

class

const

const_cast

continue

default

delete

do

double

dynamic_cast

else

enum

explicit

export

extern

false

float

for

friend

goto

goto

inline

int

long

mutable

namespace

new

operator

private

protected

public

register

reinterpret_cast

return

short

signed

sizeof

static

static_cast

short short

signed

sizeof

static

static_cast

struct

switch

template

this

throw

typedef

true

try

typeid

typename

union

voidunion

using

virtual

void

Чтобы текст вашей программы был более понятным, следует придерживаться общепринятых соглашений об именах объектов:

  • имя переменной обычно пишется строчными буквами, например index (для сравнения: Index – это имя типа, а INDEX – константа, определенная с помощью директивы препроцессора #define);

  • идентификатор должен нести какой-либо смысл, поясняя назначение объекта в программе, например: birth_date или salary;

если такое имя состоит из нескольких слов, как, например, birth_date, то принято либо разделять слова символом подчеркивания (birth_date), либо писать каждое следующее слово с большой буквы (birthDate). Замечено, что программисты, привыкшие к ОбъектноОриентированномуПодходу предпочитают выделять слова заглавными буквами, в то время как те_кто_много_писал_на_С используют символ подчеркивания. Какой из двух способов лучше – вопрос вкуса.

Исполнение программы начинается с выполнения первой инструкции функции main()

Функция состоит их четырех частей: типа возвращаемого значения, имени, списка параметров и тела функции. Первые три части составляют прототип функции.

Список параметров заключается в круглые скобки и может содержать ноль или более параметров, разделенных запятыми. Тело функции содержит последовательность исполняемых инструкций и ограничено фигурными скобками.

Последней выполняется инструкция

return 0;

Инструкция return обеспечивает механизм завершения работы функции. Если оператор return сопровождается некоторым значением (в данном примере 0), это значение становится возвращаемым значением функции. В нашем примере возвращаемое значение 0 говорит об успешном выполнении функции main(). (Стандарт С++ предусматривает, что функция main() возвращает 0 по умолчанию, если оператор return не использован явно.)

Функции форматного ввода/вывода (scanf/printf) файл stdio.h

Функция вывода printf(),выполняет форматируемый вывод в стандартный поток stdout. (т.е. значения переменных, которые хранятся в памяти в двоичном виде, при выводе в поток (на экран) переводятся в символьный вид, причем вид преобразования задается спецификатором формата. Спецификаторы формата задаются как составная часть обязательного первого аргумента — форматной строки. После форматной строки задается список выражений, значения которых должны выдаваться на экран. В качестве выражений допускается задавать и переменные. Функция возвращает количество выведенных символов. Спецификатор формата начинаются символом % (процент), вслед за которым прописывается код формата. Количество аргументов-переменных должно в точности соответствовать количеству спецификаторов формата. При отсутствии списка переменных функция просто выводит в поток (на экран) форматную строку.

спецификация формата имеет следующий вид:

%[флаг][ширина][.точность][h|l|L]тип\

здесь квадратные скобки означают, что соответствующий элемент спецификации может отсутствовать. В простейшем виде спецификатор формата записывается как

%тип

Тип задается одной буквой, и определяет, в каком виде предстанет значение переменной в потоке (на экране). Так как знак процента % используется как управляющий, то для вывода его в поток надо прописать его в форматной строке дважды %%.

Таблица. Некоторые типы спецификаторов формата

Тип

Вид в потоке

c

Символ

s

Строка символов

d, i

Целое десятичное со знаком

o

Целое восьмеричное

u

Целое десятичное без знака

Х,х

Целое шестнадцатеричное

f

Дробное число в фиксированном формате

e, E

Дробное число в научном формате

g, G

Дробное число в научном или фиксированном формате

p

Указатель (в шестнадцатеричном виде)

Ширина показывает, сколько символов будет выведено в поток. В это число входят все символы: и знак, и десятичная точка для дробных чисел. Если ширина окажется фактически меньше, чем требуется для вывода, то все равно значение выводится полностью. Точность задает количество цифр дробной части и применяется обычно только для дробных чисел.

Перед типом может стоять модификатор типа. Обычно модификаторы применяются к числовым переменным: в этом случае они указывают короткую (h) или длинную (L,l) форму типа. Например, тип %f применяется для вывода значений типа float, %lf — для вывода double, а %Lf — для вывода значений long double.

Модификаторы типа

Модификатор Спецификатор формата

Тип переменной

h i d u o x X

short int

l i d u o x X

long int

l e E f g G

double

L e E f g G

long double

Вместо ширины и точности в спецификаторе формата можно указывать символ * (звездочка). Это позволяет задавать и ширину, и точность как значения целых переменных — это позволяет вычислять ширину поля вывода во время выполнения программы. Рассмотрим простейший пример:

//Переменные ширина и точность

float number = -12.3;

int w = 10, // ширина

p = 4; // точность

printf("%0*.*f\n", w, p, number);

w = 15, p = 5; // новая ширина и точность

printf("%0*.*f\n", w, p, number);

На экране выводятся две строки

-0012.3000

-00000012.30000

Переменные, в которых указаны ширина и точность, должны задаваться первыми в списке аргументов после форматной строки, иначе программа просто зацикливается.

В связи с возможностью задавать переменную ширину поля часто бывает необходимо знать количество символов, выведенных в поток после последнего освобождения буфера. И эту величину можно получить с помощью спецификатора %n. В списке аргументов после форматной строки задается адрес целой переменной, куда и заносится количество выведенных в поток символов. Например.

w = 15, p = 5; // новая ширина и точность

int kk = 0;

printf("%0*.*f%n\n", w, p, number, &kk); // вычисление количества

printf("%d\n", kk); // выводит 15

В переменную kk, адрес которой задан в списке аргументов, помещается количество символов, выведенных в поток с момента последнего освобождения буфера, в данном случае 15.

А теперь про ввод

Функция scanf() выполняет форматируемый ввод из стандартного потока stdin в переменные программы. Так как stdin "привязан" к клавиатуре, то при вводе, очевидно, выполняется преобразование из символьного вида во внутренний двоичный формат. Первым параметром тоже является форматная строка, за которой следует список адресов переменных, куда требуется поместить задаваемые значения.

Символы в форматной строке делятся на три вида: спецификаторы формата, разделители и прочие. К разделителям относятся пробел, табуляция ('\t') и символ конца строки ('\n'). Спецификаторы формата — такие же, как и для функции printf().

В общем виде спецификатор формата имеет следующую форму:

%[ширина][h/l/L]тип, квадратные скобки означают, что этот элемент спецификатора может отсутствовать. По сравнению со спецификатором формата для вывода только символ *(звездочка) имеет другой смысл: если она указана, то запись значения в соответствующую переменную не происходит. Например, можно определить ввод двух значений в две числовых переменных, разделяя их при вводе любым символом

double a,b;

scanf("%lf%*c%lf",&a,&b);

В этом случае мы можем задавать ввод и так

1б2

и так

1,2

и так

1-2

Во всех случаях в переменную a попадет значение 1, а в переменную b — значение 2.

ПРИМЕЧАНИЕ

Ввод строк выполняется обычно другими, более подходящими функциями, например, fgets(), которую мы далее рассмотрим. При этом, естественно, речь идет о символьных массивах, а не о переменных типа string.

char ss [80] = {0}; // объявление символьного массива

scanf("%s",ss); // имя ss пишется без амперсанта!

Если мы попробуем ввести последовательность символов "1234 567", то в массив ss попадет только "1234". Кроме того, обратите внимание, что имя массива нужно прописывать без амперсанта — это единственное исключение из общего правила!

При вводе данных посредством scanf() надо совершенно жестко придерживаться формата ввода. Например, при вводе нескольких значений можно разделять их символами пунктуации (запятая, точка с запятой, двоеточие). Эти символы должны быть прописаны и в форматной строке, например

char c1,c2,c3;

double d1, d2, d3;

scanf("%c,%c,%c",&c1,&c2, &c3); // ввод трех символов

scanf("%lf,%lf,%lf",&d1,&d2, &d3); // ввод трех чисел

При вводе надо так и набирать на клавиатуре

а,б,в<Enter> // ввод трех символов

1,2,3<Enter> // ввод трех чисел

Математические операции

Знак

Математическая операция

*

Умножение

/ (всегда означает деление. Однако если с обеих сторон от этого знака стоят целые величины (константы, переменные или их комбинации), он означает целочисленное деление. Если в результате такого деления получается остаток, С++ его отбрасывает.)

Деление и целочисленное деление нацело

% (означает выделение остатка при целочисленном делении. Эта операция требует, чтобы с обеих сторон от ее знака стояли целые величины.)

Деление по модулю и остаток от деления

+

Сложение

-

Вычитание

Примеры.

cout << 10/2 << "\n>> // 5 (остатка нет)

cout << 300/100 << "\n"; // 3 (остатка нет)

cout << 10/3 << "\n"; // 3 (остаток отброшен)

cout << 300/165 << "\n>> // 1 (остаток отброшен)

cout << 10%3 << "\n>; // 1 (остаток)

cout << 20/4 "\n"; // 0 (остатка нет)

Присваивание

В одной строке может стоять больше одной операции присваивания =.

Пример. a=b=c=d=100;

Знак = всегда означает: "переменной слева присвоить значение, стоящее справа ". Операция выполняется справа налево. Поэтому первой значение 100 получает переменная d, затем с, b и а.

Знак присвоить может стоять даже внутри математического выражения: value=5+(r=9-c)

Присваивание имеет более высокий приоритет, чем сложение и вычитание. Поэтому сначала переменной r будет присвоено значение 9-с. А затем переменная value получит значение 5+9-с.

Составное присваивание

Операция

Пример

Эквивалент

+ =

B+ = 500;

B= b+ 500;

- =

С- = 50;

C = с - 50;

* =

D* = 1.2;

D = d*1.2;

/ =

F/ = 50;

f = f/.50;

% =

m% = 7;

M = m% 7;

Математические функции

Функция

Значение

abs (n)

Абсолютное значение n

sqrt (n)

Квадратный корень из n

exp(n)

Экспонента n

random [VI 9] (n)

Случайное целое число в диапазоне от 0 до п-1 (перед первым обращением к функции необходимо вызвать функцию randomize (), которая выполнит инициализацию программного генератора случайных чисел)

sin (a)

Синус выраженного в радианах угла а

cos (a)

Косинус выраженного в радианах угла а

tan (a)

Тангенс выраженного в радианах угла а

asin(n)

Угол (в радианах), синус которого равен n

acos (n)

Угол (в радианах), косинус которого равен n

atan(n)

Угол (в радианах), тангенс которого равен n

Обратите внимание: для того чтобы в программе были доступны приведенные функции, в ее текст надо включить директиву #include <math.n>.

Величина угла тригонометрических функций должна быть выражена в радианах. Для преобразования величины угла из градусов в радианы используется формула (а -3.1415256) / 180, где а— величина угла в градусах; 3.1415926— число "пи". Вместо константы 3.1415926 можно использовать стандартную именованную константу M_PI. Константа M_PI определена в файле math.h.

Пример

Пример1: Определить расстояние на плоскости между двумя точками с заданными координатами M1(x1,y1) и M2(x2,y2)

Этапы решения задачи:

  1. Математическая модель: расстояние на плоскости между двумя точками M1(x1,y1) и M2(x2,y2) высчитывается по формуле

  2. Составим схему алгоритма

У точним содержимое блока с "Вычисление и печать расстояния"

Дальнейшая детализация не требуется. Переводим блок-схему на язык C.

#include<stdio.h>

#include<conio.h>

#include<math.h>

int main ()

{float d,x1,x2,y1,y2;

clrscr();

scanf(“%f%f%f%f”,&x1,&x2,&y1,&y2);

d=sqrt((pow((x2-x1),2)+ pow((y2-y1),2))));

printf(“rastoyanie mejdu 2 tochkami=%f”,d);

getch();

return 0;

}

Контрольные вопросы:

  1. Каковы назначение и возможности системы Borland C?

  2. Как запустить программу на трансляцию и выполнение?

  3. Как записываются операторы начала и конца программы?

  4. Из каких разделов состоит программа на языке C?

  5. В какой последовательности должны быть записаны разделы программы на языке C?

  6. Как записываются операторы вывода на экран в C?

Задачи:

  1. Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.

  2. Три сопротивления R1, R2, R3 соединены параллельно. Найти сопротивление соединения.

  3. Определить время падения камня на поверхность земли с высоты h.

  4. Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.

  5. Треугольник задан координатами своих вершин. Найти:

    • периметр треугольника;

    • площадь треугольника.

  6. Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.

  7. Вычислить объем цилиндра с радиусом основания r и высотой h.

  8. Определить расстояние, пройденное физическим телом за время t, если тело движется с постоянным ускорением а и имеет в начальный момент времени скорость V0

  9. Вычислить площадь треугольника по формуле Герона, если заданы его стороны.

  10. Определить координаты вершины параболы y=ax2+bx+c (a№0). Коэффициенты a,b,c заданы.

  11. По данным сторонам прямоугольника вычислить его периметр, площадь и длину диагонали.

Задачи повышенной сложности

  1. Студент начал решать задачи данного урока программирования, когда электронные часы показывали h1 часов и min1 минут, а закончил, когда было h2 часов и min2 минут. Составьте программу, позволяющую определить, сколько времени студент решал эти задачи. (Будем считать, что задачи решались не дольше суток.)

  2. Дано действительное число а. Не пользуясь никакими другими операциями, кроме умножения, получить: а) а4 за две операции; б) а6 за три операции; в) а7 за четыре операции; г) а8 за три операции; д) а9 за четыре операции; е) а10 за четыре операции; ж) а13 за пять операций; з) а15 за пять операций; и) а21 за шесть операций; к) а28 за шесть операций; л) а64 за шесть операций;

  3. Найти максимум и минимум двух натуральных чисел не используя ветвления алгоритма.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]