This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
courses:programming:topic1 [2016/09/20 13:44] tatyana.berlenko |
courses:programming:topic1 [2022/12/10 09:08] (current) |
||
---|---|---|---|
Line 11: | Line 11: | ||
* editor, compiler, linker | * editor, compiler, linker | ||
* gcc | * gcc | ||
- | * git | + | * git (кратко) |
* make | * make | ||
* Модель вычислений в архитектуре Фон-Неймана | * Модель вычислений в архитектуре Фон-Неймана | ||
Line 20: | Line 20: | ||
* Исполнение программ. Компиляция и интерпретация. | * Исполнение программ. Компиляция и интерпретация. | ||
* О языке C. Процесс компиляции программы. | * О языке C. Процесс компиляции программы. | ||
- | * Введение в синтаксис. Составные элементы программы. | + | * Введение в синтаксис. Составные элементы программы. Hello World. |
* Справочные материалы: | * Справочные материалы: | ||
* **KRC** Керниган, Ритчи. Язык программирования Си | * **KRC** Керниган, Ритчи. Язык программирования Си | ||
Line 28: | Line 28: | ||
* **KRC** главы 1-3. Изучить, подготовить вопросы. | * **KRC** главы 1-3. Изучить, подготовить вопросы. | ||
* **GIT** 1.1--1.3, 2.* | * **GIT** 1.1--1.3, 2.* | ||
- | |||
- | === Практика 1: Лабораторная работа №1 === | ||
- | |||
- | Задание: | ||
- | |||
- | 1. Создайте проект, состоящий из пяти файлов: main.c, print_str.c, get_name.c, print_str.h, get_name.h в каталоге, имя которого содержит Ваше имя, Фамилию и номер лабораторной (например, ivanov_ivan_1). | ||
- | * Файл get_name.c должен содержать описание функции, которая считывает из входного потока имя пользователя и возвращает его. | ||
- | * Файл get_name.h должен содержать прототип функции, которая считывает из входного потока имя пользователя и возвращает его. | ||
- | * Файл print_str.c должен содержать описание функции, которая принимает в качестве аргумента строку и выводит её (функция ничего не возвращает). | ||
- | * Файл print_str.h должен содержать прототип функции, которая принимает в качестве аргумента строку и выводит её (функция ничего не возвращает). | ||
- | * Файл main.c содержит главную функцию, которая вызывает функцию из файла get_name.h, добавляет к результату выполнения функции строку "Hello, " и передает полученную строку в функцию вывода строки из print_str.h. | ||
- | |||
- | 2. После того, как Ваш проект будет готов, создайте для него Makefile. | ||
- | |||
- | **В результате:** | ||
- | - Ваш проект, включающий в себя три файла .c, два файла .h и Makefile, должен быть выложен в репозиторий: | ||
- | - [[https://github.com/moevm/pr1-2016-6304|для группы 6304]] | ||
- | - [[https://github.com/moevm/pr1-2016-6303|для группы 6303]] | ||
- | - Должен быть создан pullrequest в ветку master. | ||
- | | ||
- | //__Файлы, созданные в процессе компиляции выкладывать не требуется!__// | ||
- | |||
- | ==== Дополнительная информация для выполнения лабораторной работы: ==== | ||
- | |||
- | Заголовочный файл стандартной библиотеки, который содержит функции консольного ввода/вывода: | ||
- | |||
- | <code c> | ||
- | stdio.h | ||
- | </code> | ||
- | |||
- | Заголовочный файл стандартной библиотеки, который содержит функции обработки строк и управления памятью: | ||
- | |||
- | <code c> | ||
- | string.h | ||
- | </code> | ||
- | |||
- | |||
- | Прототип функции вывода строки str: | ||
- | <code c> | ||
- | int puts(const char *str); | ||
- | </code> | ||
- | |||
- | Прототип функции конкатенации строк: | ||
- | <code c> | ||
- | char * strncat( char * destptr, char * srcptr, size_t num ); | ||
- | </code> | ||
- | Функция добавляет первые num символов строки srcptr к концу строки destptr, плюс символ конца строки. Если строка srcptr больше, чем количество копируемых символов num, то после скопированных символов неявно добавляется символ конца строки. [[http://cppstudio.com/post/698/|Подробнее]] | ||
- | |||
- | |||
- | Описание функции для ввода массива символов name (предполагается, что строка не содержит более 80 символов): | ||
- | <code c> | ||
- | char* get_name(){ | ||
- | char* name = (char*)malloc(80*sizeof(char)); | ||
- | int i = 0; | ||
- | char ch; | ||
- | while ((ch = getchar()) != '\n') | ||
- | { | ||
- | name[i] = ch; | ||
- | i++; | ||
- | } | ||
- | name[i] = '\0'; | ||
- | return name; | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | Описание главной функции: | ||
- | <code> | ||
- | int main(){ | ||
- | char hello[90] = "Hello, "; | ||
- | char* result; | ||
- | result = get_name(); | ||
- | print_str(strncat(hello, result, 80)); | ||
- | free(result); | ||
- | return 0; | ||
- | } | ||
- | </code> | ||
- |