- •Предисловие
- •Алфавит языка
- •Служебные слова
- •Константы
- •Комментарии
- •Переменные
- •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()
- •If (number % 3)
- •Int main()
- •Int main()
- •Int I, m, vector_min, vector_max, temp;
- •Int vector[n];
- •Int main()
- •Int vector_min, vector_max, temp;
- •Int vector[n];
- •Функции
- •Int summa(int a, int b)
- •Int summa(int a, int b)
- •Void swap(int a, int b)
- •Int temp;
- •Int top, bottom, temp;
- •Рекурсия
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Void quick_sort(int left, int right, int vector[])
- •Int I, last;
- •Void swap(int I, int j, int vector[])
- •Int temp;
- •Особенности рекурсии:
- •Адреса и указатели
- •Операции над указателями
- •Указатели и массивы
- •Int mass[5];
- •Int trio[5][2][3];
- •Указатели и функции
- •Int main()
- •Указатели и строки
- •Функции для работы со строками
- •Vtorokursnik
- •Vtorokursnik
- •Itoa(I, str, 16);
- •Текстовые файлы
- •Int vector[k];
- •Vector_1:
- •Vector_2:
- •Int ocenka;
- •Imja: Vasilij
- •Imja: Ivan
- •Int ocenka;
- •Бинарные файлы
Int vect[5];
float matr[2][3];
char str[20];
Описаны:
одномерный массив целых чисел (вектор) vect, состоящий из пяти элементов,
двумерный массив (матрица) вещественного типа matr, имеющая две строки и три столбца,
строка символов str из 20 элементов.
Как видно, при описании массива в Си каждая его размерность записывается в отдельных скобках, а не перечисляется через запятые, как в Паскале. Размеры массива можно задать именованной константой или указать в директиве #define – это считается хорошим стилем программирования:
#define count 5
#define row 2
#define col 3
#define n_str 20
Int vect[count];
float matr[row][col];
char str[n_str];
Индексы элементов массивов в Си всегда начинаются с нуля, поэтому, например, описанный вектор vect имеет следующие элементы:
Vect[0] vect[1] vect[2] vect[3] vect[4]
а двумерный массив matr – 6 следующих элементов:
matr[0][0] matr[0][1] matr[0][2]
matr[1][0] matr[1][1] matr[1][2]
То есть, первая строка и первый столбец двумерного массива имеют индекс 0.
Элементы массива можно использовать во всех выражениях, операторах и функциях, определенных для их типа.
Начальные значения элементам массива в Си можно задавать при их описании (инициализировать массив), при этом размеры одномерных массивов (векторов) в квадратных скобках можно не указывать – для их хранения будет отведено столько ячеек оперативной памяти, сколько значений указано в фигурных скобках:
int vect[] = {-5, 3, -2, 8, 1};
float matr[2][3] = {{0.2, -1.5, 3.14},
{-2.73, 25.54, 0.89}};
Если задано значений меньше, чем описано элементов вектора, то недостающие элементы инициализируются нулями:
int vect[5] = {-5, 3, -2};
Последние два элемента вектора vect инициализируются нулями.
Еще раз необходимо обратить внимание на то, что, в отличие от Паскаля, при описании и при работе с многомерными массивами в Си каждый индекс элемента массива заключается в отдельные квадратные скобки:
matr[1][2]=0.89;
Если использовать запись matr[1,2], то она будет интерпретироваться как matr[2]. Согласно правилам языка Си, значением всего выражения в скобках является результат вычисления последнего выражения, перед которым стоит запятая.
В отличие от Паскаля, конкретные размеры массива в Си можно задать с клавиатуры до его описания:
int row, col;
printf(“\n row=”);
scanf(“%d”, &row);
printf(“\n col=”);
scanf(“%d”, &col);
float matr[row][col];
Пример: ввести с экрана элементы целочисленного массива matr33, вывести его на экран, транспонировать (заменить строки соответствующими столбцами) и снова вывести на экран:
#include <stdio.h>
#include <conio.h>
#include <math.h>
Int main()
{
const int row=3, col=3;
Int temp;
Int matr[row][col];
printf(“\nВведите 3 элемента нулевой строки через пробелы: ”);
scanf(“%d%d%d”, &matr[0][0], &matr[0][1], &matr[0][2]);
printf(“\nВведите 3 элемента первой строки через пробелы: ”);
scanf(“%d%d%d”, &matr[1][0], &matr[1][1], &matr[1][2]);
printf(“\nВведите 3 элемента второй строки через пробелы: ”);
scanf(“%d%d%d”, &matr[2][0], &matr[2][1], &matr[2][2]);
printf(“\nВведенный массив:”);
printf(“\n%5d%5d%5d”, matr[0][0], matr[0][1], matr[0][2]);
printf(“\n%5d%5d%5d”, matr[1][0], matr[1][1], matr[1][2]);
printf(“\n%5d%5d%5d”, matr[2][0], matr[2][1], matr[2][2]);
// транспонируем матрицу
temp=matr[0][1];
matr[0][1]=matr[1][0];
matr[1][0]=temp;
temp=matr[0][2];
matr[0][2]=matr[2][0];
matr[2][0]=temp;
temp=matr[1][2];
matr[1][2]=matr[2][1];
matr[2][1]=temp;
// снова выводим ее на экран
printf(“\nТранспонированный массив:”);
printf(“\n%5d%5d%5d”, matr[0][0], matr[0][1], matr[0][2]);
printf(“\n%5d%5d%5d”, matr[1][0], matr[1][1], matr[1][2]);
printf(“\n%5d%5d%5d”, matr[2][0], matr[2][1], matr[2][2]);
printf(“\n”);
return 0;
}