Введение в язык программирования С.




Упражнение № 1

Построение таблиц истинности.

Теоретико-множественные операции.

 

Логическое высказывание - это утверждение, про которое можно определенно сказать истинно оно или ложно (истина = логической 1, ложь = логическому 0).

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

Логическое выражение - устное утверждение или запись, в которое, могут входить постоянные величины, а также обязательно входят переменные величины (объекты). В зависимости от значений этих переменных величин (объектов) логическое выражение может принимать одно из двух возможных значений: истина (логическая 1) или ложь (логический 0).

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

Таблица истинности – таблица, которая полностью описывает логическую функцию.

Основные логические операции:

1. Инверсия (отрицание, НЕ).

Обозначение: .

Таблица истинности для инверсии имеет следующий вид:

   
   

2. Конъюнкция (Логическое умножение, И, AND).

Обозначается символами: , .

Таблица истинности имеет следующий вид:

     
     
     
     

3. Дизъюнкция (Логическое сложение, ИЛИ, OR).

Обозначается символами: , .

Таблица истинности имеет следующий вид:

     
     
     
     

4. Исключающее ИЛИ (XOR).

Обозначается символом:

Таблица истинности имеет следующий вид:

     
     
     
     

5. Штрих Шеффера.

Обозначается символом: \

Таблица истинности имеет следующий вид:

     
     
     
     

 

6. Стрелка Пирса.

Обозначается символом:

Таблица истинности имеет следующий вид:

     
     
     
     

 

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

Используя Штрих Шеффера также можно построить все остальные логические операции.

В электронике это означает, что для реализации всего многообразия схем преобразования сигналов, представляющих логические значения, достаточно одного типового элемента.

 

Задание 1. Доказать правильность формулы , используя таблицы истинности.

 

Задание 2. Построить таблицу истинности для логической формулы .

 

Введение в язык программирования С.

1. Введение в язык С.

Язык программирования Си создан в 1972 году сотрудником фирмы Bell Laboratories Денисом Ритчи при разработке операционной системы UNIX. Лаконичность конструкций и широта возможностей позволило языку Си быстро распространиться и стать наиболее популярным языком прикладного и системного программирования.

1.1 Алфавит, идентификаторы, служебные слова.

В алфавит языка Си входят:

- прописные и строчные буквы латинского алфавита: {A, B,…, Z, a, b,…, z}

- цифры: {0,1,…, 9}

- специальные знаки: “, {} | [ ] () * + - / % \; ‘.:? < = > _! & # ~ ^

- неотображаемые символы: пробелы, переход на новую строку, табуляция.

Для создания однострочных комментариев в коде используются знак //, для создания многострочных комментариев знак /* … */. В качестве примера приведем отрывки кода или листинги:

int a = 0;

int b = 1; // Это комментарий. Здесь происходит объявление переменной b.

int c = 5;

/* int d = 6;

a = b + c;

d = a + a; */

Всё что находится внутри закомментированной области игнорируется компилятором и не выполняется при работе программы.

Служебными словами, или идентификаторами называются слова, зарезервированные в языке и выполняющие специальные функции. Служебные слова определяют типы данных, классы памяти, квалификаторы типа, операторы и т. д. Их нельзя использовать в качестве свободно выбираемых программистом имён. В стандарте языка определены следующие служебные слова: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typeof, union, unsigned, void, volatile, while.

Для обозначения типов данных используются спецификаторы типов и квалификаторы типов. К спецификаторам типов относятся:

bool – логический;

char – символьный;

double – вещественный двойной точности с плавающей точкой;

enum – перечисляемый тип;

float – вещественный с плавающей точкой;

int - целый;

long – целый увеличенной длины;

short – целый уменьшенной длины;

struct – структура;

signed – знаковый;

union – объединение;

unsigned – беззнаковый;

void – отсутствие значения;

typedef – определяет сокращённое наименование для обозначения типа.

К квалификаторам типа относятся:

const – квалификатор объекта, имеющего постоянное значение;

volatile – квалификатор объекта, значение которого может измениться без явных указаний программиста.

Квалификаторы типа информируют компилятор о необходимости особой обработки объектов в процессе оптимизации кода программы.

Обозначение классов памяти:

auto – автоматический;

extern – внешний;

register – регистровый;

static – статический.

1.1 Переменные и константы.

Переменная – это именованная область памяти. Каждая переменная перед её использованием в программе должна быть определена или инициализирована (для переменной должна быть выделена память). Размер участка памяти, выделяемой для переменной, зависит от типа, указанного при определении переменной. Для языка Си характерна ситуация, когда размер переменной определённого типа зависит не от стандарта языка, а от используемого компилятора.

В соответствии с синтаксисом языка переменные после определения по умолчанию имеют неопределённые значения. Надеяться на то, что они равны, например 0, нельзя. Переменным можно присваивать начальные значения, указывая их в определениях:

unsigned char i = 0;

int a = 1, b = 2, c = 10;

В языке Си, могут определяться константы, имеющие фиксированные имена.

const E = 5;

Существует несколько соглашений об именовании переменных, констант и других идентификаторов в программировании. Венгерская нотация - имена идентификаторов предваряются заранее оговорёнными префиксами, состоящими из одного или нескольких символов, например префикс i может обозначать переменные типа int, с – переменные типа char, us – unsigned short:

int iVariable = 1;

char cType = 100;

Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони, предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт.

CamelCase – стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с заглавной буквы:

int MyVariable = 1;

char FirstCounter = 0;

Альтернативным способом именования объектов, является именование с помощью подчёркивания:

int My_Variable = 2;

char First_Counter = 0;

1.2 Операции в языке Си.

Унарные операции:

& - операция получения адреса операнда;

* - операция обращения по адресу, разыменование;

- - унарный минус, изменяет знак арифметического операнда;

+ - унарный плюс;

~ - поразрядное инвертирование внутреннего двоичного кода;

! - НЕ – логическое отрицание значения операнда;

++ - увеличение на единицу;

-- - уменьшение на единицу.

Бинарные (двуместные) операции:

а) аддитивные:

+ - сложение арифметических операндов;

- - вычитание арифметических операндов;

б) мультипликативные:

* - умножение операндов арифметического типа;

/ - деление операндов арифметического типа;

% - получение остатка от деления целочисленных операндов;

в) операции сдвига:

<< - сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда;

>> - сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда;

г) поразрядные операции:

& - поразрядная конъюнкция битовых представлений значений целочисленных операндов;

| - поразрядная дизъюнкция битовых представлений значений целочисленных операндов;

^ - поразрядное исключающее или битовых представлений значений целочисленных операндов;

1 << 2 = 4, или в двоичной форме 00000001 << 2 = 00000100

1 | 4 = 5, или в двоичной форме 00000001 | 00000100 = 00000101

д) операции сравнения:

< - меньше чем;

> - больше чем;

<= - меньше или равно;

>= - больше или равно;

== - равно;

!= - не равно;

е) логические бинарные операции:

&& - конъюнкция (И);

|| - дизъюнкция (ИЛИ);

ж) операции присваивания:

= - простое присваивание;

*= - присваивание после умножения;

/= - присваивание после деления;

%= - присваивание после деления по модулю;

+= - присваивание после суммирования.

1.3 Структура программы.

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

Директива #include<…> предназначена для включения в текст программы файла из каталога “заголовочных файлов”, поставляемых вместе со стандартными библиотеками компилятора.

В рамках данного курса рассмотрим только функциональное программирование. Программа является набором определённого количества функций. Среди этих функций всегда должна присутствовать функция main. Именно эта функция является главной в программе. Структура простейшей программы приведена ниже:

директивы процессора

int main(int argc, char *argv[])

{

определения объектов;

исполняемые операторы;

}

 

 

Рис. 1

Схема подготовки исполняемой программы

 

Для начала, напишем простую программу, которая будет выводить на экран текстовую строку “Hello world”.

 

Пример 1. Создать программу, выводящую на монитор строку “Hello world”.

Для решения данной задачи откроем среду разработки Dev C++. В меню выберем File – New – Project. В появившемся окне вводим название нашего первого проекта HelloProject выбираем Console Application.

 

Среда разработки автоматически сгенерировала текст программы, которая пока ничего полезного не делает.

 

Вывод / ввод текстовой информации в Си можно осуществить, с помощью функций cin и cout из заголовочного файла iostream. Воспользуемся этим в нашей программе:

 

Символ ”\n” осуществляет переход на новую строку. Скомпилировать и запустить приложение можно, нажав F9.

Программа выполняется по строкам в порядке их расположения в тексте программы, до тех пор, пока не встретится вызов какой-либо функции. Затем управление передаётся строкам этой функции. После выполнения функции управление возвращается той строке программы, которая следует сразу за вызовом функции. Функции состоят из заголовка и тела. Заголовок содержит установки типа возвращаемого значения, имени и параметров функции. Параметры позволяют передавать в функцию значения. Возвращаемое значение может быть каким-либо числом, либо в возвращении параметров нет необходимости, тогда возвращается значение типа void.

 

Пример 2. Написать программу, складывающую два числа, введённые с клавиатуры.

Создадим программу, которая складывает два числа, введённые с клавиатуры пользователем. В ней используем две функции. Первая функция getNumbers будет запрашивать числа. Сигнатура функции: int getNumber(void) отражает тот факт, что функция не принимает никаких значений и возвращает значение типа int. Вторая функция будет заниматься выводом информации на экран: void printSumm(int a, int b). На вход данной функции передаётся два параметра а и b. Функция не возвращает переменных.

Программа приведена на листинге 1. В основном теле программы делается два вызова функции getNumber. Оператор return возвращает значение, вычисленное в результате выполнения функции, которое и присваивается переменным a и b. Значения этих переменных передаются в качестве аргументов для работы функции printSumm.

 

Листинг 1. Программа суммирования двух чисел

 

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

 

Задание 4. Написать программу для проверки правильности выполнения задания номер 2.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: