Система оценки: пятибальная. — КиберПедия 

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

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

Система оценки: пятибальная.

2020-05-08 188
Система оценки: пятибальная. 0.00 из 5.00 0 оценок
Заказать работу

 

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

Заполните пропуски

1. Оператор _________ в вызываемой функции используется для передачи значения выражения вызывающей функции.

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

3. Тремя способами возврата управления от вызываемой функции к вызывающей являются _____, ______    и ________.

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

5. Спецификатор класса памяти ___________ рекомендует компилятору разместить переменную в одном из регистров компьютера.

6. Переменная, объявленная вне любого блока или функции, является __________ переменной.

7. Чтобы локальная переменная в функции сохраняла свое значение между вызовами функции, она должна быть объявлена со спецификатором класса памяти _____________.

8. Функция, которая вызывает саму себя или непосредственно или косвенно является ____________ функцией.

9. Рекурсивная функция обычно имеет два компонента: один компонент задает условие завершения рекурсии, проверяя текущую задачу на ___________случай, а второй компонент упрощает задачу для выполнения очередного рекурсивного вызова.

10. Приведите заголовок функции для следующих функций.

· Функция hypotenuse (гипотенуза), которая получает два аргумента sidel и side2, имеющих тип с плавающей точкой удвоенной точности, и которая возвращает результат в виде значения с плавающей точкой удвоенной точности.

· Функция smallest (наименьшее), которая получает три целых х, у, z и возвращает целое значение.

· Функция instructions (инструкции), которая не получает аргументов и ничего не возвращает (Примечание: такие функции часто используются для вывода на экран инструкций для пользователя.)

· Функция intToFloat, которая получает целый аргумент number и возвращает результат типа с плавающей точкой.

Список использованной литературы

1. Х.Дейтел Как программировать на C; Пер. с англ. под ред. В. Тимофеева. - М.: БИНОМ, 2000. - 1005 с.: ил.; 24

2. Язык программирования С / Брайан Керниган, Деннис Ритчи; [пер. с англ. и ред. В. Л. Бродового]. - 2-е изд., перераб. и доп. - Москва [и др.]: Вильямс, 2007. - 289 с.; 23 см.

3. Бьерн Страуструп Язык программирования C++; Пер. с англ. С. Анисимова и М. Кононова под ред. Ф. Андреева, А. Ушакова. - 3. изд. - М.: Binom Pablishers; СПб.: Нев. диалект, 2004. - 990 с.: ил.; 24 см.

Практическое занятие 3

 

Тема: «Разработка программ, использующих массивы»

Цель:

- изучение основ работы с массивами;

- приобретение навыков работы с одномерными и многомерными массивами;

- приобретение навыков работы с символьными массивами;

- приобретение навыков передачи массивов в функции;

 

 

Характер занятия: репродуктивный.

Форма организации занятия: индивидуальная.

Обеспечение занятия: тетрадь с лекциями,  СИ, компьютер.

 

Требования к знаниям

Перед выполнением практической работы студент должен

знать:

- основные особенности реализации массивов в Си;

- принципы инициализации и работы с символьными массивами;

- принципы передачи массивов в функции.

после выполнения практической работы студент должен

уметь:

- разрабатывать программы с использованием массивов;

- обрабатывать символьную информацию в виде символов и строк;

- передавать массивы в функции.

 

Теоретический материал

Массивы

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

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

Программа, представленная на рис. 1, использует структуру повторения for для инициализации нулями элементов целочисленного массива n из десяти элементов и выводит его в табличной форме.

/* инициализация массива */

# incluide < stdio. h >

main () {

int n[10], i;

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

n[i] = 0;                        /* инициализация массива */

printf("%s%13s\n", "Element", "Value");

for (i = 0; i <= 9; i ++) /* вывод элементов массива */

printf("%7d%13d\n", i, n[i]);

return 0;

}

 

Вывод на экран

Element       Value

0 0

1 0

2 0

3 0

4 0

5 0

6 0

7 0

8 0

9 0

Рис. 1. Инициализация элементов массива нулями

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

/ * Инициализация массива при объявлении * /

# include < stdio. h >

main ()

{int i, n[10] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};

printf("%s%13s\n", "Element", "Value");

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

printf ("%7d%13d\n", i, n[i]);

return 0;

 

Вывод на экран

Element       Value

0 32

1 27

2 64

3 18

4 95

5 14

6 90

7 70

8 60

9 37

Рис. 2. Инициализация элементов массива при объявлении

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

int n [10] = {0};

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

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

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

char string1[] = "first";

инициализирует элементы массива string1 отдельными символами строкового литерала "first". Размер массива string1 в предыдущем объявлении определяется компилятором исходя из длины строки.

Важно обратить внимание на то, что строка "first" содержит пять символов испециальный символ окончания строки, называемый нулевым символом '\0', всего шесть. Все строки в языке С заканчиваются этим символом.

Символьные массивы могут также инициализироваться отдельными символьными константами:

char string1 = {'f, 'i', 'r', 's', 't', '\0'};

Поскольку строка в действительности является символьным массивом, мы можем непосредственно обращаться к отдельным символам строки: string1[0] представляет собой символ 'f’, a string1[3] — ‘r’.

Можно вводить строку в символьный массив непосредственно с клавиатуры, пользуясь для этого функцией scanf и спецификацией преобразования %s:

char string2 [20];

Оператор

scanf("%s", string2);

Оператор scanf считывает строку с клавиатуры в string2. Имя массива передается в функцию scanf без &, необходимого с другими переменными, так как имя массива является адресом его начала; поэтому символ & не является необходимым.

Рис. 3 демонстрирует инициализацию символьного массива строковым литералом, чтение строки в символьный массив, вывод символьного массива в виде строки и доступ к отдельным символам строки.

/* Интерпретация символьных массивов в виде строк */

#include <stdio.h>

main () {

char stringl[20], string2[] = "string literal";

int i;

printf("Enter a string: ");

scanf ("%s", stringl);

printf("stringl is: %s\nstring2: is %s\n"

"stringl with spaces between characters is:\n",

stringl, string2);

for (i = 0; stringl [i]!= '\0'; i + +)

printf("%c ", stringl[i]);

printf ("\ n "); return 0; }

 

Вывод на экран

Enter a string: Hello there

stringl is: Hello

string2 is: String literal

stringl with spaces between characters is:

Hello

Рис. 3. Интерпретация символьных массивов в качестве строк

На рис. 3 структура for используется для прохода в цикле по массиву string 1 и вывода отдельных символов, разделенных пробелами, при помощи спецификации преобразования %с. Условие в структуре for, string1[i]!= '\0', остается истинным, пока в строке не будет встречен завершающий нулевой символ.

Массивы, объявленные статическими, автоматически инициализируются один раз во время компиляции. Если статический массив явно не инициализирован программистом, компилятор инициализирует его нулями.

На рис. 4 показаны функция staticArraylnit с локальным массивом, объявленным static, и функция automaticArraylnit с автоматическим локальным массивом. Функция staticArraylnit вызывается дважды. Статический локальный массив, содержащийся в функции, инициализируется компилятором нулями. Функция выводит массив, прибавляет 5 к каждому его элементу и снова выводит массив. При втором вызове функции статический массив содержит значения, сохранившиеся со времени ее первого вызова. Функция automaticArraylnit также вызывается дважды. Элементы автоматического локального массива, содержащегося в функции, инициализируются значениями 1, 2 и 3. Функция выводит массив, прибавляет 5 к каждому его элементу и снова выводит этот массив. При втором вызове функции элементы массива снова инициализируются как 1, 2 и 3, поскольку массив имеет автоматический период хранения.

/ * Статические массивы инициализируются нулями * /

# include < stdio. h >

void staticArraylnit(void);

void automaticArraylnit(void);

main() {

printf("First call to each function:\n");

staticArraylnit();

automaticArraylnit();

printf( \n\nSecond call to each function:\n");

staticArraylnit();

automaticArraylnit();

return 0;)

/* функция, иллюстрирующая статический локальный массив */

void staticArraylnit(void)

{

static int a [3];

i n t i;

printf(" \nValues on entering staticArraylnit:\n");

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

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

printf[" \nValues on exiting staticArraylnit:\n");

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

printf("arrayl[%d] = %d ", i, a[i] += 5);

}

/* функция, иллюстрирующая автоматический локальный массив */

void automaticArraylnit(void)

{

int a[3] = {1, 2, 3};

int i;

printf(" \n\nValues on entering automaticArraylnit:\n");

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

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

printf(" \nValues on exiting automaticArraylnit:\n");

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

printf("arrayl[%d] = %d ", i, a[i] += 5);

}

 

Вывод на экран

First call to each function:

Values on entering staticArraylnit:

arrayl[0] = 0 arrayl[1] = 0 arrayl[2] = 0

Values on exiting staticArraylnit:

arrayl[0] = 5 arrayl[1] = 5 arrayl[2] = 5

Values on entering automaticArraylnit:

arrayl[0] = 1 arrayl[1] = 2 arrayl[2] = 3

Values on exiting automaticArraylnit:

arrayl[0] = 6 arrayl[1] = 7 arrayl[2] = 8

Second call to each function

Values on entering staticArraylnit:

arrayl[0] = 5 arrayl[1] = 5 arrayl[2] = 5

Values on exiting staticArraylnit:

arrayl[0] = 10 arrayl[1] = 10 arrayl[2] = 10

Values on entering automaticArraylnit: arrayl[0] = 1 arrayl[1] = 2 arrayl[2] = 3 Values on exiting automaticArraylnit: arrayl [0] = 6 arrayl [1] = 7 arrayl [2] = 8

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

 

Передача массивов в функции

Для передачи массива в качестве параметра функции его имя указывается без скобок. Например, если массив hourlyTemperatures был объявлен как

int hourlyTemeratures[24];

оператор вызова функции

modifyArray(hourlyTemeratures, 24);

передает массив hourlyTemperatures и его размер в функцию modifyArray, путем имитации передачи параметра по ссылке.

Рис. 5. демонстрирует, что имя массива действительно является адресом его первого элемента.

/*Имя массива это то же самое,  что &аггау[0] * /

#include <stdio.h>

main () {

char array[ 5];

printf ("   array = %p\n&array[0] = %p\n",

array, &array[0]); return 0; }

 

Вывод на экран

array = FFFO &array[0] = FFFO

Рис. 5. Имя массива — это адрес его первого элемента

В программе на рис. 6 показано различие между передачей целого массива и элемента массива. Сначала программа выводит пять элементов целочисленного массива а. Затем массив а и его размер передаются в функцию modifyArray, в которой каждый элемент массива а умножается на 2. После этого в программе main происходит повторный вывод массива а. Как показывают выводимые данные, функция modifyArray действительно изменила элементы массива а. Теперь программа выводит значение а[3] и передает его в функцию modifyElement. Функция modifyElement умножает свой параметр на 2 и вводит новое значение. Обратите внимание, что когда элемент а[3] повторно выводится в функции main, его значение остается прежним, поскольку остальные элементы массива передаются по значению.

/* Передача в функцию массива и отдельного элемента массива */

#include <stdio.h>

#define SIZE 5

void modifyArray(int [], int); /* выглядит необычно */

void modifyElement(int);

main () {

int a[SIZE] = (0, 1,   2, 3, 4};

int i;

printf("Effects of passing entire array call " "by reference: \n\nThe values of the " "original array are:\n");

for (i = 0; i <= SIZE - 1; i++)

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

printf("\n");

modifyArray (a, SIZE); /* массив а передается по ссылке */

printf("The values of the modified array are: \n");

for (i = 0; i <= SIZE - 1; i++)

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

printf(" \n\n\nEf fects of passing array element call by value: \n\nThe value of a[3] is %d\n", a[3]); modifyElement (a[3]);

printf("The value of a[3] is %d\n", a[3]);

return 0; }

void modifyArray (int b[], int size) {

int j;

for (j = 0; j <= size - 1; j++)

b[jl *= 2;

}

void modifyElement(int e) {

printf("Value in modifyElement is %d\n", e *= 2); }

 

Вывод на экран

Effects of passing entire array call by reference:

The values of the original array are:

0 1 2 3 4

The values of the modified array are:

0 2 4 6 8

Effects of passing array element call by value:

The value of a[3] is 6 Value in modifyElement is 12 The value of a[3] is 6

Рис. 6. Передача в функцию массива и его отдельного элемента

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

Сортировка данных является одним из наиболее важных применений ЭВМ.

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

/*Программа сортирует значения массива в порядке возрастания*/

#include <stdio.h>

#define SIZE 10

main () {

int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};

int i, pass, hold;

printf("Data items in original order\n");

for (i = 0; i <= SIZE - 1; i++)

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

for (pass = 1; pass <= SIZE-1; pass++)   /* проходы */

for (i = 0; i <= SIZE - 2; i++) /* один проход */

  if (a[i] > a[i + 1]) {        /* одно сравнение */

    hold = a [ i ];                            /* одна перестановка */

    a[i] = a[i + 1]; a[i   + 1] = hold;

}

printf(" \nData items in ascending order\n");

for (i = 0; i <= SIZE - 1; i++)

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

printf("\n");

return 0; }

 

Вывод на экран

Data items in original order

2 6 4 8 10 12 89 68  45 37

Data items in ascending order

2 4 6 8 10 12 37 45 68 89

Рис. 7. Сортировка массива пузырьковым методом

Сортировка выполняется посредством вложенного цикла for. В случае необходимости перестановки она выполняется путем трех присваиваний

hold = a[i]; a[i] = a[i +1]; a[i +1] = hold;

Главным достоинством пузырьковой сортировки является то, что ее легкая алгоритмизация. Однако пузырьковая сортировка выполняется медленно.

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

Массивы в С могут иметь несколько индексов.

Многомерный массив может быть инициализирован при его объявлении. Например, двумерный массив b[2][2] может быть объявлен и инициализирован посредством

int b [2] [2] = { {1, 2), {3, 4}};

Значения группируются в фигурных скобках по строкам. Таким образом, 1 и 2 инициализируют b[0][0] и b[0][1], 3 и 4 инициализируют b[1][0] и b[1][1]. Если для данной строки недостаточно инициализирующих значений, оставшиеся ее элементы инициализируются нулями. Таким образом, объявление

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

инициализировало бы b[0][0] единицей, b[0][1] нулем, b[1][0] тройкой и b[1][1] четверкой.

/* Инициализация многомерного массива */

# include < stdio. h >

void printArray(int [][3]);

main () {

int arravl[2][3] = { {1, 2, 3}, {4, 5, 6} },

array2[2][3] = { 1, 2, 3, 4, 5 },

array3[2][3] = { (1, 2}, {4} };

printf("Values in arrayl by row are:\n"); printArray(arrayl);

printf("Values in array2 by row are:\n"); printArray(array2);

printf("Values in аггауЗ by row are:\n"); printArray(аггау 3);

return 0; }

void printArray (int a [ ] [3]) i

int i,j;

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

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

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

printf("\n"); } }

 

Вывод на экран

Values in arrayl by row are:

12 3

4 5 6

Values in array2 by row are:

12 3

4 5 0

Values in аггауЗ by row are:

12 0

4 0 0

Рис. 8. Инициализация многомерных массивов

 

Рис. 8. демонстрирует инициализацию двумерных массивов при их объявлении. В программе объявляются три массива с двумя строками и тремя столбцами (каждый состоит из шести элементов).

 

Порядок выполнения работы

1. Изучите теоретический материал.

2. Напишите программу, согласно заданному в варианте задания условию.

3. Ответьте на контрольные вопросы.

 

Варианты заданий

Вариант 1.

Используйте одномерный массив для решения следующей задачи. Компания оплачивает работу своих продавцов с учетом комиссионных. Продавцы получают $200 в неделю плюс 9% от их валового сбыта. Например, продавец, валовой сбыт которого составляет $3000 в неделю, получит $200 плюс 9% от $3000, или в сумме $470. Напишите программу на С (с массивом счетчиков) для определения количества продавцов, заработок которых попал в каждый из следующих диапазонов (предположите, что заработок каждого продавца округлен до целочисленного значения):

1. $201-$299

2. $300-$399

3. $400-$499

4. $500-$599

5. $600-$699

6. $700-$799

7. $800-$899

8. $900-$999

9. $1000 и более

Вариант 2.

Метод пузырьковой сортировки, представленный на рис. 8, является неэффективным для больших массивов. Сделайте следующие простые изменения для повышения эффективности пузырьковой сортировки.

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

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

Вариант 3.

(Система предварительной продажи билетов) Небольшая авиакомпания недавно приобрела компьютер для новой автоматизированной системы предварительной продажи билетов. Президент компании попросил вас написать на С программное обеспечение для новой системы. Вы должны составить программу для бронирования мест на каждом рейсе единственного самолета авиакомпании (его вместимость: 10 мест).

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

Пожалуйста, введите 1 для "курящих" Пожалуйста, введите 2 для "некурящих"

Если оператор вводит 1, то ваша программа должна забронировать место в отсеке для курящих (места 1-5). Если оператор вводит 2, то ваша программа должна забронировать место в отсеке для некурящих (места 6—10). После этого ваша программа должна напечатать посадочный талон с указанием номера места пассажира и информации о том, находится ли оно в отсеке для курящих или в отсеке для некурящих пассажиров самолета.

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

Программа никогда не должна бронировать уже забронированное место. Если отсек для курящих заполнен, программа должна запросить оператора, допустимо ли бронирование места в отсеке для некурящих (и наоборот). В случае положительного ответа произведите соответствующее бронирование места. В случае отрицательного ответа выведите сообщение «Следующий рейс через 3 часа.»

Вариант 4.

Используйте двумерный массив для решения следующей задачи. В компании работают четыре продавца (с 1 по 4), которые продают пять различных видов изделий (с 1 по 5). Один раз в день каждый продавец передает в компанию карточку сбыта по каждой разновидности проданного товара. Каждая карточка содержит:

· Номер продавца

· Номер изделия

· Общую сумму в долларах за данный товар, проданный в этот день

Таким образом, каждый продавец передает в день от 0 до 5 карточек сбыта. Предположим, что доступна информация по всем карточкам за последний месяц. Напишите программу, которая будет считывать всю эту информацию о сбыте за последний месяц и подводить общий итог о сбыте каждым продавцом каждой разновидности товара. Все итоговые суммы должны храниться в двумерном массиве sales. После обработки всей информации за последний месяц выведите результаты в виде таблицы, в которой каждый столбец представляет конкретного продавца и каждая строка представляет конкретную разновидность товара. Для получения общего сбыта каждой разновидности товара за последний месяц просуммируйте каждую строку; для получения общего сбыта для каждого продавца за последний месяц проведите суммирование каждого столбца. Распечатка вашей таблицы должна включать эти перекрестные итоговые суммы справа от итоговых строк и в нижней части итоговых столбцов.

Вариант 5.

 (Исключение дублирующих значений) Одной из особенностей двоичного дерева поиска является то, что при проведении вставок в это дерево дублирующие значения отбрасываются. Это называется исключением дублирующих значений. Напишите программу, которая выдает 20 случайных чисел между 1 и 20. Программа должна сохранять все недублированные значения в массиве. Используйте для решения этой задачи наименьший из возможных массивов.

Вариант 6.

(Решето Эратосфена) Простым называется любое целое число, которое можно разделить без остатка только на него само и на 1. Решето Эратосфена представляет собой метод нахождения простых чисел. Оно работает следующим образом:

1) Создайте массив и инициализируйте все его элементы единицей (TRUE). Элементы массива с простыми индексами останутся равными 1. Все другие элементы массива будут по завершении алгоритма установлены в нуль.

 

2) Начните с индекса массива, равного 2 (индекс 1 должен быть простым); всякий раз при нахождении элемента массива со значением 1 выполните цикл по оставшимся элементам массива и установите в нуль те из них, индекс которых является кратным индексу элемента со значением 1. Для индекса массива, равного 2, все элементы массива после 2, которые кратны 2, будут установлены в нуль (индексы 4, 6, 8, 10 и т.д.). Для индекса массива, равного 3, все элементы массива после 3, кратные 3, будут установлены в нуль (индексы б, 9, 12, 15 и т.д.).

После завершения этого процесса те элементы массива, которые все еще установлены в единицу, указывают на то, что их индекс является простым числом. Эти индексы могут быть затем выведены на печать. Напишите программу, которая объявляет массив из 1000 элементов для определения и вывода на печать простых чисел между 1 и 999. Исключите из рассмотрения элемент массива с номером 0.

Вариант 6.

 (Блочная сортировка) Для блочной сортировки требуется одномерный массив положительных целых чисел, подлежащий сортировке, и двумерный массив целых чисел с индексами строк от 0 до 9 и индексами столбцов от 0 до n - 1, где n — число значений в сортируемом массиве. Каждая строка двумерного массива называется блоком. Напишите функцию bucketSort, которая принимает в качестве параметров целочисленный массив и его размер.

Алгоритм выглядит так:

Выполните цикл по одномерному массиву и поместите каждое из его значений в некоторую строку блочного массива в зависимости от значения его разряда, представляющего единицы. Например, 97 помещается в строку 7, 3 помещается в строку 3 и 100 помещается в строку 0.

Выполните цикл по блочному массиву и скопируйте его значения обратно в исходный массив. Новый порядок для приведенных выше значений в одномерном массиве будет 100, 3 и 97.

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

При втором проходе по массиву 100 помещается в строку 0, 3 помещается в строку 0 (у 3 только один разряд) и 97 помещается в строку 9. Порядок значений в одномерном массиве будет 100, 3 и 97. При третьем проходе 100 помещается в строку 1, 3 помещается в строку нуль и 97 помещается в строку нуль (после 3). Гарантируется, что при блочной сортировке все значения будут надлежащим образом отсортированы после обработки крайнего слева разряда самого большого числа. Блочная сортировка заканчивается, когда все значения будут скопированы в строку двумерного массива с номером 0.

Вариант 7.

 (Палиндромы) Палиндромом называется строка, которая читается одинаково как слева направо, так и в обратном направлении. Некоторыми примерами палиндромов являются: «radar», «able was i ere i saw elba» и «a man a plan a canal Panama». Напишите рекурсивную функцию testPalindrome, которая возвращает 1, если строка, хранящаяся в массиве, является палиндромом, и 0 в противном случае. Функция должна игнорировать пробелы и знаки пунктуации.

Вариант 8.

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

Вариант 9.

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

Вариант 10.

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

 

 

Форма отчёта: отчет выполняется в текстовом редакторе в электронном виде.

Содержание отчета:

1. Тема работы.

2. Цель работы.

3. Текст отлаженной программы с комментариями

 

Система оценки: пятибальная.

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

1. Заполните пропуски в каждом из следующих утверждений:

· Элементы массива связаны в том отношении, что они имеют одни и те же __________ и _________.

· Число, используемое для обращения к конкретному элементу массива, называется ____________.

· Для объявления размера массива должна использоваться ______, поскольку в этом случае программа становится более

· общей.

· Процесс размещения элементов массива в определенном порядке называется ___________ массива.

· Массив, который имеет два индекса, называется___________массивом.

2. Установите, являются ли следующие высказывания верными или неверными. Если высказывание неверно, объясните почему.

· В массиве может храниться много различных типов значений.

· Индексом массива может быть число типа float.

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

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

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

3. Выполните следующие действия для массива с именем fractions.

· Определите символическую константу SIZE, которая будет замещена на текст 10.

· Объявите массив из SIZE элементов типа float и инициализируйте элементы нулями.

· Назовите четвертый элемент от начала массива.

· Обратитесь к элементу массива номер 4.

· Присвойте значение 1.667 элементу массива номер девять.

· Присвойте значение 3.333 седьмому элементу массива.

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

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

4. Выполните следующие действия для массива с именем table.

· Объявите целочисленный массив с 3 строками и 3 столбцами. Предположите, что была определена символическая константа SIZE, равная 3.

· Сколько элементов содержится в массиве?

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

· Выведите значения каждого элемента массива table. Предположите, что массив был инициализирован с помощью объявления int table[SIZE] [SIZE] = {{1, 8), {2, 4, 6), {5}}; и целые переменные х и у объявлены в качестве управляющих переменных. Покажите выводимые значения.

5. Найдите ошибку в каждом из следующих фрагментов программы и исправьте ее.

#define SIZE 100;

SIZE = 10;

Предположим, что int b[10] = {0}, i;

for (i = 0; i <= 10; I++) b[i] = 1;

 

indlude <stdio.h>;

Предположим, что int a[2][2]   = {{1, 2), {3, 4 } }; a [ 1, 1 ] = 5;

Список использованной литературы

1. Х.Дейтел Как программировать на C; Пер. с англ. под ред. В. Тимофеева. - М.: БИНОМ, 2000. - 1005 с.: ил.; 24

2. Язык программирования С / Брайан Керниган, Деннис Ритчи; [пер. с англ. и ред. В. Л. Бродового]. - 2-е изд., перераб. и доп. - Москва [и др.]: Вильямс, 2007. - 289 с.; 23 см.

3. Бьерн Страуструп Язык программирования C++; Пер. с англ. С. Анисимова и М. Кононова под ред. Ф. Андреева, А. Ушакова. - 3. изд. - М.: Binom Pablishers; СПб.: Нев. диалект, 2004. - 990 с.: ил.; 24 см.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 4


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.284 с.