12 cтепень равна 000.00 2.44e-04 0.000244

-13 cтепень равна 000.00 1.22e-04 0.000122

-14 cтепень равна 000.00 6.10e-05 6.1e-05

-15 cтепень равна 000.00 3.05e-05 3.05e-05

Здесь каждое вычисленное значение выводится с новой строки. Мы знаем, что для перевода курсора на следующую строку на экран следует вывести символ с кодом 10, а для перемещения в начало строки – символ с кодом 13. Но у этих символов нет изображения, которое можно вставить текстовым редактором в выводимую строку. Если мы напишем printf(“10строка”), то в начале строки будут два символа ‘1’,’0’с кодами 49 и 48, а не символ перевода строки с кодом 10. Для включения в строку специальных символов в С++ используют букву, перед которой записан знак \. Например, \n понимается компилятором, как символ с кодом 10, \r – символ с кодом 13, \а – символ с кодом 7 (звонок) и т.д. Чтобы включить в строку знак \, его приходится записать дважды \\. Из-за этого путь к файлу filename.dat, который находится в каталоге ABC, на языках С, С++ приходилось задавать так:

C:\\ABC\\filename.dat.

Таким образом, знак \n в программе вывода значений степени – это символ перевода строки.

Оператор вывода printf("\n -%d cтепень равна %06.2f %6.2e %-6.3g ",i-1,s,s,s); содержит очень много букв, поэтому он записан в две строки.

printf("\n -%d cтепень

равна %06.2f %6.2e %-6.3g ",i-1,s,s,s);

Для перехода в редакторе текста на новую строку мы нажимаем клавишу Enter, у нее тоже есть код, который вставляется в строку после слова «степень». Но этого кода не должно быть в строке, выводимой во время работы программы. Чтобы компилятор выбросил из строки код клавиши Enter, мы вводим \, а потом нажимаем Enter. (То есть, сочетание \<Enter > включает код перевода строки в исходный текст, но подавляет его в компилированной строке).

Вычисленная степень s выводится на экран три раза. Все три спецификации %f %g предназначены для вывода вещественных чисел:

%f предписывает выводить число без множителя 10n с шестью знаками после десятичной точки, последняя цифра округляется;

%e предписывает всегда выводить число в экспоненциальной форме (c множителем 10n);

%g сохраняет не больше шести значащих цифр результата (в %f шесть цифр только в дробной части, а здесь всего шесть, включая целую и дробную часть, но значащих цифр). Для очень маленького числа запишутся нули, а потом 6 цифр. Кроме того, в данном формате автоматически из двух вариантов представления числа – экспоненциального и с десятичной точкой, автоматически выбирается тот, который запишется короче.

В нашем примере после знака % перед буквой записаны цифры:

%6.2f означает, что на число (включая точку) отведено шесть позиций, из них две после точки. Если перед первым числом написать 0, %06.2f, в незаполненные старшие разряды запишутся нули (как в нашем примере);

%6.3g означает, что числу отводится не менее шести знакомест, но от числа сохраняется не более трех значащих цифр. На примере распечатки мы не видим, что числу отведено шесть позиций, потому что столбец последний и число выравнивается не по правому, а по левому краю области печати. Указание выравнивать число по левому краю дано знаком минус в спецификации %-6.3g.


Лекция 4. Работа с массивами

 

1. Одномерные массивы

Массив, это совокупность однотипных элементов, объединенных общим именем.

Например, десять целых чисел, объединенных именем Mas, объявляются следующим образом:

int Mas[10];То же, что на Паскале Mas: array [0..9] of integer;.

В объявлении записывают тип элементов, имя массива и, в квадратных скобках, количество элементов.

Элементами массивов могут быть не только числа. Можно например, объявить массив, состоящий из массивов. Нельзя объявлять массивы, элементами которых являются функции или данные типа void.

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

Объявление массива можно совместить с его инициализацией, перечислив значения элементов в фигурных скобках:

int A[5] ={2,-3, 0,0,7};

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

printf(“%d”,A[0]);

выведет на экран первый элемент, число 2, а оператор

printf(“%d”,A[4]);

выведет последний элемент, число 7. Элемента A[5] в массиве A нет.

При инициализации массивов язык Си позволяет большую свободу, чем Паскаль. В частности, не обязательно перечислять значения всех элементов. В объявлении

float M1[10]={4, 2.5, 0.3}; семь последних элементов автоматически заполнятся нулями. Самостоятельно проверьте, можно ли пропускать элементы, если они не последние, например, разделяя отсутствующие элементы запятыми:

float M2[10]={4, 2.5,0.3,,0,,,,20.3};.

Если при инициализации перечислены все элементы - можно не указывать размер массива: ar[]={2,7,9,3,1};. Заметим, что размер массива можно не указывать также если массив объявлен, как параметр функции или если объявляется ссылка на массив, определенный в другом файле. Пусть, например, наш проект состоит из двух файлов (A.cpp, B.cpp). Если A.cpp мы объявили массив float M1[10], то в B.cpp для работы с этим массивом можно записать строку

extern float M1[];,

которая указывает, что массив внешний – объявление массива сделано в другом файле. При необходимости можно указать и размер массива extern float M1[10], но инициализацию при ссылке на внешний массив (как и на любую внешнюю переменную) повторять нельзя.

Рассмотрим в качестве примера решение следующей задачи:

– объявить массив из пяти целых чисел;

– заполнить элементы массива данными, вводимыми с клавиатуры;

–вывести элементы массива на экран;

найти сумму положительных элементов и вывести ее на экран.

#include <stdio.h>

#include <conio.h>

int ar[5];

void main(void)

{ clrscr();

printf("Enter five numbers");//Это я по словарю привыкаю к английским словам

for(int i=0;i<5;i++) scanf("%d",&ar[i]); //Объявленная здесь переменная i видна и дальше.

float Sum=ar[0];

for(i=1;i<5;i++) if(ar[i]>0) Sum=Sum+ ar[i];

for(i=0;i<5;i=i+1)printf(“%5d”, ar[I]);

printf("The sum is %f",Sum);

getch ();

}

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

int MaxArr(int Mas[],int R=10) //Файл Max_Arr.cpp

{ int Max=Mas[0];

for(int i=1;i<R;i=i+1) if(Mas[i]>Max)Max=Mas[i];

return Max;

}

Первый параметр функции MaxArr(),– это массив из целых чисел, а второй – количество элементов массива. Размерность массива не указана, поэтому функция может находить максимальный элемент в любом массиве, состоящем из целых чисел. Язык C++ позволяет при описании функции указывать после параметра его значение по умолчанию (параметру R по умолчанию присвоено значение 10). В этом случае при вызове функции можно не указывать один или несколько последних параметров, имеющих заданные по умолчанию значения.

Ниже приведена программа, использующая данную функцию для вывода на экран максимальных элементов двух массивов разного размера.

#include <stdio.h>

#include <conio.h>

int MaxArr(int Mas[],int R=10); Это шаблон заголовка. В нем можно опускать имена формальных параметров и писать только их типы, например,

int MaxArr(int[],int=10);

void main(void)

{ clrscr();

int M1[5]={-3,5,0,15,6};

int M2[10]={13,25,0,15,-36};

int Max2=MaxArr(M2); Массив M2 состоит из 10 элементов, поэтому можно передавать только первый параметр.

printf("\n В первом массиве %d \

Во втором массиве %d", MaxArr(M1,5), Max2); getch();

}

Сравните с языком Паскаль – там при описании формального параметра типа массив, требовалось указывать имя параметра и имя предварительно описанного типа передаваемого массива. Из-за этого на Паскале для работы с массивами разных размеров требовалось иметь отдельные функции. Но зато на Си программист может ошибиться и задать больше или меньше элементов, чем есть в массиве. Заметим, что можно указать в заголовке функции размерность массива:

int MaxArr(int Mas[10],int R=10);

Но даже и в этом случае компилятор не производит контроль соответствия размера указанного в заголовке размеру реально передаваемого массива – предоставляя программисту большие возможности, язык С++ возлагает на него большую ответственность за работу программы.

Замечание. Если производится обращение к переменной, объявленной в другом модуле проекта, надо указать, что она внешняя, например, extern int M. Имена функций видны везде, нужно указывать лишь прототип функции.


Информация о работе «Язык прораммирования С++»
Раздел: Информатика, программирование
Количество знаков с пробелами: 63266
Количество таблиц: 0
Количество изображений: 5

Похожие работы

Скачать
12975
0
3

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

0 комментариев


Наверх