- •О.Ф.Власенко, и.В.Беляева изучение си после паскаля: циклы, развилки, функции, обработка одномерных массивов
- •Оглавление
- •Вывод в языке си Простейшая программа «Привет, мир!»
- •Функция printf – форматированный вывод
- •Циклы в языке си «Привет, мир!» 100 раз
- •Цикл с предусловием в Паскале и Си
- •Цикл с постусловием в Паскале и Си
- •Цикл for в Паскале и Си
- •Задачи средней сложности
- •Задачи сложные
- •Задачи простые
- •Функции в языке си Локальные и глобальные переменные
- •Функции без параметров в Си
- •Функции с параметрами
- •Способы передачи параметров в подпрограммы
- •Работа с указателями: операции взятия адреса и разыменования адреса
- •Ввод в языке си Функция getch – ввод символа
- •Функция scanf - форматированный ввод
- •Развилки Пример задачи: размер файла в байтах
- •Усеченные развилки
- •Полные развилки
- •Варианты для простых заданий и для заданий средней сложности
- •Задания среднего уровня сложности
- •Рекуррентные соотношения для вычисления корней
- •Разложение в ряд некоторых функций
- •Пример выполнения лабораторной работы по заданиям среднего уровня сложности
- •Сложные задания
- •Пример выполнения лабораторной работы по сложным заданиям
- •Варианты для сложных заданий
- •Организация меню. Управляющая структура Выбор (switch) Организация простейшего меню
- •Массивы в си Объявление и инициализация одномерных массивов в Си
- •Вычисление адреса элемента массива
- •Адресная арифметика
- •Имя массива является указателем на нулевой элемент массива
- •Передача массива в функцию через параметр
- •Примеры обработки массивов в Си
- •Задание для лабораторной работы по теме «Обработка одномернЫх массивОв» Цель работы
- •Общее задание
- •Пример выполнения лабораторной работы
- •Задачи простые
- •Задачи средней сложности
- •Задачи сложные
- •Список литературы
- •Изучение си после паскаля: циклы, развилки, функции, обработка одномерных массивов
- •432027, Г. Ульяновск, Сев. Венец, 32.
Вывод в языке си Простейшая программа «Привет, мир!»
По традиции, заложенной в книге [1], изучение языка Си начнем с программы, выводящей на экран строку с приветствием миру.
Пример на Паскале:
1> Begin
2> Writeln(‘Привет, мир!’);
3> End.
Разберем эту программу на Паскале.
В строке 1 (Begin) начинается тело программы.
В строке 2 ( Writeln(‘Привет, мир!’);) вызывается стандартная процедура writeln, которая выведет на экран переданную в нее в качестве параметра строку (‘Привет, мир!’) после чего курсор будет переведен на следующую строку.
В строке 3 (End.) заканчивается тело программы.
Заметим, что стандартная процедура writeln объявлена в модуле system, который подключается к любой Паскаль - программе автоматически.
Пример на Си:
1> #include <stdio.h>
2>
3> int main()
4> {
5> printf (“Привет, мир!\n”);
6> return 0;
7> }
Разберем эту программу на Си.
В строке 1 (#include <stdio.h>) подключается модуль stdio.h (STanDard Input Output Header file – заголовочный файл (модуль) стандартного ввода-вывода). В этом модуле объявлена, в частности, функция printf, используемая в программе.
Пустая строка 2 служит в качестве разделителя в тексте программы.
В строке 3 (int main()) находится заголовок главной (main) функции программы. Главная функция в Си – эквивалент тела программы в Паскале. Выполнение Си – программы всегда начинается с функции main.
В строке 4 начинается функция main. Символ { эквивалентен ключевому слову begin в Паскале.
В строке 5 (printf(“Привет, мир!\n”);) вызывается стандартная функция printf, которая выведет на экран переданную в нее в качестве параметра строку (”Привет, мир!\n”). Символ ‘\n’ в конце строки заставит курсор перейти на следующую строку.
В строке 6 (return 0;) производится выход из функции main. 0 – код успешного завершения программы. Если программа по завершению вернула 0, значит все хорошо, ошибок нет.
В строке 7 (}) заканчивается функция main. Символ } эквивалентен ключевому слову end в Паскале.
Уже из этого совсем маленького примера видно, что при программировании на Си приходится заботиться о многих вещах, о которых в Паскале даже не вспоминали:
Подключение стандартных модулей (в Паскале system подключается автоматически, в Си ни один модуль (!!!) автоматически не подключается).
Чтобы перевести курсор на следующую строку экрана, в строку нужно включить символ \n.
Выход из программы в Си производится явно, с указанием кода завершения. Если все прошло успешно, то возвращается 0.
С другой стороны, есть в Си и определенные удобства – например, операторные скобки обозначаются {}, в то время как в Паскале они обозначаются begin end. Вообще, исходный текст, записанный на Си, как правило, компактнее аналогичного исходного текста на Паскале.
Функция printf – форматированный вывод
Имя PRINTF является сокращением от PRINT Formated (форматированный вывод). При помощи этой функции можно сделать все, что можно сделать при помощи WRITE/WRITELN в Паскале, и еще кое-что сверх того.
Ограничение: функция PRINTF осуществляет вывод ТОЛЬКО в стандартный файл вывода stdout (в Паскале стандартный файл вывода называется output). По умолчанию стандартный файл вывода связан с дисплеем, то есть вывод в stdout – это вывод на экран. Для вывода в другие файлы используется функция FPRINTF (File PRINT Formatted).
Функция PRINTF имеет произвольное количество параметров (WRITE/WRITELN в Паскале также имеют произвольное количество параметров). Первый параметр функции PRINTF – форматная строка. Заметим, что в Си строки заключаются в кавычки (в Паскале – в апострофы). Пример форматной строки: “Привет, мир!\n”. В форматной строке могут быть как обычные символы, так и специальные последовательности символов, начинающиеся со знака процент, например %d, %s. Такие последовательности называются спецификаторами преобразования. Пример использования функции printf со спецификаторами:
1> printf(“%s”,”Привет, мир!\n”);
2> printf(“%s\n”,”Привет, мир!”);
3> printf(“%d * %d = %d”, 5, 7, (5 * 7) );
4> printf(“Символ ‘%c’ имеет код %d\n\n”, ‘0’, ‘0’);
Первая строка примера выведет на экран: «Привет, мир!!!» и переведет курсор на новую строку.
Вторая строка эквивалентна первой – она также выведет на экран «Привет, мир!!!» и переведет курсор на новую строку.
Третья строка выведет: «5 * 7 = 35», и курсор останется за последним выведенным символом.
Четвертая строка выведет: «Символ ‘0’ имеет код 48» и переместит курсор на две строки вниз.
В данные методические указания по причине экономии места подробное описание функции PRINTF не включено. За справками читателя отсылаем к [1] и [2], и к встроенной системе помощи по Си.
Некоторые спецификаторы преобразования для функции PRINTF:
Код |
Формат |
%c |
Символ (char) |
%s |
Строка (char *) |
%d |
Десятичное целое со знаком (int) |
%ld |
Длинное десятичное целое со знаком (long) |
%u |
Десятичное целое без знака (unsigned) |
%lu |
Длинное десятичное целое без знака (unsigned long) |
%x |
Шестнадцатеричное без знака (буквы в нижнем регистре) (unsigned) |
%lx |
Длинное шестнадцатеричное без знака (буквы в нижнем регистре) (unsigned long) |
%X |
Шестнадцатеричное без знака (буквы в верхнем регистре) (unsigned) |
%lX |
Длинное шестнадцатеричное без знака (буквы в верхнем регистре) (unsigned long) |
%o |
Восьмеричное без знака (unsigned) |
%lo |
Длинное восьмеричное без знака (unsigned long) |
%f |
Десятичное с плавающей точкой (float) |
%lf |
Десятичное с плавающей точкой (double) |
%Lf |
Десятичное с плавающей точкой (long double) |
%e |
Экспоненциальное представление (‘e’ в нижнем регистре) (float) |
%E |
Экспоненциальное представление (‘e’ в верхнем регистре) (float) |
%le |
Экспоненциальное представление (‘e’ в нижнем регистре) (double) |
%lE |
Экспоненциальное представление (‘e’ в верхнем регистре) (double) |
%Le |
Экспоненциальное представление (‘e’ в нижнем регистре) (long double) |
%LE |
Экспоненциальное представление (‘e’ в верхнем регистре) (long double) |
%p |
Выводит указатель (void *) |
%% |
Выводит знак % |
В скобках указан тип параметра, к которому будет преобразован параметр.
Параметры функции PRINTF должны следовать в порядке, определенном форматной строкой. Количество параметров, следующих за форматной строкой, должно совпадать с количеством спецификаторов.
Кроме типа параметров, в форматной строке можно задавать минимальную ширину поля, точность и выравнивание. Пример:
printf(“%10.2f * %5d = %-10.2f”, 1.5, 3, (1.5 * 3) );
На экран будет выведено « 1.50 * 3 = 4.50 »
printf(“%-3d * %05d = %6d”, 5, 3, (5 * 3) );
На экран будет выведено «5 * 00003 = 15»
По умолчанию выравнивание производится по правому краю (“%5d %10.2f”). Если сразу за знаком ‘%’ поставить ‘–‘ , выравнивание будет производиться по левому краю (“%-3d”, “%-10.2f”). Минимальная ширина поля вывода задается после знака «%» либо после «%-» (если задано левое выравнивание). Если значение минимальной ширины начинается со знака 0, то выводятся лидирующие 0. Точность для вещественных чисел задается числом после точки “%10.2f”.
Если все выше написанное для Вас является чистым бредом, то не стоит расстраиваться: авторы этой методички сами прошли через такой этап. Использовать printf для простейших случаев Вы можете «по аналогии», взяв в качестве основы примеры из этой методички. Более сложное использование Вы освоите со временем.
