Главная страница

Лекции. Основные понятия и определения


Скачать 1.94 Mb.
НазваниеОсновные понятия и определения
Дата27.03.2018
Размер1.94 Mb.
Формат файлаdocx
Имя файлаЛекции.docx
ТипКонтрольные вопросы
#39570
страница21 из 58
1   ...   17   18   19   20   21   22   23   24   ...   58

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Что такое блок?

2. Есть ли в языке Basic главная процедура?

3. В каком языке не определено понятие подпрограммы?

4. Что такое указатель на функцию?

5. Чем должны являться выходные скалярные параметры в языке C?

6. Что передается в процедуру, если аргумент – имя массива?
Контрольные вопросы

1. Чем отличается статическое и динамическое распределение памяти?

2. Что является минимальным элементом структуры в языке C?

3. Зачем нужны процедуры?

4. Укажите отличия передачи аргументов по значению и по адресу.

5. Перечислите различия в инструкциях возврата значения функции в языках Basic и C.

6. Является ли возвращаемое значение функции выходным параметром?

7. Что такое делегат и для чего он нужен?

8. ПРЕПРОЦЕССОР


Препроцессор – это специальная программа, обрабатывающая текст приложения до этапа его трансляции. Основные функции: определение символических констант и включение файлов. В отличие от инструкций управляющие конструкции препроцессора называют директивами. Директивы могут располагаться в произвольном месте программы.

8.1. Определение символических констант


Символической(именованной) константой называют имя в тексте программы, которое должно быть заменено на конкретное постоянное значение до трансляции. Их применение позволяет сократить текст программы и сделать ее более ясной. Обычно это некоторые общеупотребительные константы, такие как: π, e и т.п., а также константы, которые могут измениться при модификации программы.

Пример.

PI=3.141593 TAB_SIZE=100

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

С

Формат директивы определения символической константы:

#define <имя> <постоянное выражение>

Пример.

#define PI 3.141593

#define EOF (-1)

#define PI2 (2*PI)

Значение константы желательно заключать в скобки, поскольку при подстановке возможны ошибки.

Пример.

а) #define E (5+10)

б) #define E 5+10

Подстановка 2*E в случае б) даст ошибку.

Некоторые определения.

Макроопределение – определение имени с помощью директивы #define.

Макроподстановка – замена имени в тексте программы на значение соответствующей константы.

Макровызов – появление имени символической константы в тексте.

Макросредства или макросы – средства, реализующие макроподстановки.

Пример. При вычислении квадратичной формы замена размера массивов, равного 4 или 30, на константу SIZE позволяет при модификации программы сделать изменение размера в месте ее объявления, т.е. не будет необходимости поиска и замены всех вхождений данного размера в текст модуля.

#define SIZE 30

...............

float matrix(int m, float a[ ][SIZE], float x[ ], float y[ ]){

…………..

}

Basic

Здесь также существует директива, выполняющая аналогичные функции. Ее формат:

#Const <имя>=<постоянное выражение>

Пример.

#Const PI=3.141593

#Const LEN_A=300

#Const LEN_B=300

#Const LEN_C=( LEN_A+ LEN_B)

8.2. Включение файлов в текст программы


Файл – любая совокупность данных, имеющая отдельную спецификацию и включенная в каталог (папку) операционной системы. Формат спецификации: <имя>.<тип (расширение)>

Принятые по умолчанию типы файлов:

.c - исходный текст на языке C,

.cpp - исходный текст на языке C++,

.vb - исходный текст на языке Visual Basic.NET,

.obj - объектный (оттранслированный) модуль,

.exe - загрузочный (выполняемый) модуль,

.h - заголовочный (header) файл.

C

Включение файла в текст программы выполняется с помощью директивы вида:

#include {<спецификация файла>"|<<спецификация файла>>}

Пример.

#include

#include "my.h"

Обычно в текст программы включают заголовочные (.h) файлы. В заголовочные файлы принято включать общие для различных процедур символические константы, прототипы функций, другие описания и определения. Очень много .h файлов входят в состав транслятора. Например, stdio.h описывает стандартный пакет библиотечных функций ввода-вывода, в частности функции scanf и printf, math.h содержит прототипы всех библиотечных математических функций, coniow.h – прототипы упоминавшихся выше функций консольного ввода-вывода.

В директиве заключение спецификации файла в "..." предписывает искать включаемый файл в папке, где находится вызов программы, а в случае его ненахождения там в определенных в среде разработки папках. Применение для этой цели <...> выполняет поиск файла в папках, определенных в среде разработки.

Теперь приведем в качестве примера законченную работоспособную программу.

#include

#define SIZE 30

#define ESC 27

/*******************************************************/

/* ВЫЧИСЛЕНИЕ КВАДРАТИЧНОЙ ФОРМЫ */

/*******************************************************/

int main( ){

float u[SIZE], // Входной вектор

b[SIZE][SIZE], // Входная матрица v[SIZE], // Вектор b*u

scalar(int, float [ ], float [ ]);// Скалярное произведение векторов

int m, // Размер массивов

i, j;

bool fl; // true-неправильный ввод

void matrix(int, float [ ][SIZE],

float [ ], float [ ]); // Умножение матрицы на вектор
do{

fl=true;

while(fl){

clrscr();

printf("Размер матрицы:");

scanf("%d",&m);

if(m<1||m>SIZE){

printf("Размер матрицы должен быть в диапазоне[1:%d]\n",

SIZE);

getch();

}else fl=false;

}

printf("Исходный вектор:\n");

for(i=0; i

scanf("%f", &u[ i ]);

}

printf("Исходная матрица:\n");

for(i=0; i

for(j=0; j

scanf("%f", &b[ i ][ j ]);

}

}

matrix(m, b, u, v );

printf("\n\nКвадратичная форма равна %.5g\n", scalar(m, v, u ));

printf(“\nEsc – выход из программы, продолжение – любая

клавиша\n”);

while(getch( ) !=ESC);

}// End main
/* Умножение матрицы на вектор */

void matrix(int m, float a[ ][SIZE], float x[ ], float y[ ]){

int i, j;
for(i=0; i

for(y[ i ]=j=0; j

y[ i ]+=a[ i ][ j ]*x[ j ];

}

}

}// End matrix
/* Скалярное произведение векторов */

float scalar(int m, float x[ ], float y[ ]){

int i;
for(z=i=0; i

z+=x[ i ]*y[ i ];

}

return z;

}// End scalar

Basic.

В препроцессоре этой среды разработки существует похожая директива, но ее применение ограниченно и здесь не рассматривается.
1   ...   17   18   19   20   21   22   23   24   ...   58


написать администратору сайта