- •1. Цель работы
- •2. Базовые понятия языка
- •2.1. Алфавит языка Си
- •2.2. Константы
- •2.3. Идентификатор
- •2.4. Объявление переменных
- •2.5. Стандартные типы данных
- •2.6. Данные вещественных типов
- •2.7. Инициализация переменных
- •3. Операции языка си
- •3.1. Арифметические операции
- •3.2. Поразрядные операции
- •3.3. Операции отношения (сравнения)
- •3.4. Логические операции
- •3.5. Операции присваивания
- •3.6. Операция sizeof
- •3.7. Операция условие
- •3.8. Разделитель точка с запятой
- •3.9. Приоритеты операций и порядок вычислений
- •4. Операторы языка си
- •4.1. Составной оператор
- •4.2. Условный оператор
- •4.3. Оператор switch
- •4.4. Оператор break
- •4.5. Оператор for
- •4.6. Оператор while
- •4.7. Оператор do while
- •4.8. Оператор continue
- •4.9. Оператор goto
- •5. Указатели, массивы, строки
- •5.1. Указатели
- •5.2. Массивы
- •5.3. Строки
- •5.6. Двумерные массивы
- •5.7. Инициализация массивов
- •5.8. Связь указателей и массивов
- •6. Функции
- •6.1. Определение и вызов функций
- •6.2. Передача параметров функции main
- •7. Структуры и объединения
- •7.1. Структуры
- •7.2. Объединения (смеси)
- •7.3. Поля битов
- •8. Ввод-вывод
- •8.1. Консольный ввод-вывод
- •8.2. Потоковый файловый ввод-вывод
- •9. Вопросы для самостоятельного изучения
- •10. Порядок выполнения лабораторных работ и содержание отчета
- •11. Литература
5.2. Массивы
Массивы — это группа элементов одинакового типа. Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. Объявление массива имеет два формата:
тип имя_массива [константное_выражение];
Элементами массива не могут быть функции и элементы типа void.
Константное выражение в квадратных скобках задает количество элементов массива
В языке СИ определены только одномерные и многомерные массивы. Каждое константное выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных выражения, трехмерного - три и т.д. В языке СИ первый элемент массива имеет индекс равный 0.
Примеры:
int a[2][3]; /* представлено в виде матрицы
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2] */
double b[10]; /*вектор из 10 элементов типа double */
В языке СИ можно использовать сечения массива, однако на использование сечений накладывается ряд ограничений. Сечения формируются вследствие опускания одной или нескольких пар квадратных скобок. Пары квадратных скобок можно отбрасывать только справа налево и строго последовательно. Сечения массивов используются при организации вычислительного процесса в функциях языка СИ, разрабатываемых пользователем.
Примеры:
int s[2][3];
Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.
int b[2][3][4];
При обращении к массиву b можно написать, например, b[1][2] и будет передаваться вектор из четырех элементов, а обращение b[1] даст двухмерный массив размером 3 на 4.
Пример. Найти среднее арифметическое элементов одномерного массива.
#include <stdio.h>
const int n=10;
int main()
{
int a[n],sum;
float av;
printf("Введите %d чисел\n",n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
sum=0;
for(i=0; i<n; i++)
sum=sum+a[i];
av=(float) sum/n;
printf("Среднее:%5.2f\n",av);
return 0;
}
5.3. Строки
Для представления текстовой информации в языке Си не введено отдельного типа в отличие от некоторых других языков, например языка Паскаль. Строковые константы представляются последовательностью символов, заключенной в кавычки. Размещая строку в памяти, транслятор автоматически добавляет в ее конце символ '\0'. Т.о. если строка содержит один символ, например "a", то в памяти она будет занимать два байта. Принято, что строка — это массив символов, т.е. типа char[].
Строка
"Borland C++"
в памяти будет выглядеть так
'B','o','r','l','a','n','d',' ','C','+','+','\0'
Разместить строку в массиве символов оператором присваивания нельзя. Поместить строку в массив можно либо при инициализации массива (см. далее), либо с помощью функций ввода, либо функцией копирования строк (см. далее).
Ввод строк можно осуществить следующими функциями:
1. Функция scanf() со спецификатором ввода %s. Функция scanf() вводит символы до первого пробела.
2. Функция gets() позволяет вводить строки с пробелами. Ввод оканчивается нажатием клавиши Enter.
Обе функции объявлены в библиотеке stdio.h и автоматически ставят в конце строки символ '\0'.
Вывод строк выполняют функциями printf() и puts(). Обе функции объявлены в библиотеке stdio.h и выводят содержимое массива символов до первого нулевого байта. Функция puts() в отличие от printf() в конце выводимой строки добавляет символ новой строки.
Пример.
#include <stdio.h>
int main()
{
char str[80];
printf("Введите строку: ");
gets(str);
printf("%s\n", str);
puts(str);
return 0;
}
Рассмотрим некоторые функции для работы со строками, содержащиеся в библиотеке string.h.
1. strcpy(s1,s2) Копировать строку s2 в s1. Если места в массиве s1 не достаточно, то это не прервет к завершению программы, но может привести к порче других данных.
2. strcat(s1,s2) Присоединить строку s2 к s1. Нулевой байт строки s1 будет замещен первым символом строки s2. Проверки объема строки приемника также не происходит.
3. strcmp(s1,s2) Сравнить строки s1 и s2. Если строки равны, то функция возвращает 0, если s1>s2 — положительное значение, если s1<s2 — отрицательное.
4. strlen(s) Определить длину строки. Нулевой символ не учитывается.
Пример.
#include <stdio.h>
#include <string.h>
int main()
{
char s1[20], s2[20];
strcpy(s1, "Hello");
strcpy(s2, "C++");
strcat(s1,s2);
puts(s1);
return 0;
}
