Редакционно-издательским советом Томского политехнического университета Издательство Томского политехнического университета 2011 681. 3 icon

Редакционно-издательским советом Томского политехнического университета Издательство Томского политехнического университета 2011 681. 3


1 чел. помогло.
Смотрите также:
Редакционно-издательским советом Томского политехнического университета Издательство Томского...
Редакционно-издательским советом Томского политехнического университета Издательство Томского...
Редакционно-издательским советом Томского политехнического университета Издательство Томского...
Конспект лекций Рекомендовано в качестве учебного пособия Редакционно-издательским советом...
Конспект лекций Рекомендовано в качестве учебного пособия Редакционно-издательским советом...
Конспект лекций Рекомендовано в качестве учебного пособия Редакционно-издательским советом...
Томского политехнического университета Издательство Томского политехнического университета 2009...
Учебное пособие Рекомендовано в качестве учебного пособия Редакционно-издательским советом...
Учебное пособие Издательство Томского политехнического университета 2009...
Учебное пособие Издательство Томского политехнического университета Томск 2007...
Учебное пособие Издательство Томского политехнического университета Томск 2007...
Учебное пособие Издательство Томского политехнического университета Томск 2010...



Загрузка...
страницы: 1   2   3   4   5   6   7   8   9   ...   12
вернуться в начало
скачать
^

Цикл с предусловием (while)


Цикл с предусловием реализует структурную схему, приведенную на рис. 1 (а), и имеет вид:

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

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

Пример 26. Программа печатает таблицу значений функции y=x2+1 во введенном диапазоне).

#include

int main(){

float Xn, Xk, Dx;

printf("Введите диапазон и шаг изменения аргумента: ");

scanf("%f%f%f", &Xn, &Xk, &Dx);

printf("| X | Y |\n");//шапка таблицы

int X = Xn;//начальные установки цикла

while (X<=Xk){//проверка условия выхода

printf("| %5.2f | %5.2f |\n", X, X*X + 1);//тело

X += Dx;//модификация

}

}
^

Цикл с постусловием (do while)


Цикл с постусловием реализует структурную схему, приведенную на рис. 1(б), и имеет вид:

do оператор while (выражение);

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

Пример 27. Проверка ввода.

#include

int main()

{

char answer;

do

{

cout << "\nКупи слоника! "; cin >> answer;

}while (answer != 'y');

}
^

Цикл с параметром (for)


Цикл с параметром имеет следующий формат [3]:

for ( инициализация; выражение; модификации) оператор;

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

Выражение определяет условие выполнения цикла: если оно не равно 0 (истинно), цикл выполняется.

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

Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).

Пример 28. Оператор, вычисляющий сумму чисел от 1 до 100:

for (int i = 1, s = 0; i<=100; i++) s += i;

Пример 29. Программа печатает таблицу значений функции y=x2+1 во введенном диапазоне:

#include

int main()

{

float Xn, Xk, Dx;

printf("Введите диапазон и шаг изменения аргумента: ");

scanf("%f%f%f", &Xn, &Xk, &Dx);

printf("| X | Y |\n");

for (int X = Xn; X<=Xk; X += Dx)

printf("| %5.2f | %5.2f |\n", X, X*X + 1);

}
^

3.1.1.5. Операторы передачи управления


В С++ есть несколько операторов, изменяющих естественный порядок выполнения вычислений [5]:

  • оператор безусловного перехода goto;

  • оператор выхода из цикла break;

  • оператор перехода к следующей итерации цикла continue;

  • оператор возврата из функции return.
^

Оператор goto


Оператор безусловного перехода goto имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор.

Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он встречается.

Использование оператора безусловного перехода оправдано в двух случаях:

  • принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

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

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

Оператор break


Оператор выхода из цикла break обеспечивает переход на оператор, непосредственно следующий за оператором if, switch или цикла, внутри которых находится оператор break.

Пример 30. Программа вычисляет значение гиперболического синуса вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд: sh x = 1 + x3/3! + x5/5! + x7/7! + …

#include

#include

int main()

{

const int MaxIter = 500;/*ограничитель количества итераций*/

double x, eps;

cout << "\nВведите аргумент и точность: ";

cin >> x >> eps;

bool flag = true; /*признак успешного вычисления */

double y = x, ch = x; /*сумма и первый член ряда*/

for (int n = 0; fabs(ch) > eps; n++)

{

ch *= x * x /(2 * n + 2)/(2 * n + 3); //очередной член ряда

y += ch;

if (n > MaxIter)

{

cout << "\nРяд расходится!";

flag = false; break;

}

}

if (flag) cout << "\nЗначение функции: " << y;

}

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

Оператор continue


Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
^

Оператор return


Оператор возврата из функцииreturn завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:

return [ выражение ];

Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
^

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


В языке C/C++, кроме базовых типов, разрешено вводить и использовать производные типы, полученные на основе базовых. Стандарт языка определяет три способа получения производных типов:

  • массив элементов заданного типа;

  • указатель на объект заданного типа;

  • функция, возвращающая значение заданного типа.

Массив – это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка памяти. Элементы одного массива занимают последовательно расположенные ячейки памяти. Все элементы имеют одно имя – имя массива и отличаются индексами – порядковыми номерами в массиве. Количество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выполняется на этапе компиляции программы [1].
^

3.1.2.1. Описание массива в C/C++


Описание массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность):


Пример 31. Описания массива из 10 вещественных чисел

float a [10];

Элементы массива нумеруются с нуля. Инициализирующие значения для массивов записываются в фигурных скобках.


Пример 32. Инициализация массива

int b[5] = {3, 2, 1}; // b[0]=3, b[1]=2, b[2]=1, b[3]=0, b[4]=0

Размерность массива может быть задана только целой положительной константой или константным выражением.

Для доступа к элементу массива после его имени указывается номер элемента (индекс) в квадратных скобках.


Пример 33. Расчёт сумма элементов массива.

#include

int main()

{

const int n = 10;

int marks[n] = {3, 4, 5, 4, 4};

for (int i = 0, sum = 0; i
cout << "Сумма элементов: " << sum;

}


В примере 33 размерность массивов предпочтительнее задавать с помощью типизированных констант.
^

3.1.2.2. Обработка одномерных массивов


При работе с массивами очень часто требуется одинаково обработать все элементы или часть элементов массива. Для этого организуется перебор массива.

Перебор элементов массива характеризуется:

  • направлением перебора;

  • количеством одновременно обрабатываемых элементов;

  • характером изменения индексов.

По направлению перебора массивы обрабатывают:

  • слева направо (от начала массива к его концу);

  • справа налево (от конца массива к началу);

  • от обоих концов к середине.

Индексы могут меняться

  • линейно (с постоянным шагом);

  • нелинейно (с переменным шагом).
^

3.1.2.3. Перебор массива по одному элементу


Элементы можно перебирать:

1. Слева направо с шагом 1, используя цикл с параметром:

for(int I=0;I

2. Слева направо с шагом отличным от 1, используя цикл с параметром:

for (int I=0;I


3. Справа налево с шагом 1, используя цикл с параметром:

for(int I=n-1;I>=0;I--){обработка a[I];}

4. Справа налево с шагом отличным от 1, используя цикл с параметром:

for (int I=n-1;I>=0;I-=step){обработка a[I];}
^

3.1.2.4. Датчика случайных чисел для формирования массива.


Датчик случайных чисел (ДСЧ) – это программа, которая формирует псевдослучайное число. Простейший ДСЧ работает следующим образом [3]:

  1. Берется большое число К и произвольное .

  2. Формируются числа х1=дробная_часть(х0*К); х2=дробная_часть(х1*К); и т. д.

В результате получается последовательность чисел х0, х1, х2, . . . беспорядочно разбросанных по отрезку от 0 до 1. Их можно считать случайными, а точнее псевдослучайными. Реальные ДСЧ реализуют более сложную функцию f(x).

В С++ имеется функция int rand() – возвращает псевдослучайное число из диапазона 0..RAND_MAX=32767, описание функции находится в файле <stdlib.h>.


Пример 34. Формирования и печати массива с помощью ДСЧ:

#include

#include

void main()

{

int a[100];

int n;

cout<<”\nEnter the size of array:”;

cin>>n;

for(int I=0;I
{

a[I]=rand()%100;

cout<
}

}

В этой программе используется перебор массива по одному элементу слева направо с шагом 1.


Пример 35. Найти максимальный элемент массива.

#include

#include

#include

void main()

{

int a[100];

int n;

cout<<"\nEnter the size of array:";

cin>>n;

for(int I=0;I
{

a[I]=rand()%100;

cout<
}

int max=a[0];

for(int I=1;I
if (a[I]>max)max=a[I];

cout<<"\nMax="<
getch();

}

В программе, представленной в примере 35 также используется перебор массива по одному элементу слева направо с шагом 1.
^

3.1.3. Многомерные массивы


Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор int matr [6][8]; задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс [4].

Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j].


Пример 36. Инициализация многомерного массива:

int mass2 [][]={ {1, 1}, {0, 2}, {1, 0} };

int mass2 [3][2]={1, 1, 0, 2, 1, 0};

На рис. 13 представлены блок-схемы алгоритмов двумерных массивов



а б

Рис. 13. Представление алгоритмов двумерных массивов в блок-схемах

а – блок-схема циклов for; б – блок-схема циклов while

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

int a [3][4] = {1, 2, 3, 4,

5, -5, 7, 24,

0, 8, 12, -34};

Если матрица инициализирована при объявлении, ее левый верхний элемент имеет адрес (0,0). При заполнении массивов можно использовать генератор случайных величин с помощью функции random(x), при этом генерируются числа от 0 до х. Перед использованием генератора случайных величин его необходимо инициализировать с помощью функции randomize (), в текст программы включить заголовочный файл с именем

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

#include

int main()

{

const int nstr = 4, nstb = 5;//Размерности

//массива

int b[nstr][nstb];

int i, j;

for (i = 0; i
for (j = 0; j
scanf("%d", &b[i][j]);

int istr = -1, MaxKol = 0;

for (i=0; i
{

//Просмотр массива по строкам

int Kol = 0ж

for (j = 0; j
if (Kol>MaxKol)

{

istr = i; MaxKol = Kol;

}

}

printf(" Исходный массив:\n");

for (i = 0; i
{

for (j = 0; j
printf("%d ", b[i][j]);

printf("\n");

}

if (-1 == istr) printf("Нулевых элементов нет");

else printf("Номер строки: %d", istr);

return 0;

}




оставить комментарий
страница7/12
Дата05.07.2012
Размер1,21 Mb.
ТипДокументы, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы: 1   2   3   4   5   6   7   8   9   ...   12
плохо
  1
средне
  1
хорошо
  1
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

наверх