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

Введение в программирование

рабочая программа дисциплины
Закреплена за кафедройКафедра информатики
Направление подготовки02.03.02. Фундаментальная информатика и информационные технологии
ПрофильПрограммирование и информационные технологии
Форма обученияОчная
Общая трудоемкость3 ЗЕТ
Учебный план02_03_02_Фундаментальная информатика и информационные технологии_ПиИТ-2023
Часов по учебному плану 108
в том числе:
аудиторные занятия 36
самостоятельная работа 45
контроль 27
Виды контроля по семестрам
экзамены: 1

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

Курс (семестр) 1 (1) Итого
Недель 15,5
Вид занятий УПРПДУПРПД
Лекции 18 18 18 18
Лабораторные 18 18 18 18
Сам. работа 45 45 45 45
Часы на контроль 27 27 27 27
Итого 108 108 108 108

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

Код занятия Наименование разделов и тем Вид занятия Семестр Часов Компетенции Литература
Раздел 1. Язык программирования Си
1.1. Основы алгоритмизации и быстрое введение в язык Си Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.2. Простая вычислительная программа Типы и константы Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.3. Линейный вычислительный процесс Лабораторные 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.4. Линейный вычислительный процесс Сам. работа 1 4 Л2.1, Л1.2, Л1.3, Л1.1
1.5. Операции и выражения Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.6. Ветвление Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.7. Ветвящийся вычислительный процесс Лабораторные 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.8. Ветвящийся вычислительный процесс Сам. работа 1 6 Л2.1, Л1.2, Л1.3, Л1.1
1.9. Циклы Лекции 1 2 Л2.1, Л1.2, Л1.3
1.10. Примеры прoграмм с циклами Лекции 1 2 Л2.1, Л1.2
1.11. Циклический вычислительный процесс Лабораторные 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.12. Циклический вычислительный процесс Сам. работа 1 6 Л2.1, Л1.2, Л1.3, Л1.1
1.13. Функции Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.14. Функции Лабораторные 1 6 Л2.1, Л1.2, Л1.3, Л1.1
1.15. Функции Сам. работа 1 9 Л2.1, Л1.2, Л1.3, Л1.1
1.16. Классы памяти и препроцессор Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.17. Массивы Указатели Лекции 1 2 Л2.1, Л1.2, Л1.3, Л1.1
1.18. Массивы Лабораторные 1 6 Л2.1, Л1.2, Л1.3, Л1.1
1.19. Массивы Сам. работа 1 20 Л2.1, Л1.2, Л1.3, Л1.1

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

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

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

Примеры заданий (открытые и закрытые ):
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)
Приложения
Приложение 1.   ФОС_02_03_02_ФИиИТ-2023.docx

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. Экзамен проводится в письменном виде. Пример экзаменационного билета и пример его решения приводится на электронном ресурсе данного курса. Перед изложением нового материала каждой лекции рассматриваются задачи, которые входят в экзаменационные билеты.