Введение
В этом лабораторном занятии (LabEx) вы научитесь создавать и использовать функции в программировании на языке C. В рамках лабораторной работы рассматриваются основные концепции объявления и определения функций, понимания аргументов функций, возврата значений из функций, работы с функциями типа void и практики использования функций. Вы изучите эти темы на практических примерах и упражнениях, приобретая навыки написания модульного и повторно используемого кода на языке C.
Лабораторная работа начинается с введения в основы объявления и определения функций, демонстрируя, как создавать и вызывать простые функции. Затем она углубляется в понимание аргументов функций, показывая, как передавать различные типы данных в качестве входных параметров функций. Также в лабораторной работе рассматривается концепция возвращаемых значений, которая научит вас возвращать данные из функций. Кроме того, в лабораторной работе исследуется использование функций типа void, которые не возвращают никаких значений. Наконец, у вас появится возможность практиковать и применять изученные концепции на различных упражнениях.
Объявление и определение функций
На этом этапе вы научитесь объявлять и определять функции в программировании на языке C. Функции являются основными строительными блоками, которые помогают организовать и модульно структурировать ваш код.
Начнем с создания нового файла с именем functions_demo.c в директории ~/project:
cd ~/project
touch functions_demo.c
Теперь напишем простое объявление и определение функции:
#include <stdio.h>
// Объявление функции (прототип)
void greet(char* name);
// Главная функция
int main() {
// Вызов функции
greet("LabEx User");
return 0;
}
// Определение функции
void greet(char* name) {
printf("Hello, %s! Welcome to C programming.\n", name);
}
Разберем основные компоненты:
void greet(char* name)- это объявление функции (прототип)- Функция принимает указатель на символ (строку) в качестве аргумента
voidуказывает, что функция не возвращает значения- Внутри
main()мы вызываем функцию с аргументом - Определение функции следует после главной функции и реализует фактическую логику
Скомпилируйте и запустите программу:
gcc functions_demo.c -o functions_demo
./functions_demo
Пример вывода:
Hello, LabEx User! Welcome to C programming.
Функции помогают вам:
- Организовать код в повторно используемые блоки
- Улучшить читаемость кода
- Сократить повторения
- Модульно структурировать программу
Понимание аргументов функций
На этом этапе вы научитесь работать с аргументами функций в программировании на языке C. Аргументы функций позволяют передавать данные в функции, делая их более гибкими и повторно используемыми.
Создадим новый файл с именем function_arguments.c в директории ~/project:
cd ~/project
touch function_arguments.c
Теперь напишем программу, демонстрирующую различные типы аргументов функций:
#include <stdio.h>
// Функция с несколькими аргументами
int calculate_rectangle_area(int length, int width) {
return length * width;
}
// Функция с аргументом типа с плавающей точкой
float convert_celsius_to_fahrenheit(float celsius) {
return (celsius * 9/5) + 32;
}
int main() {
// Использование целочисленных аргументов
int length = 5;
int width = 3;
int area = calculate_rectangle_area(length, width);
printf("Rectangle Area: %d square units\n", area);
// Использование аргумента типа с плавающей точкой
float celsius = 25.0;
float fahrenheit = convert_celsius_to_fahrenheit(celsius);
printf("%.1f°C is %.1f°F\n", celsius, fahrenheit);
return 0;
}
Разберем основные концепции:
- Функции могут принимать несколько аргументов разных типов
calculate_rectangle_area()принимает два целочисленных аргументаconvert_celsius_to_fahrenheit()принимает аргумент типа float- В языке C аргументы передаются по значению (создается копия)
- Функция может использовать эти аргументы в своих вычислениях
Скомпилируйте и запустите программу:
gcc function_arguments.c -o function_arguments
./function_arguments
Пример вывода:
Rectangle Area: 15 square units
25.0°C is 77.0°F
Основные моменты о аргументах функций:
- Аргументы предоставляют входные данные для функций
- Вы можете передавать переменные или прямые значения
- Количество и тип аргументов должны соответствовать объявлению функции
- Аргументы помогают сделать функции более универсальными и повторно используемыми
Возвращение значений из функций
На этом этапе вы научитесь возвращать значения из функций в программировании на языке C. Возвращаемые значения позволяют функциям выполнять вычисления и отправлять результаты обратно в вызывающий код.
Создадим новый файл с именем function_returns.c в директории ~/project:
cd ~/project
touch function_returns.c
Теперь напишем программу, демонстрирующую различные типы возвращаемых значений:
#include <stdio.h>
// Функция, возвращающая целое число
int square(int number) {
return number * number;
}
// Функция, возвращающая число с плавающей точкой
float calculate_average(int a, int b, int c) {
return (float)(a + b + c) / 3;
}
// Функция, возвращающая символ
char get_grade(int score) {
if (score >= 90) return 'A';
else if (score >= 80) return 'B';
else if (score >= 70) return 'C';
else if (score >= 60) return 'D';
else return 'F';
}
int main() {
// Использование возвращаемого целого значения
int num = 7;
int squared = square(num);
printf("Square of %d is %d\n", num, squared);
// Использование возвращаемого значения с плавающей точкой
int math = 85, science = 92, english = 78;
float average = calculate_average(math, science, english);
printf("Average score: %.2f\n", average);
// Использование возвращаемого символа
int student_score = 85;
char grade = get_grade(student_score);
printf("Student score %d gets grade %c\n", student_score, grade);
return 0;
}
Разберем основные концепции:
- Функции могут возвращать различные типы данных
square()возвращает целочисленный результатcalculate_average()возвращает число с плавающей точкойget_grade()возвращает символ- Ключевое слово
returnотправляет значение обратно в вызывающую функцию - Типы возвращаемых значений должны соответствовать объявлению функции
Скомпилируйте и запустите программу:
gcc function_returns.c -o function_returns
./function_returns
Пример вывода:
Square of 7 is 49
Average score: 85.00
Student score 85 gets grade B
Основные моменты о возвращаемых значениях:
- Возвращаемые значения позволяют функциям выполнять вычисления и отправлять результаты обратно
- Используйте соответствующие типы возвращаемых значений в зависимости от цели функции
- Вы можете использовать возвращаемые значения напрямую или сохранять их в переменных
- Возвращаемые значения делают функции более мощными и гибкими
Работа с функциями типа void
На этом этапе вы узнаете о функциях типа void в программировании на языке C. Функции типа void выполняют действия без возврата значения, что полезно для задач, которые не требуют отправки результата обратно.
Создадим новый файл с именем void_functions.c в директории ~/project:
cd ~/project
touch void_functions.c
Теперь напишем программу, демонстрирующую функции типа void:
#include <stdio.h>
// Функция типа void для вывода приветственного сообщения
void print_welcome() {
printf("Welcome to the C Programming Lab!\n");
}
// Функция типа void с параметрами для отображения информации о студенте
void display_student_info(char* name, int age) {
printf("Student Name: %s\n", name);
printf("Student Age: %d\n", age);
}
// Функция типа void для рисования простого паттерна
void draw_pattern(int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("* ");
}
printf("\n");
}
}
int main() {
// Вызов функций типа void
print_welcome();
// Функция типа void с параметрами
char* student_name = "LabEx User";
int student_age = 25;
display_student_info(student_name, student_age);
// Функция типа void для рисования паттерна
int pattern_size = 3;
printf("\nDrawing a %dx%d pattern:\n", pattern_size, pattern_size);
draw_pattern(pattern_size);
return 0;
}
Разберем основные концепции:
- Функции типа void имеют
voidв качестве типа возвращаемого значения - Они выполняют действия без возврата значения
print_welcome()просто выводит сообщениеdisplay_student_info()принимает параметры и выводит информациюdraw_pattern()создает визуальный паттерн с использованием вложенных циклов- Функции типа void вызываются как обычные функции
- В функциях типа void нельзя использовать
returnс значением
Скомпилируйте и запустите программу:
gcc void_functions.c -o void_functions
./void_functions
Пример вывода:
Welcome to the C Programming Lab!
Student Name: LabEx User
Student Age: 25
Drawing a 3x3 pattern:
* * *
* * *
* * *
Основные моменты о функциях типа void:
- Используются для действий, которые не требуют возврата значения
- Можут принимать параметры
- Полезны для вывода, логирования или выполнения конкретных задач
- Помогают организовать и модульно структурировать код
- Не могут возвращать значение с помощью
return
Практика использования функций
На этом последнем этапе вы примените все, что вы узнали о функциях в языке C, создав комплексную программу, которая демонстрирует различные типы функций и их использование.
Создадим файл с именем calculator.c в директории ~/project:
cd ~/project
touch calculator.c
Теперь напишем программу, которая реализует простой калькулятор с различными функциями:
#include <stdio.h>
// Функция для сложения двух чисел
int add(int a, int b) {
return a + b;
}
// Функция для вычитания двух чисел
int subtract(int a, int b) {
return a - b;
}
// Функция для умножения двух чисел
int multiply(int a, int b) {
return a * b;
}
// Функция для деления двух чисел с обработкой ошибок
float divide(int a, int b) {
if (b == 0) {
printf("Error: Division by zero!\n");
return 0;
}
return (float)a / b;
}
// Функция типа void для отображения меню калькулятора
void display_menu() {
printf("\n--- Simple Calculator ---\n");
printf("1. Addition\n");
printf("2. Subtraction\n");
printf("3. Multiplication\n");
printf("4. Division\n");
printf("5. Exit\n");
printf("Enter your choice: ");
}
int main() {
int choice, num1, num2;
float result;
while (1) {
display_menu();
scanf("%d", &choice);
// Условие выхода
if (choice == 5) {
printf("Goodbye!\n");
break;
}
// Проверка правильности выбора
if (choice < 1 || choice > 4) {
printf("Invalid choice. Try again.\n");
continue;
}
// Получение ввода от пользователя
printf("Enter two numbers: ");
scanf("%d %d", &num1, &num2);
// Выполнение вычислений в зависимости от выбора пользователя
switch (choice) {
case 1:
result = add(num1, num2);
printf("Result: %d + %d = %d\n", num1, num2, (int)result);
break;
case 2:
result = subtract(num1, num2);
printf("Result: %d - %d = %d\n", num1, num2, (int)result);
break;
case 3:
result = multiply(num1, num2);
printf("Result: %d * %d = %d\n", num1, num2, (int)result);
break;
case 4:
result = divide(num1, num2);
printf("Result: %d / %d = %.2f\n", num1, num2, result);
break;
}
}
return 0;
}
Разберем основные концепции:
- Используются различные типы функций (с возвращаемым значением, функции типа void)
- Функции выполняют конкретные математические операции
display_menu()- это функция типа void, которая отображает меню- Арифметические функции возвращают результаты вычислений
- Функция
main()реализует калькулятор с меню - Включена обработка ошибок при делении на ноль
- Используется оператор
switchдля выбора операции
Скомпилируйте и запустите программу:
gcc calculator.c -o calculator
./calculator
Пример взаимодействия:
--- Simple Calculator ---
1. Addition
2. Subtraction
3. Multiplication
4. Division
5. Exit
Enter your choice: 1
Enter two numbers: 10 5
Result: 10 + 5 = 15
--- Simple Calculator ---
...
Enter your choice: 5
Goodbye!
Основные моменты о использовании функций:
- Комбинируйте различные типы функций
- Используйте функции для разбиения сложных задач
- Реализуйте обработку ошибок
- Создавайте модульный и повторно используемый код
Резюме
В этом практическом занятии вы научились объявлять и определять функции в программировании на языке C, понимать аргументы функций, возвращать значения из функций, работать с функциями типа void и практиковать использование функций. Вы начали с создания простой функции для приветствия пользователя, а затем изучили более сложные функции с несколькими аргументами и возвращаемыми значениями. Вы также узнали, как использовать функции типа void и применять функции в своих программах. Эти фундаментальные концепции являются важными для создания модульного и повторно используемого кода на языке C.



