- •Материалы для подоговки к экзамену по дисциплине «основы программировния»
- •Тема №1 Основные понятия
- •Способы записи алгоритма
- •Тема №2 Переменные
- •Типы переменных
- •Типы с плавающей точкой
- •Переполнение переменных
- •Постфиксное обозначение типа
- •Шестнадцатеричный и восьмеричный формат
- •Экспоненциальная форма представления чисел
- •Объявление переменных
- •Начальное значение переменной
- •Область видимости переменной
- •Тема №3 Оператор присваивания
- •Ввод-вывод Форматированный вывод
- •Форматированный ввод
- •Непечатные символы
- •Тема №4 Ветвления и логические операторы
- •Оператор Switch
- •Логические операторы
- •Логическое отрицание
- •Логическое и
- •Логическое или
- •Пример: закон де-Моргана.
- •Порядок выполнения логических операторов
- •Тема №5 Циклы
- •Цикл с предусловием
- •Циклы с постусловием
- •Цикл for
- •Вложенные циклы
- •Тема №6 Одномерные массивы
- •Начальная инициализация массива.
- •Размер массива
- •Переполнение массива
- •Пример с одномерным массивом
- •Многомерные статические массивы
- •Пример с многомерным массивом
- •Тема №7 Строки в си. Введение
- •Чтение строк
- •Указатели
- •Определение
- •Арифметика указателей
- •Указатель на указатель
- •Указатели и приведение типов
- •Null pointer - нулевой указатель
- •Пример работы с указателями
- •Тема №8 Указатели и массивы
- •Многомерные массивы и указатели на многомерные массивы
- •Определение макросов
- •Тема №9 Тернарный оператор и оператор запятая
- •Оператор запятая.
- •Сегментация приложения на си
- •Тема №10 Динамическое выделение памяти
- •Освобождение памяти с помощью free
- •Работа с двумерными и многомерными массивами
- •Тема №11 Параметры командной строки
- •Функции
- •Параметры и аргументы
- •Передача аргументов По значению
- •По указателю (ссылке)
- •Передача массива в качестве аргумента
- •Тема №12 Битовые операции
- •Операции побитового сдвига
- •Примеры
- •Вопросы к экзамену по дисциплине «Основы программирования»
Способы записи алгоритма
Текстовый — в виде текста на естественном или искусственном языке, в том числе на языках программирования. Универсален, наиболее распространен.
Табличный — в форме двумерных таблиц (таблицы решений, таблицы переходов и т.п.) Не универсален, но удобен в отдельных случаях.
Графический — наиболее нагляден. Используется в виде схем алгоритмов и программ.
Схема алгоритма состоит из блоков, обозначающих действия, соединенных стрелками, определяющими порядок выполнения действий. Блоки называются символами.
Правила оформления схем регламентируются государственными и международными стандартами на оформление программной документации.
Основными символами являются:
"процесс" (прямоугольник) — для описания операций ввода, обработки и вывода данных;
"решение" (ромб) — для разветвления алгоритма;
"пуск-останов" (овал) — обозначает начало, конец и прерывание выполнения алгоритма;
"комментарий" — для пояснения схемы.
Отмечу, что, введя понятие «Программи́рование» так, как это было сделано выше мы его подвергли искусственному суженное, так как программировать (предписывать) конечно же можно долеко не только для компьютеров.
Тема №2 Переменные
Переменные используются для хранения значений. Переменная характеризуется типом и именем. Начнём с имени. В си переменная может начинаться с подчерка или буквы, но не с числа. Переменна может включать в себя:
Символы английского алфавита.
Цифры и знак подчёркивания.
Переменная не должна совпадать с ключевыми словами (это специальные слова, которые используются в качестве управляющих конструкций, для определения типов и т.п.)
auto
double
int
struct
break
else
long
switch
register
typedef
char
extern
return
void
case
float
unsigned
default
for
signed
union
do
if
sizeof
volatile
continue
enum
short
while
inline
А также ряд других слов, специфичных для данной версии компилятора, например far, near, tiny, huge, asm, asm_ и пр.
Например, правильные идентификаторы
a, _, _1_, Sarkasm, a_long_variable, aLongVariable, var19, defaultX, char_type
неверные
1a, $value, a-long-value, short
Си — регистрозависимый язык. Переменные с именами a и A, или end и END, или perfectDark и PerfectDarK — это различные переменные.
Типы переменных
Тип переменной определяет
Размер переменной в байтах (сколько байт памяти выделит компьютер для хранения значения)
Представление переменной в памяти (как в двоичном виде будут расположены биты в выделенной области памяти).
В си несколько основных типов. Разделим их на две группы — целые и числа с плавающей точкой.
Целые
char - размер 1 байт. Всегда! Это нужно запомнить.
short - размер 2 байта
int - размер 4 байта
long - размер 4 байта
long long - размер 8 байт.
Здесь следует сделать замечание. Размер переменных в си не определён явно, как размер в байтах. В стандарте только указано, что
char <= short <= int <= long <= long long
Размер переменных стандартных типов данных Си вариируется в зависимости конкретной архитектуры и соответствующего её компилятора.
Теперь давайте определим максимальное и минимальное число, которое может хранить переменная каждого из типов. Числа могут быть как положительными, так и отрицательными. Отрицательные числа используют один бит для хранения знака. Иногда знак необходим (например, храним счёт в банке, температуру, координату и т.д.), а иногда в нём нет необходимости (вес, размер массива, возраст человека и т.д.). Для этого в си используется модификатор типа signed и unsigned. unsigned char — все 8 бит под число, итого имеем набор чисел от 00000000 до 11111111 в двоичном виде, то есть от 0 до 255 signed char от -128 до 128.
В си переменные по умолчанию со знаком. Поэтому запись char и signed char эквивалентны.
Тип |
Размер, байт |
Минимальное значение |
Максимальное значение |
unsigned char |
1 |
0 |
255 |
signed char(char) |
1 |
-128 |
127 |
unsigned short |
2 |
0 |
65535 |
signed short(short) |
2 |
-32768 |
32767 |
unsigned int (unsigned) |
4 |
0 |
4294967296 |
signed int (int) |
4 |
-2147483648 |
2147483647 |
unsigned long |
4 |
0 |
4294967296 |
signed long (long) |
4 |
-2147483648 |
2147483647 |
unsigned long long |
8 |
0 |
18446744073709551615 |
signed long long (long long) |
8 |
-9223372036854775808 |
9223372036854775807 |
В си есть оператор, который позволяет получить размер переменной в байтах. sizeof переменная, или sizeof(переменная) или sizeof(тип). Это именно оператор, потому что функция не имеет возможности получить информацию о размере типов во время выполнения приложения. Напишем небольшую программу чтобы удостовериться в размерах переменных.
#include<conio.h>
#include<stdio.h>
int main() {
char c;
short s;
int i;
long l;
long long L;
//Вызов sizeof как "функции"
printf("sizeof(char) = %d\n", sizeof(c));
printf("sizeof(short) = %d\n", sizeof(s));
printf("sizeof(int) = %d\n", sizeof(i));
printf("sizeof(long) = %d\n", sizeof(l));
printf("sizeof(long long) = %d\n", sizeof(L));
//Вызов как оператора
printf("sizeof(char) = %d\n", sizeof c);
printf("sizeof(short) = %d\n", sizeof s);
printf("sizeof(int) = %d\n", sizeof i);
printf("sizeof(long) = %d\n", sizeof l);
printf("sizeof(long long) = %d\n", sizeof L);
_getch();
}
(Переменные могут иметь любое валидное имя). Эту программу можно было написать и проще
#include<conio.h>
#include<stdio.h>
int main() {
printf("sizeof(char) = %d\n", sizeof(char));
printf("sizeof(short) = %d\n", sizeof(short));
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(long) = %d\n", sizeof(long));
printf("sizeof(long long) = %d\n", sizeof(long long));
//нельзя произвести вызов sizeof как оператора для имени типа
//sizeof int - ошибка компиляции
_getch();
}
В си один и тот же тип может иметь несколько названий:
short === short int
long === long int
long long === long long int
unsigned int === unsigned
