Задание 6 - Функции (лабораторная по Си)
Лабораторная работа для школ и вузов по решению задач с помощью функций на языке C (Си). Перечень задач лабораторной работы (клик по ссылке направляет на решение задачи, если таковое имеется):
- Определить функцию, получающую целое число и определяющую, является ли оно простым. Входной параметр – число. Возвращаемое значение - 1, если число простое, 0 - в противном случае.
- Написать функцию для расчета наибольшего общего делителя двух натуральных чисел, используя алгоритм Евклида. Входные параметры - два числа, возвращаемое значение - НОД.
- Написать функцию, определяющую, является ли целое число полным квадратом. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
- Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма.
- Определить функцию, получающую одномерный массив и целое число. Функция должна возвращать индекс первого элемента массива, значение которого равно полученному числу. Если такого элемента нет, то возвращается -1.
- Написать функцию f(a,n), определяющую, чередуются ли положительные и отрицательные элементы массива a из n элементов. Если элементы чередуются, то возвращается сумма положительных элементов, иначе возвращается произведение отрицательных элементов.
- Функция получает два предложения, в которых имеется буква a. Она должна определять, в каком из предложений эта буква имеет больший порядковый номер. Если в предложении имеются несколько букв а, то должна быть учтена последняя из них. Возвращаемое значение - 1, если в первом предложении, 2 – во втором, 0 – если в обоих предложениях буква имеет одинаковый номер.
- Написать программу, определяющую, упорядочены ли строго по возрастанию элементы одномерного массива. Входной параметр – одномерный массив. Возвращаемое значение – 1, если упорядочены, 0 - в противном случае.
- Описать функцию, вычисляющую y = x1 + x1x2 + x1x2x3 + … + x1x2…xm, где m – либо номер первого отрицательного элемента массива x, либо номер последнего элемента, если в массиве x нет отрицательных элементов. xi – элементы массива x. Входной параметр – одномерный массив. Возвращаемое значение – вычисленное значение y.
- Определить функцию, вычисляющую Евклидово расстояние между точками. Входные параметры – два одномерных массива, содержащие координаты точек. Возвращаемое значение – расстояние.
- Написать функцию, определяющую, является ли целое число степенью пятерки. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
- Написать функцию, вычисляющую - число сочетаний из n по k. Входные параметры – n, k. Возвращаемое значение – число сочетаний.
- Написать функцию, определяющую, является ли число палиндромом. Входной параметр – число. Возвращаемое значение - 1, если является, 0 - в противном случае.
- Написать функцию, вычисляющую длину вектора. Входной параметр – одномерный массив, содержащий координаты вектора. Возвращаемое значение – длина.
- Описать функцию, определяющую минимальное из чисел X0 ? X1, X1 ? X2, … ,Xn?2 ? Xn?1, где Xi??– элементы массива x. Входной параметр – одномерный массив. Возвращаемое значение – минимальное из чисел.
- Описать функцию, определяющую значение последнего из элементов массива, значение которого принадлежит диапазону [-k,k]. Входные параметры – одномерный массив, число k. Возвращаемое значение – число.
- Написать функцию, определяющую количество слов в предложении. Входной параметр – строка. Возвращаемое значение – количество слов. Слова в строке разделяются одним пробелом, в начале и конце пробелов нет.
- Написать функцию, определяющую минимальный по модулю элемент полученного массива. Входной параметр – одномерный массив. Возвращаемое значение – число.
- Написать функцию, вычисляющую скалярное произведение двух векторов. Входные параметры – два одномерных массива, содержащие координаты векторов. Возвращаемое значение – скалярное произведение.
- Определить функцию для расчета доли (в процентах) некоторой буквы в предложении. Входные параметры – строка, символ. Возвращаемое значение – доля.
Работоспособность всех программ проверена в 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;
}