Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
17.04.2013
Размер:
269.31 Кб
Скачать

Лабораторная работа №2

Форматы представления констант и данных, виды операций, ввод-вывод в языке С++

Цель работы: 1) освоить основные стандартные типы данных языка С++ и их форматов;

2) изучить арифметические операции и их приоритеты;

3) изучить основные функции ввода-вывода из библиотеки stdio.

Теоретические сведения

Основные типы данных - целые, вещественные, символьные

Описание переменных

Константы

Операции присваивания, инкремента, декремента, арифметические операции

Преобразование типов

Приоритеты операций

См. конспект лекций и рекомендованную литературу по языку С++.

Ввод-вывод

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

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

#include <stdio.h>

Чтобы вывести информацию на экран, следует записать оператор:

cout << Элемент_данных_1 << Элемент_данных_2 << Элемент_данных_3 …;

здесь Элемент_данных может быть строковой константой, текстовой константой или выражением (в частном случае выражение может состоять из имени переменной или из константы).

Чтобы ввести информацию с клавиатуры, следует записать оператор

cin >> Переменная_1 >> Переменная_2 >> Переменная_3 …;

Примеры.

cout << "/nHello World! /n" << myVar1 +2 << "\t times";

Тогда если myVar равно 3, будет распечатано:

Hello World!

5 Times

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

#include <stdio.h>

Ниже описываются некоторые функции из этой библиотеки.

Функции printf и scanf.

Формат функции ввода scanf и функции вывода printf сходен:

printf (форматная строка, арг1, арг2, …);

scanf (форматная строка, адрес_арг1, адрес_арг2, …);

Первым аргументом в них является управляющая строка (форматная строка), далее через запятую идут переменные (арг1, арг2, … и т.д.), либо их адреса (в случае scanf).

Предположим, что Вам необходимо вывести значение переменной t в десятичной системе счисления, отведя для этого поле из 4 знакомест. Это выполняется следующим фрагментом программы:

printf ( "%4d", t);

Форматная строка здесь - "%4d". Символ % - начало спецификации формата, число 4 - количество знакомест, отводимых для печати, символ d - признак того, что число целого типа должно быть выведено в десятичной системе счисления. В форматной строке могут встретиться какие угодно символы. Если строка передается функции printf, все символы, не определяющие спецификацию формата, будут напечатаны.

То есть, если бы строка выглядела так:

"I know, that t = %4d \n"

то на печать было бы выведено сообщение:

I know, that t =

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

О символе \n следует сказать особо. Это - так называемый специальный символ, символ перевода строки. Таких специальных символов (они называются Esc-последовательностями) несколько, они начинаются с \ (см. Приложение 1).

Одним вызовом функции printf может быть напечатано много значений переменных - в форматной строке может быть много спецификаций формата. Но нельзя забывать, что каждой из них должен соответствовать один аргумент из списка, помещаемого сразу за форматной строкой. Если спецификаций меньше, чем параметров, то часть параметров выводиться не будет. К началу формата возврата нет (как это возможно в других языках).

Рассмотрим подробнее спецификации формата:

%[-][fw][.][pp]d

где квадратные скобки [] обозначают необязательную часть, которая может отсутствовать; % - символ, с которого всегда начинается форматная строка; [-] - знак "минус" означает, что поле должно быть выравнено влево, по умолчанию оно выравнивается вправо; [fw] - число позиций поля вывода; [.] - для формата с плавающей запятой или для строкового формата; [pp] - число символов после запятой, для строки - это минимальной количество выводимых символов; d - символ преобразования, определяет вывод данных типа int в десятичном формате со знаком.

Символы преобразования:

d - целое десятичное число;

u - целое число без знака;

p - значение указателя;

f - число с плавающей точкой;

e - число с плавающей точкой в экспоненциальном формате;

c - символ;

s - строка;

x или X - целое в шестнадцатеричном формате;

o или O - целое в восьмеричном формате.

Примечание. Для вывода чисел типа long и double необходим модификатор преобразования l, а для чисел типа short - модификатор h.

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

Важное отличие способа вызова функции scanf от способа вызова функции printf заключается в том, что в качестве списка аргументов для scanf должны передаваться не сами переменные, а указатели на них. Для того чтобы получить значение указателя на переменную, применяется унарная операция & (не путайте с побитовой операцией логического И). Например, если требуется ввести значение переменной t в шестнадцатеричной системе счисления и переменной k - в десятичной системе счисления, то вызов функции scanf будет выглядеть следующим образом:

scanf ( "%x%d", &t, &k);

Например:

#include <stdio.h>

void main()

{

int ret, i;

float x;

char name [50];

ret = scanf ("%d %f %s", &i, &x, name);

prinf ("scanf() ВОЗВРАТИЛА ЗНАЧЕНИЕ: %d ; %d %f %s\n", ret, i, x, name);

}

Допустим, мы ввели целое число "56", действительное число "6.3" и строку "abcdefrew".

Результат выполнения программы:

scanf() ВОЗВРАТИЛА ЗНАЧЕНИЕ: 3; 56 6.300000 abcdefrew

Пример 1.

Ввести число в десятичной системе счисления и вывести в шестнадцатеричной и восьмеричной системах счисления, а также в виде соответствующего символа ASCII. Если код символа меньше 32 (в десятичной системе счисления), то вместо символа в кодировке ASCII следует напечатать точку.

main()

{

int x, y;

printf ( "Введите X: \n");

scanf ( "%d", &x);

y = ( x > 32 )? x : '.' ;

printf ( "\n Hex = %x \n Oct = %o \n ASCII = '%c' \n", x,x,y);

}

Обратите внимание на седьмую строку программы:

y = ( x > 32 )? x : '.' ;

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

Пример 2.

#include <stdio.h>

void main()

{

int ii = 420;

float ff =23.2342;

char cc = 'A';

double dd = 23423423.23424423;

unsigned uu = 64000;

printf (" ii (%d) ЗАНИМАЕТ %d БАЙТА \n", ii, sizeof(ii));

printf (" ff (%f) ЗАНИМАЕТ %d БАЙТА \n", ff, sizeof(ff));

printf (" cc (%c) ЗАНИМАЕТ %d БАЙТ \n", cc, sizeof(cc));

printf (" dd (%e) ЗАНИМАЕТ %d БАЙТОВ \n", dd, sizeof(dd));

printf (" uu (%u) ЗАНИМАЕТ %d БАЙТА \n", uu, sizeof(uu));

getchar(); // Описание функции ввода getchar() см. ниже

}

Результаты выполнения программы:

a (420) ЗАНИМАЕТ 2 БАЙТА

b (23.234200) ЗАНИМАЕТ 4 БАЙТА

c (A) ЗАНИМАЕТ 1 БАЙТ

d (2.34234e+07) ЗАНИМАЕТ 8 БАЙТОВ

e (64000) ЗАНИМАЕТ 2 БАЙТА

Функция getchar() получает один символ, поступающий с клавиатуры, и передает его выполняющейся в данный момент программе без отображения на экране.

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

Пример:

#include <stdio.h>

Соседние файлы в папке Разработки С++