Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++ / Лаб 1. Базовые типы данных и ввод-вывод

.pdf
Скачиваний:
80
Добавлен:
18.03.2015
Размер:
523.54 Кб
Скачать

Лабораторна робота №1.

Тема: Базовые типы данных и ввод-вывод.

Цель: получение практических навыков в работе с типами данных языка C и в использовании функций стандартного ввода-вывода.

Теоретические ведомости

Консольное приложение

Раньше использование этого типа приложений можно было рассматривать как попытку завоевать симпатии приверженцев программирования в среде DOS, оставшихся без средств программирования. По мере перехода от версии к версии возможности заготовок консольных приложений, создаваемых средой программирования Visual C++, постоянно росли. Так было по версию 6.0. С появлением пакета Visual Studio.NET, который иногда называют Visual Studio 7.0, все изменилось. Хотя в нем и остались средства создания консольных приложений, средства их создания не обеспечивают того удобства работы, которое было присуще версии 6.0.

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

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

1.Закройте все открытые проекты и файлы и выберите команду File | New | Project (Файл | Новый | Проект) или нажмите кнопку New Project (Новый проект) на панели инструментов Standard (Стандартная). Появится диалоговое окно New Project (Новый проект).

2.В окне иерархического списка Project Types (Типы проектов) раскройте папку

Visual C++ Projects (Проекты Visual C++).

3.В окне списка Templates (Шаблоны) выделите значок Win32 Project (Проект Win32), в текстовое поле Name (Имя) введите имя приложения "Console" и нажмите кнопку ОК. Появится диалоговое окно Win32 Application Wizard Console (Мастер создания приложения Win32).

4.Раскройте вкладку Application Settings (Настройки приложения).

5.Установите переключатель Application type (Тип приложения) в положение Console application (Консольное приложение) и нажмите кнопку Finish (Готово). Мастер Win32 Application Wizard создаст заготовку консольного приложения.

6.Откройте окно Solution Explorer (Проводник решения) и дважды щелкните левой кнопкой мыши на имени файла Console.срр. Откроется окно его редактирования, содержащее заготовку, созданную мастером Win32 Application Wizard.

7.Измените файл Console.срр в соответствии с текстом листинга 1.1.

Листинг 1.1. Файл Console.cpp // Файл Console.cpp содержит входную точку консольного приложения

#include "stdafx.h" #include <iostream> #include <iomanip> using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{cout << "Are you ready to terminate?" << endl; char szText[256];

cin >> szText; return 0;}

8.Нажмите клавишу <F5> и запустите приложение на исполнение. Появится окно приложения.

9.Введите строку "Yes" и нажмите клавишу <Enter>. Консольное приложение завершит свою работу.

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

Использование cin и cout для ввода и вывода

В наших примерах мы будем использовать входной поток cin для ввода информации

склавиатуры, а выходной поток cout для вывода информации на экран дисплея. cin и cout представляют собой объекты классов istream и ostream, определяемых и создаваемых с помощью заголовочного файла iostream.h. Как объекты, cin и cout поддерживают различные операции и методы, определенные внутри соответствующих классов.

Примечание; для использования потоков cin и cout необходимо подключить соответствующие заголовочные файлы:

// для Visual Studio C++.NET (7.0) #include <iostream>

#include <iomanip> using namespace std;

При использовании Visual Studio C++ 6.0 нужно подключать эти заголовочные файлы следующим образом:

//для Visual Studio C++ 6.0 #include <iostream.h> #include <iomanip.h>

Использование cout

В контексте операций вывода, двойной знак "меньше" является операцией "вставки" (эта операция вставляет символы в выходной поток для отображения). С помощью cout мы можем использовать несколько операций вставки в пределах одного оператора. Например, следующая программа.

#include <iostream> #include <conio.h> using namespace std;

int main(int argv, char* argc)

{cout<< "\n" << 10 << 0 << 1 <<"\n" ; getch();

return 0;}

выведет на экран число 1001 .

Управление шириной вывода

При выводе на cout наши программы могут указать ширину вывода для каждого числа, используя манипулятор setw (установка ширины). С помощью setw задается минимальное количество позиций, занимаемое числом. Для использования манипулятора setw в программу должен быть включен заголовочный файл iomanip.h. Например:

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc) {cout<< setw(3) << 1001 <<endl ; cout<< setw(4) << 1001 <<endl ; cout<< setw(5) << 1001 <<endl ; cout<< setw(6) << 1001 <<endl ; getch();

return 0;}

При запуске этой программы на экран будет выведено

1001

1001

1001

1001

Для продвижения курсора в начало следующей строки можно использовать символ '\n' или манипулятор endl.

Подобным же образом метод cout.width позволяет указать минимальное количество позиций, которое будет использовать cout для вывода следующего значения. Например:

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc)

{cout.width(6); cout<< 1001 <<endl ; cout<< 1001 <<endl ; getch();}

При запуске этой программы на экран будет выведено

1001

1001

Управление видом вывода

Манипуляторы dec, oct и hex позволяют осуществлять вывод в десятичном, восьмеричном и шестнадцатиричном видах. Действие этих манипуляторов продолжается на весь последующий вывод. Например:

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc)

{cout<< setw(3) << oct << 1001 <<endl ; cout<< setw(4) << 1001 <<endl ; cout<< setw(5) << 1001 <<endl ; cout<< setw(6) << 1001 <<endl ; getch();}

При запуске этой программы на экран будет выведено

1751

1751

1751

1751

Использование символа заполнителя

Если мы используем манипулятор setw или метод cout.width для управления шириной вывода, cout будет помещать пробелы до (или после для выровненных влево) значений, выводимых на печать. С помощью метода cout.fill можно пробел заменить на другой символ. Допустим наша программа должна напечатать следующую таблицу:

Оглавление

 

Профиль компании........................

10

Доходы и убытки компании.........

11

Члены правления компании...........

13

Такая программа может выглядеть следующим образом:

#include <iostream>

 

#include <iomanip>

 

#include <conio.h>

 

using namespace std;

 

int main(int argv, char* argc)

 

{cout<< "Оглавление" <<endl ;

 

cout.fill('.');

 

cout<< "Профиль компании" << setw(23) << 10 << endl ;

cout<< "Доходы и убытки компании" << setw(15) << 11 << endl ; cout<< "Члены правления компании" << setw(15) << 13 << endl ; getch();}

Если мы выбрали символ-заполнитель с помощью cout.fill, он будет оставаться действительным до нового обращения к этому методу.

Управление выводом значения с плавающей точкой

Если мы используем cout для вывода значения с плавающей точкой, то обычно мы не можем сделать каких-либо предположений о том, сколько цифр будет выводиться справа от запятой. Для управления количеством цифр справа от десятичной точки используется манипулятор setprecision. Ниже приведен пример программы с использованием этого манипулятора.

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc) {float value = 1.23456;

int i;

for(i=1; i<=5; i++)

cout<< setprecision(i) << value << endl ;}

При запуске этой программы на экран будет выведено

1.2

1.23

1.234

1.2345

1.23456

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

Вывод одного символа за один раз

Для вывода одного символа за один раз можно использовать метод cout.put. ниже приведен пример программы с использованием этого метода:

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc)

{char string[]="Учимся программировать на языке С++!"; int i;

for(i=0;string[i]; i++); cout.put(string[i];

getch();}

В результате выполнения программы на экран будет выведено сообщение:

Учимся программировать на языке С++!

Использование cin

Следующая программа запрашивает ввод двух чисел, присваивает введенные значения переменным first и second и затем выводит их на печать.

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc) {int first, second;

cout << "Ведите два числа и нажмите Enter: " ; cin >> first >> second ;

cout << "Были введены числа " << first << " и " << second << endl; getch();}

Если мы используем для ввода cin, то для разделения отдельных вводимых значений применяются "пустые символы" (пробел, табуляция, возврат каретки).

Ввод с клавиатуры по одному символу за один раз

Для ввода с клавиатуры по одному символу используется метод cin.get. Следующая программа повторяет в цикле вызов cin.get для чтения символов с клавиатуры до тех пор, пока не будет введен символ 'N', после чего печатает введенный текст.

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc) {char string[100]=('0');

int i;

for(i=0; string[i]=cin.get(),toupper(string[i])!='N'; i++); cout << string;

getch();}

Ввод с клавиатуры целой строки

Для ввода целых строк, состоящих из отдельных слов, разделенных пустыми символами, применяется метод cin.getline. Для использования cin.getline необходимо указать символьную строку, в которую будут помещаться символы, а также размер строки, как это показано ниже.

cin.getline(string, 64);

Когда cin.get читает символы с клавиатуры, она не будет читать символов больше, чем может вместить строка. Удобным способом определить размер массива является использование оператора sizeof, как показано ниже:

cin.getline(string, sizeof(string));

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

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

#include <iostream> #include <iomanip> #include <conio.h> using namespace std;

int main(int argv, char* argc) {char string[128];

cout << "Введите строку текста и нажмите Enter" << endl ; cin.getline(string, sizeof(string));

cout << "Вы ввели: " << string << endl; getch();}

Возможен и другой вариант использования метода cin.getline. Например, следующий вызов заставляет метод cin.getline читать строку текста, пока не встретиться символ возврата каретки, или пока не будут прочитаны 64 символа, или пока не встретиться буква Я:

cin.getline(string, 64, 'Я');

Дополнительные функции, которые могут быть полезны при операциях ввода/вывода:

clrstr() – очистка экрана (файл conio.h)

getch() – ввод символа с клавиатуры. Без возвращаемого результата может использоваться для задержки программы до нажатия клавиши Enter (файл conio.h)

Базовые типы данных языка С

 

 

 

 

 

 

Название типа

 

 

Пояснения

 

Диапазон значений

 

 

 

 

short

 

Краткое целое число

 

-128 . . . 127

 

 

 

 

unsigned short

 

Краткое целое число без знака

 

0 . . . 255

 

 

 

 

int

 

Целое число

 

-32768 . . . 32767

 

 

 

 

unsigned int

 

Целое число

 

0 . . . 65535

 

 

 

 

long

 

Длинное целое число

 

-230 . . . 230-1

 

 

 

 

 

unsigned long

 

Длинное

целое число без

 

0 . . . 231-1

 

 

знака

 

 

 

 

 

 

 

 

char

 

Один символ

 

символы кода ASCII

 

 

 

 

 

 

char[ ]

 

Строка

 

 

 

 

 

 

 

float

 

Число с плавающей точкой

 

3.4 10-38 . . . 3.4 10+38

 

 

 

 

 

double

 

Число с

плавающей точкой

 

1.7 10-308 . . . 1.7 10+308

 

 

двойной точности

 

 

 

 

 

 

 

 

Некоторые функции стандартного ввода-вывода

Функции стандартного ввода - вывода описаны в файле stdio.h. printf() – форматный вывод на экран:

int printf(char *format, <список вывода>);

Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры - перечисление переменных и выражений, значения которых выводятся. Каждая спецификация формата имеет вид (параметры в квадратных скобках необязательны):

%[flags][width][.prec][F|N|h|l]type

 

 

 

 

 

где

 

type -

 

тип спецификации

 

 

 

 

 

 

 

 

 

 

 

 

d или i

 

целое десятичное число со знаком

 

 

 

 

 

 

 

u

 

десятичное число без знака

 

 

 

 

 

 

 

 

 

 

 

 

x

 

целое 16-ричное число без знака

 

 

 

 

 

 

 

 

 

 

 

 

f

 

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

 

 

 

 

 

 

 

e

 

число в E-форме

 

 

 

 

 

 

 

g

 

число с плавающей точкой или в E-форме

 

 

 

 

 

 

 

c

 

один символ

 

 

 

 

 

 

 

s

 

строка

 

 

 

 

 

%

 

символ %

 

 

 

 

 

 

 

flags -

 

признак выравнивания:

 

 

 

 

 

+ или пусто

 

выравнивание по правому краю

 

 

 

 

 

-

 

выравнивание по левому краю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

целое число - общая ширина поля. Если это число

 

 

width -

 

начинается с цифры 0, вывод дополняется слева нулями до

 

 

 

заданной ширины. В заданную ширину входят все символы

 

 

 

 

 

 

 

 

вывода, включая знак, дробную часть и т.п.

 

 

 

 

 

 

 

prec -

 

целое число, количество знаков после точки при выводе

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

F -

 

соответственный элемент списка вывода является дальним

 

 

 

указателем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N -

 

соответственный елемент списка вывода является близким

 

 

 

указателем

 

 

 

 

 

 

 

 

 

 

 

l -

 

соответствующий елемент списка вывода является long int

 

 

 

или double

 

 

 

 

 

 

 

 

 

scanf() – форматный ввод с клавиатуры: int scanf(char *format, <список ввода>);

Первый параметр является символьной строкой, которая задает спецификации формата. Остальные параметры – перечисление адресов переменных, в которые вводятся данные. В этом списке перед именами всех переменных, кроме тех, которые вводятся по спецификации типа %s, должен стоять символ &.

putchar() – вывод одного символа на экран: int putchar(int ch);

Параметр функции – код символа, который выводится. При успешном выполнении функция возвращает этот же код, при неуспешном – EOF.

getchar() – ввод одного символа с клавиатуры: int getchar(void);

Функция возвращает код введенного символа. puts() – вывод строки символов на экран:

int puts(char *string);

Параметр функции – указатель на начало той строки, из которой выводятся данные. Функция возвращает количество выведенных символов.

gets() – ввод строки символов с клавиатуры: char *gets(char *string);

Параметр функции – указатель на начало той строки, в которую вводятся данные. Функция возвращает тот же самый указатель.

Парктическое задание 1

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

Вариант

Переменные

Формула

1

float a, b, c;

float x = a + (b – c) / 2;

2

double a, b, c;

float x = a + (c – b/2);

3

float a; double b, c;

float x = a*b + a*c/2;

4

int a, b, c;

float x = (a – b)*(a+b) – c;

5

float a; int b, c;

float x = a*2 + b*2 – c*2;

6

short a; int b, c;

float x = (a + b + c)*2*a;

7

float a; double b; int c;

float x = a*a + b*b – c*c;

8

double a; float b; int c;

float x = (a – b – c)*(a + b + c);

9

int a; float b, c;

float x = a/2 + b/3 + c/4;

10

int a; float b; int c;

float x = a + (a*b - c) + c/4;

11

double a; int b; float c;

float x = a + a*a + (b*a – c);

12

float a; int b; float c;

float x = a/2 + (a/3 – b) + c*c;

13

double a, b; int c;

float x = a + a*c + a*b – a*b/3;

14

int a, b; float c;

float x = a*b*c – a*2 – b*3 – c*4;

15

float a; double b; float c;

float x = (a + c)/(a + b + c);

16

int a, b; double c;

float x = (a – b)*(a + b) – 4*c;

17

int a, b, c;

float x = (a – 2*b + 4*c)/6;

18

float a, b, c;

float x = (a*c + a*b)/12;

Парктическое задание 2

Разработать программу, которая вводит фактические данные из таблицы, представленной в Вашем варианте индивидуального задания и выводит на экран таблицу,

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

Вариант 1

 

 

 

Отдел кадров

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Фамилия

 

 

 

 

 

Инициалы

Год рожд

 

 

Оклад

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Иванов

 

 

 

 

 

И.И.

 

 

 

1975

 

 

 

 

517.50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Петренко

 

 

 

 

 

П.П.

 

 

 

1956

 

 

 

 

219.10

 

 

 

 

 

 

 

Паниковский

 

 

 

 

М.С.

 

 

 

1967

 

 

 

 

300.00

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание: оклад установлен по состоянию на 1 января 2010 года

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Фирмы - производители СКБД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Фирма

Количество. продуктов

Годовой объем продажи ($)

Часть рынка (%)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Oracle

1

 

 

 

 

 

2488000000

 

 

 

31.1

 

 

 

 

 

 

 

 

 

 

IBM

3

 

 

 

 

 

2392000000

 

 

 

29.9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Microsoft

2

 

 

 

 

 

1048000000

 

 

 

13.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание: по данным Gartner Groupг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Характеристики ПЭВМ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процессор

 

 

 

 

Частота (Mgz)

 

RAM (Mb)

 

 

 

 

Тип

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pentium-III

 

 

 

 

233

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

AMD-К6

 

 

 

 

166

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PowerPC-620

 

 

 

2000

 

 

 

 

 

 

 

 

 

 

R

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип: C - CISC-процессор, R - RISC-процессор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Каталог библиотеки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Автор книги

 

Название

 

 

Год выпуска

 

Группа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сенкевич

 

 

Потоп

 

 

1978

 

 

 

 

Х

 

 

 

 

Ландау

 

 

Механика

 

 

1989

 

 

 

 

У

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дойль

 

 

Сумчатые

 

 

1990

 

 

 

 

C

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание: Х - художественная литература; У - учебная литература; С - справочная

 

 

 

 

литература

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Офисные пакеты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наименование

Производитель

 

Количество сост.частей

 

 

 

Цена ($)

 

 

 

Office

 

Microsoft

 

4

 

 

 

 

 

 

 

870

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SmartSute

 

Lotus

 

 

 

 

 

5

 

 

 

 

 

 

 

1020

 

 

 

 

StarOffice

 

Sun

 

 

 

 

 

4

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примечание: возможно бесплатно получить продукт StarOffice через Internet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вариант 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сельскохозяйственные культуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наименование

Тип

 

Посевная площадь (га)

 

 

Урожайность (ц/га)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Соя

 

Б

 

13000

 

 

 

 

 

45

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Чумиза

 

З

 

8000

 

 

 

 

 

17

 

 

 

 

 

 

 

 

Рис

 

З

 

25650

 

 

 

 

 

24