Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Изучение Си после Паскаля.rtf
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Вывод в языке си Простейшая программа «Привет, мир!»

По традиции, заложенной в книге [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 в Паскале.

Уже из этого совсем маленького примера видно, что при программировании на Си приходится заботиться о многих вещах, о которых в Паскале даже не вспоминали:

  1. Подключение стандартных модулей (в Паскале system подключается автоматически, в Си ни один модуль (!!!) автоматически не подключается).

  2. Чтобы перевести курсор на следующую строку экрана, в строку нужно включить символ \n.

  3. Выход из программы в Си производится явно, с указанием кода завершения. Если все прошло успешно, то возвращается 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 для простейших случаев Вы можете «по аналогии», взяв в качестве основы примеры из этой методички. Более сложное использование Вы освоите со временем.