Главная /
Программирование на языке C в Microsoft Visual Studio 2010 /
В приведенной программе используется указатель на функции, которые выполняют сортировку целочисленного массива "методом пузырька": void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int
В приведенной программе используется указатель на функции, которые выполняют сортировку целочисленного массива "методом пузырька":
void PuzSortInc (int*, int );
void PuzSortDec (int*, int);
int main (void)
{
int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
int i, n, alg;
<Объявление указателя pFun на функции>
n = sizeof(A)/sizeof(A[0]);
printf("Исходный массив: ");
for (i = 0; i < n; i++) printf(" %3d", A[i]);
printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\
2 - \"методом пузырька\" по убыванию: ");
scanf("%d", &alg);
switch (alg) {
case 1: pFun = PuzSortInc; break;
case 2: pFun = PuzSortDec; break;
default: printf("ERROR! Такого алгоритма не определено!");
}
if (pFun) {
pFun(A,n);
printf("\nSorted array: ");
for (i = 0; i < n; i++) printf(" %3d", A[i]);
};
return 0;
}
void PuzSortInc (int* arr, int size)
{
int i, j, buf;
for (i = 0; i < size - 1; i++ ) {
for (j = 0; j < size - 1; j++) {
if (arr[j] > arr[j + 1]) {
buf = arr[j];
arr[j] = arr[j+1];
arr[j+1] = buf;
}
}
}
}
void PuzSortDec (int* arr, int size)
{
int i, j, buf;
for (i = 0; i < size - 1; i++ ) {
for (j = 0; j < size - 1; j++) {
if (arr[j] < arr[j + 1]) {
buf = arr[j];
arr[j] = arr[j+1];
arr[j+1] = buf;
}
}
}
}
Функция PuzSortInc()
выполняет сортировку по возрастанию, функция PuzSortDec()
- по убыванию. Какой способ объявления указателя pFun
является неверным для приведенной программы?
вопрос
Правильный ответ:
void (*pFun) (int*, int);
void (*pFun) (int*, int) = NULL;
void *pFun (int*, int)
void (*pFun) (int*, int) = {PuzSortInc, PuzSortDec};
Сложность вопроса
83
Сложность курса: Программирование на языке C в Microsoft Visual Studio 2010
62
Оценить вопрос
Комментарии:
Аноним
Экзамен сдан на 5. Спасибо за ответы
05 мар 2020
Аноним
Это очень простой вопрос по интуиту.
25 дек 2018
Аноним
спасибо
22 апр 2017
Другие ответы на вопросы из темы программирование интуит.
- # Какие варианты объявления структуры Account и переменных acc1 и acc2 являются неверными для приведенной программы? void PrintStruct(char*, int, int); int main (void) { <Объявление структуры Account и переменных acc1, acc2> acc2 = &acc1; acc1.account = 346578; acc1.name = "Ivanov"; acc1.balance = 30000; PrintStruct(acc1.name, acc1.account, acc1.balance); acc2->account = 90005; acc2->name = "Pertov"; acc2->balance = 46000; PrintStruct(acc2->name, acc2->account, acc2->balance); return 0; } void PrintStruct(char *str, int a, int b) { printf("Name: %s\n", str); printf("Account: %d\n", a); printf("Balance: %d\n\n", b); }
- # Какое из перечисленных шестнадцатиричных чисел является наименьшим?
- # В каком случае вычисление факториала выполняется с помощью рекурсивной функции?
- # Какое влияние на скорость выполнения кода оказывает использование макросов с формальными параметрами?
- # В процессе выполнения приведенной программы возникает ошибка: #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i; int *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; } Каким образом можно изменить программу для ее корреткной работы?