
Вопросы для госэкзамена (каф. Апп, 2013 год) Вычислительная техника и программирование (а.Б. Кикин)
Написать программу для сортировки массива N случайных чисел.
Логические и побитовые операции языка Си.
Этапы разработки программ. Тестирование и сопровождение, устойчивость и надежность программ. Восходящее и нисходящее программирование.
Базовые типы данных в языке Си, их объявление и инициализация. Переменные, константы, массивы и указатели, структуры. Используемые системы счисления.
Способы ввода исходных данных в прикладную программу на языке Си.
Написать программу, которая грамотно сопрягает наименование валюты с любым введенным целым числом (1 рубль, 2 рубля и т. д.).
Написать программу, которая включает и выключает динамик компьютера.
Структурное программирование. Виды алгоритмов: линейные, ветвящиеся, циклы и их реализация на языке Си.
Логические и побитовые операции языка Си
-
Операция
Англ. обозн.
Операция языка Си
Примечание
Выраж.
Побитовые
И
AND
&&
&
ИЛИ
OR
||
|
Исключающее ИЛИ (сложение по модулю 2)
XOR
^
Отрицание НЕТ
NOT
!
~
Одноместная
Операции сравнения
Равно
EQ
==
Не равно
NE
!=
Больше
GT
>
Меньше
LT
<
Больше или равно
GE
>=
Меньше или равно
LE
<=
Операции побитового сдвига
Вправо
>>
Влево
<<
Результаты выполнения логических операций
-
a & b
a | b
a ^ b
b
a
0
1
b
a
0
1
b
a
0
1
0
0
0
0
0
1
0
0
1
1
0
1
1
1
1
1
1
0
Основы ООП: объекты, инкапсуляция, полиморфизм, наследование.
Объект или класс - это совокупность (разнотипных) данных, физически находящихся в памяти, и методов (алгоритмов), имеющих доступ к ним. Каждый объект может обладать именем (идентификатором), используемым для доступа ко всей совокупности данных, его составляющих. В предельных случаях объект может не содержать полей или методов.
Инкапсуляция или сокрытие данных – переменные, входящие в класс обычно не видны и недоступны кроме как через функции, являющимися членами этого класса. Обеспечивает безопасность, надежность и однозначность в поведении переменных.
Наследование. Наследование означает, что характеристики одного объекта (класса) могут передаваться другому без их повторного описания. Объект, чьи свойства передаются, называется предком, а объект, которому передаются, - наследником (потомком). Данное свойство упрощает описание объектов, если между ними установлено наследование.
Полиморфизм обеспечивает возможность а) переопределять семантику операций и использовать одно и тоже обозначение для манипулирования различными типами данных; б) использовать функции с одним именем для обработки данных различных типов. Причем обработка производится в зависимости от типа данных по различным алгоритмам.
Этапы разработки программ. Сопровождение программ. Тестирование. Устойчивость и надежность программ. Восходящее и нисходящее программирование.
Основные этапы разработки инженерной программы:
Разработка технического задания на программное обеспечение.
Разработка (подбор) алгоритма вычислительного ядра программы.
Разработка пользовательского интерфейса программы.
Написание исходного кода программы.
Отладка кода.
Тестирование программы.
Подготовка документации (инструкции и т.п.)
Отладка – это процесс исправления программистом ошибок (багов), найденных в процессе тестирования. Отладка программы является неотъемлемым этапом ее разработки. На отладку сложной программы может уйти гораздо больше времени, чем на первоначальную подготовку ее исходного текста.
Сопровождение – это процесс, обеспечивающий качественную работу программы со стороны разработчика обычно после завершения процесса тестирования. Под термином "сопровождение программы" понимается ситуация, когда необходимо доработать или использовать исходный код уже готовой программы. Это обычно может быть вызвано следующими причинами:
обнаружение в программе ошибок ("багов"), практически неизбежных в крупных проектах;
внесение различных улучшений, расширений или изменений в программу;
использование отдельных модулей или иных частей программы для других проектов.
Сопровождение программы может производиться как ее автором, так и другим программистом.
Тестирование – это процесс определения правильности работы программного обеспечения.
Различают два вида (этапа) тестирования программного продукта:
1. Альфа-тестирование. Это тестирование готового продукта на специально созданных задачах самими разработчиками программы;
2. Бета-тестирование. Это опробование программного продукта, бесплатно разосланного потенциальным пользователям, на реальных задачах. О найденных ошибках и замечаниях пользователь сообщает разработчику.
Устойчивость и надежность
Устойчивость – это устойчивость программы к возможным действиям пользователя. Т.е. программист должен предусмотреть в своей программе реакцию на всевозможные тупые действия со стороны пользователя (например если написано, что надо ввести число больше 0, то надо сделать так, что бы число меньше или равное 0 было просто невозможно ввести), и т.д. и т.п.
Нисходящее программирование – "сверху вниз".
Разработку и отладку достаточно больших программ может облегчить использование методики нисходящего программирования. Эта методика дает возможность получения работоспособной программы на любом этапе ее разработки. При этом подходе вначале составляется лаконичная головная программа, которая вызывает необходимые функции. Все эти функции вначале замещаются функциями-заглушками (например, они могут выводить на экран некоторое сообщение и ждать нажатия клавиши).
Постепенно заглушки должны заменятся на реальные функции, что может делать один программист или группа программистов параллельно. Каждое новое добавление к коду программы может быть сразу проверено на работоспособность и отлажено.
Восходящее программирование: – "снизу вверх".
Методика разработки программ от самой внутренней конструкции к внешней называется восходящим программированием. Такая методика часто приводит к нежелательным результатам, переделкам и увеличению времени разработки.
Основная проблема восходящего программирования заключается в том, что внутренняя, частная задача, будучи реализована в каком-то одном варианте, при обрамлении ее внешними конструкциями будет выполняться уже в других условиях, при других параметрах что может потребовать изменить уже написанный код.
Базовые типы данных в языке Си, их объявление и использование. Переменные, константы, массивы и указатели. Инициализация переменных. Используемые системы счисления.
Базовые типы данных также называют простыми (илискалярными) типами данных. Эти типы определены в самом языке, и все остальные типы строятся на их основе.
-
Тип
Описание
Область изменения
char
1-байтовое целое, исп. для хран-ия символа.
От -128 до 127
unsigned char
1-байтовое беззнаковое целое.
От 0 до 255
signed char
1-байтовое целое.
От –128 до 127
int
Целое (2 или 4 байта)
short или long
unsigned int
Беззнаковое целое
От 0 до 65535
short
2-байтовое целое
От –32768 до 32767
unsigned short
2-байтовое беззнаковое целое.
От 0 до 65535
long
4-байтовое целое
От –2147483648 до 2147483647
unsigned long
4-байтовое беззнаковое целое
От 0 до 4294967295
float
Действительное число (4 байта)
От –3.4E+38 до –3.4E-38 и от 3.4E-38 до 3.4E+38
double
Действительное число (8 байт)
От –1.7E+308 до –1.7E-308 и от 1.7E-308 до 1.7E+308
Signed, unsigned, short и long являются не самостоятельными типами, а модификаторами. По умолчанию все типы определяются как signed, за исключением char.
Объявление – это инструкция, которая описывает переменную или функцию, объявляя её тип.
Например:
int x, y, z; // определяем x, y и z как целые
char *parray[100]; // объявляем массив из 100 указателей на строки.
int value = 10; // обявляем переменную value, с присваиванием её значения 10
int *pfunc(int p); // функция, возвращающая указатель на целое
Указатель – это переменная, в которой хранится адрес некоторой области памяти.
Массив – это некоторая последовательность данных одного типа в памяти:
<type> <array_name>[n_elements];
type – тип данных массива.
array_name – имя массива.
n_elements – кол-во элементов массива.
Инициализация – это непосредственное задание числовых значений переменным в программе при их описании. Возможность инициализации переменных можно использовать для зашивки в программу тестового примера. Для этого следует при описании переменных входным параметрам программы задать некоторое сочетание начальных значений, соответствующее заведомо решаемому случаю, который и будет тестовым примером. Это сочетание значений может использоваться программой по умолчанию, что позволит значительно упростить и ускорить отладку программы. Не требуют инициализации только вспомогательные и промежуточные переменные (типа индексов в циклах). Все описываемые в программе указатели следует обязательно инициализировать, хотя бы значением NULL. Например:
int x = 12, y = 0, i;
char * s1 = ”string1”;
char * ps[] = {”aaa”, ”bbbbbbb”, ”cccc”};
char * p = NULL;
В языке Си используются следующие системы счисления:
Десятичная (10, 20, 13, 1, …).
Шестнадцатеричная (0x10, 0xFF, 0x45, 0x1B23, …).
Восьмеричная (006, 05, 012, 066).
Двоичная система счисления в Си НЕ ИСПОЛЬЗУЕТСЯ.
Способы ввода исходных данных в программу на языке СИ.