- •Основы программирования на языке Си.
- •Достоинства языка Си.
- •Будущее языка Си.
- •Использование языка Си.
- •Использование текстового редактора для подготовки программ.
- •Исходные и выполняемые файлы
- •Пример простой программы на языке Си
- •Структура простой программы
- •2. Лекция: Данные, символьные строки, директива #define.
- •Основные типы данных
- •Описание различных типов, переменные и константы
- •Символьные строки
- •Препроцессор языка Си
- •3. Лекция: Операции.
- •Основные операции
- •Дополнительные операции
- •Перечень операций языка Си
- •Операции, уровень приоритета которых равен 1
- •Операции, уровень приоритета которых равен 2
- •Операции, уровень приоритета которых равен 3
- •Операции, уровень приоритета которых равен 4
- •Операции, уровень приоритета которых равен 5
- •Операции, уровень приоритета которых равно 6
- •Операции, уровень приоритета которых равен 7
- •Операция, уровень приоритета которой равен 8
- •Операция, уровень приоритета которой равен 9
- •Операция, уровень приоритета которой равен 10
- •Операция, уровень приоритета которой равен 11
- •Операция, уровень приоритета которой равен 12
- •Операция, уровень приоритета которой равен 13
- •Операция, уровень приоритета которой равен 14
- •Операция, уровень приоритета которой равен 15
- •Примеры простых задач
- •4. Лекция: Операторы.
- •Выражения
- •Простейшие выражения
- •Операторы
- •Составные операторы
- •Оператор цикла while
- •10 Км. В последующие дни он проезжал со скоростью,
- •Изучение и использование функций printf( ) и scanf( )
- •Применение функции scanf( )
- •Подведем итог.
- •5. Лекция: преобразование типов.
- •Эквивалентность типов
- •Преобразование типов
- •Разбор программы
- •Операция приведения
- •Неявное преобразование типа
- •Арифметические преобразования
- •Явные преобразования типов
- •Синтаксис типов
- •6. Лекция: функции и переключение ввода-вывода
- •Ввод и вывод одного символа
- •Чтение одной строки
- •Чтение файла
- •Переключение и работа с файлами
- •7. Лекция: Выбор вариантов.
- •Выбор вариантов
- •Оператор if
- •Расширение оператора if
- •Операции отношения
- •Логические операции
- •Операция условия: ?:
- •Множественный выбор
- •8. Лекция: Циклы и другие управляющие средства. Структурное программирование.
- •Структурное программирование
- •Цикл с предусловием
- •Цикл со счетчиком
- •Цикл с постусловием
- •Другие управляющие операторы
- •9. Лекция: Функции.
- •Создание и использование функций
- •Аргументы функции
- •Возвращение значений
- •Локальные переменные
- •Нахождение адресов
- •Указатели, первое знакомство
- •Функции с переменным количеством аргументов
- •10. Лекция: Классы памяти и разработка программ.
- •Классы памяти и область действия
- •Автоматические переменные
- •Внешние переменные
- •Статические переменные
- •Внешние статические переменные
- •Регистровые переменные
- •11. Лекция: Препроцессор языка Си.
- •Общие сведения
- •Символические константы: #define
- •Использование аргументов с #define
- •Макроопределение или функция?
- •Включение файла: #include
- •Условная компиляция
- •12. Лекция: Массивы и указатели.
- •Указатели и массивы
- •Массивы
- •Указатели
- •Динамические объекты
- •Создание динамических объектов
- •Доступ к динамическим объектам
- •Связь между указателями и массивами
- •Инициализация массивов и классы памяти
- •Функции, массивы и указатели
- •Операции с указателями
- •13. Лекция: Символьные строки и функции над ними.
- •Строковые константы
- •Массивы символьных строк и их инициализация
- •Массив и указатель: различия
- •Указатели и строки
- •Ввод-вывод строк
- •Обработка строк
- •14. Лекция: Структуры.
- •Определение структурных переменных
- •Доступ к компонентам структуры
- •Поля битов в структурах
- •Объединения
- •Перечисления
- •Переменные структуры
- •Указатели и структуры
- •Массив структур
- •Переименование типов
- •15. Лекция: Библиотека языка Си и файлы ввода-вывода.
- •Стандартные библиотечные функции
- •Связь с файлами
- •Текстовые файлы с буферизацией
- •Распределение памяти
- •16. Лекция: Функции в примерах.
- •Функция получения случайных чисел
- •Поиск узлов из простых чисел
- •Матрица инцидентности
- •Структуры данных
- •Все операции со стеком
Применение функции scanf( )
Поскольку мы будем пользоваться функцией scanf( )эпизодически, мы рассмотрим здесь только основные особенности ее применения. Для функцииscanf( )указывается управляющая строка и следующий за ней список аргументов. Основное различие функцийprintf( )иscanf( )заключается в особенностях данного списка. Функцияprintf( )использует имена переменных, константы и выражения, а функцияscanf( )- только указатели на переменные. Мы ничего не должны знать о таких указателях. Необходимо помнить только два правила:
1. Если нам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.
2. Если мы хотим ввести значение строковой переменной, использовать символ & не нужно.
Пример:
main()
{
int age;
float assets;
char fio[50];
printf("Введите ваш возраст, оклад, фамилию. \n");
scanf("%d %f", &age, &assets);
scanf("%s", fio); /* & отсутствует при указании
массива символов */
printf("%d $%.0f %s\n",age, assets, fio);
}
Функция scanf( )использует некоторые специальные знаки, пробелы, символы табуляции и "новая строка", для разбиения входного потока символов на отдельные поля. Она согласует последовательность спецификаций преобразования с последовательностью полей, опуская упомянутые специальные знаки между ними. Исключением является спецификация %c , обеспечивающая чтение каждого следующего символа даже в том случае, если это пустой символ.
Функция scanf( )использует тот же набор символов спецификации преобразования, что и функцияprintf( ). Основные отличия функцииscanf( )следующие:
1. Отсутствует спецификация %g.
2. Спецификации %f и %e эквивалентны. Обе спецификации допускают наличие или отсутствие знака строки цифр с десятичной точкой или без нее и поля показателя степени.
3. Для чтения целых чисел типа short применяется спецификация %h.
Функция scanf( )не является одной из наиболее часто используемых функций языка Си. Мы обсуждаем ее из-за универсальности.
Особенности работы с языком Си. Задание фиксированной ширины полей оказывается полезным при печати данных столбиком.
Например:
printf("%d %d %5d\n",val1,val2, val3);
Результат выглядит так:
11 222 3333
4 5 23
22222 3332 11111
Эти же данные можно представить в улучшенном виде, если задать достаточно большую фиксированную ширину поля:
printf("%9d %9d %9d\n" val1,val2, val3);
Результат будет выглядеть так:
11 222 3333
4 5 23
22222 3332 11111
Если печатаемое число включено в некоторую фразу, то часто при его выводе оказывается удобным задать ширину поля равной или меньше требуемой. Это дает возможность включить число во фразу без добавления лишних пробелов.
А теперь рассмотрим два примера работы с циклом while:
/*квадраты чисел*/
main( ) /*получение квадратов*/
{
int n=1;
while(n < 11) {
printf("%10d %10d\n", n, n*n);
n=n+1;
}
}
Эта программа выводит на печать первые 10 чисел и их квадраты.
Второй пример.
Согласно легенде, один правитель обещал наградить ученого, оказавшего ему большую услугу. Ученый, когда его спросили, что бы он хотел получить в награду, указал на шахматную доску и сказал: "Положите одно пшеничное зерно на первую клетку, два - на вторую, четыре на третью, восемь на следующую и т.д." Правитель был поражен, услышав такую скромную просьбу. Программа, приведенная ниже, показывает, в какое положение попал правитель!
/* пшеница*/
#define NUMBER 64 /* число клеток на шахматной доске*/
#define CROP 7E14 /* весь урожай пшеницы,
выраженный в числе зерен*/
main( )
{
double current, total;
int count =1;
printf("КЛЕТКА ЧИСЛО СУММА ЗЕРЕН ДОЛЯ\n");
total = current = 1.0;/*начинаем с одного зерна*/
printf("%4d %15.2e %13.2e %12.2e\n",count,
current, total, total/CROP);
while(count < NUMBER) {
count = count + 1;
current = 2.0*current;
/*удвоенное число зерен на следующей клетке */
total = total +current; /* коррекция суммы*/
printf ("%4d %15.2e %13.2e %12.2e\n",count,
current, total, total/CROP);
}
}
Это пример составного оператора. От открывающей фигурной скобки оператораwhileдо закрывающей фигурной скобки.
Составной оператор используется в следующих случаях:
1. Чтобы сгруппировать несколько логических связанных операторов в один оператор.
2. В качестве тела функции.
3. Для ограничения видимости определений частью программы, т.е. для локализации действия описаний.
Составной оператор имеет следующую форму:
{
определения и описания
операторы
}
Определения переменных внутри составного оператора имеют больший приоритет, чем определения переменных с тем же именем для области действия составного оператора. Эти переменные видимы, т.е. доступны, только внутри составного оператора. Глобальные переменные являются видимыми внутри составного оператора только при условии, что их определения не изменены локальными определениями.
! Применяйте отступы от поля в строках, чтобы сделать структуру программы наглядной!