Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по программированию на языке Си - A4.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
670.21 Кб
Скачать

Вариант 36

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

Вариант 37

Леспромхоз ведет заготовку деловой древесины. Первоначальный ее объем на территории леспромхоза составлял 120000 м3. Ежегодный естественный прирост - 5%, а план вырубки за год - 9500 м3. Определить, какой объем древесины будет на территории леспромхоза через год, два года, три года и т.д. до тех пор, пока объем древесины на территории леспромхоза не станет меньше предельно допустимой величины - 23000 м3.

Вариант 38

Какое наименьшее количество слагаемых надо взять в сумме натурального ряда 1 + 2 + 3 + … , чтобы эта сумма превысила заданное положительное число m?

Вариант 39

Жители одной деревни выращивают пшеницу. Каждый год они собирают 2 000 000 фунтов пшеницы и хранят ее в амбаре. Хотя они потребляют только 100 000 фунтов пшеницы в месяц, они иногда оказываются без пшеницы, так как мыши в амбаре съедают запасы: каждая мышь съедает 10 фунтов пшеницы в месяц. Деревенские жители пытаются уничтожать мышей, заведя в амбаре кошек. Каждая кошка съедает за месяц 30 мышей. Определить, хватит ли жителям деревни запасов пшеницы до следующего урожая, если в момент его засыпки в амбаре жило m мышей и k кошек. Учесть, что на семена должно остаться 5% от первоначального веса пшеницы. Считать, что рождаемость кошек и мышей уравновешивает их смертность от старости.

Вариант 40

Определить, через какое время водоем может иметь промысловое значение, т.е. объем рыбы в нем достигнет vd тонн, если известно, что ежегодный естественный прирост рыбы равен 10,5%, а естественная убыль 2,6%. Первоначально в водоем выпускают v тонн рыбы.

Вариант 41

Для заданного натурального n вычислить n!!, что означает 1∙3∙5∙…∙n для нечетного n и 2∙4∙6∙…∙n для четного n.

Вариант 42

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

Вариант 43

Найти наибольшее натуральное число n, факториал которого не превышает заданное число m.

Задания II уровня сложности

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Последовательность an строится так: a1 = 1; a2 = 3; an = an-1 –2an-2 для всех n > 2. Найти: а) первый элемент этой последовательности, больший 1000; б) первые 10 положительных членов; в) сумму первых 15 отрицательных членов; г) наибольший из первых 20 членов.

Вариант 12

Вычислить сумму первых n чисел Фибоначчи.

Вариант 13

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

Вариант 14

Задано натуральное число n. Определить функции для решения следующих задач:

a) подсчитать количество цифр в числе n; б) определить сумму цифр числа n; в) определить первую цифру числа n; г) переставить первую и последнюю цифры числа n; д) поменять порядок цифр числа n на обратный.

Протестировать программу, использующую эти функции.

Вариант 15

В баскетбольную секцию принимаются мальчики от 12 до 15 лет ростом не менее 160 см и весом не более 65 кг. Пусть в программу по очереди поступают все перечисленные данные о каждом кандидате. Определить, сколько претендентов представило свои кандидатуры, прежде чем была набрана группа в n человек (целое число n задано).

Вариант 16

В ЭВМ последовательно поступают тройки чисел a, b, c. Если интерпретировать их как длины сторон треугольника, определить, сколько таких троек чисел нужно ввести, чтобы можно было построить k треугольников (k – заданное натуральное число).

Вариант 17

Задано натуральное число n. Найти и напечатать все простые числа от 2 до n.

Задания IIIуровня сложности

Вариант 1

Найти в интервале от 1 до 1000 число, имеющее больше всего делителей. В программе определить функцию, возвращающую количество делителей заданного натурального числа.

Вариант 2

В ЭВМ по очереди поступают числа. Определить, образуют ли они а) арифметическую; б) геометрическую прогрессию (сохраняя тот порядок, в котором числа поступают).

Вариант 3

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

Вариант 4

Разложить заданное натуральное число на простые сомножители.

Вариант 5

Даны натуральные числа n, m. Определить функцию, возвращающую сумму m последних цифр числа n. Протестировать программу, использующую эту функцию.

Лабораторная работа №4 “ Составление алгоритмов и программ обработки массивов ”

Методические указания

  1. Следует помнить, что элементы массива в Си индексируются, начиная с нуля. Поэтому индекс последнего элемента всегда на единицу меньше, чем число элементов в массиве.

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

  3. Рекомендуется задавать число элементов в массиве с помощью именованной константы.

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

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

  6. Операторы инициализации накапливаемых в цикле переменных (сумматоры, счетчики и т.п.) рекомендуется записывать непосредственно перед циклом, в котором они вычисляются. Начинающие программисты часто либо вообще забывают про инициализацию, либо неверно определяют ее место в программе (например, в случае обработки двумерного массива).

Пример 1

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

#include<stdio.h>

double middle(int* x, int n); // Среднее арифметическое

void printvector(int* x, int n); // Печать массива

void main()

{

//объявление массива с инициализацией:

int const n=10;

int temp[n]={3,2,4,5,3,2,1,5,2,4};

printvector (temp,n); //Вызов функции печати массива

double result;

result = middle(temp,n); // Вызов функции middle()

printf("Middle value=%.2lf\n",result);

}

/*

Функция возвращает среднее арифметическое значение элементов массива x из n элементов

*/

double middle (int* x, int n)

{

int i, sum;

sum=0;

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

{

sum += x[i];

}

double mdl;

mdl =(double)sum/n; /*Использована операция приведения типа*/

return mdl;

}

/*

Функция печатает массив x из n элементов на экране

*/

void printvector (int* x, int n)

{

int i;

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

{

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

}

puts("");

}

Пример 2

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

#include <stdio.h>

void printvector (int* x,int n);

void exchange(int* x,int n);

void main()

{

//Объявление массива с инициализацией:

int const k=6;

int a[k]={41,9,5,3,4,10};

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

printvector (a,k);

exchange (a,k);

puts("Массив после замены:");

printvector (a,k);

}

/*

Функция печатает массив х размером n на экране

*/

void printvector (int* x,int n)

{

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

printf("%5d",x[i]);

puts("");

}

/*

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

Замечание. Если в функцию в качестве аргумента передается массив (по сути, передается указатель на начало массива и его размер), то операторы тела функции, изменяющие значения элементов этого массива, приведут к изменению соответствующих элементов того массива, который будет использоваться в качестве фактического параметра при вызове этой функции. Другими словами, значения элементов заданного массива a в главной функции до вызова функции exchange() и после ее вызова будут различны.

*/

void exchange (int* x,int n)

{

int min=x[0]; //Минимальное значение

int ind=0; //Индекс минимального элемента

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

{

if(x[i]<min)

{

min=x[i];

ind=i;

}

}

/*Замена минимального элемента (первого в массиве) значением последнего элемента: */

x[ind]=x[n-1];

}

Пример 3

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

#include <stdio.h>

#include <stdlib.h>

const int n = 8; //Число строк

const int m = 3; //Число столбцов

void rndmatrix (int x[n][m], int a, int b);

void printmatrix (int x[n][m]);

int strzero(int x[n][m]);

void main()

{

//Объявление массива:

int a[n][m];

//Заполнение массива случайными числами из интервала [0,5]:

rndmatrix(a, 0, 5);

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

printmatrix (a);

int cnt;

cnt = strzero(a);

printf ("\nЧисло строк из нулевых элементов: ", cnt);

}

/*

Функция заполняет массив x случайными целыми числами из промежутка [a; b].

*/

void rndmatrix (int x[n][m], int a, int b)

{

int i,j;

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

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

x[i][j]=(int)((double)rand()/RAND_MAX*(b-a+1)+a);

}

/*

Функция печатает массив х на экране

*/

void printmatrix (int x[n][m])

{

int i,j;

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

{

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

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

puts("");

}

}

/*

Функция возвращает число строк двумерного массива x, состоящих из одних нулевых элементов.

*/

int strzero(int x[n][m])

{

int result = 0; /*Число строк из нулевых элементов */

int summa; /*Переменная для суммирования элементов строки */

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

{

summa = 0;

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

summa += x[i][j];

if (summa == 0)

result++;

}

return result;

}

Задания для самостоятельного выполнения

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

Задания I уровня сложности

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

Вариант 1

Задан одномерный числовой массив. Вычислить среднее арифметическое тех его элементов, значения которых лежат в интервале от 0 до 9.

Вариант 2

Задан одномерный числовой массив. Заменить все его максимальные элементы числом 100.

Вариант 3

Верно ли, что все элементы одномерного числового массива равны между собой по значению?

Вариант 4

Задан одномерный числовой массив, в котором есть хотя бы один отрицательный элемент. Какое количество элементов расположено до первого отрицательного элемента?

Вариант 5

Задан одномерный числовой массив. Верно ли, что количество его положительных элементов не превышает количества его отрицательных элементов?

Вариант 6

Задан одномерный числовой массив. Заменить последний из его минимальных элементов значением последнего элемента всего массива.

Вариант 7

Верно ли, что все элементы одномерного числового массива упорядочены по возрастанию?

Вариант 8

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

Вариант 9

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

Вариант 10

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

Вариант 11

Верно ли, что значения всех элементов одномерного числового массива лежат в интервале от 0 до 9?

Вариант 12

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

Вариант 13

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

Вариант 14

Задан одномерный числовой массив. Подсчитать количество максимальных элементов этого массива.

Вариант 15

Верно ли, что все элементы одномерного числового массива неотрицательны?

Вариант 16

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

Вариант 17

Задан одномерный числовой массив. Вычислить произведение ненулевых элементов этого массива.

Вариант 18

Задан одномерный числовой массив. Все максимальные элементы этого массива заменить значением его минимального элемента.

Вариант 19

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

Вариант 20

Верно ли, что первый встретившийся отрицательный элемент заданного одномерного числового массива расположен левее, чем его первый встретившийся минимальный элемент?

Вариант 21

Задан одномерный числовой массив. Вычислить среднее арифметическое отличных от нуля элементов этого массива.

Вариант 22

Задан одномерный числовой массив. Заменить нулями все минимальные элементы этого массива.

Вариант 23

Верно ли, что все элементы в массиве не превышают заданного числа P?

Вариант 24

Верно ли, что последний встретившийся нулевой элемент заданного одномерного числового массива расположен правее, чем его первый встретившийся отрицательный элемент?

Вариант 25

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

Вариант 26

Пусть x и y - два одномерных массива одинакового размера. Подсчитать количество таких пар, для которых x[i] = y[i].

Вариант 27

Выяснить, все ли элементы числового массива отклоняются от его среднего значения не более чем на P (P – заданное число).

Вариант 28

Каждый солнечный день улитка, сидящая на дереве, поднимается вверх на 2 см, а каждый пасмурный день опускается вниз на 1 см. В начале наблюдений улитка находилась в А см от земли на дереве высотой В см. В тридцатиэлементном массиве содержатся сведения о том, был ли соответствующий день солнечным или пасмурным. Определить местоположение улитки к концу 30-го дня наблюдений.

Вариант 29

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

Вариант 30

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

Вариант 31

Выяснить, все ли элементы числового массива отклоняются от его максимального значения не более чем на P (P – заданное число).

Вариант 32

Осуществить циклический сдвиг элементов заданного одномерного массива на один элемент влево (дополнительных массивов не заводить).

Вариант 33

Осуществить циклический сдвиг элементов заданного одномерного массива на один элемент вправо (дополнительных массивов не заводить).

Вариант 34

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

Вариант 35

Каталог периодических изданий содержит следующие сведения: почтовый индекс издания, подписная цена за полугодие. Определить функции, возвращающие: а) суммарную стоимость подписки на первые n изданий каталога (по одному экземпляру); б) количество тех изданий, подписная цена которых не превышает k рублей; в) почтовый индекс самого дешевого издания; г) признак того, есть ли в каталоге издание с заданным почтовым индексом index (если есть, то указать его подписную цену, если нет, то напечатать соответствующее сообщение).

Вариант 36

В одномерном массиве с четным количеством элементов находятся координаты n точек плоскости: x1, y1, x2, y2,... Определить функцию, возвращающую минимальный радиус окружности с центром в начале координат, которая будет содержать все точки.

Вариант 37

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

Вариант 38

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

Вариант 39

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

Двумерные массивы

Вариант 1

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

Вариант 2

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

Вариант 3

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

Вариант 4

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

Вариант 5

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

Вариант 6

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

Вариант 7

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

Вариант 8

Имеется двумерный массив, содержащий данные о посещаемости группы из n студентов на занятиях по информатике в течение семестра (всего m занятий). Отсутствие студента на занятии кодируется 0, присутствие - 1. Определить функцию, возвращающую количество студентов, не пропустивших ни одного занятия.

Вариант 9

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

Вариант 10

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

Вариант 11

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

Задания II уровня сложности

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

Вариант 1

Даны натуральное число N, целые числа А(1), А(2), …, А(N) и B(1), B(2), … , B(N). Известно, что среди чисел А(1), А(2), …, А(N) нет повторяющихся, нет их и среди чисел B(1), B(2), … , B(N). Верно ли, что все члены последовательности A входят в последовательность B?

Вариант 2

Дана последовательность из не менее чем двух натуральных чисел. Вычислить сумму тех из них, порядковые номера которых – простые числа.

Вариант 3

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

Вариант 4

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

Вариант 5

Определить наибольший среди отрицательных элементов заданного числового массива. Дополнительные массивы не заводить.

Вариант 6

С вокзала Москвы в различные города уходят 20 поездов в день. Каждый поезд имеет различное число купейных, плацкартных и общих вагонов. Определить, какой вид вагона является преобладающим а) на каждом маршруте; б) на всех маршрутах.

Вариант 7

Даны действительные числа a1, a2, … , an, P, натуральное k (a1 <= a2 <= … <=an), k <= n. Удалить из a1, a2, … , an элемент с номером k, вставить элемент, равный P так, чтобы не нарушалась упорядоченность исходной последовательности.

Вариант 8

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

1 – северный

2 – южный

3 – восточный

4 – западный

5 – северо-западный

6 – северо-восточный

7 – юго-западный

8 – юго-восточный

Пусть необходимо выбрать место строительства жилого комплекса при металлургическом заводе. Определить целесообразное взаимное расположение промышленной и жилой зоны с учетом «розы ветров» в данной местности. Примерный вариант ответа: «Жилой комплекс желательно расположить к северу от завода».

Вариант 9

Дан массив A размером N и число B. Не используя вспомогательных массивов, переставить числа в массиве A таким образом, чтобы слева от некоторой границы шли элементы, меньшие либо равные B, а справа от границы – большие либо равные B.

Вариант 10

Дан массив A размером n, в котором встречаются по одному разу все числа от 0 до n, кроме одного. Найти пропущенное число.

Вариант 11

Получить одномерный массив, содержащий первую сотню простых чисел.

Двумерные массивы

Вариант 1

Определить функцию транспонирования матрицы B размером N x N.

Вариант 2

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

Вариант 3

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

Вариант 4

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

Вариант 5

В двумерном массиве поменять местами строки в порядке убывания их первых элементов.

Вариант 6

В двумерном массиве поменять местами строки в порядке убывания сумм элементов строк.

Вариант 7

В матрице размером N x M поменять местами первую строку с последней, вторую с предпоследней и т. д.

Вариант 8

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

Вариант 9

Известно, что в Москве самыми теплыми являются дни с 15 июля по 15 августа. Для проведения фестиваля необходимо выбрать 7 следующих подряд дней, наиболее теплых по данным за последние 10 лет.

Вариант 10

Плоскость с введенной на ней системой координат разбита на клетки с длиной стороны 1. На некоторых клетках квадрата размером 10x10 клеток находятся амебы, на одной клетке - не более одной амебы. Две амебы, стоящие на соседних клетках по вертикали, горизонтали или диагонали, являются соседями. По истечении промежутка времени t амебы, имеющие более трех соседей, гибнут от перенаселенности. Определить, сколько амеб останется по истечении времени t.