Задание 6 - Функции (лабораторная по Си)

Лабораторная работа для школ и вузов по решению задач с помощью функций на языке C (Си). Перечень задач лабораторной работы (клик по ссылке направляет на решение задачи, если таковое имеется):

  1. Определить функцию, получающую целое число и определяющую, является ли оно простым. Входной параметр – число. Возвращаемое значение - 1, если число простое, 0 - в противном случае.
  2. Написать функцию для расчета наибольшего общего делителя двух натуральных чисел, используя алгоритм Евклида. Входные параметры - два числа, возвращаемое значение - НОД.
  3. Написать функцию, определяющую, является ли целое число полным квадратом. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
  4. Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма.
  5. Определить функцию, получающую одномерный массив и целое число. Функция должна возвращать индекс первого элемента массива, значение которого равно полученному числу. Если такого элемента нет, то возвращается -1.
  6. Написать функцию f(a,n), определяющую, чередуются ли положительные и отрицательные элементы массива a из n элементов. Если элементы чередуются, то возвращается сумма положительных элементов, иначе возвращается произведение отрицательных элементов.
  7. Функция получает два предложения, в которых имеется буква a. Она должна определять, в каком из предложений эта буква имеет больший порядковый номер. Если в предложении имеются несколько букв а, то должна быть учтена последняя из них. Возвращаемое значение - 1, если в первом предложении, 2 – во втором, 0 – если в обоих предложениях буква имеет одинаковый номер.
  8. Написать программу, определяющую, упорядочены ли строго по возрастанию элементы одномерного массива. Входной параметр – одномерный массив. Возвращаемое значение – 1, если упорядочены, 0 - в противном случае.
  9. Описать функцию, вычисляющую y = x1 + x1x2 + x1x2x3 + … + x1x2…xm, где m – либо номер первого отрицательного элемента массива x, либо номер последнего элемента, если в массиве x нет отрицательных элементов. xi – элементы массива x. Входной параметр – одномерный массив. Возвращаемое значение – вычисленное значение y.
  10. Определить функцию, вычисляющую Евклидово расстояние между точками. Входные параметры – два одномерных массива, содержащие координаты точек. Возвращаемое значение – расстояние.
  11. Написать функцию, определяющую, является ли целое число степенью пятерки. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
  12. Написать функцию, вычисляющую - число сочетаний из n по k. Входные параметры – n, k. Возвращаемое значение – число сочетаний.
  13. Написать функцию, определяющую, является ли число палиндромом. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
  14. Написать функцию, вычисляющую длину вектора. Входной параметр – одномерный массив, содержащий координаты вектора. Возвращаемое значение – длина.
  15. Описать функцию, определяющую минимальное из чисел X0 ? X1, X1 ? X2, … ,Xn?2 ? Xn?1, где Xi??– элементы массива x. Входной параметр – одномерный массив. Возвращаемое значение – минимальное из чисел.
  16. Описать функцию, определяющую значение последнего из элементов массива, значение которого принадлежит диапазону [-k,k]. Входные параметры – одномерный массив, число k. Возвращаемое значение – число.
  17. Написать функцию, определяющую количество слов в предложении. Входной параметр – строка. Возвращаемое значение – количество слов. Слова в строке разделяются одним пробелом, в начале и конце пробелов нет.
  18. Написать функцию, определяющую минимальный по модулю элемент полученного массива. Входной параметр – одномерный массив. Возвращаемое значение – число.
  19. Написать функцию, вычисляющую скалярное произведение двух векторов. Входные параметры – два одномерных массива, содержащие координаты векторов. Возвращаемое значение – скалярное произведение.
  20. Определить функцию для расчета доли (в процентах) некоторой буквы в предложении. Входные параметры – строка, символ. Возвращаемое значение – доля.

Работоспособность всех программ проверена в CodeBlocks 16.01 (MinGW, Windows 10). Свои решения нерешённых программ и пожелания по улучшению существующих можете давать в комментариях внизу страницы.

Скачать файл лабораторной и все исходные коды программ в архиве:



№1: Определить функцию, получающую целое число и определяющую, является ли оно простым. Входной параметр – число. Возвращаемое значение - 1, если число простое, 0 - в противном случае.

#include <stdio.h>

int type(int a){
    int i = 2, count = 0;
    while (count == 0 && i < a){
        if (a % i == 0)
            count++;
        i++;
    }
    if (count == 0)
        return 1;
    else
        return 0;
}

int main(){
    int a;
    printf("Enter number: ");
    scanf("%d", &a);
    printf("Result: %d", type(a));
    return 0;
}

№2: Написать функцию для расчета наибольшего общего делителя двух натуральных чисел, используя алгоритм Евклида. Входные параметры - два числа, возвращаемое значение - НОД.

#include <stdio.h>

int NOD(int a, int b){
    while (a != b){
        if (a > b){
            a -= b;
        } else {
            b -= a;
        }
    }
    return a;
}

int main(){
    int a, b;
    printf("Enter a and b: ");
    scanf("%d %d", &a, &b);
    printf("NOD = %d", NOD(a, b));
    return 0;
}

№3: Написать функцию, определяющую, является ли целое число полным квадратом. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.

#include <stdio.h>

int sum(int n){
    if ((sqrt(n) - (int)sqrt(n)) == 0.0)
        return 1;
    else
        return 0;
}

int main(){
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    printf("Result = %d", sum(n));
    return 0;
}

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

#include <stdio.h>

int sum(int n){
    int count = 0;
    while (n > 0){
        count += n % 10;
        n /= 10;
    }
    return count;
}

int main(){
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
    printf("Sum of digits = %d", sum(n));
    return 0;
}

№5: Определить функцию, получающую одномерный массив и целое число. Функция должна возвращать индекс первого элемента массива, значение которого равно полученному числу. Если такого элемента нет, то возвращается -1.

#include <stdio.h>

int min(int *arr, int N, int num){
    int i;
    for (i = 0; i < N; i++)
        if (arr[i] == num)
            return i;
    return -1;
}

int main()
{
    int i, N, *arr, num;
    printf("Enter the size of the array: ");
    scanf("%d", &N);
    arr = (int*)calloc(N, sizeof(int));
    printf("Enter the elements of the array:\n");
    for (i = 0; i < N; i++){
        printf("arr[%d] = ", i);
        scanf("%d", &arr[i]);
    }
    printf("Enter the number: ");
    scanf("%d", &num);
    printf("Index of the first element: %d", min(arr, N, num));
    return 0;
}

№8: Написать программу, определяющую, упорядочены ли строго по возрастанию элементы одномерного массива. Входной параметр – одномерный массив. Возвращаемое значение – 1, если упорядочены, 0 - в противном случае.

#include <stdio.h>

int min(int *arr, int N){
    int i;
    for (i = 0; i < N-1; i++)
        if (arr[i] >= arr[i+1])
            return 0;
    return 1;
}

int main()
{
    int i, N, *arr;
    printf("Enter the size of the array: ");
    scanf("%d", &N);
    arr = (int*)calloc(N, sizeof(int));
    printf("Enter the elements of the array:\n");
    for (i = 0; i < N; i++){
        printf("arr[%d] = ", i);
        scanf("%d", &arr[i]);
    }
    printf("Result: %d", min(arr, N));
    return 0;
}

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

#include <stdio.h>
#include <math.h>

int min(int *arr, int N){
    int i, min = *arr;
    for (i = 1; i < N; i++)
        if (abs(min) > abs(arr[i]))
            min = arr[i];
    return min;
}

int main()
{
    int i, N, *arr;
    printf("Enter the size of the array: ");
    scanf("%d", &N);
    arr = (int*)calloc(N, sizeof(int));
    printf("Enter the elements of the array:\n");
    for (i = 0; i < N; i++){
        printf("arr[%d] = ", i);
        scanf("%d", &arr[i]);
    }
    printf("Minimal element: %d", min(arr, N));
    return 0;
}

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

#include <stdio.h>
#include <string.h>

float precent(char STR[80], char sim)
{
    int i, count = 0;
    for (i = 0; i < strlen(STR); i++)
        if (STR[i] == sim)
            count++;
    return ((float)count/strlen(STR))*100.0;
}

int main()
{
    char str[80], symbol;
    int count = 0;
    printf("Enter the string:\n");
    gets(str);
    printf("Enter the symbol:\n");
    scanf("%c", &symbol);
    printf("%3.2f%%", precent(str, symbol));
    return 0;
}



Реклама