Для того чтобы вывести на экран какое либо сообщение воспользуйтесь процедурой

Обновлено: 02.07.2024

Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.

Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h . Эта библиотека содержит функции

  • printf() — для вывода информации
  • scanf() — для ввода информации.

Вывод информации

Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление
на экране.

Общая форма записи функции printf() :

СтрокаФорматов состоит из следующих элементов:

  • управляющих символов;
  • текста, представленного для непосредственного вывода;
  • форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.

Основные управляющие символы:

  • ‘\n’ — перевод строки;
  • ‘\t’ — горизонтальная табуляция;
  • ‘\v’ — вертикальная табуляция;
  • ‘\b’ — возврат на символ;
  • ‘\r’ — возврат на начало строки;
  • ‘\a’ — звуковой сигнал.


Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:

  • %d — целое число типа int со знаком в десятичной системе счисления;
  • %u — целое число типа unsigned int ;
  • %x — целое число типа int со знаком в шестнадцатеричной системе счисления;
  • %o — целое число типа int со знаком в восьмеричной системе счисления;
  • %hd — целое число типа short со знаком в десятичной системе счисления;
  • %hu — целое число типа unsigned short ;
  • %hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
  • %ld — целое число типа long int со знаком в десятичной системе счисления;
  • %lu — целое число типа unsigned long int ;
  • %lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
  • %f — вещественный формат (числа с плавающей точкой типа float );
  • %lf — вещественный формат двойной точности (числа с плавающей точкой типа double );
  • %e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
  • %c — символьный формат;
  • %s — строковый формат.


Строка форматов содержит форматы для вывода значений. Каждый формат вывода начинается с символа % . После строки форматов через запятую указываются имена переменных, которые необходимо вывести.
Количество символов % в строке формата должно совпадать с количеством переменных для вывода. Тип каждого формата должен совпадать с типом переменной, которая будет выводиться на это место. Замещение форматов вывода значениями переменных происходит в порядке их следования.
Пример на Си

Вывод в Си

Результат работы программы

Тот же самый код может быть представлен с использованием одного вызова printf :

Табличный вывод

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:

Форматированный вывод в Си


Результат выполнения

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

Вывод числа с указанием количества знакомест

Ввод информации

Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки.
Общая форма записи функции scanf( ) :

Строка форматов аналогична функции printf() .
Для формирования адреса переменной используется символ амперсанд ‘&’ :
адрес = &объект

Строка форматов и список аргументов для функции обязательны.

Функция scanf()

Результат работы программы:

Функция scanf( ) является функцией незащищенного ввода, т.к. появилась она в ранних версиях языка Си. Поэтому чтобы разрешить работу данной функции в современных компиляторах необходимо в начало программы добавить строчку

Другой вариант — воспользоваться функцией защищенного ввода scanf_s( ) , которая появилась несколько позже, но содержит тот же самый список параметров.

Здравствуйте! Помогите, пожалуйста, найти ошибку в выводе! При некоторых больших значениях (брала 45) программа не выводит число, хотя сохраняет его значение в переменной, проверяла через Debug. Вот программа:

int main() int a[4][5];
int i,j,range,max,maxi,maxj;
float kproiz1,kproiz2;
int proiz1=1;
int proiz2=1;

printf( "введите диапазон заполнения\n" );
scanf( "%d" , &range);
//if (range>=1)
//range=range+5;
printf ( "матрица\n" );
for (i=0; i for (j=0; j "%d " , a[i][j]);
>
printf( "\n" );
>
max = 1;
for (i=0; i for (j=0; j if (a[i][j] > max) max = a[i][j];
maxi=i;
maxj=j;
>
>
>
printf( "Максимальный элемент матрицы %d[%d;%d] \n" ,max,maxi+1,maxj+1);
proiz1= proiz2 = a[maxi][maxj];
if (maxi for (i=maxi+1; i if (maxj!=5) for (j=maxj; (j if (maxj!=0) if (maxj==5) proiz1=proiz1*a[i][maxj];
>
for (j=maxj-1; (j "Среднее геометрическое %f \n" ,kproiz1);
>
if (maxi>=2) for (i=maxi-1; i>0; i--) if (maxj!=5) for (j=maxj; (j if (maxj!=0) if (maxj==5) proiz2=proiz2*a[i][maxj];
>
for (j=maxj-1; (j "Среднее геометрическое %f" ,kproiz2);
>
return 0;
>

Насколько я понимаю, проблема с выводом среднего геометрического? С большой вероятностью происходит переполнение разрядной сетки. Используйте тип long int вместо int.

int main()
float a=8.5;
float b=4.57;
int c=(pow(pow(a,2)-pow(b,2),1/2));
int p=((a+b+c)/2);
int r=(pow((((p-a)*(p-b)*(p-c))/2),1/2));
int y=((log(r)+pow(cos (b),2)+1.8*(exp(a-b)))/(0.15*c+r*pow(sin(b),2)));
printf( "a=%f b=%f\n" , a, b );
printf( "c=%f \n" , c );
printf( "p=%.3f \n" , p );
printf( "r=%.3f \n" , r );
printf( "y=%.3f \n" , y );
getchar();
return 0;
>

Перейдем теперь к изучению операторов - специальных конструкций языка Pascal .

Если говорить строго, то оператором называется (минимальная) структурно законченная единица программы .

Важно! Все операторы языка Pascal должны заканчиваться знаком ";" (точка с запятой), и ни один оператор не может разрываться этим знаком. Единственная возможность не ставить после оператора ";" появляется в том случае, когда сразу за этим оператором следует ключевое слово end .

К простейшим операторам языка Pascal относятся:

  1. a:= b; - присваивание переменной а значения переменной b. В правой части присваивания может находиться переменная , константа , арифметическое выражение или вызов функции.
  2. ; - пустой оператор , который можно вставлять куда угодно, а также вычеркивать откуда угодно, поскольку на целостность программы это никак не влияет.
  3. Операторные скобки , превращающие несколько операторов в один:

Везде далее, где в записи конструкций языка Pascal мы будем использовать обозначение , его следует понимать как "один оператор или несколько операторов, заключенные в операторные скобки begin - end ".

Метки и безусловный переход

Метка помечает какое-либо место в тексте программы . Метками могут быть числа от 0 до 9999 или идентификаторы , которые в этом случае уже нельзя использовать для каких-либо иных нужд. Все метки должны быть описаны в специальном разделе label:

Меткой может быть помечен любой оператор программы

Любая метка может встретиться в тексте программы только один раз. Используются метки только операторами безусловного перехода goto :

Это означает, что сразу после оператора goto будет выполнен не следующий за ним оператор (как это происходит в обычном случае), а тот оператор , который помечен соответствующей меткой .

В принципе, передавать управление можно вперед и назад по тексту программы , внутрь составных операторов и наружу и т.п. Исключением являются только процедуры и функции (см. лекцию 8): внутрь них и наружу безусловные переходы невозможны.

Вообще же использование безусловных переходов в структурном и надежном программировании считается "дурным тоном". Поэтому мы настоятельно советуем нашим читателям воздерживаться от употребления операторов goto . Язык Pascal обладает достаточным количеством структурных конструкций и возможностей, позволяющих достичь хороших результатов надежными средствами.

Ввод и вывод: консоль

Как мы уже говорили, любой алгоритм должен быть результативным. В общем случае это означает, что он должен сообщать результат своей работы потребителю: пользователю-человеку или другой программе (например, программе управления принтером ). Мы не будем описывать здесь внутренние автоматические процессы, использующие сигналы непрерывно функционирующих программ , а сосредоточим внимание на взаимодействии программы и человека, то есть на процессах ввода информации с клавиатуры и вывода ее на экран.

В программировании существует специальное понятие консоль , которое обозначает клавиатуру при вводе и монитор при выводе.

Ввод с консоли

Для того чтобы получить данные, вводимые пользователем вручную (то есть с консоли ), применяются команды

Первая из этих команд считывает все предложенные ей данные, оставляя курсор в конце последней строки ввода, а вторая - сразу после окончания ввода переводит курсор на начало следующей строки. В остальном же их действия полностью совпадают.

Список ввода - это последовательность имен переменных , разделенных запятыми. Например, при помощи команды

программа может получить с клавиатуры данные сразу для четырех переменных , относящихся к различным типам данных.

Вводимые значения необходимо разделять пробелами, а завершать ввод - нажатием клавиши Enter. Ввод данных заканчивается в тот момент, когда последняя переменная из списка ввода получила свое значение. Следовательно, вводя данные при помощи приведенной выше команды, вы можете нажать Enter четыре раза - после каждой из вводимых переменных , - либо же только один раз, предварительно введя все четыре переменные в одну строчку (обязательно нужно разделить их пробелами).

Типы вводимых значений должны совпадать с типами указанных переменных , иначе возникает ошибка. Поэтому нужно внимательно следить за правильностью вводимых данных.

Вообще, вводить с клавиатуры можно только данные базовых типов (за исключением логического). Если же программе все-таки необходимо получить с консоли значение для boolean-величины, придется действовать более хитро: вводить оговоренный символ, а уже на его основе присваивать логической переменной соответствующее значение. Например 4 Правила использования оператора выбора case и оператора цикла repeat описаны в лекции 3. :

Второе исключение: строки, хотя они и не являются базовым типом, вводить тоже разрешается. Признаком окончания ввода строки является нажатие клавиши Enter, поэтому все следующие за нею переменные необходимо вводить с новой строчки.

Вывод на консоль

Сделаем одно важное замечание: ожидая от человека ввода с клавиатуры, не нужно полагать, что он окажется ясновидящим и просто по мерцанию курсора на черном экране догадается, какого типа переменная нужна ожидающей программе . Старайтесь всегда придерживаться правила: "лысый" ввод недопустим! Перед тем как считывать что-либо с консоли , необходимо сообщить пользователю, что именно он должен ввести: смысл вводимой информации, тип данных , максимальное и минимальное допустимые значения и т.п.

Примером неплохого приглашения служит, скажем, такая строчка:

Впрочем, и ее можно улучшить, сообщив пользователю не только допустимый диапазон ввода, но и ожидаемую точность (количество знаков после запятой).

Средства, позволяющие организовать выдачу информации на экран, мы здесь и рассмотрим.

Первая из них, напечатав на экране все, о чем ее просили, оставит курсор в конце выведенной строки, а вторая переведет его в начало следующей строчки.

Список вывода может состоять из нескольких переменных , записанных через запятую; все эти переменные должны иметь тип либо базовый 5 Результатом вывода величины логического типа будет строка TRUE или FALSE , либо строчный. Например, writeln(a,b,c);

Форматный вывод

Если для вывода информации воспользоваться командой, приведенной в конце предыдущего пункта, то выводимые символы окажутся "слепленными". Чтобы этого не случилось, нужно либо позаботиться о пробелах между выводимыми переменными :

либо задать для всех (или хотя бы для некоторых) переменных формат вывода :

Первое число после знака ":" обозначает количество позиций, выделяемых под всю переменную , а второе - под дробную часть числа. Десятичная точка тоже считается отдельным символом.

Если число длиннее, чем отведенное под него пространство, количество позиций будет автоматически увеличено. Если же выводимое число короче заданного формата, то спереди к нему припишутся несколько пробелов. Таким образом можно производить вывод красивыми ровными столбиками, а также следить за тем, чтобы переменные не сливались.

Например, если a = 25, b = 'x', а c = 10.5, то после выполнения команды writeln(a:5,' ',b,c:10:5) на экране или в файле будет записано следующее (подчерки в данном случае служат лишь для визуализации пробелов):

Особенно важен формат при выводе вещественных переменных . К примеру, если не указать формат, то число 10.5 будет выведено как 1.0500000000Е+0001. Такой формат называется записью с плавающей точкой.

Если же задать только общую длину вещественного числа, не указывая длину дробной части, то оно будет занимать на экране заданное количество символов (в случае надобности, спереди будет добавлено соответствующее количество пробелов), но при этом останется в формате плавающей точки. Минимальной длиной для вывода вещественных чисел является 10 (при формате _x.xE+yyyy). Первая позиция зарезервирована под знак "-".

Необходимо помнить, что в случае недостаточной длины вывода число будет автоматически округлено, например (подчерк служит для визуализации пробела):


Сегодня разберем:


Эти типы сохраняются в разных местах памяти: типы значений сохраняются в области, известной как стек , а ссылочные типы — в области, называемой управляемой кучей .


Определяемые пользователем value-типы

  • Структуры
  • Перечисления
  • Константы

Структуры.


Перечисления.


Тип enum предназначен для создания перечислений. Каждое перечисление определяет группу именованных констант. Например:

Такое перечисление эквивалентно следующим строкам кода:

const int One = 0;

const int Two = 1;

const int Three = 2;

Таким образом, перечисление — это всего лишь компактное объявление сразу нескольких целочисленных констант. Применение перечислений делает программы нагляднее.

Константы.



Константа — это переменная, значение которой не может быть изменено. Переменные — это более гибкий способ хранения данных.

Однако иногда вы хотите гарантировать сохранение значения определенной переменной.
Например, число pi. Как известно, значение этого числа никогда не изменяется. Следовательно, вы должны гарантировать, что переменная, хранящая это число, не изменит своего значения на протяжении всей работы программы.

Ваша программа будет лучше читаемой, если вы вместо записи:
у = х * 3.1415926535897932384626433832795
будете использовать переменную, которая хранит значение pi.

В таком случае используемой переменной должна быть константа:
const double pi = 3.1415926535897932384626433832795;
у = х * pi;

Операторы ввода


Для того чтобы получить данные, вводимые вручную (то есть с консоли), применяются команды

Операторы вывода

Примером неплохого приглашения служит, скажем, такая строчка: Введите два вещественных числа (0.1 Console.Write или Console.WriteLine

Первая из них, напечатав на экране все, о чем ее просили, оставит курсор в конце выведенной строки, а вторая переведет его в начало следующей строчки.

Чтобы при выводе данных они не склеивались, нужно позаботиться о пробелах между выводимыми переменными, также можно выводить списком несколько переменных:


Для форматирования числовых результатов можно использовать метод String.Format или метод Console.Write , вызывающий метод String.Format . Формат задается с помощью строк формата. Спецификация формата следующая: , где N указывает позицию элемента в списке выводимых переменных (нумерация начинается с нуля); M — задает ширину области, в которую будет помещено форматированное значение, если M отсутствует или отрицательно, значение будет выровнено влево, в противном случае — вправо; Axx — является необязательной строкой форматирующих кодов, которые используются для управления форматированием чисел, даты и времени, денежных знаков и т.д.

страницы: 1 2 3

Содержание

  • Содержание
  • Простейшие операторы
  • Метки и безусловный переход
  • Ввод и вывод: консоль
    • Ввод с консоли
    • Вывод на консоль
    • Форматный вывод
      • Пример простейшей программы на языке Pascal

      Простейшие операторы

      Перейдем теперь к изучению операторов — специальных конструкций языка Pascal.

      Если говорить строго, то оператором называется (минимальная) структурно законченная единица программы .

      К простейшим операторам языка Pascal относятся:

      1. a := b; — присваивание переменной а значения переменной b. В правой части присваивания может находиться переменная , константа , арифметическое выражение или вызов функции.
      2. ; — пустой оператор , который можно вставлять куда угодно, а также вычёркивать откуда угодно, поскольку на целостность программы это никак не влияет.
      3. Операторные скобки , превращающие несколько операторов в один:

      Метки и безусловный переход

      Метка помечает какое-либо место в тексте программы . Метками могут быть числа от 0 до 9999 или идентификаторы , которые в этом случае уже нельзя использовать для каких-либо иных нужд. Все метки должны быть описаны в специальном разделе label :

      Меткой может быть помечен любой оператор программы

      Любая метка может встретиться в тексте программы только один раз. Используются метки только операторами безусловного перехода goto :

      Это означает, что сразу после оператора goto будет выполнен не следующий за ним оператор (как это происходит в обычном случае), а тот оператор , который помечен соответствующей меткой .

      В принципе, передавать управление можно вперёд и назад по тексту программы , внутрь составных операторов и наружу и т. п. Исключением являются только процедуры и функции (см. лекцию 8 ): внутрь них и наружу безусловные переходы невозможны.

      Ввод и вывод: консоль

      Как мы уже говорили, любой алгоритм должен быть результативным. В общем случае это означает, что он должен сообщать результат своей работы потребителю: пользователю–человеку или другой программе (например, программе управления принтером). Мы не будем описывать здесь внутренние автоматические процессы, использующие сигналы непрерывно функционирующих программ , а сосредоточим внимание на взаимодействии программы и человека, то есть на процессах ввода информации с клавиатуры и вывода её на экран.

      В программировании существует специальное понятие консоль , которое обозначает клавиатуру при вводе и монитор при выводе.

      Ввод с консоли

      Для того чтобы получить данные, вводимые пользователем вручную (то есть с консоли ), применяются команды

      Первая из этих команд считывает все предложенные ей данные, оставляя курсор в конце последней строки ввода, а вторая — сразу после окончания ввода переводит курсор на начало следующей строки. В остальном же их действия полностью совпадают.

      Список ввода — это последовательность имён переменных , разделённых запятыми. Например, при помощи команды

      программа может получить с клавиатуры данные сразу для четырёх переменных , относящихся к различным типам данных.

      Вводимые значения необходимо разделять пробелами, а завершать ввод — нажатием клавиши Enter. Ввод данных заканчивается в тот момент, когда последняя переменная из списка ввода получила своё значение. Следовательно, вводя данные при помощи приведённой выше команды, вы можете нажать Enter четыре раза — после каждой из вводимых переменных , — либо же только один раз, предварительно введя все четыре переменные в одну строчку (обязательно нужно разделить их пробелами).

      Типы вводимых значений должны совпадать с типами указанных переменных , иначе возникает ошибка. Поэтому нужно внимательно следить за правильностью вводимых данных.

      Вообще, вводить с клавиатуры можно только данные базовых типов (за исключением логического). Если же программе всё–таки необходимо получить с консоли значение для Boolean –величины, придётся действовать более хитро: вводить оговоренный символ, а уже на его основе присваивать логической переменной соответствующее значение. Например 1 :

      repeat
      WriteLn ( 'Согласны ли Вы с этим утверждением? y - да, n - нет' ) ;
      ReadLn (c) ;
      case c of
      'y' : b := True ;
      'n' : b := False ;
      else WriteLn ( 'Ошибка!' ) ;
      end ;
      until (c = 'n' ) or (c = 'y' ) ;

      Второе исключение: строки, хотя они и не являются базовым типом, вводить тоже разрешается. Признаком окончания ввода строки является нажатие клавиши Enter, поэтому все следующие за нею переменные необходимо вводить с новой строчки.

      Вывод на консоль

      Примером неплохого приглашения служит, скажем, такая строчка:

      Впрочем, и её можно улучшить, сообщив пользователю не только допустимый диапазон ввода, но и ожидаемую точность (количество знаков после запятой).

      Средства, позволяющие организовать выдачу информации на экран, мы здесь и рассмотрим.

      Первая из них, напечатав на экране всё, о чем ее просили, оставит курсор в конце выведенной строки, а вторая переведёт его в начало следующей строчки.

      Список вывода может состоять из нескольких переменных , записанных через запятую; все эти переменные должны иметь тип либо базовый 2 , либо строчный. Например, WriteLn (a, b, c);

      Форматный вывод

      либо задать для всех (или хотя бы для некоторых) переменных формат вывода :

      Если число длиннее, чем отведённое под него пространство, количество позиций будет автоматически увеличено. Если же выводимое число короче заданного формата, то спереди к нему припишутся несколько пробелов. Таким образом можно производить вывод красивыми ровными столбиками, а также следить за тем, чтобы переменные не сливались.

      Например, если a = 25, b = 'x', а c = 10.5, то после выполнения команды WriteLn(a : 5, ' ', b, c : 10 : 5) на экране или в файле будет записано следующее (подчерки в данном случае служат лишь для визуализации пробелов):

      Особенно важен формат при выводе вещественных переменных . К примеру, если не указать формат, то число 10.5 будет выведено как 1.0500000000Е+0001. Такой формат называется записью с плавающей точкой.

      Необходимо помнить, что в случае недостаточной длины вывода число будет автоматически округлено, например (подчерк служит для визуализации пробела):

      Пример простейшей программы на языке Pascal

      program start ;
      var s : String ;
      begin
      Write ( 'Пожалуйста, введите Ваше имя: ' ) ;
      ReadLn (s) ;
      WriteLn ( 'Мы рады Вас приветствовать, ' , s , '!' ) ;
      end .

      Читайте также: