http://wormholetravel.net/
Прежде чем вы приступите к изучению программирования в языке С, вы, очевидно, должны получить хотя бы самое приблизительное представление о том, как работает компьютер. Эти знания помогут вам понять, какая с вязь между написанием программы на С и что на самом деле происходит, когда вы исполняете эту программу.
Современные
компьютеры состоят из нескольких компонентов Центральное процессорное
устройство (ЦП) выполняет основную вычислительную работу. Память с произвольным доступом, или
оперативное запоминающее устройство (ОЗУ),
представляет собой рабочую область, в которой содержатся программы и
файлы. Постоянная память, обычно жесткий диск
запоминает эти программы и файлы и хранит их, даже когда компьютер
выключен. Периферийные устройства различного назначения, такие как клавиатура,
мышь и монитор, обеспечивают обмен данными между вами и компьютером. ЦП
обрабатывает ваши программы, поэтому рассмотрим более подробно его роль.
Функции ЦП достаточно просты. Он извлекает команду из памяти и выполняет ее.
Затем
он извлекает следующую команду и выполняет ее , и так далее . (Центральный процессор
с тактовой частотой 1 ГГц выполняет порядка одного миллиарда таких операций в
секунду, так что ЦП ведет монотонную жизнь в бешеном темпе .) ЦП имеет
собственную рабочую область, состоящую из нескольких
регистров, каждый из них может запоминать не которое число. Один регистр
содержит адрес следующей команды в
памяти,
а ЦП использует эту информацию для извлечения следующей команды. После
получения следующей команды ЦП запоминает ее в другом регистре и обновляет
первый
регистр
адресом очередной команды. Центральный процессор выполняет ограниченный набор
команд (получивший название Набора Инструкций). Наряду с этим,
эти команды достаточно специфичны многие
из них требуют от ЦП переместить число из одного места в другое , например из ячейки памяти в тот или иной регистр.
Здесь
следует отметить два интересных факта. Во-первых, все что хранится в компьютере ,
хранится в виде чисел. Числа сохраняются как числа . Символы такие как
буквы
алфавита , которые вы используете в текстовых документах сохраняются как числа, при этом каждый символ
имеет свой числовой код . Команды, которые компьютер
загружает
в свои регистры сохраняются как
числа каждая команда из системы команд
имеет свой числовой код . Во-вторых, компьютерная программа в конечном итоге
должна быть выражена в этом числовом коде
или другим и словами, с помощью машинного языка.
Одним
из последствий такого принципа работы компьютера является то, что если вы
хотите, чтобы компьютер выполнил какую-то работу, вы должны ввести конкретный
список инструкций (программу) в котором
подробно расписано, что и как нужно сделать. Вы должны создать программу на
языке, который понятен непосредственно компьютеру (на машинном языке ). Это кропотливая
и утомительная работа, требующая большой точности. Такая простая операция, как
сложение двух чисел, должна быть разбита на несколько действий, примерно следующим
образом:
1.
Скопировать число из ячейки памяти 2000 в регистр 1 .
2 .
Скопировать число из ячейки памяти 2004 в регистр 2 .
3 .
Сложить с одержимое регистра 2 с содержимым регистра 1 и оставить результат
сложения в регистре 1 .
4 .
Скопировать с одержимое регистра 1 в ячейку памяти 2008.
Каждую
из этих инструкций вы должны представить в числовом коде ! Если написание
программ в таком стиле вам нравится
вынужден огорчить вас, сообщив, что золотой век программирования в
машинных кодах давно ушел в прошлое. Однако если вы все-таки предпочитаете
что-нибудь более интересное, добро пожаловать в языки программирования высокого
уровня .
НАПИСАНИЕ КОДА
Теперь,
когда вы создали проект вашей программы , вы можете приступать к ее реализации,
для чего необходимо написать программный код. Иначе говоря вы переводите проект программы на язык С .
Именно на этой стадии потребуются все ваши
знания
языка С. Вы можете набросать решения на бумаге
но в конечном итоге вы должны будете ввести составленный вами код в
компьютер. Механика этого процесса зависит от среды программирования, в которой
вы работаете. Вскоре мы ознакомим вас с характеристиками не которых
операционных сред. В обще м случае вы используете текстовый редактор для
построения так называемого файла исходного кода . Этот файл с одержит
интерпретацию проекта вашей программы на языке С. В листинге 1 .1 показан
пример исходного кода на С .
Листинг 1.
#include
<stdio.h> //Подключить файл
стандартной библиотеки
int main (void)
{
int dogs;
printf ("How many dogs you have?\n");
/*получить входные данные от
пользователя*/
scanf ("%d", &dogs);
printf("So,youhave%ddogs!\n",dogs);
getchar(); //для того чтобы не закрывалось окно
программы после исполнения
getchar();
return 0; //Оператор возврата
}
ВЫВОД НА ЭКРАН:
How many dogs you have?
8
So, you have 8 dogs!
Пояснения:
#include <stdio.h>
//КОМАНДА
ПРЕПРОЦЕССОРА - подключение файла стандартной библиотеки С stdio.h содержит
библиотеку функций ввода-вывода
int main (void)
//ОПЕРАТОР
ОБЪЯВЛЕНИЯ с именем main() - главная функция, каркас программы на С
int dogs;
//ОПЕРАТОР
ОБЪЯВЛЕНИЯ. Инициализация переменной с именем dogs. Тип данных целые числа.
printf ("How many dogs you have?\n");
//ОПЕРАТОР
ВЫЗОВА ФУНКЦИИ с именем printf() - функция вывода на экран. Имеет один аргумент
-> управляющая строка.
scanf ("%d",
&dogs);
//ОПЕРАТОР
ВЫЗОВА ФУНКЦИИ с именем scanf() - ВВОД ДАННЫХ с клавиатуры
//&dogs
-> что введенное число будет присвоено переменной по имени dogs
//(&
амперсанд) для указания на то, где можно найти переменную dogs
//Спецификатор
%d показывает, что переменная вводится как десятичное число
printf ("So, you have %d dogs!\n ", dogs );
//ОПЕРАТОР
ВЫЗОВА ФУНКЦИИ с именем printf() -
функция ВЫВОДА НА ЭКРАН. Имеет два аргумента.
//->
управляющая строка "" и список переменных
//Спецификатор
%d показывает, что переменная ВЫВОДИТСЯ
КАК ДЕСЯТИЧНОЕ ЧИСЛО
КОМПИЛЯЦИЯ
Следующим этапом разработки является компиляция
исходного кода. И в этом случае детали зависят от среды программирования.
Напомним, что компилятор представляет собой программу,
в обязанности которой входит преобразование исходного кода в исполняемый код. Исполняемый
код - это собственный язык машины, или
машинный язык вашего компьютера. Этот язык из подробных команд,
представленных в числовом коде. Разные компьютеры имеют разные машинные языки,
а компилятор языка С транслирует код С в конкретный машинный язык.
Компиляторы языка С вставляют также коды из библиотек
программ на С в окончательный вариант программы; упомянутые библиотеки с
одержат комплект стандартных программ, например, printf () и scanf (), дабы вы,
при необходимости, могли ими воспользоваться. (Если говорить точнее, то
библиотечные программы в вашу программу включает инструмент , получивший
название компоновщика, или редактора связей, тем не менее в большинстве систем его запускает компилятор). В конечном итоге получается исполняемый файл,
который понимает компьютер, и который можно запускать на выполнение. Компилятор
проверяет также, не содержит ли ошибок ваша программа на С. Когда компилятор
находит ошибки, он уведомляет об их наличии и не создает исполняемый файл.
Понимание "жалоб" компилятора - это еще одна обязанность, которую вам
придется освоить.
ФАЙЛЫ
ОБЪЕКТНОГО КОДА, ИСПОЛНЯЕМЫЕ ФАЙЛЫ И БИБЛИОТЕКИ.
Базовая стратегия программирования на С заключается в
том, чтобы использовать программы, которые преобразуют ваш исходный код в
исполняемый файл, содержащий готовый к выполнению программный код на машинном
языке. Эта работа выполняется в два этапа: компиляция и компоновка. Компилятор
преобразует ваш исходный код в промежуточный код, а компоновщик комбинирует
этот код с другим кодом в результате получается исполняемый файл. В С
используется такой двухэтапный подход для модульной организации программ. Вы
можете компилировать индивидуальные модули по отдельности, а затем с помощью
компоновщика объединить с компилированные модули.
Таким образом, если потребуется изменить какой-то один
модуль, не нужно будет повторно компилировать остальные модули. Кроме того,
компоновщик связывает вашу программу с заранее откомпилированным библиотечным
кодом. Существует не сколько вариантов форматов промежуточных файлов. Наиболее
предпочтительным является вариант выбранный для реализаций, описанных в данной
книге, который предусматривает преобразование
исходного кода в код на машинном языке после чего результат помещается в файл
объектного кода, или, сокращенно в объектный файл. (При этом
предполагается, что ваш исходный код хранится в одном файле .) И хотя объектный
файл содержит коды в машинном языке, он еще не готов к выполнению. Объектный
файл содержит трансляцию ваше го исходного кода, но это незаконченная программа
.
Первый элемент, которого не хватает в файле объектного
кода - это код запуска, представляющий собой код, который действует в
качестве интерфейса между вашей программой и операционной системой. Например,
вы можете запускать программу на одинаковых персональных компьютерах, один из
которых функционирует под управлением DOS , а другой - под управлением Linux .
В обоих случаях оборудование одно и то же , так что используется один и тот же
объектный код, в то же время нужны разные коды запуска для DOS и для Linux , поскольку
эти системы поддерживают программы по-разному.
Вторым отсутствующим элементом является коды библиотечных
программ. Практически все С-программы используют стандартные программы
(именуемые функциями), которые являются частью библиотеки С. Например concrete.с использует
функцию printf ( ). Объектный файл не с одержит код этой функции , он просто
содержит команду, требующую использования функции printf ( ) . Фактический код
хранится в файле , получившем название библиотеки. Библиотечный файл содержит
объектные коды для множества функций .
Роль компоновщика заключается том , чтобы собрать воедино эти три
элемента:
- ваш объектный
код,
- стандартный код запуска и
- библиотечный код - с последующим запоминанием в
отдельном файле, который называется исполняемым.
Что касается библиотечного кода, то компоновщик извлекает только код ,
необходимый для функций, вызываемых из библиотеки , как показано на рис.
Короче, как объектный, так и исполняемый файлы с
одержат команды на машинном языке . В то же время объектный файл с одержит только результат
трансляции ваших программных кодов, в то время как исполняемый файл - также и
машинные коды использованных вами стандартных библиотечных программ и код
инициализации.
С - это мощный и компактный язык программирования . Его
широкое распространение объясняется тем, что он предлагает полезные
инструментальные средства и обеспечивает эффективное управление оборудованием ,
а также тем , что программы на этом языке легче переносятся с одной системы на
другую . С принадлежит к числу транслируемых языков. Компиляторы и компоновщики
(редакторы связей ) языка С - это программы, которые переводят исходные коды на
языке С в исполняемые коды .
#include <stdio.h> //КОМАНДА ПРЕПРОЦЕССОРА - подключение файла стандартной библиотеки С stdio.h содержит библиотеку функций ввода-вывода
//ПРИМЕР
#include <stdio.h> //Подключить файл
стандартной библиотеки
int main(void)
{
float duim;
float sm; .
printf("Enter duim:
\n");
/*получить
входные данные от пользователя*/
scanf("%f", &duim);
/*В 1 дюйме
2.45 см, формула пересчета*/
sm = 2.45 * duim;
printf("Santimeter
%.2f.\n", sm);
getchar();
getchar();
return 0; //Оператор возврата
}
printf("Сантиметров %.2f.\n", sm);
// \n - код указывает
компьютеру начать новую строку.
//%.2f - код указывает где и
в какой форме вывести значение sm. В данном случае - два знака после запятой
Пояснение:
#include <stdio.h>
//КОМАНДА
ПРЕПРОЦЕССОРА - подключение файла стандартной библиотеки С stdio.h содержит библиотеку
функций ввода-вывода
int main(void)
//ОБЪЯВЛЕНИЕ
ФУНКЦИИ с именем main() - главная функция, каркас программы на С
//int - ф-ция
возвращает целое число, void - ф-ция не принимает аргументов
float duim;
//ОПЕРАТОР
ОБЪЯВЛЕНИЯ. Инициализация переменной с именем duim-дюймы. Тип данных
вещественные числа.
float sm;
//ОПЕРАТОР
ОБЪЯВЛЕНИЯ. Инициализация переменной с именем sm-сантиметры. Тип данных
вещественные числа.
printf("Введите дюйм:
\n");
//оператор
вызова функции printf() - функция вывода на экран
scanf("%f",
&duim);
//ОПЕРАТОР
ВЫЗОВА ФУНКЦИИ с именем scanf() - ввода данных с клавиатуры (интерактивная функция)
//&duim
-> что введенное число будет присвоено переменной по имени duim
//(&
амперсанд) для указания на то, где можно найти переменную duim
//Спецификатор
%f показывает что переменная вводится как вещественное число
/*В 1 дюйме
2.45 см, формула пересчета*/
sm = 2.45 * duim;
//ОПЕРАТОР
ПРИСВАИВАНИЯ -> переменной sm присваивается значение 2.45*duim
printf("Сантиметров
%.2f.\n", sm);
//ОПЕРАТОР
ВЫЗОВА ФУНКЦИИ с именем printf() - функция вывода на экран. Имеет два
аргумента: управляющая строка "" и список переменных
//Спецификатор
%f показывает что переменная выводится как вещественное число
getchar();
//для того
чтобы не закрывалось окно программы после исполнения
Комментариев нет:
Отправить комментарий