Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Точка входа в программу (функция main)




Введение

Си - язык программирования высокого уровня разработанный в начале 1970-х годов сотрудниками исследовательского центра ” Bell Telephone Laboratories ” Денисом Ритчи. Первоначально язык Си был создан, для новой по тем временам операционной системе UNIX. Позднее он был перенесен на многие другие операционные системы и стал одним из самых используемых языков программирования. Дописать

Этапы написания программы

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

Постановка задачи. На этом этапе задача, составленная в терминах предметной области, переводится в термины наиболее близкие к программированию. Другими словами формулируется техническое задание.

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

Кодирование программы. На этом этапе готовый алгоритм, переводится программистом в программный код. Ошибка многих начинающих программистов заключается в том, что они бросаются кодировать понятные им куски кода программы,  пропуская первых два пункта. Это, как правило, приводит к существенному удлинению сроков написания программ. В результате на свет появляются непроработанные “кривые” программные модули исправление ошибок, в которых занимает очень много времени.

Отладка программы. Отладка предназначена для выявления и исправления существующих синтаксических ошибок. Надо отметить, что отладчик не коим образом не сможет отладить ваши смысловые ошибки. Поэтому так важно не упустить этап создания алгоритма.

Тестирование программы. Тестирование программы проверяет правильность работы программы и устойчивость ее к введению неправильных данных. Часто у программистов существует “замыленность” взгляда при тестирование своих программ. Они сами не осознавая вводят данные допустимые для ввода, где-то на бессознательном уровне понимая, что другие данные вводить нельзя. Поэтому не лишним будет отдать программу на тестирование некому постороннему лицу, чтобы он сумел объективно подойти к проблеме тестирования.

Язык Си как и все языки программирования содержит свой алфавит. Алфавит состоит из идентификаторов, символов, специальных символов, разделителей, знаков пунктуации, знаков операций, зарезервированных слов, неиспользуемых символов. Подробнее о алфавите языка программирования Си можно посмотреть [1]. Мы будем предполагать, что читатель знаком с азами программирования на языке Паскаль или Бейсик из школьного курса, однако постараемся изложить данный материал наиболее доступно.

В языке Си существуют следующие простые типы данных:

Таблица типы данных

Тип;            Представление значений                     в памяти;           Область      величины;
char; 1 байт;             -128 до 127;           
int;             зависит от реализации;  
short;           2 байта;            -32768 до 32767
long; 4 байта;       -2.147.483.648 до 2.147.483.647;               
unsigned char;                 1 байт;                0 до 255;        
unsigned;                       зависит от реализации;  
unsigned short;  2 байта;             0 до 65535;               
unsigned long;   4 байта;                         0 до 4.294.967.295;
float;           4 байта             IEEE соглашение;
double;                                                         8 байт;              IEEE соглашение;

 

Наряду с простыми типами в языке Си существуют и составные типы, такие как массивы, структуры, объединения и файловый тип. Рассмотрим некоторые операции языка Си (Таблица Операции). Приведем здесь лишь операции характеризующие рассматриваемый язык. Такие общие операции как сложение умножение и т.д. присущие всем алгоритмическим языкам мы рассматривать не будем.

      

Таблица Операции

Операция Наименование
! Логическое НЕ
~ Побитовое дополнение
% Остаток
<< Сдвиг влево
>> Сдвиг вправо
== Равно
!= Не равно
& Побитовое И, адрес от
| Побитовое включающее ИЛИ
^ Побитовое исключающее ИЛИ
&& Логическое И
|| Логическое ИЛИ
' Последовательное выполнение (запятая)
?: Операция условного выражения
++ Инкремент
-- Декремент
= Простое присваивание
+= Сложение с присваиванием
-= Вычитание с присваиванием
*= Умножение с присваиванием
/= Деление с присваиванием
%= Остаток с присваиванием
>>= Сдвиг вправо с присваиванием
<<= Сдвиг влево с присваиванием
&= Побитовое И с присваиванием
|= Побитовое включающее ИЛИ с присваиванием
^= Побитовое исключающее ИЛИ с присваиванием

 

Рассмотрим общую структуру программы на языке Си – она имеет следующий вид. Здесь жирным шрифтом выделены обязательные пункты.

Подключаемые файлы и библиотеки
<Раздел описаний глобальных переменных>
<Прототипы создаваемых функций>

<описание функций>



Точка входа в программу (функция main)

<описание функций>

 

Программа на языке Си начинается с подключения библиотек и специальных файлов. Начинается данные действия с символа # и ключевого слова include, далее следует название подключаемого файла заключенного между символами < > или ” ”. Если подключается файл из стандартной библиотеке языка Си, то принято его размещать между символов < >, все остальные файлы заключаются в кавычки.

#include <stdio.h>

#include ”my_file.h”

Приведем короткий список некоторых библиотек используемых в языке Си.

    Таблица  Типы заголовочных файлов

Заголовочный файл Назначение
assert.h Диагностика программы
ctype.h Преобразование и проверка символов
errno.h Проверка ошибок
floaf.h Работа с числами с плавающей запятой
limits.h Определение размеров целочисленных типов
locale.h Поддержка интернациональной среды
math.h Математические библиотеки
sefjmp.h Возможности нелокальных переходов
signal.h Отработка сигналов
stdarg.h Поддержка функций с неопределенным числом аргументов.
stddef.h Разное
stdio.h Библиотека стандартов ввода/вывода
stdlib.h Библиотека общего назначения
string.h Функции работы со стройками символов
time.h Функции работы с датами и временем
dos.h Подключение Dos

 

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

сonst <тип константы> <имя константы> = <значение>;

Глобальная переменная это переменная, которая определена и существуют на протяжение всей работы программы. Значение данной переменной доступно в любом месте программы. Пример определения констант и глобальных переменных приведен ниже.

Пример

#include <stdio.h>

const int n=4;

float pi=3.1415;

Пример описания функций приведем позже, когда будем рассматривать раздел подпрограмм в языке Си. Рассмотрим основную функцию в программах на языке Си - main. Данная функция является точкой входа в программу, т.е с этой функции начинается выполнение программы. Без этой функции программа работать не будет. Функция main имеет следующий формат записи.

<тип> main (int argc, char **argv)

Здесь argc и argv два необязательных параметра, а тип определяет возвращаемый функцией результат. Эти параметры передаются из внешнего окружения. Первый параметр служит для передачи числа передаваемых строк, второй для передачи самих строк. Функция main может иметь и третий параметр, который принято называть argp, и который служит для передачи в функцию main параметров операционной системы (среды) в которой выполняется программа на языке программирования С. Однако во многих случаях функция main используется без параметров вообще.

void main(){ }

Все действия, выполняемые внутри функции заключаются в системных скобках { } – это аналог связки begin-end в языке Паскаль. Приведем пример программы пустой программы.

Пример

#include <stdio.h>

void main(){

// … действия

}

 

Данная программа не производит никаких действий, однако успешно компилируется и запускается. Следует заметить, что если тип программы не void, то необходимо вернуть выходное значение с помощью комбинации return. Комбинация символов встречаемая в примере // предназначена для записи комментариев. Все, что стоит в строке после символов // будет закомментировано. Для комментирования большой части текста его заключают между символами  /* */.

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

Список операций и их назначение приведен в таблице операции. Все операции имеют свой приоритет. Например операции «() и []» имеет наивысший приоритет, а операция «,» самый низкий приоритет. К операциям также относятся операция условия «?:» и операция «sizeof».  Операция «?:» единственная операция имеющая три операнда. Она имеет следующий вид:

(выр1)?(выр2):(выр3)

Вычисляется выражение выр1. Если это выражение имеет ненулевое значение, то вычисляется выражение выр2. Результатом операции будет значение выражения выр2. Если значение выражения равно нулю, то вычисляется выражение выр3 и его значение будет результатом операции.

Например найти наибольшее из двух чисел x и y можно следующим образом:

max=(x>y)?x:y;

Операция sizeof вычисляет целочисленное значение величины типа или выражения в байтах. Например:

sizeof(short int);

 

Приведем список ключевых слов используемых в языке Си.

Список ключевых слов:

auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof while
do if static volatile

      

.

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

Практически не одна программа не обходится без функций ввода и вывода. Рассмотрим некоторые функции ввода и вывода в языке Си.

Функция printf() предназначен для форматированного вывода в стандартный поток ввода/вывода. Для ее использования необходимо подключить библиотеку ввода вывода stdio.h.  Она имеет следующей набор параметров:

int printf( const char *format, арг1, арг2, … );

Параметр «format» является управляющей последовательностью. Он имеет следующий вид:

%[флаги][ширина][.точность][размер]тип

 Остальные необязательные параметры обозначенные символом арг1, арг2, …  являются списком выводимых переменных. Их количество и тип задаются (определяется) в управляющей последовательности.

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

Флаги

Знак Название знака Значение В отсутствие этого знака
- дефис выводимое значение выравнивается по левому краю в пределах минимальной ширины поля по правому
+ плюс всегда указывать знак (плюс или минус) для выводимого десятичного числового значения только для отрицательных чисел
  пробел помещать перед результатом пробел, если первый символ значения не знак Вывод может начинаться с цифры.
0 ноль дополнять поле до ширины, указанной в поле ширина управляющей последовательности, символом 0 дополнять пробелами

 

Значения типов

Спецификатор Описание
d, i — десятичное знаковое число,
o — восьмеричное беззнаковое число
u — десятичное беззнаковое число
x и X — шестнадцатеричное число, x использует маленькие буквы (abcdef), X большие (ABCDEF),
f и F — числа с плавающей запятой.
e и E — числа с плавающей запятой в экспоненциальной форме записи (вида 1.1e+44);
a и A — число с плавающей запятой в шестнадцатеричном виде;
c — вывод символа с кодом, соответствующим переданному аргументу
s — вывод строки с нулевым завершающим байтом;
p — вывод указателя,
n — запись по указателю, переданному в качестве аргумента, количества символов, записанных на момент появления командной последовательности, содержащей n;

 

Функция scanf() предназначен для форматированного ввода данных. Для ее использования также необходима библиотека ввода вывода stdio.h.  Она имеет почти эквивалентный набор параметров, что и функция printf(). Единственное отличие это знак & (взятие адреса), который необходимо ставить перед вводимыми переменными. Значение этого знака заключается в том, что введенное значение записывается по адресу, по которому находятся наши переменные арг1, арг2,… .

int scanf( const char *format, &арг1, &арг2, …);

Пример

#include <stdio.h>

 

void main(){

                 // инициализируем переменные

                 int a,b;

                 float f;

                 char ch;

                 // производим присваивание переменных

                 printf("Input a\n");

                 scanf("%d",&a);

                 printf("\nInput the number a and the symbol c\n");

                 scanf("%d %c",&b, &ch);

                 f = 2.2+a + b ;

                 printf("%d\n",a);

printf("a = %d b = %d f = %f ch = %c\n",a,b,f,ch);

}

Результат выполнения

Input a

5

Input the number a and the symbol c

6 n

5

a = 5 b = 6 f = 13.200000 ch = n

В языке Си реализованы и другие функции ввода/вывода например puts(), putchar(), gets(), getchar().  Более подробную информацию о функциях ввода/вывода представлена в [1].

 

Рассмотрим основные операторы языка Си. Операторы предназначены для управления процессом ее выполнения программы. Операторы в языке Си состоят из ключевых слов, выражений и других операторов. Приведем список основных операторов.

    Основные операторы

Оператор Назначение
if   Составной оператор      
switch Оператор передающий управление
goto Оператор безусловного перехода
break Оператор прерывания
continue        Оператор продолжения выполнения
return   Оператор возврата значений
for Оператор цикла
while Оператор цикла
do              Оператор цикла

 

Условный оператор предназначен для реализации разветвляющихся алгоритмов. Данный оператор имеет следующий формат:

 

if (условие){

// действия

}

else{

// действия

}

 

В случае если условие истинно, то выполняются действия следующие за условием. В противном случае выполняются действия следующие за ключевым словом else. В качестве условия в операторе может находится, как простое условие, так и составное объединенное различными логическими связками (! , && , || , …) . Пример иллюстрирующий работу оператора if с составным условием приведен ниже.

 

#include <stdio.h>

 

void main()

{

                        float a,b,c,f;

 

                        printf("Input a and b\n");

                        scanf("%f %f %f",&a, &b, &c);

     

                   if ((a>b) && (0!=c)){

                          f = (a+b)/c;

                   }

                   else{

                          f = (a+b)-c;

                   }

                       

printf("%f", f);

}

Для проверки нескольких условий используют конструкцию if-else-if:

 

if (условие 1){

// действия

}

else if (условие 2){

// действия

}

else if (условие 3){

// действия

}

……………………………………………….

else{

// действия

}

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

 

switch (выражение){

case const_1:

// действия

break;

 

case const_2:

// действия

break;

…………………………

case const_N:

// действия

break;

    

default:

// действия

}

 

При выполнение данной конструкции сначала вычисляется выражение находящееся после ключевого слова switch, затем последовательно производится сравнение выражения с каждой из меток начинающихся ключевым словом case. Далее выполняется последовательность действий следующих за двоеточием. В том случае, когда значение выражения не соответствует ни одной из меток, выполняются действия следующие за оператором default.

 



Литература

1. Б.Керниган, Д. Ритчи. Язык программирования С, 2-е издание. Пер. с англ. – М. Издательский дом «Вильямс», 2007. 304 с.

2.










Последнее изменение этой страницы: 2018-05-10; просмотров: 474.

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