Числа при вводе можно разделять пробелами, клавишей <Tab> или <Enter>. Символы при вводе разделять не следует, если нет разделителей между спецификациями формата. Лучше всего читать в каждой функции scanf по одной переменной, предваряя это выводом приглашения ввода. В строке формата для функции scanf лучше не указывать никаких символов, кроме спецификации формата.
Примеры использования функции scanf:
// с клавиатуры вводятся 2 целых числа в переменные А и В
Int A, B;
scanf(”%d%d”, &A, &B);
// с клавиатуры вводится 16-ричное число (не более 3 цифр)
scanf(”%3X”, &A);
// с клавиатуры вводится строка длиной до 8 символов из заглавных латинских букв
char *mes, sym;
scanf(”%8[A-Z]s”, mes);
// с клавиатуры вводится строка из нескольких слов и любых знаков
scanf(”%[\x20-\xFF]s”, mes);
// с клавиатуры вводится символ
scanf(”%c”, &sym);
printf - Вывод на экран (Прототип в stdio. h)
Синтаксис
Printf(строка форматов, выражение1, выражение2, ...);
Символ & используется только для вывода адресов каких-либо объектов.
Строка форматов может быть задана строковой переменной, хотя чаще используется непосредственно строковый литерал.
Количество переменных должно совпадать с количеством спецификаций формата.
Символы спецификации формата совпадают с функцией scanf.
Выводить можно не только значения переменных, но и любых констант и выражений.
Все символы в строке формата, не относящиеся к спецификациям формата, будут выведены на экран. Обычно это поясняющие надписи. Значения выражений выводятся в том месте строки, где указана спецификация формата.
В строках можно использовать следующие специальные символы:
\b – BackSpace (Сдвиг курсора на 1 символ влево);
\n – Переход на новую строку;
\r – возврат в начало строки;
\t – горизонтальная табуляция;
\v – вертикальная табуляция;
\f – прогон листа;
\0 – символ с ASCII-кодом 0 (признак конца строки в памяти);
\’ – апостроф;
\” – двойные кавычки;
\\ - символ «\»;
\ЧИСЛО – 8-ричный код символа;
\xЧИСЛО – 16-ричный код символа;
%% - символ «%». (только в строке формата printf)
Спецификации формата имеют вид:
% число_символов. дробная_часть символ_типа (для вещественных чисел)
% число_символов символ_типа (для любых типов данных)
Примеры использования функции printf:
// вывод значений переменных А и В с пояснениями. Курсор переводится на следующую строку
Int A=5, B=13;
printf(”A =%d B=%d\n”, A, B);
// вывод адреса переменной А
printf(”%p”, &A);
// вывод числа типа long double, округленного до сотых:
long double X=168591.235829;
printf(”Х=%0.2Lf”, X);
// вывод числа типа double, округленного до целого, с выравниванием по правому краю колонки:
double Q=17.6235;
printf(”Q=%20.0lf”, X);
// вывод 3 строк, с выравниванием по левому краю колонки
// (ширина колонок – 20, 10 и 15 символов)
char *s1=”Microsoft”, *s2=”IBM”, *s3=”Apple”;
printf(”%-20s%-10s%-15s”, s1, s2, s3);
Существует целое семейство однотипных функций форматного ввода-вывода.
Функции fprintf и fscanf из библиотеки stdio. h выполняют аналогичные действия для текстовых файлов.
Функции cprintf и cscanf из библиотеки conio. h поддерживают установленные цвета символов и фона.
Другие функции ввода-вывода из библиотек stdio. h и conio. h
// Считывает строку s с клавиатуры. Строка может содержать пробелы
gets(s);
// Выводит строку s на экран. Курсор переводится на следующую строку
puts(s);
// Считывает символ в переменную sym. При вводе допускается редактирование. Ввод завершается нажатием клавиши <Enter>
sym=getchar();
// Выводит символ sym на экран
puttchar(sym);
// Считывает символ в переменную sym. Ввод завершается мгновенно при нажатии символьной клавиши. Символ отображается на экране
sym=getche();
// Считывает символ в переменную sym. Ввод завершается мгновенно при нажатии символьной клавиши. Символ не отображается на экране
sym=getch();
// определяет, есть ли символы в буфере клавиатуры (была ли нажата клавиша)
int A=kbhit(); // если клавиша была нажата, в А – число, отличное от 0
Любую из функций ввода можно использовать для приостановки выполнения программы, так как она ожидает ввода символов. Чаще всего для этого используется функция getch() без операции присваивания.
Функции для оформления ввода или вывода из библиотеки conio. h
Textmode(режим); // Установка текстового режима монитора. Очистка экрана
Символич. константа | Численное значение | Текстовый режим |
LASTMODE | -1 | Предыдущий текстовый режим |
BW40 | 0 | Черно-белый, 40 колонок |
C40 | 1 | Цветной, 40 колонок |
BW80 | 2 | Черно-белый, 80 колонок |
C80 | 3 | Цветной, 80 колонок |
MONO | 7 | Монохромный, 80 колонок |
С4350 | 64 | Цветной,строк, 80 колонок |
Примеры:
Textmode(C4350); // режим 50 строк Х 80 символов (для VGA) или 43 строки (для EGA)
Textmode(LASTMODE); // восстановление предыдущего режима
Window(x1,y1,x2,y2); // установка окна на экране. Окно невидимо, пока его не зальют цветом
Gotoxy(x, y); // установка курсора относительно верхнего левого угла окна
Textcolor(номер); // выбор цвета для символов (0...15)
Textbackground(номер); // выбор цвета для фона (0...7)
clrscr(); // очистка окна (экрана) и заливка его цветом фона
A=wherex(); // Возвращает значение горизонтальной координаты курсора
B=Wherey(); // Возвращает значение вертикальной координаты курсора
Clreol(); // Стирание текста от курсора до конца строки
delline(); // Удаление текущей строки со сдвигом строк вверх
insline(); // Вставка строки со сдвигом строк вниз
Ввод-вывод через потоки
Для работы с потоками нужно подключить заголовочный файл iostream. h (в средах для ОС Windows – просто iostream).
Cin – поток ввода (с клавиатуры);
Cout – поток вывода (на экран).
Ввод строк:
cin. getline(s, k, t);
где s - строка-переменная;
k – максимальное число символов;
t – символ завершения ввода (обычно ‘\n’).
Ввод других значений:
cin>>a>>b; // a, b – переменные простых типов.
Вывод информации:
cout<<Данные 1<<Данные 2<<Данные 3...;
cout<<”x=”<<x<<” y=”<<y; // Вывод переменных x и y с пояснениями
ВНИМАНИЕ:
В среде MS Visual Studio, Dev-cpp для того, чтобы каждый раз перед именем потока не писать область видимости std::, нужно в начале программы указать использование стандартного пространства имен
using namespace std;
Задания для подготовки к работе
1. Изучите структуру программ на языке Си, объявления переменных и констант.
2. Изучите стандартные типы данных языка Си.
3. Изучите функции ввода-вывода для данных различных типов.
4. Ознакомьтесь с заданиями к работе и подготовьте тексты программ.
Задания к работе
1. Напишите программу для исследования вариантов интерпретации байта в памяти компьютера. Для этого следует объявить переменную типа unsigned char, вывести ее значение как символ в апострофах, вывести его десятичный код (со знаком и без знака ), восьмеричный код, шестнадцатеричный код. Например:
Ввод: д
Вывод:
Символ: ’д’
Целое: 164
Целое со знаком: -92
8-ричное: 244
16-ричное: A4
Для вывода переменной как числа со знаком нужно приведение к типу char: (char)x
Исследуйте программу с различными символами (русскими и английскими буквами) и определите, начиная с какого символа выдаются отрицательные коды. Для ввода символов с кодом 0...255 используйте клавишу <Alt> и цифровую клавиатуру.
Измените программу так, чтобы вводились десятичные числа, а выводились символы и все коды.
2. Напишите программу для исследования переполнения при арифметических операциях. Для этого объявите переменные типов long и unsigned long. Числа должны вводиться с клавиатуры. Сложите числа:
1000000 и 3000000млн. и 3 млрд.);
и 1000000;
и ;
- и .
3. Составить программу для вывода любого вещественного числа с разной точностью:
До целого;
до десятых;
до десятитысячных;
Организуйте вывод в обычной и в экспоненциальной форме. (345.98 и 3.4589е2).
4. Составить программу, в которой вводится целое число и количество процентов. Вычисляется сумма этого числа и количества процентов от него. К каждому вводу выводится приглашение. Например:
Введи число: 200
Введи проценты: 3.1
Ответ:
200 + 3.1% = 206.2
5. Напишите программу для исследования функций: getchar(), getche(), getch(). Выведите приглашение для ввода и через 5 строк введенный символ.
6. Исследовать ввод и вывод строк через функции scanf() и gets(). Составьте программу для ввода нескольких строк с пробелами и чисел, так, чтобы ввод чередовался. Только после последнего ввода программа должна вывести всю введенную информацию с отображением имен переменных и их значений.
7. Исследовать потоковый ввод-вывод на примере простых программ.
Содержание отчета
Отчет должен содержать:
Тексты заданий;
Тексты программ с комментариями;
Протоколы работы программ;
Выводы по работе.
Контрольные вопросы
1. Вводится длинное целое число. Как вывести символы, коды которых совпадают с отдельными байтами этого числа?
2. Как ввести строку, содержащую пробелы?
3. В программе могут чередоваться функции ввода чисел, символов и строк. После ввода числа ввод строки игнорируется (автоматически вводится пустая строка). Почему это происходит? Как с этим бороться?
4. Перечислите символы формата для различных типов данных, используемые в функциях printf и scanf.
5. Объясните принципы построения спецификации формата для любого типа данных.
6. Какие функции ввода строк есть в языке Си и чем они отличаются?
7. Какие функции ввода символов есть в языке Си и чем они отличаются?
Литература
1. , Березин курс С и С++. – М.: Диалог-МИФИ, 2000. – 288с.
2. . С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2002. – 464с.
3. Митницкий теории алгоритмов и язык программирования С. Учебное пособие. –М.: МФТИ, 2001. – 180с.
4. Могилев А. В. и др. Информатика. М.: Изд. центр «Академия», 2000. – 816 с.
5. Толковый словарь стандарта языка Си. СПб.: Питер, 1994.
Лабораторная работа № 2
Линейные программы
Цели работы:
Изучить возможности языка Си по обработке числовой информации, встроенные математические функции языка Си;
Научиться программировать простые расчеты.
Краткие теоретические сведения
Практически ни одна программа не обходится без вычислений. В языке программирования Borland Turbo C++ для этого есть набор математических операций и функций.
Операции языка Си, применяемые в вычислениях
Знак | Операция | Использование |
Арифметические | ||
- | Вычитание и унарный минус | -5 - х a-b |
+ | Сложение | a+b |
* | Умножение | x*5 |
/ | Деление (тип результата зависит от типа операндов) | 3/8 1/x |
% | Остаток от деления нацело | 47%9 (2) |
++ | Инкремент | z=x++ z=++x x++ |
-- | Декремент | printf(“%d”,x--); |
Присваивание | ||
= | Простое | a=b=c=3*x+5 |
+= | Увеличить Х | x+5 |
-= | Уменьшить Х | x-=18.2 |
*= | Умножить Х | x*=a экв. x=x*a |
/= | Разделить Х | x/=2 |
, | Запятая (серия присваиваний) | a=5*x, z=7-z, t=a (t=5*x) |
Прочие | ||
() | Круглые скобки | |
(имятипа) | Приведение типа | (long)x или long(x) |
В таблице приведены только те операции, которые имеют непосредственное отношение к арифметике и присваиванию. При сомнениях в приоритете операций следует использовать круглые скобки.
Операция % применяется только к целочисленным типам данных;
Операции инкремента и декремента (увеличение и уменьшение) применяются к целым числам и указателям. Величина приращения для целочисленных типов всегда 1 (-1). Значение выражения в присваивании зависит от того, до или после имени переменной записана операция.
Функции для математических вычислений находятся в библиотеке math. h
Функция | Аргумент(ы) | Результат | Значение |
abs(x) | Число | Целое число | Модуль |
fabs(x) | Число | Вещественное число | Модуль |
cos(x) | Угол в радианах | Вещественный | Косинус |
sin(x) | Угол в радианах | Вещественный | Синус |
tan(x) | Угол в радианах | Вещественный | Тангенс |
atan(x) | Число | Вещественный, - p/2... p/2 | Арктангенс |
atan2(y, x) | Числа | Вещественный, - p... p | Главный Арктангенс Y/X |
sqrt(x) | Число | Вещественный | Корень квадратный |
log(x) | Число | Вещественный | Натуральный логарифм |
log10(x) | Число | Вещественный | Десятичный логарифм |
exp(x) | Число | Вещественный | Экспонента |
cosh(x) | Угол в радианах | Вещественный | Гиперболический косинус |
sinh(x) | Угол в радианах | Вещественный | Гиперболический синус |
tanh(x) | Угол в радианах | Вещественный | Гиперболический тангенс |
pow(x, y) | Числа | Вещественный | Х в степени у |
pow10(x) | Числа | Вещественный | 10 в степени х |
fmod(x, y) | Вещественные | Вещественный | Остаток от деления дробных чисел |
floor(x) | Вещественный | Вещественный | Округление в меньшую сторону |
ceil(x) | Вещественный | Вещественный | Округление в большую сторону |
ЗАМЕЧАНИЕ: Все функции языка Си для вещественных типов рассчитаны на применение выражений типа double (или float). Для выражений типа long double следует добавлять в конец имени функции букву «l» (cos – cosl, sqrt – sqrtl, pow10 – pow10l, ...).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |


