Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ОИиП под ред Бусько.DOC
Скачиваний:
22
Добавлен:
11.05.2015
Размер:
733 Кб
Скачать
☆

Вложенные циклы

Один цикл может находиться внутри другого цикла. В качестве примера – печать таблицы умножения целых чисел (фрагмент):

int i,j;

for(i=1;i<10’i++)

{

for(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf(“\n”);

}

Пример цикла for

Вычислить ; на печать программа должна выводить промежуточные и окончательный результаты.

Текст программы может иметь вид:

#include <stdio.h>

#include <conio.h>

#include <math.h>

#define n 10 // задали число слагаемых

void main(void)

{

float s; int k;

clrscr( ); // ОЧИСТКА ЭКРАНА

puts("\n ЛАБОРАТОРНАЯ РАБОТА N3 - ОПЕРАТОРЫ ЦИКЛА ");

puts("\n ============================================ \n");

s=0;

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

{

s=s+1.0/k;

printf(" \t\n k=%d s=%f 1.0/k=%f", k, s, 1.0/k);

}

puts("\n");

printf("\a\n ОТВЕТ: s=%f, Press any key...",s);

getch( ); /* ЗАДЕРЖКА ДО НАЖАТИЯ КЛАВИШИ ENTER */

}

Варианты индивидуальных заданий

Составить программу вычисления таблицы значений суммы S(x) и функции в произвольном диапазоне [a,b] изменения аргумента x с произвольным шагом h. Значения a,b,h и n вводятся с клавиатуры. Функция Y(x) разложена в ряд S(x). Значения S и Y для данного аргумента x должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.

1.

2.

3.

4.

5.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

25

26

27

28

29

30

Примечания. Sh(x)=(Exp(x)-Exp(-x))/2 – гиперболический синус.

Ch(x)=(Exp(x)+Exp(-x))/2 – гиперболический косинус.

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

  1. Какой процесс называется ”циклическим” ?

  2. Чем отличаются операторы while и do……while?

  3. Поясните понятие “Вложенный цикл”.

Лабораторная работа №4 Массивы в языке с

Цель работы

Изучить работу с массивами.

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

Массив – упорядоченная совокупность конечного числа данных одного типа. Массив – сложный тип данных. Каждый элемент массива определяется именем массива и своим индексом – целое число, по которому к элементу массива производится доступ. Рассмотрим одномерные массивы. Индексы у таких массивов начинаются с 0. В программе одномерный массив объявляется следующим образом:

Тип - <имя массива>[размер].

Тип – базовый тип элементов (целый вещественный, символьный).

Размер – количество элементов одномерного массива.

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

Примеробъявления массива целого типа:

int a[5]

В массиве а первый элемент а[0], второй – а[1] и т.д., шестой - а[5]. В языке С не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

Работа с массивами тесно связана с применением указателей.

Указатель – это переменная, которая содержит адрес некоторого объекта в памяти компьютера.

Указатель объявляется следующим образом:

тип *<имя переменной>;

Например: int *a, b, c, *d;

float *f;

char *w;

Здесь объявлены указатели a, d, f, w и переменные b,c типа int.

С указателями связаны две унарные операции & и *.

Операция &означает «взять адрес» операнда.Операция *имеет смысл: «значение, расположенное по указанному адресу».

В языке С принято, что имя массива – это адрес памяти, начиная с которого расположен массив, т.е. адрес первого элемента массива.

Пусть объявлены массив из 5 вещественных элементов и указатель на вещественные переменные: float c[5], *c1;

Идентификатор с является указателем на начало массива (т.е. на первый элемент массива). Тогда операции присваивания с1=с; и с1=&с[0]; приведут к одному и тому же результату: указатель с1 будет установлен на начало массива с в памяти.

Для получения 4-го элемента массива с можно написать с[3] или *(с1+3). Результат будет один и тот же. Преимущество второго варианта: арифметические операции над указателями выполняются быстрее, если программа работает с подряд идущими элементами массива.Если выбор случайный, то быстрее и нагляднее работать с индексами.Отметим, что указатели, как и переменные любого другого типа, могут объединяться в массивы.

Объявление массива указателей на целые числа имеет вид

int *a[10], y;

Теперь каждому из элементов массива можно присвоить адрес целочисленной переменной y, например: a[1]=&y;

Чтобы теперь найти значение переменной y через данный элемент массива а, необходимо записать *a[1];

Примерработы с одномерным массивом

В массиве а целого типа найти индекс и значение максимального элемента и переставить его с первым элементом. Программа также должна подсчитать количество положительных и отрицательных элементов данного мaссива.

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

#include <stdio.h>

#include <ctype.h>

#include <conio.h>

void main(void)

{

int a[4]={-1,-20,4,100};

// обьявление массива a и присвоение значений

// индексы массива принимают значения от 0 до 3

int i,index,zam,max,kp,ko;

clrscr();

puts(" ... ИСХОДНЫЙ МАССИВ ......\n");

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

printf("%d ",a[i]);

/* вывод элементов исходного массива */

puts("\n");

max=a[0]; kp=0; ko=0;

for (i=1; i<=3; i++)

{

if (a[i]>max)

{

max=a[i]; index=i;

}

}

zam=a[0]; a[0]=max; a[index]=zam;

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

{

if (a[i]<0) ko=ko+1;

else kp=kp+1;

}

puts(" ... РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ ......\n");

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

printf("%d ",a[i]);/* вывод элементов массива */

puts("\n");

printf("\n положительных элементов массива: %d \n",kp);

printf(" \n отрицательных элементов массива: %d,\

\n\n Press any key...",ko);

getch();

}