49320

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

Курсовая

Информатика, кибернетика и программирование

Программа на языке СИ. Необходимо ответить на вопросы: “Что заданКакой должен быть получен результат†“Как получить результат†Задача моего варианта курсовой работы заключается в проверке истинности высказывания: Все цифры данного числа различныЭто значит что мне нужно используя знания полученные на курсах информатики а так же при необходимости используя дополнительную литературу составить программу на языке си которая могла бы определить – все ли цифры различны в заданном трехзначном...

Русский

2013-12-25

195.01 KB

33 чел.

МИНОБРНАУКИ РОССИИ


Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Ижевский государственный технический университет имени М.Т. Калашникова"

Кафедра СС и ТС.

Курсовая работа по дисциплине "Информатика"

вариант 20

Выполнил студент группы Б-01 282

Юдин Дмитрий Владимирович

Проверила к.п.н. доцент кафедры Радиотехники

Сидорина В.А.                      .    

Ижевск 2013г.


Содержание

Введение…………………………………………………………………………………………3

1. Постановки задачи…………………………………………………………………..…4

2. Математические методы и средства решения задачи…….………5

3. Описание данных……………………………………………………………………....6

4. Алгоритмы……………………………………………………………………..…………….

4.1 Словесное описание………………………………………………………………….

4.2 Псевдокод………………………………………………………………………………….

4.3 Блок схема…………………………………………………………………………………..

5. Программа на языке СИ………………………………………………………………..

6. Тестовый пример…………………………………………………………………………..

7. Руководство пользователя для работы с программой……………….

8. Заключение……………………………………………………………………………………..

9. Список литературы …………………………………………………………………………


Введение:

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

  1.  анализ поставленной задачи.
  2.  выбор обоснования изложения метода решения поставленной задачи.
  3.  построение алгоритма решения задачи.
  4.  создание и отладка программы.
  5.  разработка комплекта тестов для проверки правильности работы.
  6.  оформление пояснительной записки.
  7.  защита курсовой работы.
  8.  
    Постановка задачи.

Выполнение курсовой работы надо начать с четкого уяснения поставленной задачи. Необходимо ответить на вопросы: “Что задано?”, “Какой должен быть получен результат?”, “Как получить результат?”

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

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

2. Математические методы и средства решения задачи:

Средствами решения задачи является алгоритмический язык СИ.

В данной курсовой работе метод решения опирается на некоторый математический аппарат. Математические методы, модели и алгоритмы являются тем базисом, который положен в основу проектирования и изготовления любого программного или технического средства в силу их исключительной сложности и, как следствие, невозможности умозрительного подхода к созданию.

Наиболее эффективно математическую модель можно реализовать на компьютере в виде алгоритмической модели. Для этого может быть использован язык блок-схем или какой-нибудь псевдокод, например учебный алгоритмический язык. Разработка алгоритма включает в себя выбор метода проектирования алгоритма; выбор формы записи алгоритма (блок-схемы, псевдокод и др.); выбор тестов и метода тестирования; проектирование самого алгоритма. Тогда, средством решения задачи является алгоритмический язык си.

Язык Си – это достаточно выразительный язык программирования, предназначенный для решения широкого круга задач и содержащий современные механизмы управления вычислительными процессами и работы с данными.

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

Он был создан в 1972 г. Деннисом Ритчи в США .

Предшественник языка Си – язык Би.

Достоинства Си:

  1.  Язык Си – мобильный (переносимый) язык (высокая переносимость написанных на нем программ между компьютерами с различной архитектурой);
  2.  Си – современный язык, т.к. включает в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием;
  3.  Си – эффективный язык, это означает, что его структура позволяет наилучшим образом использовать возможности современных ЭВМ. Программы на Си отличаются компактностью и быстротой выполнения;
  4.  Си – мощный гибкий язык. Область применения – программы экономического назначения, средства программирования, компьютерные игры. Мультфильмы, операционная система UNIX.

Особенности языка Си:

  1.  В языке Си реализованы некоторые операции низкого уровня, которые напрямую соответствуют машинным командам;
  2.  Базовые данные языка Си отражают те же объекты, с которыми приходится иметь дело в Ассемблере – это байты, машинные слова, символы и строки;
  3.  Язык Си поддерживает механизм указателей на переменные и функции (указатель это переменная предназначенная для хранения машинного адреса некоторой переменной или функции);
  4.  

Язык Си относительно мал по объёму, в нём существуют встроенные операторы для выполнения ввода-вывода динамического распределения памяти, управления процессами и т.п. Однако в системное окружение языка Си входит библиотека стандартных функций, в которой реализованы подобные действия.


Пример простейшей программы на Си

  1.  Эта программа находит периметр прямоугольника.
  2.  #include<stdio.h>
  3.  #include<conio.h>
  4.  main ()/*программа находит периметр прямоугольника */
  5.  {
  6.  int a,b,p; /*для вещественных типов- float*/
  7.  clrscr();
  8.  printf(«Введите а и b»);
  9.  scanf%d%d»,&a,&b);
  10.  p=(a+b)*2;
  11.  printf(«периметр =%d»,p);
  12.  getch();
  13.  }

Общие правила при написании программ на Си.

  1.  программа состоит из одной или более функций, причем какая-то из них обязательно называется main ();
  2.  описание функции состоит из заголовка и тела функции.
  3.  Заголовок в свою очередь состоит из директив препроцессора, например #include<stdioh> и имени функции;
  4.  Отличительным признаком имени функции являются круглые скобки, причем аргумент может отсутствовать;
  5.  Тело функции заключено в фигурные скобки и представляет собой набор операторов, каждый из которых заканчивается точкой с запятой;
  6.  Выбор осмысленных обозначений для переменных и использование комментариев необходимо в программе;
  7.  Необходимо помещать каждый оператор в отдельной строке (Си имеет свободный формат, в одной строке можно записывать несколько операторов, отделив их точкой с запятой).


Элементы языка Си.

  1.  Под элементами языка понимают базовые конструкции, используемые для написания программ.
  2.  В элементы Си входят:
  3.  Алфавит;
  4.  Константы;
  5.  Идентификаторы;
  6.  Ключевые слова;
  7.  Комментарии.

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

Алфавит языка Си .

а)буквы и цифры – множество символов языка Си включает прописные и строчные буквы латинского алфавита и арабские цифры. Причем компилятор рассматривает одну и ту же прописную и строчную букву латинского алфавита как различные символы.

б)пробельные символы – это пробел, табуляция, перевод строки, новая страница, новая строка.

в)разделители  

: ; , . ? ’ { } ( ) [ ] < > ! | \ / - # % & + - *


г)специальные символы, предназначены для представления некоторых пробельных и неграфических символов в строках и символьных константах.

  1.  \n – новая строка
  2.  t\  – горизонтальная табуляция – выравнивание по горизонтали
  3.  \v – вертикальная табуляция
  4.  \f – новая страница
  5.  \b – забой – предыдущая буква (цифра) стирается
  6.  \’ – апостроф
  7.  \” – двойная кавычка
  8.  \\  – обратная косая черта
  9.  \N – восьмеричная константа
  10.  \xN – шестнадцатеричная константа.

д)операции – это комбинации символов, специфицирующие действие по преобразованию значений.

  1.  + - сложение
  2.  - - вычитание
  3.  * - умножение
  4.  / - деление вещественных чисел, нахождение целой части вещественных чисел
  5.  % - остаток от деления
  6.  = - присваивание простое
  7.  ! – логическое «НЕ»
  8.  && - логическое «И»
  9.  \\ - логическое «ИЛИ»
  10.  ++ - прибавляет 1 к значению переменной (в Паскале n:=n+1, в Си n++)
  11.  --   - вычитает 1 из значения переменной
  12.  << - сдвиг влево
  13.  >> - сдвиг вправо (используются в массивах)
  14.  < - меньше
  15.  > - больше
  16.  <= - меньше либо равно
  17.  >= - больше либо равно
  18.  == - логический знак равенства
  19.  ,  - последовательное выполнение операции
  20.  += - присваивание со сложением
  21.  - = - присваивание с вычитанием
  22.  *= - присваивание с умножением
  23.  /=  - присваивание с делением
  24.  %= - присваивание с остатком от деления

Основными операциями языка Си считаются +, *, -, /, а также оператор присваивания =.

Основные операции выполняются в Си также как и в Паскаль, но имеют несколько дополнений. Так, знак "-" может использоваться как унарная операция, изменяющая знак переменной на противоположный. Особое использование отличает операцию деления. Она может применяться как к целым, так и к вещественным числам. Если результат операции деления должен быть присвоен целочисленной переменной, то дробная часть просто отбрасывается. Это действие называется усечением. Если деление применяется к операндам разного типа, то целочисленное значение преобразуется к виду с плавающей точкой.

Среди наиболее распространенных операций Си можно выделить:

1) sizeof - она возвращает размер операнда, выраженный в байтах. Операндом может быть конкретная данная или тип данных. При использовании последнего, оно записывается в скобках.

2) деление по модулю (%). Используется в целочисленной арифметике. Ее аналогом в Паскаль является функция mod.

3) инкремент (++). Выполняет простое действие: увеличивает значение операнд на 1. Эта операция может быть записана в префиксной форме, когда символ "++" предшествует переменной, и в постфиксной форме, когда "++" следует за переменной. Эти формы различаются последовательностью приращения значения операнда.

Пример:

  a++;

  ++a;

  b=a++;

  b=++a;

Первые два оператора не имеют различий. В третьем примере сначала значение переменной a будет присвоено переменной b, а затем увеличено на 1. В четвертом примере сначала значение переменной a увеличится, а затем присвоится.

4) декремент (--). Существует в префиксной и постфиксной формах. Результат его действия - уменьшение значения оператора на 1.

Операции "++" и "--" имеют очень высокий приоритет исполнения. Выше только исполнение действий в скобках.

2. Константы.

  1.   Это число, символ или строка символов. Константы в языке Си используются для задания постоянных величин.
  2.  Различают 4 типа:
  3.  а) целые;
  4.  б) с плавающей точкой;
  5.  в) символьные константы;
  6.  г) символьные строки.

const <тип> <имя  константы>=<выражение>;

Пример const int l= - 124;

3. Идентификаторы.

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

4. Ключевые слова.

  1.  Слова, которые используются для обозначения каких-либо операторов – case, char, const,double, else, float, for, if, int, long, void, while

5. Комментарии.

  1.  Это часть программы, которая игнорируется компилятором и служит для удобства читаемости исходного текста программы.
  2.  /*…*/ многострочные комментарии
  3.  // однострочные комментарии – символы до конца строки

3. Описание данных:

Данные делятся на входные, выходные и промежуточные. Нужно выбрать имена и типы данных, дать смысловое описание данных.

Концепция типов данных является важнейшей стороной любого языка программирования. Особенность Паскаля состоит в большом разнообразии типов. Аналогичная схема для языка Си представлена на рис. 2.

Сравнение схем приводит к выводу о том, что разнообразие типов данных в Си меньше, чем в Турбо Паскале.

В Си/Си++ имеется четыре базовых арифметических (числовых) типа данных. Из них два целочисленных — char, int — и два плавающих (вещественных) — float и double. Кроме того, в программах можно использовать некоторые модификации этих типов, описываемых с помощью служебных слов — модификаторов. Существуют два модификатора размера — short (короткий) и long (длинный) — и два модификатора знаков — signed (знаковый) и unsigned (беззнаковый). Знаковые модификаторы применяются только к целым типам.

Как известно, тип величины связан с ее формой внутреннего представления, множеством принимаемых значений и множеством операций, применимых к этой величине. В табл. 1 перечислены арифметические типы данных Си, указан объем занимаемой памяти и диапазон допустимых значений.

Размер типа int и unsigned int зависит от размера слова операционной системы, в которой работает компилятор Си. В 16-разрядных ОС (MS DOS) этим типам соответствуют 2 байта, в 32-разрядных (Windows) — 4 байта.

Таблица 1

Анализируя данные таблицу 1, можно сделать следующие выводы:

• если не указан базовый тип, то по умолчанию подразумевается int;

• если не указан модификатор знаков, то по умолчанию подразумевается signed;

• с базовым типом float модификаторы не употребляются;

• модификатор short применим только к базовому типу int.


4. Алгоритмы

Алгоритм – это однозначно определенная последовательность действий, записанная на понятном исполнителю алгоритмическом языке и определяющая процесс перехода от исходных данных к результату.

В этом определении уже указаны основные свойства алгоритма. Во-первых, алгоритм состоит из конечного набора инструкций или шагов, во-вторых, каждый шаг трактуется исполнителем единственным образом, что позволяет гарантированно получить решение для некоторого набора входных данных, в-третьих, алгоритм всегда сводится к некоторому преобразованию исходных данных в результат или результаты. В этом смысле формулы для решения квадратного уравнения или даже четко составленную инструкцию по варке кофе можно считать алгоритмами, выполнимыми исполнителем-человеком. Для машины, разумеется, требуется более четкая формализация задачи, чем для человека, понимать естественный язык компьютеры пока неспособны, отсюда необходимость учета при составлении алгоритма ограниченного набора инструкций ЭВМ.

Свойства алгоритма:

Дискретность – алгоритм состоит из отдельных инструкций (шагов);

Однозначность – каждый шаг понимается исполнителем единственным образом;

Массовость – алгоритм работает при меняющихся в некоторых пределах входных данных;

Результативность – за конечное число шагов достигается некоторый результат.


4.2 Псевдокод

#include <stdio.h>

 

#define test(a) ( (a) / 100 != (a) / 10 % 10 && (a) / 100 != (a) % 10 && (a) / 10 % 10 != (a) % 10 )

(Задаем параметры теста)

 

int main(void) 

    int n;

(Ввод числа)

   

    while ( printf("Number: ") && scanf("%d", &n) == 1 && n > 99 && n < 1000

(Параметры вывода ответа и ввода 3х значного числа)

        printf("%s\n", ( test(n) ) ? "True" : "False");

(Вывод результата) 

 

    return 0;

(Начать алгоритм заного)

4.3 Блок Схема


5. Программа на языке СИ

#include <stdio.h>

 

#define test(a) ( (a) / 100 != (a) / 10 % 10 && (a) / 100 != (a) % 10 && (a) / 10 % 10 != (a) % 10 )

 

int main(void) {

    int n;

   

    while ( printf("Number: ") && scanf("%d", &n) == 1 && n > 99 && n < 1000 )

        printf("%s\n", ( test(n) ) ? "True" : "False");

   

    return 0;

}

6. Тестовый пример


  1.  Руководство пользователя для работы с программой

Для работы с программой необходима оболочка.  

Я решил использовать Dev-C++ - Редактор и компилятор для написания программ на Cи и Си++. Этот редактор показался мне наиболее понятным и удобным для использования.

При запуске программы появится окно для ввода и вывода информации.

Введите трехзначное число и нажмите enter

Программа введет на экран результат и предоставит возможность снова ввести число.

Заключение

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


Список литературы:

Сидорина В.А. Методические указания к выполнению курсовых работ для студентов высшего профессионального образования. В.А Сидорина, А.В Абилов. Ижевск: Издательство ИжГТУ, 2008.- 31с.


 

А также другие работы, которые могут Вас заинтересовать

28549. Режим CBC 39 KB
  Дешифрование в режиме СВС Для получения первого блока зашифрованного сообщения используется инициализационный вектор IV для которого выполняется операция XOR с первым блоком незашифрованного сообщения. В режиме CBC при зашифровании каждая итерация алгоритма зависит от результата предыдущей итерации поэтому зашифрование сообщения не поддаётся расспараллеливанию. Однако расшифрование когда весь шифротекст уже получен можно выполнять параллельно и независимо для всех блоков сообщения см. Это дает значительный выигрыш во времени при...
28550. Режим CFB 66.5 KB
  Как и в режиме CBC здесь используется операция XOR для предыдущего блока зашифрованного текста и следующего блока незашифрованного текста. Таким образом любой блок зашифрованного текста является функцией от всего предыдущего незашифрованного текста. Для левых J битов выхода алгоритма выполняется операция XOR с первыми J битами незашифрованного текста Р1 для получения первого блока зашифрованного текста С1. При дешифровании используется аналогичная схема за исключением того что для блока получаемого зашифрованного текста выполняется...
28551. Режим шифрования с обратной связью по выходу (OFB) 52.55 KB
  Разница заключается в том что выход алгоритма в режиме OFB подается обратно в регистр тогда как в режиме CFB в регистр подается результат применения операции XOR к незашифрованному блоку и результату алгоритма см. Шифрование в режиме OFB Основное преимущество режима OFB состоит в том что если при передаче произошла ошибка то она не распространяется на следующие зашифрованные блоки и тем самым сохраняется возможность дешифрования последующих блоков. Дешифрование в режиме OFB Недостаток режима OFB заключается в том что он более уязвим к...
28552. Симметричные методы шифрования DES 63.46 KB
  Функция перестановки одна и та же для каждого раунда но подключи Ki для каждого раунда получаются разные вследствие повторяющегося сдвига битов ключа. Последовательность преобразований отдельного раунда Теперь рассмотрим последовательность преобразований используемую на каждом раунде. Создание подключей Ключ для отдельного раунда Ki состоит из 48 битов. На каждом раунде Ci и Di независимо циклически сдвигаются влево на 1 или 2 бита в зависимости от номера раунда.
28553. Примеры современных шифров проблема последнего блока DES 26.44 KB
  Альтернативой DES можно считать тройной DES IDEA а также алгоритм Rijndael принятый в качестве нового стандарта на алгоритмы симметричного шифрования. Также без ответа пока остается вопрос возможен ли криптоанализ с использованием существующих характеристик алгоритма DES. Алгоритм тройной DES В настоящее время основным недостатком DES считается маленькая длина ключа поэтому уже давно начали разрабатываться различные альтернативы этому алгоритму шифрования.
28554. Распределение ключей. Использование базовых ключей 13.15 KB
  Он заключается в доставке абоненту сети связи не полного комплекта ключей для связи со всеми другими абонентами а некоторой универсальной заготовки уникальной для каждого абонента по которой он может вычислить необходимый ему ключ. Пусть в сети связи действуют N абонентов занумеруем их от 0 до N1 и поставим каждому абоненту уникальный открытый идентификатор Yi из некоторого множества Y открытый в смысле общеизвестный. Генерация ключей для абонентов сети связи заключается в выработке N секретных ключей Xi из некоторого множества X....
28555. Использование маркантов или производных ключей 15.1 KB
  Заключается в использовании для шифрования не непосредственно ключей хранимых у абонентов а некоторых производных ключей из них получаемых. Заключается в использовании вместо ключа K двоичного вектора S полученного побитным суммированием K и случайного двоичного вектора M называемого маркантом при этом маркант передается в открытом виде отправителем получателю. Действительно использование одного и того же ключа но разных маркантов не снижает стойкости шифра. Однако этот метод обладает одним недостатком восстановление одного...
28557. Несимметричные системы шифрования и их построение 23.7 KB
  Эти системы характеризуются тем что для шифрования и для расшифрования используются разные ключи связанные между собой некоторой зависимостью. Один из ключей например ключ шифрования может быть сделан общедоступным и в этом случае проблема получения общего секретного ключа для связи отпадает. Поскольку в большинстве случаев один ключ из пары делается общедоступным такие системы получили также название криптосистем с открытым ключом. Первый ключ не является секретным и может быть опубликован для использования всеми пользователями...