В каких частях программы на языке си могут располагаться объявления переменных

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

В языке Си типы связаны с именами (идентификаторами) величин, т. е. с переменными. С переменной в языке Си связывается ячейка памяти. Тип переменной задает размер ячейки, способ кодирования ее содержимого, допустимые преобразования над значением данной переменной. Все переменные должны быть описаны до их использования. Каждая переменная должна быть описана только один раз.

Описание состоит из спецификатора типа и следующего за ним списка переменных. Переменные в списке разделяются запятыми. В конце описания ставится точка с запятой.

Примерыописаний:

char a,b; /* Переменные а и b имеют тип

char */ intх; /* Переменная х — типа int

*/ char sym; /» Описаны переменные sym типа char;

*/ int count.num; /* num и count типа int */

Язык Си. #061. Формы объявления переменных.

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

Примеры: char backch = ‘’;

Рассмотрим основные типы в языке Си.

int — целый («integer»). Значения этого типа — целые числа из некоторого ограниченного диапазона (обычно от- 32768 до 32767). Диапазон определяется размером ячейки для типа и зависит от конкретного компьютера. Кроме того, имеются служебные слова, которые можно использовать с типом int: short int («short integer» — «короткое целое»), unsigned int («unsigned integer» — «целое без знака»), long int («длинное целое»), которые сокращают или, наоборот, расширяют диапазон представления чисел.

char — символьный («character»). Допустимое значение для этоготипа — одинсимвол (не путать с текстом!). Символ записывается в апострофах.

Примеры: ‘х»2″?’

В памяти компьютера символ занимает один байт. Фактически хранится не символ, а число — код символа (от 0 до 255). В специальных таблицах кодировки указываются все допустимые символы и соответствующие им коды.

В языке Си разрешается использовать тип char как числовой, т. е. производить операции с кодом символа, применяя при этом спецификатор целого типа в скобках — (int).

float — вещественный (с плавающей точкой). Значения этого типа — числа, но, в отличии от char и int, не обязательно целые.

12.87 -316.12 -3.345е5 12.345e-15

double — вещественные числа двойной точности. Этот тип аналогичен типу float, но имеет значительно больший диапазон значений (например, для системы программирования Borland-C от 1.7Е-308 до 1.7Е+308 вместо диапазона от 3.4Е-38 до 3.4Е+38 для типа float). Однако увеличение диапазона и точности представления чисел ведет к снижению скорости выполнения программ и неэкономному использованию оперативной памяти компьютера.

Переменные в языке Си

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

Необходимо отметить, что последним элементом массива является символ . Это «нуль-символ», и в языке Си он используется для того, чтобы отмечать конец строки. Нуль-символ не цифра 0; он не выводится на печать и в таблице кодов ASCII имеет номер 0. Наличие нуль-символа означает, что количество ячеек массива должно быть. по крайней мере, на одну больше,чем число символов, которые необходимо размещать в памяти.

Приведем пример использования строк.

В этом примере описан массив из 31 ячейки памяти, в 30 из которых можно поместить один элемент типа char. Он вводится при вызове функции scanf(«%s»,string); «отсутствует при указании массива символов.

Указатели. Указатель — некоторое символическое представление адресаячейкипамяти, отведенной для переменной.

Здесь name является константой типа «указатель».

В языке Си имеются и переменные типа указатель. Точно так же, как значением переменной типа char является символ, а значением переменной типа int — целое число, значением переменной типа указатель служит адрес некоторой величины.

Если мы дадим указателю имя ptr, то сможем написать такой оператор:

ptr = &name;/* присваивает адрес name переменной ptr */

Структура программы на языке Си

Программа на языке Си состоит из директив препроцессора, объявлений глобальных переменных, одной или нескольких функций, cреди которых одна главная (main) функция первой получает управление и руководит дальнейшей работой программы. Комментарий в программе – любая последовательность символов, заключенная между парой символов /* */ (многострочный комментарий) или после пары символов // и до конца строки (однострочный комментарий)

Читайте также:
Что за стартовая программа фаберлик

Общая структура программы на языке Си имеет вид:

Функции, в свою очередь, имеют структуру:

> – конец функции

Перед компиляцией программы на языке Си автоматически выполняется предварительная (препроцессорная) обработка текста программы перед компиляцией.

Директивы препроцессора записываются по следующим правилам:

— все препроцессорные директивы должны начинаться с символа #, расположенного в первой позиции

— сразу за символом # должно следовать наименование директивы, указывающее текущую операцию препроцессора.

Наиболее распространены директивы #include и #define.

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

#include – подключение разделов библиотек, осуществляющих ввод-вывод данных;

#include – функции работы с консолью;

#include – графические функции;

#include – раздел библиотеки с математическими функциями.

Директива #define создает макроконстанту, ее действие – весь файл.

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

Задания и методические указания

2.1. Программирование линейных вычислительных процессов. Разветвляющиеся алгоритмы.

Минимально возможная программа на языке Си выглядит таким образом:

return 0; /* комментарий заключен в двухсимвольные ограничители */

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

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

С помощью одного оператора можнo присвоить одно значение нескольким переменным

z=(x=y)*5; /*сначала переменной x присваивается значение переменной y, далее вычисляется выражение x*5, результат присваивается переменной z */.

  • Сокращенная форма: имя_переменной операция=выражениe;

В языке Си существует операции уменьшения (—) и увеличения (++) значения переменной на 1. Операции могут быть префиксные (++i, —i) и постфиксные (i++, i—). В случае префиксной операции сначала выполняется сама операция (изменяется значение i), потом вычисляется выражение. В случае постфиксной операции сначала вычисляется выражение, затем изменяется значение.

если c=b*++n; /* n=n+1; c=b*n; т.е. c=14 */

если c=b*n++; /* c=b*n; n=n+1; т.е. c=7 */

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

¨ Операторы перехода

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

Общая форма записи:

if (условие) оператор1;

else оператор2;

Например: if(x>y) max=x;

Если оператор1 или оператор2 содержат два и более операторов, то они заключаются в фигурные скобки (составной оператор). В сокращенной форме записи вторая часть оператора (else оператор2;) может отсутствовать, и в случае ложности условия управление передается на следующий за if оператор. Если оператор1 и оператор2 в свою очередь являются операторами if, то такой оператор называют вложенным. При этом ключевое слово else принадлежит ближайшему предшествующему if.

Общий вид вложенного оператора: if (условие1) оператор1;

else if(условие2) оператор2;

else оператор3;

Например: найти наибольшее значение из трех чисел x,y,z.

В качестве условий используют следующие операции отношений: (меньше), (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно).

Общий вид условия:

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

! (отрицание или логическое НЕТ), (конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ) (перечислены в порядке убывания приоритетов).

Выражения вычисляются слева направо, пары символов не разделяются.

¨ Триадный оператор (оператор условного перехода ?:). Его форма:

имя_переменной =условие? выражение_1: выражение_2;

Если условие истинно, то переменной присваивается результат выражения_1, иначе – выражения_2.

Например: найти наибольшее из двух чисел: max=a>b? a: b;

Оператор ?: можно использовать для замены конструкции

if (условие) выражение_1; else выражение_2

¨ Оператор выбора switch

Общая форма оператора выбора:

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

case constN: операторы; break;

Читайте также:
К какому тексту в программе flash средства анимации не применимы

default: операторы;

где const1…constN — целые или символьные константы; default — выполняется, если результат выражения не совпал ни с одной константой (может отсутствовать); break -oператор завершения работы switch. После выполнения одной из ветвей case все остальные ветви будут опущены. Оператор switch проверяет, совпадает ли значение выражения с одной из приведенных ниже констант. При совпадении выполняются операторы, стоящие после совпавшей константы.

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

Рассмотрим пример реализации линейного алгоритма средствами языка Си.

Листинг 2. Вычислить

#include /* подключение заголовочных файлов, содержащих функции ввода-вывода */

#include /* подключение заголовочных файлов, содержащих функции работы с консолью */

#include /* подключение заголовочных файлов, содержащих математические функции */

#define x 2.444 /* x=2.444 */

#define y 0.00869 /* y=0.00869 */

#define z -130.0 /* z=-130 */

double rez,dop,a,b,c; /* Декларирование переменных */

clrscr(); /* Очистка экрана */

puts(» ЛАБОРАТОРНАЯ РАБОТА N1 — ЛИНЕЙНАЯ ПРОГРАММА «);

printf(«an ОТВЕТ: %lf, Press any key. «, rez);

getch(); /* ЗАДЕРЖКА ДО НАЖАТИЯ ЛЮБОЙ КЛАВИШИ */

Выполните приведенную программу и убедитесь в правильности работы:

Листинг 3. Вычислить значение функции F. Вывести сообщение о том, по какой ветви

происходило вычисления функции.

double max(double m,double n) /* функция max с параметрами m и n */

if (m>n) return m /* значения */

double min(double m, double n) /* функция min с параметрами m и n */

double x,y,f; /* декларирование переменных x,y,f */

puts(«Введите значения x и y»);

scanf(«%lf %lf»,y); /* ввод значений х и у */

f=max(pow(x,2.0/3.0),cos(y*y)); /* вызов функции max */

f=min(0.5*x-2*pow(sin(y),2),exp(y)); /* вызов функции min */

exit(1); /* ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ ПРОГРАММЫ */

printf(«ОТВЕТ: F=%lf,n Press any key. n»,f); /* ВЫВОД РЕЗУЛЬТАТА */

Задача1. Варианты

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

Определить значение функции F. Предусмотреть вывод сообщения о том, по какой ветви происходило вычисление.

1.14. Ввести три числа x,y,z. Вычислить

a)r=max(min(x,y),z); b)r=max(x,0)+min(y,z); c)r=min(x,y,0)+max(y,z);

d) произведение двух наименьших из 3 чисел

1.15. Ввести четыре числа a,b,c,d. Расположить их по возрастанию

1.16. Даны длины 3 отрезков A,B,C. Определить возможность построения треугольника и его вид (разносторонний, равнобедренный, равносторонний)

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

1.18. Ввести целое число, представляющее оценку по 10-балльной системе. Вывести «не явился», «неуд.», «удовл.», «хорошо», «отлично» в зависимости от оценки и получить аналог оценки в 5-бальной системе

1.19. Даны 2 вещественных числа x,y. Вывести “Y” или “N” в зависимости от того, принадлежит ли точка плоскости с координатами (x,y) кольцу, ограниченному окружностями с радиусами r и R (r

1.20. Даны два вещественных числа x,y. Если точка плоскости с координатами (x,y) принадлежит треугольнику с вершинами в точках (-2,0), (0,2), (2,0), то обе координаты увеличить в 10 раз, в противном случае x=x-10, y=y-10.

Источник: infopedia.su

Типы данных в «Си». Программирование на языке «Си»

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

Типизация

При динамической типизации переменная связывается с типом на момент инициализации. Получается, что переменная в разных участках кода может иметь разные типы. Динамическую типизацию поддерживают Java Script, Python, Ruby, PHP.

Статическая типизация является противоположностью динамической. При объявлении переменная получает тип, который не меняется в дальнейшем. Языки Си и Си++ являются именно такими. Этот способ наиболее удобный для написания сложного кода, а на стадии компиляции исключается много ошибок.

Типы данных

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

x = 1 + “2”; //ошибка — нельзя прибавить к числу символьный знак

Пример слабой типизации.

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

Классы памяти

Переменные, независимо от их типа, имеют свою область видимости и время существования.

Код на Си

Все переменные в языке Си по умолчанию являются локальными. Они могут использоваться только внутри функции или блока. По завершении функции их значение уничтожается.

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

Читайте также:
На чем лучше всего написать программу

Внешняя переменная является глобальной. Она доступна в любой части кода и даже в другом файле.

Регистровая переменная рекомендует компилятору сохранять значение в оперативную память.

Спецификаторы типов данных в Си могут не указываться в таких случаях:

  1. Все переменные внутри блока не являются переменными, соответственно, если предполагается использование именно этого класса памяти, то спецификатор auto не указывается.
  2. Все функции, объявленные вне блока или функции, являются по умолчанию глобальными, поэтому спецификатор extern не обязателен.

Базовые типы

Для указания простых типов указываются спецификаторы int, char, float или double. К переменным могут подставляться модификаторы unsigned (беззнаковый), signed (знаковый), short, long, long long.

Базовые типы

По умолчанию все числа являются знаковыми, соответственно, могут находиться в диапазоне только положительных чисел. Чтобы определить переменную типа char как знаковую, пишется signed char. Long, long long и short указывают, как много места в памяти отводится для хранения. Наибольшее — long long, наименьшее — short.

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

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

Явное преобразование беззнаковой переменной задается так:

Неявное выглядит так:

Float и double определяют числа с точкой. Числа float представляются в виде -2.3 или 3.34. Double используется для большей точности — после разделителя целой и дробной части указывается больше цифр. Этот тип занимает больше места в памяти, чем float.

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

Логический тип Bool

Применяется в проверках условий и циклах. Имеет всего два значения:

Истина-ложь

Булевые значения могут преобразовываться в значение типа int. True эквивалентно единице, false — нулю. Преобразование типов предусмотрено только между bool и int, в противном случае компилятор выдаст ошибку.

Строки и массивы

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

Что такое массивы

Строка также объявляется в кратком виде.

Целочисленный или символьные массивы объявляются одинаковым образом: тип данных имя переменной[размер массива].

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

Многомерные массивы объявляются так:

При создании этого массива выделяется место, в данном случае, для хранения двух вложенных массивов, которые состоят из трех элементов.

Инициализация многомерного массива:

Ссылки и указатели

Указатели — главная особенность языка, они открывают широкие возможности для работы с памятью. Они передают информацию о расположении другой переменной в памяти. Перед использованием они, подобно другим переменным, объявляются в виде type *pointer. Type — тип переменной, pointer — имя указателя.

Типы указателей

Чтобы задать указателю значение другой переменной, используются ссылки. Они передают адрес переменной и используются в качестве безопасного указателя.

Ссылки позволяют работать с указателем, как с объектом.

Ссылки в Си

В данном случае ”.

Вторая разновидность списков с данным — enum (перечисление). Он содержит целочисленные переменные.

В примере объявлено анонимное перечисление, содержащее три члена red, blue, green. Перед обращением к элементам объявляется перечислительная переменная.

В этом случае name1 является именем перечисления, а varname — имя переменной. В моменте создания структуры можно задать несколько переменных. Они перечисляются через запятую.

Доступ к членам перечисления задается при помощи оперетора «.».

Заключение

Язык Си предоставляет большой набор типов. Они формируются с помощью соответствующих спецификаторов.

Базовые типы делятся на числовые (double, float) и знаковые (int, char). Модификаторы signed и unsigned указывают на наличие знака перед символом. Модификаторы short и long отвечают за размер ячеек в памяти для хранения значений переменных. Логический тип данных имеет два значения: true и false. Массивы, структуры относятся к сложным типам данных.

Указатель работает с адресом переменной, на который указывает.

Источник: www.syl.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru