Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы для подготовки к экзамену по ОП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
297.52 Кб
Скачать

Экспоненциальная форма представления чисел

Экспоненциальной формой представления числа называют представление числа в виде

M e ± p

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

Например:

1.25 === 1.25e0, 123.5 === 1.235e2, 0.0002341 === 2.341e-4 и т.д.

Представления 3.2435e7 эквивалентно 3.2435e+7

Объявление переменных

В си переменные объявляются всегда в начале блока (блок - участок кода, ограниченный фигурными скобками)

<возвращаемый тип> <имя функции> (<тип> <аргумент>[, <тип> <аргумент>]) {

объявление переменных

всё остальное

}

При объявлении переменной пишется её тип и имя.

int a;

double parameter;

Можно объявить несколько переменных одного типа, разделив имена запятой

long long arg1, arg2, arg3;

Например

#include <stdio.h>

#include <conio.h>

int main() {

int a = 10;

int b;

while (a>0){

int z = a*a;

b += z;

}

}

Здесь объявлены переменные a и b внутри функции main, и переменная z внутри тела цикла. Следующий код вызовет ошибку компиляции.

int main() {

int i;

j = 10;

int j;

}

Это связано с тем, что объявление переменной стоит после оператора присваивания. При объявлении переменных можно их сразу инициализировать.

int i = 0;

При этом инициализация при объявлении переменной не считается за отдельный оператор, поэтому следующий код будет работать:

int main() {

int i = 10;

int j;

}

Начальное значение переменной

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

#include<conio.h>

#include<stdio.h>

int main() {

int i;

printf("%d", i);

getch();

}

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

Область видимости переменной

Переменные бываю локальными (объявленными внутри какой-нибудь функции) и глобальными. Глобальная переменная видна всем функциям, объявленным в данном файле. Локальная переменная ограничена своей областью видимости. Когда мы говорим, что переменная "видна в каком-то месте", это означает, что в этом месте она определена и её можно использовать. Например, рассмотрим программу, в которой есть глобальная переменная

#include<conio.h>

#include<stdio.h>

int global = 100;

void foo() {

printf("foo: %d\n", global);

}

void bar(int global) {

printf("bar: %d\n", global);

}

int main() {

foo();

bar(333);

getch();

}

Будет выведено

foo: 100

bar: 333

Здесь глобальная переменная global видна всем функциям. Но аргумент функции затирает глобальную переменную, поэтому при передаче аргумента 333 выводится локальное значение 333.

Вот другой пример.

#include<conio.h>

#include<stdio.h>

int global = 100;

int main() {

int global = 555;

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

getch();

}

Программа выведет

555

Также, как и в прошлом случае, локальная переменная "важнее". Переменная, объявленная в некоторой области видимости не видна вне её, например.

#include<conio.h>

#include<stdio.h>

int global = 100;

int main() {

int x = 10;

{

int y = 30;

printf("%d", x);

}

printf("%d", y);

}

Этот пример не скомпилируется, потому что переменная y существует только внутри своего блока.

Вот ещё пример, когда переменные, объявленные внутри блока перекрывают друг друга

#include<conio.h>

#include<stdio.h>

int global = 100;

int main() {

int x = 10;

{

int x = 20;

{

int x = 30;

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

}

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

}

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

getch();

}

Программа выведет:

30

20

10

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

  • разрабатывается несколькими людьми и состоит из сотен тысяч строк кода;

  • работает в несколько потоков.

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

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

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