Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК-1_АЯП_рус.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.19 Mб
Скачать

2.3 Планы лабораторных занятий

Каждая лабораторная работа включает в себя два задания А и В, отличающиеся по уровню сложности. При выборе первого задания студент при защите может получить максимальный балл равный 80%, при выборе второго задания – 95%. При выполнении двух заданий добавляется 5-10%.

Лабораторные работы должны быть оформлены по следующему плану:

- № лабораторной работы, тема (титульный лист);.

- условие задачи;

- блок-схема;

- листинг программы;

- тестирование;

- краткие ответы на все вопросы.

Лабораторная работа №1. Линейный вычислительный процесс

Цель работы.Изучить правила составления текстов программ на языке С: базовые типы данных, ввод-вывод данных, основные арифметические и тригонометрические функции; отладить и вычислить значение по математическому выражению.

Пример

Вычислить , при x=2.444, y=0.0869, z=-130.0, должно быть получено: -0.49871.

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

#include <stdio.h>

#include <conio.h>

#include <math.h>

#define x 2.444

#define y 0.00869

#define z -130.0

void main(void)

{

double rezult,dop,a,b,c;

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

puts(" ЛАБОРАТОРНАЯ РАБОТА N1 - ЛИНЕЙНАЯ ПРОГРАММА ");

puts("============================================");

dop=fabs(y-x);

a=pow(x,y+1)+exp(y-1);

b=1+x*fabs(y-tan(z));

c=0.5*pow(dop,2)-pow(dop,3)/3;

rezult=a/b*(1+dop)+c;

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

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

}

Варианты задания А

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

1. Y=

2. Y=

3. Y=

4. Y=

5. Y=

6. Y=

7. Y=

8. Y=

9. Y=

10. Y= )

11. Y=

12. Y=

13. Y=

14. Y=

15. Y=

Варианты задания Б

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

1. Даны два ненулевых числа. Найти их сумму, разность, произведение и частное. 

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

3. Скорость лодки в стоячей воде V км/ч, скорость течения реки U км/ч (U < V). Время движения лодки по озеру T1 ч, а по реке (против течения) — T2 ч. Определить путь S, пройденный лодкой. 

4. Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили удаляются друг от друга. 

5. Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили первоначально движутся навстречу друг другу. 

6. Найти периметр и площадь прямоугольного треугольника, если даны длины его катетов a и b. 

7. Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба. 

8. Найти длину окружности и площадь круга заданного радиуса R. В качестве значения Pi использовать 3.14.

 9. Найти площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2 (R1 < R2). В качестве значения Pi использовать 3.14. 

10. Дана сторона равностороннего треугольника. Найти площадь этого треугольника и радиусы вписанной и описанной окружностей. 

11. Дана длина окружности. Найти площадь круга, ограниченного этой окружностью. В качестве значения Pi использовать 3.14. 

12. Дана площадь круга. Найти длину окружности, ограничивающей этот круг. В качестве значения Pi использовать 3.14. 

13. Найти периметр и площадь равнобедренной трапеции с основаниями a и b (a > b) и углом alpha при большем основании (угол дан в радианах). 

14. Найти периметр и площадь прямоугольной трапеции с основаниями a и b (a > b) и острым углом alpha (угол дан в радианах).

 15. Найти расстояние между двумя точками с заданными координатами (x1, y1) и (x2, y2).

Основная литература 5[4-13]

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

  1. Структура простейшей программы на Си.

  2. Напишите формат и пример операции форматированного вывода на

экран.

  1. Напишите формат и пример операции форматированного ввода с клавиатуры.

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

  3. Перечислите спецификаторы формата, используемые в форматной

строке.

Лабораторная работа №2.Разветвляющиеся процессы

Цель работы. Изучить оператор безусловного перехода и операторы разветвлений: оператор выбора по условию if, оператор-переключатель switch.

Пример (использование оператора if)

Даны два числа: a и b, не равные нулю!

Вычислить :

Тестовый пример: a=10; b=5;

Вариант текста С-программы:

#include <stdio.h>

#include <conio.h>

void main( )

/* Пример условного оператора if */

{

float a,b,c;

puts(“\n введите а и b:“);

scanf(“%f%f”, &a, &b);

if (a>=b) c=a/b;

else c=b/a;

printf(“\n c=%f”, c);

getch();

}

Варианты задания А

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

Варианты задания Б

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

1. Напишите программу-модель анализа пожарного датчика в помещении, которая выводит сообщение «Пожарная ситуация», если температура (ее значение вводится с клавиатуры) в комнате превысила 60ºС.

2. Ракета запускается с точки на экваторе и развивает скорость v км/с. Каков результат запуска? Замечание: если v<=7.8 км/с, то ракета упадет на Землю, если 7.8<v<11.2, то ракета станет спутником Земли, если 11.2v16.4, то ракета станет спутником Солнца, если v>16.4, то ракета покинет Солнечную Систему

3. Рис расфасован в два пакета. Вес первого - m кг, второго – n кг. Составьте программу, определяющую: а) какой пакет тяжелее – первый или второй? б) вес более тяжелого пакета

4. Написать программу, которая бы запрашивала возраст мужчины и сообщала, сколько лет ему осталось до пенсии, либо что он уже пенсионер.

5. Туристы вышли из леса на шоссе неподалеку от километрового столба с отметкой А км и решили пойти на ближайшую автобусную остановку. Посмотрев на план местности, руководитель группы сказал, что автобусные остановки расположены на километре В и на километре С. Куда следует пойти туристам?

6. Написать программу, которая бы запрашивала целое число и распечатывала любое его значение, кроме13. Если заданное число равно13, вместо него печатается число 77.

7. Валя и Вера на своем садовом участке собрали А кг клубники. Из них В кг собрала Вера. Кто из девочек собрал клубники больше и на сколько?

8. Даны длины трех отрезков a, b, c. Если можно построить треугольник по этим трем отрезкам, то вычислить его периметр и площадь.

9. Первая бригада маляров за t1 час покрасила А м2 стен, а вторая бригада за t2 часа покрасила В м2. У какой бригады производительность труда выше и на сколько?

10. Каждое утро майор Знаменский заходит в тир и делает 5 выстрелов через плечо. Если он набирает 50 очков, то вечером идет с Зиночкой в ресторан, а если меньше, то на тренировку в тир. Написать программу, которая распечатывает планы майора на вечер.

11. Турист за день прошел А км. До обеда он шел t часов и прошел 20 км. Еще t2 часа он шел после обеда. Когда скорость туриста была выше: до обеда или после обеда?

12. Составьте программу, которая по трем введенным вами числам определит, могут ли эти числа быть длинами сторон треугольника, и если да, то определить вид этого треугольника (остроугольный, прямоугольный или тупоугольный).

13. Валя и Вера собрались варить варенье из А кг смородины. По рецепту на 2 кг ягод нужно 3 кг сахара. Валя сказала, что им потребуется С кг сахара, а Вера - что Р кг. Кто из них прав?

14. Для конкурсного отбора манекеншиц приглашаются девушки не ниже 180 см. Оределить, будет ли допущена Таня к участию в конкурсе.

15. Смекалкин, уходя в школу, вышел из дому на 3 минуты позже младшего брата. Расстояние до школы S метров. Смекалкин идет со скоростью V1 м/мин, а его брат – V2 м/мин. Догонит ли Смекалкин брата, прежде, чем тот придет в школу?

Основная литература 5[13-19]

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

  1. Какие формы записи операторов if применяются в языке С ?

  2. Чем отличается оператор if от оператора switch?

  3. Перечислите дополнительные операции присваивания.

4. Напишите формат и пример условного оператора в полной форме.

5. Напишите формат и пример условного оператора в краткой форме.

Лабораторная работа №3.Циклические процессы

Цель работы.Изучить циклические операторы for, while, do – while, научиться составлять и программировать циклические алгоритмы.

Пример цикла 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.

Варианты задания Б

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

1. Сколько можно купить быков, коров, телят, платя за быка 10 рублей, за корову 5 рублей, а за теленка 0,5 рублей, если на 100 рублей надо купить 100 голов скота. [Ответ: коров-9, бык-1,телят-90]

2. В компьютер вводятся по очереди координаты N точек. Определить, сколько из них попадет в круг радиусом R с центром в точке (а,в).

3. У гусей и кроликов вместе 24 лапы. Сколько может быть кроликов и гусей (указать все сочетания)

4. В компьютер вводятся по очереди данные о росте N учащихся группы. Определить средний рост учащихся группы

5. Одноклеточная амеба каждые три часа делится на 2 клетки. Определить, сколько амеб будет через 3,6,9,12,…,24 часа. [Ответ: 256]

6. Составьте программу вычисления степени числа А с натуральным показателем N . (Записать варианты программы с 3 видами циклов: for, while, do…while)

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

8. С помощью оператора WHILE написать программу, которая ищет произведение 10 произвольно введенных чисел и выводит его на печать.

9. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 дней?

10. С помощью оператора WHILE напишите программу вывода всех четных чисел в диапазоне от 22 до 100 включительно.

11. Составить программу для вычисления значений функции F(x) на отрезке [a,b] с шагом h. Результат представить в виде таблицы, первый столбец которой- значения аргумента, второй- соотв. значение функции. F(x)=cosx+ctgx

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

13. Напишите программу определения суммы всех нечетных чисел, кратных 3 в диапазоне от 1 до 99 включительно.

14. Составить программу поиска четырехзначных чисел, которые при делении на 133 дают в остатке 125, а при делении на 134 дают в остатке 111.

15. С помощью оператора цикла с постусловием напишите программу-фильтр, которая вводит любые символы, но комментирует только буквы русского алфавита. Завершение работы - по нажатию буквы ‘Я’.

Основная литература 5[13-19]

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

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

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

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

  4. Оператор цикла с постусловием выполняется до тех пор, пока

заключенное в нем выражение …………………(истина или ложь?)

  1. Какого типа может быть шаг изменения параметра цикла for? цикла

while?

Лабораторная работа №4. Обработка массивов

Цель работы: приобретение навыков программирования при решении задач с использованием структур данных типа массив.

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

В массиве а целого типа найти индекс и значение максимального элемента и переставить его с первым элементом. Программа также должна подсчитать количество положительных и отрицательных элементов данного м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();

}

Варианты задания А

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

1. Дан массив размера N. Вывести его элементы в обратном порядке. 

2. Дан массив размера N. Вывести вначале его элементы с четными1|нечетными2 индексами, а затем — с нечетными1|четными2. 

3. Дан целочисленный массив A размера 10. Вывести номер первого1|последнего2 из тех его элементов A[i], которые удовлетворяют двойному неравенству: A[1] < A[i] < A[10]. Если таких элементов нет, то вывести 0. 

4. Дан целочисленный массив размера N. Преобразовать его, прибавив к четным1|нечетным2 числам первый3|последний4 элемент. Первый и последний элементы массива не изменять. 

5. Дан целочисленный массив размера N. Вывести вначале все его четные1|нечетные2 элементы, а затем — нечетные1|четные2. 

6. Поменять местами минимальный и максимальный элементы массива размера 10. 

7. Заменить все положительные1|отрицательные2 элементы целочисленного массива размера 10 на значение минимального3|максимального4. 

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

9. Дан массив размера N. Осуществить циклический сдвиг элементов массива влево1|вправо2 на одну позицию. 

10. Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций. 

11. Проверить, образуют ли элементы целочисленного массива размера N арифметическую1|геометрическую2 прогрессию. Если да, то вывести разность1|знаменатель2 прогрессии, если нет — вывести 0. 

12. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем [четные и нечетные]1|[положительные и отрицательные]2 числа. Если чередуются, то вывести 0, если нет, то вывести номер первого элемента, нарушающего закономерность. 

13. Дан массив размера N. Найти количество его локальных минимумов1|максимумов2. 

14. Дан массив размера N. Найти максимальный1|минимальный2 из его локальных минимумов1|максимумов2. 

15. Дан массив размера N. Определить количество участков, на которых его элементы монотонно возрастают1|убывают2. 

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

Двумерные массивы (матрицы) 

1. Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы. 

2. Дана матрица размера 5 x 9. Найти суммы элементов всех ее четных1|нечетных2 строк3|столбцов4. 

3. Получить целочисленную квадратную матрицу порядка 7, элементами которой являются числа 1, 2, ….., 49, расположенные в ней по спирали:

1 2 ….

4. Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки размера n x n:

а) б)

5. Дана действительная квадратная матрица порядка n. Найти наименьшее из значений элементов, расположенных в заштрихованной части матрицы.

5. Дана матрица размера 5 x 10. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке1|столбце2. 

6. Дана матрица размера 5 x 10. Найти минимальное1|максимальное2 значение среди сумм элементов всех ее строк3|столбцов4 и номер строки3|столбца4 с этим минимальным1|максимальным2 значением. 

7. Дана матрица размера 5 x 10. Найти минимальный1|максимальный2 среди максимальных1|минимальных2 элементов каждой строки3|столбца4. 

8. Дана целочисленная матрица размера 5 x 10. Вывести номер ее oepbni1|последней2 строки3|столбца4, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк3|столбцов4 нет, то вывести 0. 

9. Дана матрица размера 5 x 10. Вывести номер ее первой1|последней2 строки3|столбца4, содержащего только положительные элементы. Если таких строк3|столбцов4 нет, то вывести 0. 

10. Дана целочисленная матрица размера M x N. Различные строки (столбцы) матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках (столбцах). Найти количество строк1|столбцов2, похожих на первую3|последнюю4 строку1|столбец2. 

11. Дана целочисленная матрица размера M x N. Найти количество ее строк1|столбцов2, все элементы которых различны. 

12. Дана целочисленная матрица размера M x N. Вывести номер ее первой1|последней2 строки3|столбца4, содержащего максимальное количество одинаковых элементов. 

13. Дана квадратная матрица порядка M. Найти сумму элементов ее главной1|побочной2 диагонали. 

14. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных главной1|побочной2 (начиная с одноэлементной диагонали A[1,M]1|A[1,1]2). 

15. Дана квадратная матрица порядка M. Вывести минимальные1|максимальные2 из элементов каждой ее диагонали, параллельной главной3|побочной4 (начиная с одноэлементной диагонали A[1,M]3|A[1,1]4). Matrix16. Дана квадратная матрица порядка M. Заменить нулями элементы матрицы, лежащие ниже1|выше2 главной3|побочной4 диагонали. 

Основная литература 5[19-24]

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

  1. Заполните массив float x[15] [15] случайными числами из диапазона

0..1;

  1. Опишите массив А, содержащий 10 элементов целого типа.

  2. В каком случае размерность массива можно явно не указывать.

  3. Пусть объявлен массив Int m[6]={5, 3, 2}; Чему равен элемент m[4]?

  4. Чему равно нижнее значение индекса?

Лабораторная работа №5 Функции пользователя

Цель работы. Познакомиться с механизмом составления и организации взаимодействия пользовательских функций языка С.

Пример работы с функциями

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

#include <stdio.h>

#include <conio.h>

void summa(int a1[ ][3]);

void main(void)

{

int a[3][3];

int i,j;

clrscr();

printf("\n Введите девять целых чисел \n");

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

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

{

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

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

}

summa(a);

}

void summa(int a1[ ][3])

{

int i,j,s;

puts(" ФУНКЦИЯ summa ");

puts("----------------------------------");

/* ВЫЧИСЛЕНИЕ СУММЫ ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ МАССИВА */

s=0;

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

{

printf("\n");

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

{

if (a1[i][j]>0)

{

s=s+a1[i][j];

}

}

}

printf("\a СУММА ПОЛОЖИТЕЛЬНЫХ ЭЛЕМЕНТОВ\

МАТРИЦЫ =%d, Press any key... ",s);

getch();

}

Варианты задания А

1. Даны три натуральных числа. Определить их наибольший делитель (определение HOD – см. N 10).

2. Даны отрезки a,b,c,d. Для каждой тройки этих отрезков, из которых можно построить треугольник, вычислить площади треугольников. Площадь треугольника , где .

3. Дано натуральное число N. Определить, если это возможно, пару x,y таких натуральных чисел, что .

4. Дано натуральное число N. Определить все пары x,y натуральных чисел, таких, что , .

5. Даны действительные числа x,y (x>0, y>1). Получить целое число K (положительное, отрицательное или равное нулю), удовлетворяющее условию < .

6. Дано натуральное число N (N > 99). Определить число сотен в нем.

7. Дано натуральное число N (N 99).Выяснить, верно ли, что N2 равно кубу суммы цифр числа N.

8. Дано натуральное число N (N > 10000). Определить сумму цифр первых K разрядов числа N (K 4).

9. Даны натуральные числа n,m. Получить произведение m последних цифр числа n.

10. Даны натуральные числа n,m. Найти наибольший общий делитель n и m (наименьшее общее кратное n и m), используя алгоритм Евклида.

Пусть n и m – одновременно не равные нулю целые неотрицательные числа и пусть m n. Тогда, если n = 0, то NOD (n,m) = m, и если n ≠ 0, то для чисел m, n, r, где r остаток от деления m на n, выполняется равенство NOD (m,n) = NOD (n,r). Например, NOD (15,6) = =NOD (6,3) = NOD (3,0) = 3.

11. Даны натуральные числа a,b,c,d. Вычислить f(a)·f(b)+f(c) f(d), где

12. Дано натуральное число N. Удалить из записи числа N цифры 0 и 5, оставив прежним порядок остальных цифр. Например, из числа 59015509 должно получиться число 919.

13. Дано натуральное число N. Получить все такие натуральные K, что N делится на K2 и не делится на K3.

14. Даны натуральные целые числа n и m, вычислить A(n,m), где

15. Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу (как, например, 153=13+53+33 ). Получить все числа Армстронга, состоящие из двух, трех и четырех цифр.

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

1. Имеется n населенных пунктов, перенумерованных от 1 до n (n=10). Некоторые пары пунктов соединены дорогами. Определить, можно ли попасть по этим дорогам из первого пункта в n-й пункт. Информация о дорогах задается в виде последовательности пар чисел i и j ( i<j ) указывающих, что i-й и ј-й населенный пункт пункты соединены дорогой. Признак окончания этой последовательности – пара нулей.

2. Напечатать все цифры числа 2500 и числа 1!+2!+…+100!

3. Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь.

4. Три прямые на плоскости заданы уравнением akx+bky=ck (k=1,2,3). Если эти прямые попарно пересекаются и образуют треугольник, тогда найти его площадь.

5. Два простых числа называются «близнецами», если они отличаются друг от друга на 2 (например, числа 41 и 43). Напечатать все пары «близнецов» на отрезке [n,2n], где n – заданное целое число, больше 2.

6. Ввести целое натуральное число N. Сформировать треугольник Паскаля по алгоритму:

C00

C10 C11

C20 C21 C22

C30 C31 C32 C33

C40 C41 C42 C43 C44

………………………..

Здесь , где n!=1·2·3·….·n – факториал числа n.

7. «Ханойская башня». Имеются три колышка A,B и C и n дисков разного размера, перенумерованных от 1 до n в порядке возрастания их размеров. Сначала все диски надеты на колышек A так, как показано на рис.1,а. Требуется перенести все диски с колышка A на колышек С (рис.1,в), соблюдая при этом следующие условия:диски можно переносить только по одному, больший диск нельзя ставить на меньший.

8. Написать функцию, обеспечивающую решение квадратного уравнения. Примерами функции должны быть коэффициенты и корни уравнения. Значение, возвращаемое функцией, должно пере давать в вызывающую программу информацию о наличии у уравнения корней : 2- два разных корня, 1 – корни одинаковые, 0 – уравнение не имеет решения. Кроме того, функция должна проверять корректность исходных данных. Если исходные данные неверные, то функция должна возвращать –1.

9. «Задача о 8 ферзях». На шахматной доске расставить 8 ферзей так, чтобы они не «били» друг друга (всего существует 92 расстановки).

10.«Метод фон Неймана». Дано n вещественных чисел. Упорядочить их по неубыванию:образовать два массива А и В и записать исходные числа в А; упорядочить пары соседних чисел (А1 и А2, А3 и А4 и т.д.) и записать их в В; взять из В по две соседние упорядоченные пары и, слив их в упорядоченные четверки, снова записать в А; затем каждые две соседние четверки из В слить в упорядоченные восьмерки и перенести в А и т.д.

11. Даны два массива чисел X и Y размером 100 элементов. Составить программу, меняющую последовательно местами значения элементов xk и yk, не используя промежуточных величин.

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

13. Имеется 9 карточек, на которых написаны цифры 1,2,3,4,5,6,7,8,9 (по одной цифре на каждой карточке). Из этих карточек составляются два числа. Первое число – это числитель дроби, а второе число – это знаменатель дроби. Каждая карточка должна быть обязательно использована. Знаменатель дроби состоит из пяти цифр. Например, числитель – 6729, знаменатель – 13458 (все карточки использованы). Дробь 6729/13458 в точности равна ½.

14. Ввести два натуральных числа N и M. Найти такую комбинацию карточек (если она существует), которая образовала бы дробь, равную в точности N/M. Если комбинация не единственная, то вывести их все.

Основная литература 5[24-29]

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

    1. Чем функция пользователя отличается от стандартной функции ?

    2. Способы передачи аргументов в функцию.

    3. Поясните понятие “локальные” и “глобальные” переменные.

    4. Для чего и каким образом применяется оператор return ?

Лабораторная работа №6. Строки

Цель работы. Изучить особенности работы со строковыми объектами (одномерными символьными массивами и строками-константами) языка

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

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

#include <stdio.h>

#include <string.h>

#include <conio.h>

void main(void)

{

char s[100]; // обьявление символьного массива

int i, k;

clrscr();

puts(" Введите исходную строку");

gets(s);

k=strlen(s);

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

for (i=k; i>=0; i--)

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

/* вывод элементов массива в обратном порядке */

printf("\n Press any key...");

getch();

}

Варианты задания А

1. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 2, то удаляются все числа, которые делятся на 2.

2. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L четная, то удаляются 2 первых и 2 последних символа.

3. Выяснить, имеются ли среди символов S1...Sn некоторой строки все буквы, входящие в слово DOS.

4. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L нечетная, то удаляется символ, стоящий посередине строки.

5. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов каждого второго символа ! на $.

6. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Составить программу для замены в строке длиной К символов всех пробелов на символ $.

7. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L>10, то удаляются все цифры.

8. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 3, то удаляются все числа, делящиеся на 3.

9. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 5, то подсчитывается количество скобок всех видов.

10. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L кратна 4, то первая часть строки меняется местами со второй.

11. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина L=10, то удаляются все A...Z.

12. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина

L >15, то удаляются все a…z.

13. В строке символов поменять местами символы на четных и нечетных позициях.

14. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L, и, если длина

L >6, то выделяется подстрока в { } скобках.

15. Ввести с клавиатуры строку символов. Признак окончания ввода строки – нажатие клавиши "Ввод". Программа должна определить длину введенной строки L и, если длина

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

В программах предусмотреть ввод исходной информации о четырех студентах:

фамилия и инициалы;

год рождения;

год поступления в БГУИР;

оценки за первый семестр: физика, высшая математика, информатика.

1. Распечатать список студентов, упорядоченный по алфавиту.

2. Распечатать список студентов, упорядоченный по году рождения.

3. Распечатать список студентов-отличников, упорядоченный по году поступления.

4. Распечатать анкетные данные студентов, сдавших сессию на 4 и 5.

5. Распечатать список студентов, фамилии которых начинаются с буквы Б, и их оценки по всем предметам.

6. Распечатать анкетные данные отличников.

7. Распечатать список студентов, фамилии которых начинаются с буквы А, и их даты рождения.

8. Распечатать анкетные данные студентов, имеющих оценку 3 в сессию.

9. Распечатать список студентов и их оценки. Фамилии студентов начинаются с букв В и Г.

10. Распечатать фамилии и даты рождения студентов, не имеющих оценок 3.

11. Вычислить общий средний балл всех студентов и распечатать список студентов со средними баллами выше общего среднего балла.

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

13. Распечатать анкетные данные студентов, имеющих оценку 2.

14. Распечатать анкетные данные студентов, имеющих оценку 5 по информатике.

15. Распечатать анкетные данные студентов, имеющих оценку 4 по физике и оценку 5 по высшей математике.

L >5, то выделяется подстрока до первого пробела.

Основная литература 5[37-43]

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

  1. Как описываются строки в языке С?

  2. Чем отличаются функции scanf() и gets(), printf() и puts()?

  3. Как объединить две строки?

  4. Как подсчитать колтчество символов в строке?