МИНОБРНАУКИ РОССИИ
федеральное государственное бюджетное образовательное учреждение высшего образования
«Алтайский государственный университет»

Основы программирования

рабочая программа дисциплины
Закреплена за кафедройКафедра информатики
Направление подготовки02.03.02. Фундаментальная информатика и информационные технологии
ПрофильПрограммирование и информационные технологии
Форма обученияОчная
Общая трудоемкость6 ЗЕТ
Учебный план02_03_02_Фундаментальная информатика и информационные технологии_ПиИТ-2021
Часов по учебному плану 216
в том числе:
аудиторные занятия 72
самостоятельная работа 144
Виды контроля по семестрам
зачеты: 2

Распределение часов по семестрам

Курс (семестр) 1 (2) Итого
Недель 22,5
Вид занятий УПРПДУПРПД
Лабораторные 72 72 72 72
Сам. работа 144 144 144 144
Итого 216 216 216 216

Программу составил(и):
старший преподаватель, Смолякова Лариса Ленгардовна

Рецензент(ы):
к.ф.-м.н., доцент, Пономорев И.В.

Рабочая программа дисциплины
Основы программирования

разработана в соответствии с ФГОС:
Федеральный государственный образовательный стандарт высшего образования - бакалавриат по направлению подготовки 02.03.02 Фундаментальная информатика и информационные технологии (приказ Минобрнауки России от 23.08.2017 г. № 808)

составлена на основании учебного плана:
02.03.02 Фундаментальная информатика и информационные технологии
утвержденного учёным советом вуза от 27.09.2022 протокол № 1.

Рабочая программа одобрена на заседании кафедры
Кафедра информатики

Протокол от 26.06.2023 г. № 4
Срок действия программы: 2023-2024 уч. г.

Заведующий кафедрой
к.ф.-м.н., доцент Козлов Денис Юрьевич


Визирование РПД для исполнения в очередном учебном году

Рабочая программа пересмотрена, обсуждена и одобрена для
исполнения в 2023-2024 учебном году на заседании кафедры

Кафедра информатики

Протокол от 26.06.2023 г. № 4
Заведующий кафедрой к.ф.-м.н., доцент Козлов Денис Юрьевич


1. Цели освоения дисциплины

1.1.Целями освоения дисциплины являются:
- формирование базовых знаний в области основ алгоритмизации и программирования;
- выработка навыков решения типичных задач с использованием ЭВМ;
- овладение приемами разработки и отладки программ в современных средах программирования.
Изучение дисциплины направлено
- на развитие у обучающихся алгоритмического мышления, систематизацию принципов построения языков программирования и подходов к разработке программ для ЭВМ;
- на формирование навыков реализации алгоритмов на высокоуровневом императивном языке программирования; разработки, отладки и тестирования программ;
- на подготовку обучающихся к системному восприятию дальнейших дисциплин из учебного плана, использующих навыки алгоритмизации и программирования;
- на получение представлений об основных идеях структурного программирования и развитие способностей сознательно использовать материал курса, умение разбираться в существующих языковых и программных средствах и условиях их применения.

2. Место дисциплины в структуре ООП

Цикл (раздел) ООП: Б1.О.02

3. Компетенции обучающегося, формируемые в результате освоения дисциплины

ОПК-2Способен применять компьютерные/суперкомпьютерные методы, современное программное обеспечение, в том числе отечественного происхождения, для решения задач профессиональной деятельности
ОПК-2.1 Знает современные информационные технологии и программные средства, в том числе отечественного производства при решении задач профессиональной деятельности.
ОПК-2.2 Умеет выбирать современные информационные технологии и программныесредства, в том числе отечественного производства при решении задач профессиональнойдеятельности.
ОПК-2.3 Владеет навыками применения современных информационных технологий и программных средств, в том числе отечественного производства, при решении задач профессиональной деятельности.
В результате освоения дисциплины обучающийся должен
3.1.Знать:
3.1.1.о различных парадигмах программирования и современном уровне развития языков и технологий программирования;
о сложности программных систем и методах ее преодоления;
об основах построения трансляторов;
основные понятия в области алгоритмизации, свойства алгоритмов, методы анализа сложности алгоритмов;
синтаксис и базовые конструкции языков C и С++, основные возможности и приемы программирования на этих языках;
принципы структурного программирования;
назначение, устройство и свойства основных структур данных: список, очередь, стэк, дерево, граф;
эффективные алгоритмы поиска и сортировки, алгоритмы решения задач теории графов.

3.2.Уметь:
3.2.1.разрабатывать алгоритмы решения типичных задач и реализовывать их на языке С;
применять при решении алгоритмических задач типичные алгоритмы и структуры данных;
использовать для разработки и отладки программ современные интегрированные среды разработки.
3.3.Иметь навыки и (или) опыт деятельности (владеть):
3.3.1.приемами чтения, построения и записи алгоритмов;
навыками написания и отладки программ на высокоуровневом языке программирования в интегрированной среде разработки.

4. Структура и содержание дисциплины

Код занятия Наименование разделов и тем Вид занятия Семестр Часов Компетенции Литература
Раздел 1. Язык программирования Си
1.1. Линейный вычислительный процесс Лабораторные 2 2 Л2.1, Л1.2, Л1.3, Л1.1
1.2. Линейный вычислительный процесс Сам. работа 2 12 Л2.1, Л1.2, Л1.3, Л1.1
1.3. Ветвящийся вычислительный процесс Лабораторные 2 6 Л2.1, Л1.2, Л1.3, Л1.1
1.4. Ветвящийся вычислительный процесс Сам. работа 2 12 Л2.1, Л1.2, Л1.3, Л1.1
1.5. Циклический вычислительный процесс Лабораторные 2 8 Л2.1, Л1.2, Л1.3, Л1.1
1.6. Циклический вычислительный процесс Сам. работа 2 6 Л2.1, Л1.2, Л1.3, Л1.1
1.7. Функции Лабораторные 2 8 Л2.1, Л1.2, Л1.3, Л1.1
1.8. Функции Сам. работа 2 23 Л2.1, Л1.2, Л1.3, Л1.1
1.9. Массивы Лабораторные 2 10 Л2.1, Л1.2, Л1.3, Л1.1
1.10. Массивы Сам. работа 2 30 Л2.1, Л1.2, Л1.3, Л1.1
1.11. Строки Лабораторные 2 10 Л2.1, Л1.2, Л1.3, Л1.1
1.12. Строки Сам. работа 2 18 Л2.1, Л1.2, Л1.3, Л1.1
1.13. Структуры Лабораторные 2 6 Л2.1, Л1.2, Л1.3, Л1.1
1.14. Структуры Сам. работа 2 6 Л2.1, Л1.2, Л1.3, Л1.1
1.15. Файлы Лабораторные 2 4 Л2.1, Л1.2, Л1.3, Л1.1
1.16. Файлы Сам. работа 2 6 Л2.1, Л1.2, Л1.3, Л1.1
Раздел 2. Алгоритмы и структуры данных
2.1. Базовые методы сортировки Лабораторные 2 4 Л2.1, Л1.2, Л1.3, Л1.1
2.2. Базовые методы сортировки Сам. работа 2 10 Л2.1, Л1.2, Л1.3, Л1.1
2.3. Методы сортировки с линейно-логарифмической сложностью Лабораторные 2 4 Л2.1, Л1.2, Л1.3, Л1.1
2.4. Методы сортировки с линейно-логарифмической сложностью Сам. работа 2 7 Л2.1, Л1.2, Л1.3, Л1.1
2.5. Анализ сложности алгоритмов сортировки Лабораторные 2 4 Л2.1, Л1.2, Л1.3, Л1.1
2.6. Анализ сложности алгоритмов сортировки Сам. работа 2 8 Л2.1, Л1.2, Л1.3, Л1.1
2.7. Динамические структуры данных Лабораторные 2 6 Л2.1, Л1.2, Л1.3, Л1.1
2.8. Динамические структуры данных Сам. работа 2 6 Л2.1, Л1.2, Л1.3, Л1.1

5. Фонд оценочных средств

5.1. Контрольные вопросы и задания для проведения текущего контроля и промежуточной аттестации по итогам освоения дисциплины
Оценочные материалы для текущего контроля (лабораторные работы, тесты) размещены в онлайн-курсе на
образовательном портале: https://portal.edu.asu.ru/course/view.php?id=3188

Оценка сформированности компетенции
ОПК-2: Способен применять компьютерные/суперкомпьютерные методы, современное программное обеспечение, в том числе отечественного происхождения, для решения задач профессиональной деятельности

Примеры заданий (открытые и закрытые ):
1. Что выведет следующая программа?
#include <stdio.h>
void main() {
int a;
unsigned b;
if (sizeof(a)==sizeof(b))
printf(“YES”);
else
printf(“NO”);
}
Выберите один ответ:
а.Yes
б. Нет правильного варианта ответа
в. No
с.Возникнет ошибка компиляции
Ответ: а

2. Что выведет следующая программа?
#include <stdio.h>
void main() {
float f=2.0;
printf(“%d”, sizeof(f));
}
Ответ: 4
3. Если x=4 и y=7, то результатом вычисления выражения
x < 3 && y<7 || y!=6
будет число:
а.1
б. 4
с. 2
д. 3
е. 0
Ответ: е

4. Как обозначаются логические операции в языке Си?
Выберите один ответ:
а. && || !
б. && || !!
в. && // !
г. & | !
д. AND OR NOT
Ответ: а

5. Что выведет следующая программа?
#include <stdio.h>
void main() {
unsigned char p=0x0F;
if (p>>4)
printf(“%d”, p);
else
printf(“%d”, p+1);
}
Выберите один ответ:
а.1
б. 0
в.16
г. 0x10
д. 4
Ответ: в

6. Какое из следующих выражений является примером корректного употребления условной операции?
Выберите один ответ:
а.x<1 ? printf("x<1"); printf("x>=1");
б. x<1 ? printf("x<1") : printf("x>=1");
в. x<1 : printf("x<1") ? printf("x>=1");
г. x<1 ? printf("x<1") ? printf("x>=1");
д. x < 1 ? printf("x<1"); : printf("x>=1");
Ответ: б

7. Что выведет следующая программа?

#include <stdio.h>
void main() {
int p=10;
p=p>50? p++ : if (p<0) p/=2 else p*=2;
printf(“%d”, p);
}

Выберите один ответ:
а.20
б. 0
в. 5
г. 10
д. Нет правильного варианта ответа
е. 50
Ответ: д

8. Что выведет следующая программа?
#include <stdio.h>
void main() {
float f=5;
int x;
x=f%2;
printf(“%d”, x);
}
Выберите один ответ:
а. При компиляции программы возникнут ошибки
б. 5.250000
в. 1.000000
г. Нет правильного варианта ответа
д. 2.500000
Ответ: а

9. В каких строках программы содержатся ошибки?
Проверьте этот кусок строки должны стоять только в таком порядке и отсутствуют точки с запятыми в конце строк иначе вся суть нарушается

1. #include <stdio.h>
2.
3. void main() {
4. int a,b;
5. printf(“input a=”);
6. scanf(“%f”, a);
7. printf(“input b=”);
8. scanf(“%d”, &b);
9. c=a+b
10. printf(“a+b=%c, c”);
11. }
Выберите один или несколько ответов:
а. 1
б. 2
в. 3
г. 4
д. 5
е. 6
ж. 7
з. 8
и. 9
к.10
л.11
Ответ: е, и, к

10. Сколько первых символов в идентификаторах должны различаться для того, чтобы идентификаторы считались различными согласно стандарту "ANSI C"?
Выберите один ответ:
все
а. 8
б. 32
в. 64
г. 16
Ответ: б

11. Какие из следующих значений записаны в соответствии с синтаксисом языка Си?
Выберите один или несколько ответов:
а. 1.2009
б. 12009,0e-001
в. 1,2009
г. 12009.0e-1
д. 12009e-001
е. 12009.0E-001
Ответ: а, г, д, е

12. Какое значение получит переменная x после выполнения следующего оператора?
float x=1+1e+1e+1;
Выберите один ответ:
a. Оператор синтаксически не корректен
b. 12.000000
c. 4.000000
d. 2e2
Ответ: а

13. Как называется директива препроцессора для подключения внешних файлов (библиотек):
Выберите один ответ:
а. uses
б. income
в. include
г. extern
д. define
е. exclude
Ответ: в

14. В каких частях программы на языке Си могут располагаться объявления переменных?
а. Выберите один или несколько ответов:
б. Вне описаний функций
в. В любой точке тела функции main()
г. В начале тела функций main()
д. После заголовка функции main(), но перед ее телом
е. В любом месте программы
Ответ: е

15. Что выведет на экран следующая программа, если ее откомпилировать и исполнить?
#include <stdio.h>
#define max=5;

void main() {
int a=0;
a=max++;
printf(“%d”, a++);
}
Выберите один ответ:
а.6
б. 0
в. 7
г. 5
е. Возникнет ошибка компиляции
Ответ: е

16. Укажите, какие из следующих описаний массивов являются корректными.
Выберите один или несколько ответов:
а. int D[1..3];
б. int A[3]={1,3,5};
в. int B[3]={11,22};
г. int M[3];
д. int C[3]={0,1,2,3};
Ответ: б, в, г


17. Что выведет следующая программа, если ее откомпилировать и исполнить?
#include <stdio.h>
void main() {
int i, M[3]={1} ;
for (i=0; i<3;i++)
printf(“%d”, M[i]);
}
Выберите один ответ:
а. 111
б. 100
в. Нет правильного варианта ответа
с. 000
д. Выводимые программой значения неопределенны
е. 1 1 1
Ответ: б

18. Какое значение получит переменная st после выполнения следующего фрагмента программы, если при выполнении программы на ввод ей будет подана указанная в комментарии строка (без кавычек)?
char st[20];
gets (st); //Введенная строка “Hello world!”
Выберите один ответ:
а. Нет правильного варианта ответа
б. Hello world
в. Hello
г. Программа синтаксически некорректна
д. Helloworld!
е. Hello world!
Ответ: е

19. Сколько раз исполнится цикл в следующей программе?
void main() {
int i=1, j=1 ;
for (; ;) {
printf(“%d%d”, i,j);
}
}
а. Выберите один ответ:
б. Ни разу
в. При компиляции программы возникнет ошибка
г. Нет правильного варианта ответа
е. 1
д. Бесконечное количество раз
Ответ: д

20. Что выведет следующая программа?
#include <stdio.h>
void main() {
int i;
float s=0;
while (i>1) {
s=s+1/i;
i=i-1;
}
printf(“%f”, s);
}
Выберите один ответ:
а. Нет правильного варианта ответа
б. 1.000000
в. 0.20000
г. 2.283333
д. 0.000000
е. При компиляции программы возникнет ошибка
Ответ: д
5.2. Темы письменных работ для проведения текущего контроля (эссе, рефераты, курсовые работы и др.)
Не предусматривается
5.3. Фонд оценочных средств для проведения промежуточной аттестации
Промежуточная аттестация заключается в проведении экзамена по всему изученному курсу. Экзамен проводится в письменной форме по билетам. В билет входят 6 вопросов практико-ориентированного характера.

Методическое описание порядка проведения (процедуры) оценивания усвоенных компетенций на экзамене:
На экзамен выносится материал практических и лекционных занятий, результаты выполненных лабораторных работ, предусмотренных рабочей программой учебной дисциплины. Экзамен проводится в письменной форме. В билет включено семь заданий, соответствующие содержанию формируемых компетенций. На подготовку ответа студенту отводится 120 минут. Результат экзамена выражается оценкой «отлично», «хорошо», «удовлетворительно», «не удовлетворительно» согласно критериям, описанным в п. 2 настоящего документа.
Итоговая оценка за экзамен
О = 0.5*Э + 0.3*Л + 0.2*Т
Э – оценка за экзаменационную работу
Л – средняя оценка за лабораторные работы
Т – средняя оценка за тесты
Методическое описание порядка проведения (процедуры) оценивания усвоенных компетенций в процессе тестирования:
Тестирование проводится с помощью автоматизированной программы «Образовательный портал АлтГУ». На тестирование отводится 10 минут. Каждый вариант тестовых заданий включает 10 вопросов. За каждый правильно отвеченный вопрос дается 1 балл. Перевод баллов в оценку: 8.5-10 – «отлично», 7-8.4 – «хорошо», 5-6.9 – «удовлетворительно», 0-4.9 – «неудовлетворительно».
Методическое описание порядка проведения (процедуры) оценивания усвоенных компетенций в процессе выполнения лабораторного работы:
Защита выполненных заданий обучающимися происходят в виде беседы преподавателя с обучающимся на темы, связанные с изучаемой дисциплиной, которая рассчитана на выяснение объема знаний обучающегося по определенному разделу, теме, с демонстрацией разработанной компьютерной программы. Перевод баллов в оценку: 85-100 – «отлично», 70-84 – «хорошо», 50-69 – «удовлетворительно», 0-49 – «неудовлетворительно».
Общий порядок проведения процедур оценивания знаний, умений, навыков и (или) опыта деятельности, характеризующих этапы формирования компетенций определены в «Положении о проведении текущего контроля успеваемости и промежуточной аттестации обучающихся по образовательным программам высшего образования в ФГБОУ ВПО «Алтайский государственный университет» от 23.10.2014, №1690/п.

Пример экзаменационной работы
1. Типы, значения, операции, выражения
Изучите следующие выражения присвоения на языке C (<переменная> = <выражение>). Для каждого из них
укажите порядок вычисления и промежуточные результаты вычисления подвыражений. Укажите также значения и
тип (double, float, int, char, …) окончательного результата вычисления выражения, стоящего справа от оператора
присваивания, и значение с его типом, сохраняемое в переменной, стоящей слева от оператора присваивания. Для
логических выражений используйте TRUE и FALSE в качестве значений и тип int в качестве типа данных.
(a) char Grade;
Grade = 'F' - 4 % 2;
Выражение: Значение:....................Тип: ..........................
Переменная: Значение: ................... Тип: .........................
(b) int Number;
Number = 3 * 2 / 10.0;
Выражение: Значение:....................Тип: ..........................
Переменная: Значение: .................. Тип: ...........................
(c) float Taxes;
Taxes = (20 * 4 + 30 * 3)/50;
Выражение: Значение:....................Тип: ..........................
Переменная: Значение: ...................Тип: ..........................
(d) int Done;
Done = ((4 <= 7) && !(9.1 > 6));
Выражение: Значение:....................Тип: .......................
Переменная: Значение:...................Тип: ........................
(e) int Distance;
Distance = 3.5 + 3 / (2 + 3);
Выражение: Значение:....................Тип: ........................
Переменная: Значение:...................Тип: ..........................
(f) int Price;
Price = 5U / 2U + 13LU % (4U >> 1U);
Выражение: Значение:....................Тип: .......................
Переменная: Значение:.................... Тип: ......................
2. Управляющие конструкции
(a) Напишите на языке C программу, задающую пользователю несколько вопросов и выбирающую в зависимости от
его ответов модель автомобиля для него.
Вопросы.
1) Есть ли у Вас дети?
2) Много ли у Вас денег?
3) Нравятся ли Вам грузовики?
Предлагаемая в зависимости от ответов модель.
Porsche: не имеет детей, имеет много денег, не любит грузовики
Tundra: не имеет детей, имеет много денег, любит грузовики
Civic: не имеет детей, имеет мало денег
Villager: имеет детей, имеет много денег, не любит грузовики
Explorer: имеет детей, имеет много денег, любит грузовики
Lada: имеет детей, имеет мало денег
#include <stdio.h>
int main() {
// объявление переменных.
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

// ввод пользователя (проверка не требуется)
// вывод названия нужной модели автомобиля
}
(b) Перепишите следующий фрагмент программы, используя цикл for вместо цикла while.
int Max = 1900;
int Sum = 0;
while ((Max < 1950)){
Sum = Sum + (Max - 1900);
printf("Sum: %d\n",Sum);
Max = Max + 5;
}
// далее следует Ваш код
3. Функции
(a) Что выведет на экран следующая программа?
#include <stdio.h>
const int X = 3;
void Proc1 (int *Y) {
*Y = 6;
printf("Внутри Proc1, X: %d, Y: %d\n",X,*Y);
}
int Proc2 (int *Y, int Z) {
int X = 7;
Proc1 (&X);
Proc1 (Y);
*Y = 3;
printf("Внутри Proc2, X: %d, Y: %d, Z: %d\n",X,*Y,Z);
return (*Y + Z);
}
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

int main()
{
int A = 1, B = 3, C = 5;
C = Proc2 (&A,B);
printf("В итоге, A: %d, B: %d, C: %d\n",A,B,C);
return(0);
}
(b) Напишите функцию "sum_from_to" с двумя целыми аргументами first и last, возвращающую в качестве
значения сумму всех целых чисел между first и last, включая границы диапазона. Примеры вызова функции:
printf(“%d\n”, sum_from_to(4,7)); // выведет 22, т.к. 4+5+6+7 = 22
printf(“%d\n”, sum_from_to(-3,1)); // выведет -5, т.к. (-3)+(-2)+(-1)+0+1 = -5
printf(“%d\n”, sum_from_to(7,4)); // выведет 22, т.к. 7+6+5+4 = 22
printf(“%d\n”, sum_from_to(9,9)); // выведет 9
// далее следует Ваш код функции
4. Массивы, строки, указатели
(a) Допишите следующую программу. Цель –– домножить каждое четное значение в целочисленном массиве на 2, а
каждое нечетное значение –– на 3.
#include
const int MAXSIZE = . . . . ; // Задайте подходящий размер массива
int main()
{
// Здесь объявите целочисленный массив размера MAXSIZE.
// Инициализируйте его так, чтобы каждый его элемент содержал
// одну цифру номера Вашей зачетной книжки.
// Домножьте каждое четное целое на 2, а каждое нечетное – на 3.

return (0);
}
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

(b) Что будет выведено следующей программой?
void main(){
char x[80] = "А вы знаете, что 2x2=4?"
*(x+1) = ’ж’ - 3;
*(x+2) = x[7];
x[3] = 0;
printf("%s",x);
}
5. Структуры, файлы
(a) Допишите в следующей программе секцию инициализации переменной st так, чтобы программа порождала
следующий вывод: 2 п ц 1.400000
void main() {
struct altai {
char c;
float d;
};
struct russia {
int a[3];
char b;
struct altai barnaul;
};
struct russia st =
printf("%d\t%c\t%c\t%f",st.a[1],st.b,st.barnaul.c,st.barnaul.d);
}
(b) Каким будет вывод следующей программы в случае успешного завершения?
#include <stdio.h>
void main(){
int i;
char s[] = “свет”, t[]=“тьма”;
FILE *f=fopen(“exam.txt”,”wt”);
fprintf(f, “Ученье - %s, а неученье - %s”, s, t);
fclose(f);
f=fopen(“exam.txt”,“rt”);
fseek (f, 17, SEEK_SET);
for(i=0; i<4; i++)
printf(“%c”,fgetc(f));
fclose(f);
printf(“\n”);
}
6. Анализ алгоритмов
Дайте Θ-оценки временной сложности каждого из следующих фрагментов кода в зависимости от n. Все вызовы
функций m1, m2 и m3 есть Θ(1).
(a)
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n*n; j++)
m1(i,j);
for (int k = 1; k <= n*n*n; k++)
m2(i,j);
}
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

(b)
for (int i = 1; i <= n; i=2*i)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= j; k++)
m3(i,j,k);
7. Представление чисел
(a) Запишите числа X=14 и Y=–21 в прямом, обратном и дополнительном восьмиразрядном коде и вычислите X + Y
в обратном и дополнительном коде. Результаты вычислений представьте в десятичной и шестнадцатиричной
системах счисления.
(b) Запишите двоичное представление чисел A=20.0 и B=0.25 в формате чисел с плавающей точкой float.
Вычислите выражение A / B, указывая результаты промежуточных шагов (нормализации, выравнивания порядков и
т.п.).
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

Пример варианта с решениями
1. Типы, значения, операции, выражения
Изучите следующие выражения присвоения на языке C (<переменная> = <выражение>). Для каждого из них
укажите порядок вычисления и промежуточные результаты вычисления подвыражений. Укажите также значения и
тип (double, float, int, char, …) окончательного результата вычисления выражения, стоящего справа от оператора
присваивания, и значение с его типом, сохраняемое в переменной, стоящей слева от оператора присваивания. Для
логических выражений используйте TRUE и FALSE в качестве значений и тип int в качестве типа данных.
(a) char Grade;
Grade = 'F' - 4 % 2;
Выражение: Значение: 70 ...............Тип: int ......................
Переменная: Значение: ‘F’ ............... Тип: char ..................
(b) int Number;
Number = 3 * 2 / 10.0;
Выражение: Значение: 0.6 ..............Тип: double.................
Переменная: Значение: 0................ Тип: int........................
(c) float Taxes;
Taxes = (20 * 4 + 30 * 3)/50;
Выражение: Значение:3..................Тип: int ......................
Переменная: Значение: 3.0 ..............Тип: float ...................
(d) int Done;
Done = ((4 <= 7) && !(9.1 > 6));
Выражение: Значение: FALSE ........Тип: int ....................
Переменная: Значение: 0................Тип: int ....................
(e) int Distance;
Distance = 3.5F + 3L / (2 + 3);
Выражение: Значение: 3.5 ..............Тип: float .................
Переменная: Значение: 3 ................Тип: int ......................
(f) int Price;
Price = 5U / 2U + 13LU % (4U >> 1U);
Выражение: Значение: 3.................Тип: unsigned long int
Переменная: Значение: 3................. Тип: int...................
2. Управляющие конструкции
(a) Напишите на языке C программу, задающую пользователю несколько вопросов и выбирающую в зависимости от
его ответов модель автомобиля для него.
Вопросы.
1) Есть ли у Вас дети?
2) Много ли у Вас денег?
3) Нравятся ли Вам грузовики?
Предлагаемая в зависимости от ответов модель.
Porsche: не имеет детей, имеет много денег, не любит грузовики
Tundra: не имеет детей, имеет много денег, любит грузовики
Civic: не имеет детей, имеет мало денег
Villager: имеет детей, имеет много денег, не любит грузовики
Explorer: имеет детей, имеет много денег, любит грузовики
Lada: имеет детей, имеет мало денег
#include <stdio.h>
int main() {
// объявление переменных.
int hasChildren; // Есть ли дети?
int hasMoney; // Много ли денег?
int lovesTrucks; // Любит ли грузовики?
// ввод пользователя (проверка не требуется)
// вывод названия нужной модели автомобиля
}
(b) Перепишите следующий фрагмент программы, используя цикл for вместо цикла while.
int Max = 1900;
int Sum = 0;
while ((Max < 1950)){
Sum = Sum + (Max - 1900);
printf("Sum: %d\n",Sum);
Max = Max + 5;
}
// далее следует Ваш код
3. Функции
(a) Что выведет на экран следующая программа?
#include <stdio.h>
const int X = 3;
void Proc1 (int *Y) {
*Y = 6;
printf("Внутри Proc1, X: %d, Y: %d\n",X,*Y);
}
int Proc2 (int *Y, int Z) {
int X = 7;
Proc1 (&X);
Proc1 (Y);
*Y = 3;
printf("Внутри Proc2, X: %d, Y: %d, Z: %d\n",X,*Y,Z);
return (*Y + Z);
}
if(hasChildren) // есть дети
if(hasMoney) // | есть много денег
if(lovesTrucks) // | | любит грузовики
printf(“Explorer\n”); // | | | Explorer
else // | | не любит грузовики
printf(“Villager\n”); // | | Villager
else // | мало денег
printf(“Lada\n”); // | Lada
else // нет детей
if(hasMoney) // есть много денег
if(lovesTrucks) // | любит грузовики
printf(“Tundra\n”); // | | Tundra
else // | не любит грузовики
printf(“Porshe\n”); // | Porshe
else // мало денег
printf(“Civic\n”); // Civic
int Sum = 0;
for(int Max=1900; Max < 1950; Max+=5 ) {
Sum += (Max – 1900);
printf("Sum: %d\n",Sum);
}
printf(“Есть ли у Вас дети? (0-да/1-нет):”);
scanf(“%d”,&hasChildren);
printf(“Много ли у Вас денег? (0-да/1-нет):”);
scanf(“%d”,&hasMoney);
printf(“Любите ли Вы грузовики? (0-да/1-нет):”);
scanf(“%d”,&lovesTrucks);
int main()
{
int A = 1, B = 3, C = 5;
C = Proc2 (&A,B);
printf("В итоге, A: %d, B: %d, C: %d\n",A,B,C);
return(0);
}
(b) Напишите функцию "sum_from_to" с двумя целыми аргументами first и last, возвращающую в качестве
значения сумму всех целых чисел между first и last, включая границы диапазона. Примеры вызова функции:
printf(“%d\n”, sum_from_to(4,7)); // выведет 22, т.к. 4+5+6+7 = 22
printf(“%d\n”, sum_from_to(-3,1)); // выведет -5, т.к. (-3)+(-2)+(-1)+0+1 = -5
printf(“%d\n”, sum_from_to(7,4)); // выведет 22, т.к. 7+6+5+4 = 22
printf(“%d\n”, sum_from_to(9,9)); // выведет 9
// далее следует Ваш код функции
4. Массивы, строки, указатели
(a) Допишите следующую программу. Цель –– домножить каждое четное значение в целочисленном массиве на 2, а
каждое нечетное значение –– на 3. После этого необходимо вывести массив на экран.
#include
const int MAXSIZE = 7; // Задайте подходящий размер массива
int main()
{
// Здесь объявите целочисленный массив размера MAXSIZE.
// Инициализируйте его так, чтобы каждый его элемент содержал
// одну цифру номера Вашей зачетной книжки.
// Домножьте каждое четное целое на 2, а каждое нечетное – на 3.

return (0);
}
(b) Что будет выведено следующей программой?
void main(){
char x[80] = "А вы знаете, что 2x2=4?"
*(x+1) = ’ж’ - 3;
*(x+2) = x[7];
x[4] = 0;
printf("%s",x);
}
Ответ: Ага
5. Структуры, файлы
(a) Допишите в следующей программе секцию инициализации переменной st так, чтобы программа порождала
следующий вывод: 2 Ш Ы 1.400000
void main() {
struct altai {
char c;
float d;
};
struct russia {
int a[3];
char b;
struct altai barnaul;
};
struct russia st = { {1,2,3}, ‘Ш’, {‘Ы’, 1.4} };
printf("%d\t%c\t%c\t%f",st.a[1],st.b,st.barnaul.c,st.barnaul.d);
}
(b) Каким будет вывод следующей программы в случае успешного завершения?
#include <stdio.h>
void main(){
int i;
char s[] = “свет”, t[]=“тьма”;
FILE *f=fopen(“exam.txt”,”wt”);
fprintf(f, “Ученье - %s, а неученье - %s”, s, t);
fclose(f);
f=fopen(“exam.txt”,“rt”);
fseek (f, 17, SEEK_SET);
for(i=0; i<4; i++)
printf(“%c”,fgetc(f));
fclose(f);
printf(“\n”);
}
ответ: неуч
6. Анализ алгоритмов
Дайте Θ-оценки временной сложности каждого из следующих фрагментов кода в зависимости от n. Все вызовы
функций m1, m2 и m3 есть Θ(1).
(a)
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n*n; j++)
m1(i,j);
for (int k = 1; k <= n*n*n; k++)
m2(i,j);
}

Ответ: Сложность фрагмента: Θ(n^4)
(b)
for (int i = 1; i <= n; i=2*i)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= j; k++)
m3(i,j,k);

Ответ: Сложность фрагмента: Θ(n^2 log n)
Приложения

6. Учебно-методическое и информационное обеспечение дисциплины

6.1. Рекомендуемая литература
6.1.1. Основная литература
Авторы Заглавие Издательство, год Эл. адрес
Л1.1 Подбельский В.В., Фомин С.С. Курс программирования на языке Си: Учебники Издательство "ДМК Пресс", 2012 e.lanbook.com
Л1.2 Смирнов А.А. Технологии программирования : учебно-практическое пособие [Электронный ресурс]: Учебно-практическое пособие Евразийский открытый институт, 2011 // ЭБС "Университетская библиотека ONLINE" biblioclub.ru
Л1.3 Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона: Учебные пособия Издательство "ДМК Пресс", 2010 e.lanbook.com
6.1.2. Дополнительная литература
Авторы Заглавие Издательство, год Эл. адрес
Л2.1 Кауфман В.Ш. Языки программирования. Концепции и принципы: Учебник М.: ДМК Пресс // ЭБС "Лань", 2011 e.lanbook.com
6.2. Перечень ресурсов информационно-телекоммуникационной сети "Интернет"
Название Эл. адрес
Э1 C — The ISO Standard — Rationale, Revision 5.10 (англ.) (апрель 2004). — Обоснование и пояснения для стандарта C99. – http://www.open-std.org/JTC1/SC22/WG14/www/docs/C99RationaleV5.10.pdf
Э2 ISO/IEC JTC1/SC22/WG14 official home – Официальная страница международной рабочей группы по стандартизации языка программирования Си. – http://www.open-std.org/JTC1/SC22/WG14/
Э3 Поисковые системы - yandex.ru, google.com
Э4 Свободная энциклопедия Википедия – http://ru.wikipedia.org
Э5 Форум разработчиков программного обеспечения - Stackoverflow.com
Э6 Интернет-университет информационных технологий. – http://www.intuit.ru
Э7 Образовательный курс Основы программирования на платформе MOODLE portal.edu.asu.ru
6.3. Перечень программного обеспечения
Интегрированная среда разработки
Компилятор С/С++
Текстовый редактор
Microsoft Windows
Microsoft Office
7-Zip
AcrobatReader
Microsoft Office 2010 (Office 2010 Professional, № 4065231 от 08.12.2010), (бессрочно);
Microsoft Windows 7 (Windows 7 Professional, № 61834699 от 22.04.2013), (бессрочно);
Chrome (http://www.chromium.org/chromium-os/licenses), (бессрочно); 7-Zip (http://www.7-zip.org/license.txt), (бессрочно);
AcrobatReader (http://wwwimages.adobe.com/content/dam/Adobe/en/legal/servicetou/Acrobat_com_Additional_TOU-en_US-20140618_1200.pdf), (бессрочно);
ASTRA LINUX SPECIAL EDITION (https://astralinux.ru/products/astra-linux-special-edition/), (бессрочно);
LibreOffice (https://ru.libreoffice.org/), (бессрочно);
Веб-браузер Chromium (https://www.chromium.org/Home/), (бессрочно);
Антивирус Касперский (https://www.kaspersky.ru/), (до 23 июня 2024);
Архиватор Ark (https://apps.kde.org/ark/), (бессрочно);
Okular (https://okular.kde.org/ru/download/), (бессрочно);
Редактор изображений Gimp (https://www.gimp.org/), (бессрочно)
6.4. Перечень информационных справочных систем
1. Образовательный портал АлтГУ [Электронный ресурс]: http://portal.edu.asu.ru
2. Издательство «Лань» - электронно-библиотечная система [Электронный
ресурс]: http://e.lanbook.com
3. Издательство МЦНМО. Свободно распространяемые книги издательства
Московского центра непрерывного математического образования
[Электронный ресурс]: www.mccme.ru/free-books
4. Математическая библиотека [Электронный ресурс]: www.math.ru/lib
7. Электронная библиотечная система Алтайского государственного
университета [Электронный ресурс]: http://elibrary.asu.ru
8. Научная электронная библиотека Elibrary [Электронный ресурс]:
http://elibrary.ru

7. Материально-техническое обеспечение дисциплины

Аудитория Назначение Оборудование
Учебная аудитория для проведения занятий лекционного типа, занятий семинарского типа (лабораторных и(или) практических), групповых и индивидуальных консультаций, текущего контроля и промежуточной аттестации, курсового проектирования (выполнения курсовых работ), проведения практик Стандартное оборудование (учебная мебель для обучающихся, рабочее место преподавателя, доска)
Помещение для самостоятельной работы помещение для самостоятельной работы обучающихся Компьютеры, ноутбуки с подключением к информационно-телекоммуникационной сети «Интернет», доступом в электронную информационно-образовательную среду АлтГУ
107Л лаборатория информационных технологий - компьютерный класс - учебная аудитория для проведения занятий семинарского типа (лабораторных и(или) практических); проведения групповых и индивидуальных консультаций, текущего контроля и промежуточной аттестации Учебная мебель на 18 посадочных мест; компьютеры: марка HP, модель ProOne 400 - 18 единиц; проектор: марка SMART, модель UF70 - 1 единица; интерактивная доска: марка SMART Board модель SMB680 - 1 единица

8. Методические указания для обучающихся по освоению дисциплины

В процессе освоения курса "Основы программирования" обучающийся будет сталкиваться с материалами разного рода. Ниже даны краткие инструкции по их использованию и освоению.

1. Рабoчая программа дисциплины

Рабочая программа дисциплины -- официальный документ, определяющий содержание курса. С ним следует ознакомиться, чтобы понимать что конкретно будет изучаться в данном курсе.

2. Глoссарий

Глоссарий -- справочник основных понятий и определений терминов, используемых в курсе. Для успешного освоения курса и сдачи экзамена, совершенно необходимо выучить наизусть и быть способным привести не только определение, но и пару-тройку фрагментов кода, иллюстрирующих данное понятие.

3. Слайды к лекциям

Слайды к лекциям могут служить кратким конспектом лекций. Используйте их как план освоения прочих материалов: видеолекций, текстов и пр. В начале каждой презентации содержатся задания для самопроверки, которые могут дать представление о наиболее сложных вопросах в тестах.

4. Видеолекции

Видеолекции смонтированы на основе звукозаписей "живых" лекций и до некоторой степени способны их заменить. Пока они не покрывают полный курс, но их коллекция неуклонно пополняется. Используйте их для освежения в памяти рассмотренного материала. К сожалению, при просмотре видеолекций нет возможности задать вопрос лектору, однако его можно задать а) в личном сообщении преподавателю, б) в группе ВКонтакте vk.com/asuop2014, в) на очной консультации.

5. Лабораторные работы

Выполнение лабораторных работ -- основа практических занятий. Основные навыки программирования вырабатываются именно в эти моменты. Для выполнения работы необходимо

получить вариант задания у преподавателя, ведущего практические занятия;
обратившись к нужной лабораторной работе,загрузить документ с описанием работы;
внимательно прочитать задание к работе (как правило, на второй странице документа);
разработать, отладить и оттестировать программы, решающие указанные задачи;
составить отчёт о лабораторной работе по шаблону (см. ссылку в 0-м разделе курса);
загрузить PDF-версию отчета, используя нужный элемент "Лабораторная работа №..." (при необходимости вместо уже загруженного варианта отчета всегда можно загрузить и его обновленную версию);
очно защитить результаты работы перед преподавателем и получить оценку.

Оценки за лабораторные работы можно просмотреть через пункт меню "Оценки", расположенном на главной странице курса в её левой нижней части (Настройки\Управление курсом\Оценки).

Как правило на выполнение лабораторной работы отводится 3 недели, при этом сложность работ возрастает с увеличением номера лабораторной работы. По этой причине не рекомендуется затягивать первые простые работы.

6. Шаблон отчета о лабораторной работе

Шаблон отчета -- Word-документ, содержащий пример оформления отчета о выполнении лабораторной работы. Используйте этот документ как образец содержания и стиля оформления отчета, в том числе и в ситуациях, когда для подготовки отчета используются текстовые редакторы, отличные от Word-а.

7. Тесты

Тесты предназначены для контроля усвоения теоретического материала, а также умения читать и понимать код программ. Количество попыток на каждый тест ограничено тремя. Зачётные попытки выполнения теста осуществляются только в присутствии преподавателя (на практическом занятии или консультации). Оценка за тест определяется как максимальная из оценок, полученных в зачетных попытках. Результаты прочих попыток аннулируются, а попытки рассматриваются как тренировочно-ознакомительные.

Оценки за тесты сообщаются по окончании попытки, а также могут быть просмотрены в любой момент через пункт меню "Оценки", расположенный на главной странице курса в её левой нижней части (Настройки\Управление курсом\Оценки).

8. Рекомендации "Чтo почитать?"

Элемент "Чтo почитать?" имеется в большинстве разделов курса и содержит ссылки на фрагменты текстов учебников, вдумчивое прочтение которых является залогом успешного выполнения как тестовых заданий, так и лабораторных работ.

9. Рекомендации "Чтo посмотреть?"

На страницах с названием "Чтo посмотреть?" содержатся ссылки на видео-материалы, служащие либо полезными иллюстрациями к материалу соответствующего раздела курса, либо излагающие дополнительные сведения, необходимые для понимания раздела, но выходящие за рамки курса.

10. Примеры прoграмм

В папках с таким названием содержатся исходные коды программ, которые рассматривались во время лекций и фрагментарно представлены на слайдах к лекциям соответствующих разделов. Используйте эти исходные коды для самостоятельной компиляции и [пошагового] выполнения программ, чтобы детально разобраться в их устройстве и принципах работы. Кроме того, исходные коды полезны в роли заготовки программ, решающих задачи, поставленные в лабораторных работах.

11. Экзамен проводится в письменном виде. Пример экзаменационного билета и пример его решения приводится на электронном ресурсе данного курса. Перед изложением нового материала каждой лекции рассматриваются задачи, которые входят в экзаменационные билеты.