Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_си_15.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
392 Кб
Скачать
☆

3.3. Рекомендации по выполнению лабораторных работ

  1. Форматированный ввод-вывод. В программе описываются переменные трёх типов: char, int, double и строка символов, как массив типа char. С клавиатуры вводятся их значения. Используя, допустимые спецификаторы формата, вывести их представления. Объяснить полученный результат.

Пример: программа считывает символ и отображает его в различных форматах.

char ch; // int ch;

printf("Input a symbol: \n");

scanf("%c",& ch ); //ch=getchar();

printf("\n%c\n%5c\n%-5c\n%d\n%o\n%x\n",ch,ch,ch,ch,ch,ch);

Объяснить полученный результат.

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

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

Замечание: наиболее часто применяемые типы вещественных чисел представлены короткими (4 байта) и длинными (8 байт) данными. Си использует для этой цели спецификаторы float и double.

Короткий вещественный формат по модулю обеспечивает представление чисел в диапазоне от 10-38 до 10+38 примерно с 7-8 значащими цифрами. Для 8-байтового формата диапазон существенно расширяется –от 10-308 до 10+308, а количество значащих цифр увеличивается до 15-16.

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

  1. Использование функций. Известно, что любое четное число N (N > 0) может быть представлено в виде суммы двух простых чисел (N = N1 + N2). Написать программу, которая отыскивает все такие разложения (о не единственности решения свидетельствует простейший пример: 4 = 1 + 3 = 2 + 2).

Алгоритм работы программы: она перебирает все возможные слагаемые, первое из которых не превосходит 0.5*N, и если оба они оказываются простыми, выводит полученный результат. Анализ слагаемых выполняется с помощью функции prime, которая возвращает значение «1», если число простое, «0», если составное.

int prime(long N)

{

long j;

if(N < 4) return 1;

if(N%2 == 0) return 0;

for(j=3; j*j <= N; j+=2)

if(N%j==0) return 0;

return 1;

}

Обратить внимание, где будет располагаться функция.

  1. Преобразование типов, условные операторы. «Вечный календарь». Даны натуральные числа d, m, g, которые обозначают число, месяц и год. Определить день недели, на который попадает введенная дата.

Замечание. Дата должна находиться в диапазоне от 1582 до 4902 гг. Номер дня недели (воскресенье - 0, понедельник - 1, ..., суббота - 6) равен остатку от деления на 7 значения выражения

[ 2.6 * m - 0.2] + d + y + [y / 4] + [x / 4] - 2 * x.

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

d - номер дня в месяце (1, 2, ...);

m - номер месяца, нумерация начинается с марта (март - 1, апрель - 2,..., декабрь - 10, январь и февраль считаются месяцами с номерами 11 и 12 предыдущего года;

y - две младшие цифры года;

x - две старшие цифры года;

[a] - целая часть а.

Осуществить контроль ввода дат. Использовать операторы целочисленного деления и остатка от деления. При выводе наименования дня недели использовать оператор switch.

  1. Вложенные циклы. «Отгадай число». Генерируется случайное число в диапазоне от 0 до 99. Задано количество попыток. Если пользователь угадывает число, программа выводит сообщение "правильно"; в случае несовпадения выдается подсказка (больше/ меньше введённое число по сравнению со сгенерированным числом). В случае совпадения выдаётся сообщении о количестве попыток. При несовпадении печатается сгенерированное число. По окончании игры выдаётся запрос: «Продолжить игру Y/N?». Первый цикл – «начать новую игру», выход из второго цикла – количество попыток исчерпано или число угадано.

  2. Обработка текстовой информации. В программе вводится текст (признак конца вводав - CTRL/Z - в программе EOF). Считаем, что слова в тексте могут быть разделены символами пробел, табуляция, клавишей enter (количество пробельных символов произвольно). Все остальные знаки препинания (если они написаны слитно со словом) считать, что они относятся к слову (по желанию можно учитывать различные знаки препинания для выделения слов)

Написать программу:

  • печатающую количество слов в тексте и гистограмму длин вводимых слов. Изобразить гистограмму в виде горизонтальных полос, напечатанных знаками "*" (можно другими).

Пример входных данных:

Язык Си был разработан сотрудником Bell Laboratories

(отделение известной телефонной компании AT&T)

Деннисом Ритчи

В тексте 14 слов.

****

**

***

**********

***********

****

************

**********

*********

**********

********

*****

********

*****

  • печатающую количество предложений и количество слов в предложении (конец предложения - ". ? !"). Изобразить диаграмму в виде вертикальных полос, напечатанных знаками "*" (можно другими).

Пример.

Пусть в тексте 4 предложения. В 1-м предложении  4 слова, во 2-м  3, в 3-м  6, в 4-м  5.

*

* *

* * *

* * * *

* * * *

* * * *

  1. Битовые операции. Осуществить циклический сдвиг влево или вправо на заданное число позиций. Пользователь вводит число (целое или символ в зависимости от того, что сдвигают: integer или char), а также число позиций сдвига. В результате выполнения программы должно быть выведено на экран:

А) исходное число в десятичном и двоичном виде

Б) число, полученное в результате сдвига, в двоичном и десятичном формате.

Пример. Пусть исходное число 11710.

Двоичное представление: 011101012.

Сдвиг вправо на 3 позиции: 101011102 = 17410.

Сдвиг влево на 4 позиции: 010101112 = 8710.

  1. Решить задачу о ранце, используя битовые операции. Задаётся число предметов, их вес и полезность, а также грузоподъёмность ранца. Определить, какие предметы надо уложить в ранец, чтобы их суммарная стоимость была максимальной.

Замечание. Задача переборного типа. Перебор осуществляется по всевозможным представлениям двоичного числа. Количество комбинаций 2n, где n – количество предметов. Поиск комбинации, на которой суммарный вес предметов <= объёма ранца и суммарная стоимость предметов в ранце максимальная.