Запись самоопределенных констант

Запись самоопределенных констант

Тип данных Общий формат записи Примеры
Десятичные целые ±n 22 –15 176 –1925
Вещественные с фиксированной десятичной точкой ±n.m 1.0 –3.125 –0.001
Вещественные с плавающей точкой ±n.mE±p смысл записи ±n,m×10±p 1.01E–10 0.12537е+4
Символьные ' *' 'A' 'х' '0' '<'
Строковые “ ****** ” “Minsk” “Press any key”

В таблице *– любой символ, набранный на клавиатуре.

Стандартные функции вывода информации

Для вывода информации в консольном приложении чаще всего используются следующие функции:

puts(S)– вывод строки символовSс переходом на начало новой строки и вывод данных с форматированием;

рrintf(управляющая строка,список объектов вывода);

управляющая строка – заключенная в кавычки строка, содержащая спецификации преобразования объектов вывода, управляющие символы (признак «\») и любой набор символов, использующийся в качестве поясняющего текста – указывает компилятору вид выводимой информации;

список объектов вывода– печатаемые объекты (константы, переменные или выражения, вычисляемые перед выводом). Данные, указанные в списке выводятся в соответствии со спецификациями управляющей строки.

Спецификации преобразования имеют вид

%<флаг> <размер поля. точность>спецификация

флаг:–(минус) выравнивание влево (по умолчанию выполняется выравнивание вправо);+(плюс) выводится знак положительного числа;

размер поля– задает ширину поля вывода (количество символов), при недостаточном значении выполняется автоматическое расширение;

точность– задает количество цифр в дробной части числа;

спецификация– формат преобразования выводимого объекта.

Приведем основные форматы печати:

%d – десятичные целые (int); %c – один символ (char);

%s – строка символов (string); %f – данные типаfloat;

%ℓd – длинное целое; %ℓf – данные типа double;

%x– шестнадцатеричные данные; %o– восьмеричные данные.

При необходимости вывода управляющих символов ( %\и т.п.) их нужно указать 2 раза, например:

printf("Только %d%% предприятий не работало. \n",5);

получим:

Только 5% предприятий не работало.

Управляющие символы: \n– переход на новую строку;\t– горизонтальная;\v– вертикальная табуляция;\b– возврат назад на один символ;\r– возврат в начало строки;\a– звуковой сигнал;\f– прогон бумаги до начала новой страницы;\?– знак вопроса.

Стандартные функции ввода информации

Функция gets (S)обеспечивает ввод строки символовSдо нажатия клавишиEnter, т.е. позволяет ввести строку, содержащую пробелы.

Для форматированного ввода информации любого вида предназначена функция

scanf(управляющая строка,список адресов объектов ввода);

в управляющей строкекоторой указываются только спецификации преобразований, а всписке объектов ввода–адресавводимых скалярных перемен­ных, для чего передIDпеременной указывается операция &, обозначающая «взять адрес». Для ввода значений строковых (составных) переменных символ & не указывается. При использовании формата %sстрока вводится до первого пробела.

Примерввода данныхint а,double b, иchar str[20]:

scanf ( "%d %ℓf %s", &a, &b, str);

Вводить данные можно как в одной строке через пробел, так и в разных строках.

Задание №3,№4,№5 Реализация разветвляющихся алгоритмов

Цель работы:изучить операции сравнения, логические операции, операторы передачи управленияif,switch,break. Написать и отладить программу с разветвлениями.

Теоретические сведения

Оператор выбора switch

Общая форма оператора выбора (переключателя):

switch(выражение){

caseconst_1: операторы; break;

caseconst_N: операторы;break;

default:операторы;

}

Вычисляется выражениеи проверяется, совпадает ли его результат со значением одной из констант. При совпадении выполняются операторы этого case. Значениями const_1,…,const_N могут быть только целые или символьные константы. Конструкция default выполняется, если результат выражения не совпал ни с одной из констант, и может отсутствовать. Оператор break выполняет досрочный выход из switch (после выполнения ветви case все остальные будут опущены). Если оператор break в case не записан, то будут выполняться операторы следующих ветвей case до появления оператора break, либо до завершения оператора switch.

Например:

switсh(i) {

case 1: f=pow(x,2); break;

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

default: printf(“Ошибка!”); exit(1);

}

f=f+5;

Пример выполнения задания

Ввести значения исходных данных x,yиz. Вычислить значение функции

Запись самоопределенных констант - student2.ru Запись самоопределенных констант - student2.ru

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

Текст программы может иметь седующий вид (в комментариях указаны действия по вводу-выводу в потоках, набираемые вместо записанных):

#include <conio.h> // #include <iostream.h>

#include <stdio.h>

#include <math.h>

void main()

{

double x, y, z, u;

puts("Input x, y, z"); // cout << "Input x, y, z" << endl;

scanf("%lf%lf%lf",&x, &y, &z); // cin >> x >> y >> z;

if (x*y > z){

u = x*sin(y);

puts(" x*y > z"); // cout << " x*y > z" << endl;

}

else {

u = y*cos(x);

puts(" x*y <= z"); // cout << " x*y <= z" << endl;

}

printf("\n\t Rezult U = %8.6lf", u); // cout << "\n\t Rezult U = " << u;

puts("\nPress any key ... "); // cout <<"\nPress any key ... " << endl;

getch();

}

Результаты выполнения программы для различных исходных данных, вводимых в одной строке, разделяя их пробелами, могут иметь следующий вид:

1 вариант введенные значения соответсвуют первому условию:

Запись самоопределенных констант - student2.ru

2 вариант введенные значения соответсвуют второму условию:

Запись самоопределенных констант - student2.ru

Задание №6. Реализация циклических алгоритмов

Цель работы:изучить циклические операторы while,do-while,for, научиться реализовывать циклические алгоритмы. Составить и отладить программу.

Теоретические сведения

Под циклом понимается многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений может быть задано в явной или неявной формах. Для организации повторений в языке C++ используются три различных оператора цикла.

1. Оператор цикла с предусловием

while (выражение)

код цикла

организует повторение операторов кода цикладо тех пор, покавыражениеистинно (не равно 0), если выражение = 0 (ложно) при первом входе, то код цикла не выполнится ни разу. Если код цикла состоит более чем из одного оператора, то организуетсяблок.

2. Оператор цикла с постусловием

do

код цикла

while (выражение);

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

3. Оператор с предусловием и коррекцией

for (выражение 1;выражение 2;выражение 3)

код цикла

где выражение 1– начальное значение параметра цикла;выражение2– проверка условия на продолжение цикла;выражение3– изменение (коррекция) параметра цикла.

Вначале вычисляется выражение 1, затем проверяетсявыражение 2, если оно – истинно, то выполня­ет­ся код цикла, затем производится коррекция ввыражении3, и так до тех пор, покавыражение2 не примет значение «ложь».

Досрочный выход из операторов цикла выполняет оператор break, а операторcontinueвыполняет передачу управления в головной оператор цикла.

Пример выполнения задания

Написать и отладить программу вывода всех значений функции S(x) для аргументах, изменяющегося в интервале от а до b c шагом h и заданном n.

Запись самоопределенных констант - student2.ru .

Текст программы предложенного задания может иметь следующий вид (в комментариях указаны действия по вводу-выводу в потоках, набираемые вместо записанных):

#include <stdio.h> // include <iostream.h>

#include <conio.h>

void main()

{

double a, b, x, h, r, s;

int n, zn = -1, k;

puts("Input a,b,h,n"); // cout << "Input a,b,h,n" << endl;

scanf("%lf%lf%lf%d", &a, &b, &h, &n); // cin >> a >> b >> h >> n;

for(x = a; x<=b; x+=h) {

r= s=1;

for(k = 1; k<=n; k++) {

r=zn*r*x/k;

s+=r;

}

printf("\n x= %8.2lf sum= %8.5lf", x,s);

// cout << "\n x= " << x << " sum= " << s;

}

puts("\nPress any key ... "); // cout << "\nPress any key ... " << endl;

getch();

}

Результат программы с введенными в одной строке значениями a=0.1,b=1.0,h=0.2 иn=10, будет иметь следующий вид:

Запись самоопределенных констант - student2.ru

Задание №7. Обработка массивов

Цель работы: изучить составной тип данных – массив. Написать и отладить программу с использованием массивов.

Теоретические сведения

Массив – конечная последовательность данных одного типа. Массив – объект сложного типа, каждый элемент которого определяется именем (ID) и целочисленным значением индекса (номера), по которому к элементу массива производится доступ. Рассмотрим одномерные массивы.

Внимание!Индексы массивов в языке С/С++ начинаются с 0.

В программе одномерный массив декларируется следующим образом:

типID массива[размер];

где размер– указывает количество элементов в массиве. Размер массива может задаваться константой или константным выражением. Для использования массивов переменного размера существует отдельный механизм – динамическое выделение памяти.

Примеры декларации массивов:

int a[5];

doubleb[4] = {1.5, 2.5, 3.75};

в целочисленном массиве апервый элемента[0], второй –а[1], …, пятый –а[4]. Для массиваb, состоящего из действительных чисел, выполнена инициализация, причем элементы массива получат следующие значения:b[0]=1.5,b[1]=2.5,b[2]=3.75,b[3]=0.

В языке С/С++ не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

Примеры описания массивов:

const Nmax=10; – задание максимального значения;

typedefdoublemas1[Nmax*2]; – описание типа одномерного массива;

mas1a; – декларация массиваатипаmas1;

intss[10]; – массив из десяти целых чисел.

Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:

f = 2*a[3] + a[Ss[i] + 1]*3;

a[n] = 1 + sqrt(fabs(a[n–1]));

Пример выполнения задания

В статическом массиве А размеромN(не более 20), состоящем из целых чисел найти количество четных чисел и их сумму. Размер массива и его элементы вводятся с клавиатуры.

Текст программы с использованием ввода-вывода в потоках может иметь следующий вид:

#include <iostream.h>

#include <conio.h>

void main()

{

int a[20], n, i, kol = 0, s = 0;

cout << "\t Input N (<=20) ";

cin >> n;

cout <<"\n\t Massiv A" << endl;

for(i=0; i<n;i++) {

cout << "\t a[ " << i+1 << " ] = ";

cin >> a[i];

}

for(i=0; i<n;i++)

if(a[i] % 2 ==0){

kol++;

s += a[i];

}

cout << "\n Kol-vo = " << kol << "\t Summa = " << s << endl;

cout << "\n Press any key ... " << endl;

getch();

}

Результат выполнения программы может иметь следующий вид:

Запись самоопределенных констант - student2.ru

Теоретические сведения

Указатели на указатели

Связь указателей и массивов с одним измерением справедливо и для массивов с бóльшим числом измерений.

Если рассматривать предыдущий массив (inta[2][3];) как массив двух массивов размерностью по три элемента каждый, то обращение к элементуа[i][j] соответствует эквива­лентное выражение *(*(а+i)+j), а объявление этого массива с использованием указателей будет иметь вид

int**а;

Таким образом, имя двухмерного массива – ID указателя на указатель.

Функции пользователя

Подпрограмма– это именованная и определенным образом оформленная группа операторов, вызываемая по мере необходимости.

В языке С++ в качестве подпрограмм используют функции, которые должны быть декларированы до их первого использования. Предварительное описание функции называется прототипом, который обычно размещается в начале программы (*.cpp) либо в заголовочном файле (*.h) и сообщает компилятору о том, что далее в программе будет приведен ее полный текст, т.е.реализация.

Описание прототипа имеет следующий вид:

тип_результата ID_функции (список типов параметров);

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

тип_результата ID_функции (список параметров)

{

код функции

returnрезультат;

}

Результат возвращается из функции в точку вызова при помощи оператора returnи преобразуется к типу, указанному в заголовке функции. Если тип функции не указан, то по умолчанию устанавливается тип int, если же функция не возвращает результата, то следует указать пустой тип void. Список параметров состоит из перечня типов и ID параметров, разделенных запятыми.

Из функции можно передать только одно значение, при необходимости возвратить несколько – в списке параметров используют указатели.

Пример реализации функции, определяющей наименьшее из двух целых чисел:

int Min_x_y(int x, int y) {

return (x<y) ? x : y;

}

Вызов функции имеет следующий формат:

ID_функции (список аргументов);

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

Вызов предыдущей функции может иметь вид: min=Min_x_y(a,b);

Область действия переменных

Область действия переменной – это правила, которые устанавливают, какие данные доступны из текущего места программы, и определяют переменные двух типов: глобальные и локальные.

Глобальные переменные объявляются вне какой-либо функции и могут быть использованы в любом месте программы, но перед их первым использованием они должны быть объявлены и инициализированы. Область действия глобальных переменных – вся программа с момента их объявления. При объявлении глобальные переменные обнуляются.

Область действия локальных переменных – это блоки, где они объявлены. К локальным относятся и формальные параметры в заголовке функций пользователя с областью действия – кодом функции. При выходе из блока значения локальных переменных теряются.

В языке С каждая переменная принадлежит одному из четырех классов памяти – автоматической (auto), внешней (extern), статической (static) и регистровой (register). Тип памяти указывается перед спецификацией типа, например,register int a; или static double b; По умолчанию устанавливается класс auto и переменные размещаются в стеке.

Пример выполнения задания

В целочисленном двухмерном динамическом массиве (матрице) размером N´М найти сумму четных элементов и их количество. Ввод исходных данных (размеры массива и его элементы) и вывод результатов выполнить в основной функции. Решение поставленной задачи оформить в функции пользователя.

Текст программы может иметь следующий вид:

#include <iostream.h>

#include <conio.h>

int Fun_Sum_Kol(int, int, int**, int*); // Описание прототипа функции

void main()

{

int **a, i, j, n, m, sum, kol;

cout << "\t Input N, M : ";

cin >> n >> m;

a=newint*[n]; // Захват памяти под указатели

for(i=0; i<n;i++)

a[i] = new int[m]; // Захват памяти под элементы

cout <<"\n Input A" << endl;

for(i=0; i<n; i++)

for(j=0; j<m; j++){

cout << "\t a[" << i+1 << "][" << j+1 << "] = ";

cin >> a[i][j];

}

cout <<"\n Matrix A:" << endl;

for(i=0; i<n; i++) {

for(j=0; j<m; j++)

cout << "\t" << a[i][j];

cout << endl;

}

// Обращение к функции с указанием фактических аргументов

sum = Fun_Sum_Kol(n, m, a, &kol);

cout << "\n Kol-vo = " << kol << "\t Summa = " << sum << endl;

delete []a; // Освобождение памяти

cout << "\n\t Delete !" << endl;

cout << " Press any key ... " << endl;

getch();

}

/* Реализация описанной выше функции, в заголовке которой указаны формальные параметры, идентификаторы которых обрабатываются в ее коде */

int Fun_Sum_Kol(int a, int b, int **x, int *k)

{

int i, j, s = 0;

*k = 0;

for(i=0; i<a;i++)

for(j=0; j<b;j++)

if(x[i][j] % 2 ==0){

(*k)++;// Скобки обязательны

s += x[i][j];

}

returns;

}

Обратите внимание на то, что из функции мы должны получить два скалярных результата – посчитанные сумму и количество четных чисел. С помощью оператора return мы возвращаем первое значение (сумму), а второе значение мы передаем в точку вызова с помощью указателя (адреса): при обращении к функции в качестве четвертого параметра передаем адрес &kol, а в функции используем «содержимое, находящееся по указанному адресу» *k( * – операция разадресации).

При вводе значений элементов массивов в одной строке через пробелы должен получиться следующий результат:

Запись самоопределенных констант - student2.ru

Запись самоопределенных констант

Тип данных Общий формат записи Примеры
Десятичные целые ±n 22 –15 176 –1925
Вещественные с фиксированной десятичной точкой ±n.m 1.0 –3.125 –0.001
Вещественные с плавающей точкой ±n.mE±p смысл записи ±n,m×10±p 1.01E–10 0.12537е+4
Символьные ' *' 'A' 'х' '0' '<'
Строковые “ ****** ” “Minsk” “Press any key”

В таблице *– любой символ, набранный на клавиатуре.

Наши рекомендации