- •Материалы для подоговки к экзамену по дисциплине «основы программировния»
- •Тема №1 Основные понятия
- •Способы записи алгоритма
- •Тема №2 Переменные
- •Типы переменных
- •Типы с плавающей точкой
- •Переполнение переменных
- •Постфиксное обозначение типа
- •Шестнадцатеричный и восьмеричный формат
- •Экспоненциальная форма представления чисел
- •Объявление переменных
- •Начальное значение переменной
- •Область видимости переменной
- •Тема №3 Оператор присваивания
- •Ввод-вывод Форматированный вывод
- •Форматированный ввод
- •Непечатные символы
- •Тема №4 Ветвления и логические операторы
- •Оператор Switch
- •Логические операторы
- •Логическое отрицание
- •Логическое и
- •Логическое или
- •Пример: закон де-Моргана.
- •Порядок выполнения логических операторов
- •Тема №5 Циклы
- •Цикл с предусловием
- •Циклы с постусловием
- •Цикл for
- •Вложенные циклы
- •Тема №6 Одномерные массивы
- •Начальная инициализация массива.
- •Размер массива
- •Переполнение массива
- •Пример с одномерным массивом
- •Многомерные статические массивы
- •Пример с многомерным массивом
- •Тема №7 Строки в си. Введение
- •Чтение строк
- •Указатели
- •Определение
- •Арифметика указателей
- •Указатель на указатель
- •Указатели и приведение типов
- •Null pointer - нулевой указатель
- •Пример работы с указателями
- •Тема №8 Указатели и массивы
- •Многомерные массивы и указатели на многомерные массивы
- •Определение макросов
- •Тема №9 Тернарный оператор и оператор запятая
- •Оператор запятая.
- •Сегментация приложения на си
- •Тема №10 Динамическое выделение памяти
- •Освобождение памяти с помощью free
- •Работа с двумерными и многомерными массивами
- •Тема №11 Параметры командной строки
- •Функции
- •Параметры и аргументы
- •Передача аргументов По значению
- •По указателю (ссылке)
- •Передача массива в качестве аргумента
- •Тема №12 Битовые операции
- •Операции побитового сдвига
- •Примеры
- •Вопросы к экзамену по дисциплине «Основы программирования»
Начальная инициализация массива.
Напишем простую программу. Создадим массив, после чего найдём его максимальный элемент.
#include <conio.h>
#include <stdio.h>
void main() {
int a[10] = {1, 2, 5, 3, 9, 6, 7, 7, 2, 4};
unsigned i;
int max;
max = a[0];
for (i = 1; i<10; i++) {
if (a[i] > max) {
max = a[i];
}
}
printf("max element is %d", max);
getch();
}
Разберём пример. Сначала мы создаём массив и инициализируем его при создании. После этого присваиваем максимальному найденному элементу значение первого элемента массива.
max = a[0];
После чего проходим по массиву. Так как мы уже просмотрели первый элемент (у него индекс 1), то нет смысла снова его просматривать.
Тот же пример, только теперь пользователь вводит значения.
#include <conio.h>
#include <stdio.h>
void main() {
int a[10];
unsigned i;
int max;
printf("Enter 10 numbers\n");
for (i = 0; i<10; i++) {
printf("%d. ", i);
scanf("%d", &a[i]);
}
max = a[0];
for (i = 1; i<10; i++) {
if (a[i] > max) {
max = a[i];
}
}
printf("max element is %d", max);
getch();
}
В том случае, если при инициализации указано меньше значений, чем размер массива, остальные элементы заполняются нулями.
#include <conio.h>
#include <stdio.h>
void main() {
int a[10] = {1,2,3};
unsigned i;
for (i = 0; i<10; i++) {
printf("%d ", a[i]);
}
getch();
}
Если необходимо заполнить весь массив нулями, тогда пишем
int a[10] = {0};
Можно не задавать размер массива явно, например
int a[] = {1, 2, 3};
массив будет иметь размер 3
Размер массива
Массив в си должен иметь константный размер. Это значит, что невозможно, например, запросить у пользователя размер, а потом задать этот размер массиву.
printf("Enter length of array ");
scanf("%d", &length);
{
float x[length];
}
Создание динамических массивов будет рассмотрено дальше, при работе с указателями и памятью.
В некоторых случаях можно узнать размер массива с помощью функции sizeof.
#include <conio.h>
#include <stdio.h>
void main() {
int A[57];
//sizeof возвращает размер всего массива в байтах
//Для определения количества элементов необходимо
//разделить размер массива на размер его элемента
int size = sizeof(A) / sizeof(int);
printf("Size of array equals to %d", size);
getch();
}
Но это вряд ли будет полезным. При передаче массива в качестве аргумента функции будет передаваться указатель, поэтому размер массива будет невозможно узнать.
Статические массивы удобны, когда заранее известно число элементов. Они предоставляют быстрый, но небезопасный доступ до элементов.
