помогите пожалуйста. не могу скачать ms. visual studio |
Программы на языке С, состоящие из нескольких файлов
Задание 3
- Получаемые результаты проверьте с помощью встроенного калькулятора calc операционной системы Windows.
- Все файлы проекта, кроме main.c, расположите на один уровень выше с помощью нотации ../.
- Дополните программу вывода преобразованного десятичного числа во всех системах счисления одновременно, т.е. по основаниям 2, 8, 16.
- Видоизмените программу так, чтобы функции преобразования десятичного числа возвращали преобразованное число в основной модуль программного проекта и в нем происходил вывод на консоль.
Пример 4. Напишите программу, в которой используется функция формирования накопительной суммы для заданного одномерного целочисленного массива, размерность которого вводится с клавиатуры пользователем.
Для пояснения формирования накопительной суммы приведем пример. Пусть задан исходный одномерный массив:
1 2 3 4 5 6 7.
Тогда массив накопительной суммы (cumsum – cumulative sum of elements):
1 3 6 10 15 21 28.
Программный код решения примера состоит из трех файлов:
// Файл main.c // Основной модуль проекта //#include <stdio.h> #include <conio.h> //#include <stdlib.h> #include <locale.h> #include "hcum.h" int main (void) { int i, n; int *M;// Указатель для исходного массива int *N;// Указатель для накопительного массива // Для поддержки русских шрифтов setlocale(LC_ALL, ".1251"); printf("\n Введите размерность одномерного массива: "); scanf_s("%d", &amp;amp;amp;n); M = (int *)calloc(n, sizeof(int)); // Формирование исходного массива for (i = 0; i < n; ++i) M[i] = (i + 1); printf("\n Исходный массив:\n "); for (i = 0; i < n; ++i) if (M[i] < 10) printf("%3d", M[i]); else if (M[i] == 10) printf(" %3d", M[i]); else if (M[i] > 10 && M[i] < 100) printf("%4d", M[i]); else printf("%5d", M[i]); printf("\n\n Массив накопительной суммы:\n "); // M - фактический аргумент функции cumsum() N = cumsum(M, n); for (i = 0; i < n; ++i) if (N[i] < 10) printf("%3d", N[i]); else if (N[i] == 10 ) printf(" %3d", N[i]); else if (N[i] > 10 && N[i] < 100) printf("%4d", N[i]); else printf("%5d", N[i]); // Освобождение выделенной памяти free(M); free(N); printf("\n\n\n Нажмите любую клавишу (Press any key): "); _getch(); return 0; }
// Подключаемый заголовочный Файл hcum.h #include <stdlib.h> #include <stdio.h> #include <locale.h> // Прототип функции cumsum() int *(cumsum)(int *arr, int n);
// Подключаемый файл fcum.c // Функция cumsum() #include "hcum.h" int *(cumsum)(int *arr, int n) { int i; int *SUM;// Указатель для накопительного массива // Выделение памяти для нового указателя SUM = (int *)calloc(n, sizeof(int)); setlocale(LC_ALL, ".1251"); // для русских шрифтов // Проверка выделенной памяти if (SUM == NULL) { printf("\n Память не выделена.\n"); exit(1); } // Основной код формирования накопительной суммы SUM[0] = arr[0]; for (i = 1; i < n; ++i) SUM[i] = SUM[i-1] + arr[i]; return (SUM); }
Следует обратить внимание на расположение заголовочного файла stdlib.h – он впереди подключаемого файла fcum.c, поскольку в файле fcum.c используется динамическое распределение памяти, для чего требуется библиотека stdlib.h. Формирование накопительной суммы выполнено в разработанной функции fcum.c.
В программе закомментированы библиотечные заголовочные файлы, которые включены в файл hcum.h. Сама накопительная функция cumsum() определена через указатель на функцию. Поэтому она возвращает указатель, который указывает на нулевой элемент массива накопительной суммы. Созданные файлы hcum.h и fcum.c расположены в папке проекта вместе с файлом главной функции main.c.
Возможный результат выполнения программы показан на рис. 17.7.