- •Иркутский государственный университет путей сообщения кафедра “информатика” программирование на языке Cи
- •Иркутск
- •Содержание
- •Предисловие
- •Алфавит языка
- •Служебные слова
- •Константы
- •Комментарии
- •Переменные
- •Int I,j,k; //переменные I, j, k – целого типа
- •Математические функции
- •Математические константы
- •Выражения
- •Выражения целого типа
- •Примеры записи выражений целого типа:
- •Примеры вычислений выражений целого типа:
- •Выражения вещественного типа
- •Примеры записи выражений вещественного типа
- •Примеры вычислений выражений вещественного типа:
- •Операторы присваивания
- •Примеры записи операторов присваивания:
- •Ввод и вывод данных
- •Стандартный ввод-вывод
- •Посимвольный ввод-вывод
- •Ввод-вывод строк
- •Форматированный вывод
- •Форматированный ввод
- •Scanf(“формат”, аргументы);
- •Int age, rost;
- •Vasja Pupkin
- •Vasja Pupkin
- •Структура программы
- •Void main()
- •Int main()
- •Int age, rost;
- •Директивы препроцессора
- •Включение файлов
- •Int main()
- •Int age, rost;
- •Int main()
- •Int age, rost;
- •Подстановка имен
- •Макросы
- •Структуры данных
- •Массивы
- •Int vect[5];
- •Int vect[count];
- •Vect[0] vect[1] vect[2] vect[3] vect[4]
- •Int main()
- •Int temp;
- •Int matr[row][col];
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Пример записи алгоритма:
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкции
- •Int main()
- •Int c, y1, y2, kl, day, month, year;
- •Часто встречающиеся ошибки программирования:
- •Int main()
- •Переключатель
- •Int main()
- •Int month;
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Int main()
- •Программа
- •Int main()
- •Программа
- •Int main()
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Int main()
- •Int main()
- •Программа
- •Int main()
- •Int main()
- •Int main()
- •Int month;
- •Циклы с параметром
- •Действия цикла:
- •Int main()
- •Int top, bottom;
- •Int main()
- •Int num, sum, factor;
- •Int main()
- •Int main()
- •Int main()
- •Int vector_min, vector_max, temp;
- •Int vector[n];
- •Функции
- •Void main()
- •Int summa(int a, int b)
- •Int summa(int a, int b)
- •Void swap(int a, int b)
- •Int temp;
- •Void poplavok(int n, int vector[n])
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Int fibo(int n)
- •Int binom(int m, int n)
- •Int max_element(int k, int n, int vector[])
- •Int temp;
- •Void quick_sort(int left, int right, int vector[])
- •Адреса и указатели
- •Операции над указателями
- •Указатели и массивы
- •Int mass[5];
- •Int trio[5][2][3];
- •Указатели и функции
- •Int sloshenie(int a, int b);
- •Int sloshenie(int a, int b)
- •Int main()
- •Указатели и строки
- •Функции для работы со строками
- •Vtorokursnik
- •Vtorokursnik
- •Itoa(I, str, 16);
- •Текстовые файлы
- •Int vector[k];
- •Vector_1:
- •Vector_2:
- •Int ocenka;
- •Imja: Vasilij
- •Imja: Ivan
- •Int ocenka;
- •Бинарные файлы
Комментарии
Программа без комментариев – первый признак непрофессионализма.
Комментарии можно начинать или двумя знаками деления:
//это комментарий
или заключать между символами-скобками /* */:
/* это комментарий */
Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы алфавита языка Си, поскольку комментарии не обрабатываются компилятором.
Рекомендуется использовать //-комментариидля пояснений, а скобки/* */применять для временного исключения программных блоков при отладке программы.
Переменные
В математике с понятием переменнойсвязывают некоторый именованный объект, который может принимать одно из допустимого множества значений.
В программировании термин переменнаяозначает область оперативной памяти, в которой хранятся данные определенного типа. У переменной естьимяизначение. Имя переменной можно рассматривать как адрес первого байта области памяти, в которой она хранится. Знание этого адреса дает возможность пользователю изменять значение переменной в процессе выполнения программы.
Константамтоже выделяются необходимые ячейки памяти, однако их адреса пользователю неизвестны. Поэтому значения констант нельзя изменять в процессе выполнения программы.
Таким образом, понятие переменной употребляется для обозначения величины, которая при работе программы может принимать различные значения. Каждая переменная должна иметь свое имя-идентификатор. Имена переменных программист выбирает сам, руководствуясь следующими правилами:
имя переменной должно отражать ее смысл, то есть то, что с помощью этой переменной вычисляется,
не допускается совпадениеимени переменной со служебными словами и именами функций,
в имени можно использовать буквы латинского алфавита, цифры и знак подчеркивания,
имя должно начинаться с буквы,
совпадающие имена, состоящие из строчных и прописных букв, считаются различными: nameиNAME– различные имена.
Переменные в Си могут иметь один из трех стандартных типов:
int- целый,
float- вещественный,
char- символьный.
Диапазон допустимых значений переменных совпадает с диапазоном допустимых значений констант того же типа:
int:-32768 … +32767,
float:±3,4×10-38…±3,4×10+38,
char: 0 … 255.
Кроме этих основных типов можно использовать следующие типы переменных:
long:-2 147 483 648 … +2 147 483 647,
double:±1,7×10-308…±1,7×10+308,
и их беззнаковые аналоги:
unsigned int:0 … 65535,
unsigned long:0 … 4 294 967 295.
Перед своим использованием любая переменная должна быть описана (объявлена): указан класс памяти, тип и имя переменной, а также по возможности инициализирована– ей присваивается начальное значение.
Самое простое описание включает в себя тип переменной и ее имя:
Int I,j,k; //переменные I, j, k – целого типа
float x,y; //переменные x, y – вещественного типа
char a; //переменная a – символьного типа
Желательна инициализацияпеременных при их описании:
int i=1, j=0, k=2;
float x=0.25, y=-1.5;
char a=’W’;
Если при описании переменной использован модификатор const, то это означает, что значение переменной нельзя изменять в программе. Такую переменную называютименованнойконстантой. Она обязательно должна бытьинициализирована:
const int i=1; //именованная целая константа i
const float x=0.25; //именованная вещественная константа x
const char a=’W’; //именованная символьная константа a
Класс памятиопределяет время жизни и область видимости переменной:
auto-автоматическаяпеременная. Память под нее выделяется в стеке и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее описание. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни – от момента описания до конца блока. Длялокальных(описанных внутри блока) переменных спецификаторautoприменяется по умолчанию, поэтому задавать его явным образом смысла не имеет,
extern-внешняяпеременная. Эта переменная определяется в другом месте программы (в другом файле или дальше по тексту программы). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. Если переменная в этом же описании инициализируется, то спецификаторexternигнорируется,
static-статическаяпеременная. Время ее жизни – постоянное. Инициализируется один раз при первом выполнении оператора, содержащего описание переменной. В зависимости от расположения оператора описания статические переменные могут бытьглобальными(описаны вне любого блока, область их действия – весь файл, в котором они описаны) илокальными(описаны внутри блока). Глобальные статические переменные видны только в том модуле, в котором они описаны,
register-регистроваяпеременная. Память для нее выделяется в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабатываются какauto:
int a; //глобальная переменная a
void main() //заголовок головной программы
{ //начало блока головной программы
int b=1; //локальная переменная b
extern float x;//переменная x определена в другом месте
static int c=0;//локальная статическая переменная c
register char d=’W’; //регистровая переменная d
a=1; //присваивание значения глобальной переменной a
int a; //описание локальной переменной a
//с этого момента и до конца блока действует
//только локальная переменная a
a=0; //присваивание значения локальной переменной a
. . . . . . . . .
return 0;
} //конец блока головной программы
float x=1.5;//определение и инициализация внешней переменной x
В этом примере:
глобальнаяпеременнаяaопределена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия и областью видимости является вся программа до оператора описания одноименнойлокальнойпеременнойa,
локальныепеременные bиc определены внутри блока, поэтому область их видимости – весь блок от момента их описания. Память подbвыделяется в стеке при входе в блок и освобождается при выходе из него. Переменнаясрасполагается в сегменте данных и существует все время, пока работает программа.
Если при определении начальное значение переменной явным образом не задано, то компилятор присваивает глобальным и статическим переменнымнулевыезначения соответствующего типа. Автоматические переменные в этом случае не инициализируются.
Описание переменной может выполняться в форме объявления или определения.
Объявлениеописывает свойства переменной, информируя компилятор о типе переменной и классе памяти.Определениесодержит, кроме этого, указание компилятору о выделении памяти в соответствии с типом переменной, то есть связывает переменную с конкретной областью памяти. ВСибольшинство объявлений являются одновременно и определениями. В приведенном выше примере только описание:
extern float x;
является объявлением, но не определением.
Переменная может быть объявлена многократно, но определена только в одном месте программы.