диниці компіляції, static, extern, pascal

1) що є одиницею компіляції в С?

единица компиляции представляет собой отдельный файл исходного кода, обычно имеющий расширение .c; она обрабатывается компилятором за один шаг. Для каждой единицы компиляции компилятор генерирует объектный файл с расширением .obj

2) як потрібно декларувати функцію щоб вихід з нею програмувати оператором return?

Любим образом, кроме void. То есть можна использовать такие типы: int, char и т.д.

3) що вказує кожен з параметрів функції main?

функция main() получает на вход три параметра : argc – количество параметров командной строки, argv – собственно параметры командной строки и envp – переменные среды выполнения С-программ.

4) для чого використовуються класи пам’яті extern та static?

Ключевое слово extern указывает, что переменная декларируется где-либо далее в файле или в другом файле (это указание компилятору и фактически в данном месте программы память под переменную не выделяется). Они могут использоваться для передачи значений между отдельно транслируемыми функциями. Фактически, они статически определены. Ключевое слово static помимо указания статической переменной ограничивает еще и область видимости имени данным файлом. Служебное слово static, приписанное имени функции или внешней переменной в файле ограничивает область видимости (действия) имени данным файлом. В декларации объекта переменная static класса памяти, она определяет свойство всего класса объектов.

5) зміст модифікаторів типу pascal, cdecl, volatile? Модификатор pascal приписанный функциям и внешним переменным определяет и их внешнее представление. В этом случае все буквы идентификаторов преобразуются в заглавные и снабжаются лидирующим символом подчеркивания.Модификатор pascal в применении к идентификатору означает, что он преобразуется к верхнему регистру и к нему не добавляется символ подчеркивания. В применении к имени функции модификатор оказывает влияние также на передачу аргументов. В этом случае аргументы пересылаются в стек в прямом порядке.

Модификатор доступа volatile был добавлен в Турбо С в соответствии со стандартом ANSI. Он помогает определить переменные (константы, которые в ходе выполнения программы могут изменять свое значение (volatile).

В языке С порядок передачи параметров указывает модифика­тор типа функции cdecl. Он устанавливается специальным па­раметром IDЕ или задается опцией командной строки (-р-). По умолчанию выбирается cdecl.

 

2. Базові типи та константи

1) записати приклади строкових літералів та окремих літер

Символьная константа - представляется символом заключенном в апострофы 'А'.

Строковая константа (литерал) - последовательность символов заключенные в кавычки “AB”

2) як записати в програмі константи з плаваючою точкою подвійної і звичайної точності?

Константа с плавающей точкой - десятичное число, представленное в виде действительной величины с десятичной точкой или экспонентой. Формат имеет вид:
[ цифры ].[ цифры ] [ Е|e [+|-] цифры ].
Число с плавающей точкой состоит из целой и дробные части и (или) экспоненты. Константы с плавающей точкой представляют положительные величины удвоенной точности (имеют тип double). Для определения отрицательной величины необходимо сформировать константное выражение, состоящее из знака минуса и положительной константы. Примеры: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2

3) Яка різниця в ініціалізації в деклараціях char * B і char B[]=”Data”? Скільки байт пам’яті виділяється у першому та другому випадках?

char * B – указатель на переменную типа char (любой указатель занимает в памяти 4 байта). При таком определении в B хранится адрес на какую то ячейку памяти (мусор) до тех пор, пока ее не определят. Пример: В=NULL – нулевое значение; В=new char – ссылается на определенный символ;В=new char[N] – ссылается на первый элемент динамического массива символов длиной N.В=&С(С – переменная типа char) – ссылается на конкретную переменную С.

char B[]=”Data”– статистический массив типа char из 5 элементов ‘D’,’a’,’t’,’a’,’\0’. Каждый элемент типа char занимает в памяти 1 байт(но не указатель на него). Поэтому массив В занимает в памяти 5 байт.

4) Якого типу ці константи 101, 0101, 0x101 ? Тип int

5) Як слід читати тип цієї константи 101L ? типом long

6) Наведіть приклади об’яв змінних різних типів, у тому числі без знаку, подвійної точності і т.д.

Целые: беззнаковые(unsigned int a=2(диапазон:0..264-1);unsigned byte b=0(диапазон:0..216-1); unsigned long c=0(диапазон:0..2128-1); unsigned short d=2000(диапазон:0..232-1); bool e=true(диапазон:true,false); char c=”1”(диапазон:0..256;), знаковые(int c=0(диапазон: -232..232-1);byte a=1(диапазон: -28..28-1);long d=-250(диапазон: -264..264-1))

Дробные : float a1=2,5f(диапазон: 1.2е-38 – 3,4е38); double a2=32,5(диапазон: 2.2е-308 – 1,8е308);

Двойная точность double а3=2.1е300;

3. Операції, їх пріоритети, обчислення, перетворення типів у виразах при обчисленнях

1) Дано наступний вираз X+Y-X--, де X має значення 4 та Y має значення 6. Чому дорівнює результат обчислення наведеного виразу? 6

2) Чому дорівнює результат обчислення наступного виразуA+B&mask-C , якщо A=10, B=5, mask=12, C=3? 9

3) В виразах використовуються арифметичні операції, операції <<(порозрядный сдвиг влево),>>( порозрядный сдвиг вправо), ||(логическое ИЛИ), |( порозрядное логическое ИЛИ), ~(порозрядное логическое НЕ). !(Логическое отрицание) і т.п.

+ (сложение), -(вычитание), * (умножение), / (деление), %(взятие модуля). % нельзя использовать к типам float, double, только к любым целым. Она дает при x%y остаток от деления x на y. >(больше), <=(меньше либо равно), >=(больше либо равно ), <(меньше) .У операций равенства: == (равно), !=(не равно) приоритет ниже. Тип результата этих операций: int . Значение : 0, если отношение ложно и 1, если отношение истинно. Бинарные операции: &&(и), || (или) || Напомнить: левый операнд раньше!!! Унарная операция: ! (не).

4. Вправи на декларації, вказівники, вказівники на масиви даних або на масиви вказівників, масиви вказівників на функції, у тому числі.

1) Що виконує наступний оператор: typedef double * T_MTYPE; ?

Этот оператор создает новый тип с названием double * T

2) Декларуйте в С-програмі вказівник SF на функцію, яка повертає значення типу int, з одним параметром типу – вказівник на тип double та другим параметром – вказівником на вказівник типу char!

Int* SF; double*a; char**b;

SF=func(a,b);

Int*func(double*a, char**b)

{

Int k = 0;

Returne &k

}

3) Декларуйте в С-програмі вказівник SP на масив вказівників з 5 елементів типу вказівники на структуру struct ZAP!

typedef ZAP*[] type1;

type 1 array[5];

type 1* = array;

4) Навести декларацію масиву вказівників Pointers з 5 елементів, які можуть посилатись на функції з одним параметром типу char* і які повертають значення типу void *!

void** array = new void[5];

void func(char*ch)

{

}