Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в среде ВС++.doc
Скачиваний:
10
Добавлен:
09.11.2018
Размер:
3.52 Mб
Скачать

3. Арифметические операции для целочисленных данных

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

Задание: дано 6-значное число L=ABCDkm, где A…D, k, m – цифры числа. Составить алгоритм и программу для определения цифр k и m числа L, формирования long-числа N = kmABCD и int-числа p = mk из цифр k и m.

/* Программа 3

ТЕСТ: L=333327, k=2, m=7, N=273333, p=72 . */

#include <stdio.h>

void main()

{ int i, k, m, p;

long L, N; // Почему переменным L и N назначен тип long ?

< Вывод шапки результатов программы, см. программу 1 или 2 >

printf("\n Введите L: ");

scanf("%ld",&L); // Внимание! Для типа long формат вв/выв ld

k = L / 10 % 10; // ‘/’– целочисленное деление: оба операнда – целые числа

m = L % 10; // остаток от деления, пример: 15 % 4 равно 3

N = L / 100 + L % 100 * 10000;

p = m*10 + k; // меняем порядок цифр

printf(" Для L=%ld \n результаты: k=%d m=%d p=%d N=%ld \n",

L, k, m, p, N);

}

Примечание: запись long-константы с символом L, пример: 123L

Вопросы и упражнения:

  1. Вычислите значения выражений 23/5, 23%5, 23/5.0.

  2. Выделите из числа 1234567 группу цифр 4567 одной операцией.

  3. Уберите из числа 1234567 группу цифр 345.

  4. Замените в числе 1234567 группу цифр 34 на цифру 9.

  5. Дано выражение: М = А*100 + В*1000 +123,0. Составьте программу для вычисления целочисленного значения М, если 500 < A < 5000, 100 < B < 1000. Выполните отладку и тестирование программы.

4. Циклы с заданным числом повторений

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

Типы переменных и констант в программах работы следует выбирать по содержанию задания. В алгоритме цикла и в программе использовать рекуррентные формулы (см. приложение 2.4).

З адание: вычислить сумму членов ряда (2), n, х – заданные величины:

/* Программа 4.1. Функция факториал k! = 1*2*3*…*k, 0! = 1 ТЕСТ: n = 4, x = 2.0, s = - 0.6666… */

#include <stdio.h>

void main()

{ float x, r, s;

int i, k, n;

< Вывод шапки результатов программы, см. программу 1 или 2 >

printf("\n Введите x и n: ");

scanf("%e%d", &x, &n); // С т р у к т у р а цикла:

r = 1; s = 0; // инициализация цикла – блок 1 цикла

for (k = 1; k <= n; k++) // оператор управления циклом –блок 2 цикла

{ // область (тело) цикла блок 3 цикла

r = -r*x / k; // член ряда и сумма вычисляются по рекуррентным

s = s + r; // формулам, в которых используются предыдущие

} // значения переменных r и s

printf("Для n = %d и х = %.4f сумма ряда s = %.4e", n, x, s);

}

/* Программа 4.2, вычисление таблицы значений функции y = exp(x/2) на интервале (a, b) с шагом h. ТЕСТ: a=0, b=2.0, h=1.0, y(0)=1, y(2)=2.718 … */

#include <stdio.h>

#include <math.h>

void main()

{ float a, b, h, x, y;

< Вывод шапки результатов программы, см. программу 1 или 2 >

printf("\n Введите a, b и h: ");

scanf("%e%e%e", &a, &b, &h);

printf("\n ТАБЛИЦА ФУНКЦИИ y = exp(x/2) \n\n");

printf(" x\t\t exp(x/2) \n" ); // столбцы таблицы

for (x = a; x <= b; x+=h)

printf("%6.3f %15.5f \n", x, exp(x/2));

} // В спецификации формата “ %6.3f ” число 6 – длина поля для вывода х

Вопросы и упражнения:

  1. Какие формулы называют рекуррентными? Как изменится программа 4.1, если не использовать рекуррентные формулы?

  2. Запишите рекуррентную формулу для вычисления (2k – 1)!, k = 1, 2, … .

  3. Поясните спецификацию формата “ %15.5f ”.

  4. На какие три группы делят операторы обработки данных с циклом?

  5. Модифицируйте программу для вычисления таблицы значений двух функций: ln(x) и xb , вывод данных выполните в экспоненциальном формате.

  6. Как в программе задаётся выравнивание данных по столбцам при выводе таблицы на экран?