Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
red0;
Лабораторная №1 “Операторы ввода и вывода в языке программирования Си++”
. Теоретические сведения
1.1 Структура программы
Цель работы: изучить операторы ввода и вывода, форматы, используемые в этих операторах. Оформить законченную программу с применением этих операторов.
main ( )
{
Тело программы
}
В самом простом случае функция main не имеет аргументов, поэтому в скобках ничего не содержится. Для работы программы, обеспечивающей ввод и вывод информации, перед функцией main необходимо поместить строку:
#include <stdio.h>
1.2 Алфавит языка и типы данных
Алфавит языка включает латинские прописные и строчные буквы, цифры и специальные знаки. К последним относятся: . (точка), , (запятая), (апостроф), : (двоеточие) и др.
Важным понятием языка является идентификатор, который используется в качестве имени объекта, например, переменной, функции и т.п. Идентификатор может содержать до 32 символов и состоит из букв и цифр, но начинается обязательно с буквы. Строчные буквы отличаются от прописных, поэтому идентификаторы SIGMA и sigma считаются разными.
В языке СИ существует несколько типов данных. Каждый тип данных определяется одним из следующих ключевых слов:
1.3 Ввод и вывод информации
.3.1 Форматный вывод
Вначале рассмотрим функцию, определяющую форматный вывод:
printf("управляющая строка", аргумент1, аргумент2, ... );
Управляющая строка содержит объекты трех типов: обычные символы, которые просто выводятся на экран дисплея, спецификации преобразования, каждая из которых вызывает вывод на экран значения очередного аргумента из последующего списка и управляющие символы-константы.
Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом, задающим преобразования.
Символ преобразования связан с типом переменных. приведем символы преобразования:
Если после знака % записан не символ, то он выводится на экран. Функция printf использует управляющую строку, чтобы определить, сколько всего аргументов и каковы их типы.
Например, в результате работы программы получены переменная i, имеющая значение 100, и переменная j, имеющая значение 25. Обе переменные целого типа. Для вывода этих переменных на экран в виде
i=100 j=25
необходимо применить функцию
printf(“i=%d j=%d”,i,j);
Как было описано выше, в кавычках задается формат вывода. перед знаком % записываются символы, которые будут непосредственно выданы на экран. После знака % применена спецификация d, т.к. переменные i и j имеют целый тип. Сами i и j приведены через запятую в списке аргументов. Если результат должен быть представлен в виде
i=100; j=25
необходимо применить функцию
printf(“i=%d; j=%d, i, j);
Если после знака % стоит цифра, то она задает поле, в котором будет выполнен вывод числа. Приведем несколько функций printf, которые будут обеспечивать вывод одной и той же переменной S целого типа, имеющей значение 336.
Функция printf(“%2d”, S); выдает на экран:
336
В этом примере ширина поля ( она равна двум) меньше, чем число цифр в числе 336, поэтому поле автоматически расширяется до необходимого размера.
Функция printf(“%6d”, S);
выдаст на экран:
_ _ _336
(6 позиций)
То есть, в результате работы функции число сдвинуто к правому краю поля, а лишние позиции перед числом заполнены пробелами.
Функция printf(“%-6d”, S);
выдаст на экран:
336_ _ _
(6 позиций)
Знак «минус» перед спецификацией приводит к сдвигу числа к левому краю поля.
Рассмотрим вывод вещественных чисел.
Если перед спецификацией f ничего не указано, то выводится число с шестью знаками после запятой. при печати числа с плавающей точкой перед спецификацией f тоже могут находиться цифры.
Рассмотрим на конкретном примере три возможные ситуации:
%6f печать числа с плавающей точкой в поле из шести позиций;
%.2f печать числа с плавающей точкой с двумя цифрами после десятичной точки;
%6.2f печать числа с плавающей точкой в поле из шести позиций и двумя цифрами после десятичной точки.
Например, в результате работы программы получены переменные вещественного типа а=3,687 и b=10,17.
Если для вывода значений использована функция
printf(“%7f %8f”,a,b);
то результат будет представлен в виде строки:
_ _ 3.687 _ _ _ _10.17
(7 поз.) (8 позиций)
Как видно из примера, лишние позиции заполняются пробелами. Если для вывода значений использована функция
printf(“%.2f %/2f”, a, b);
то результатом будет строка:
3.69 10.17,
из которой следует, что в первом числе третья цифра после десятичной точки отброшена с округлением, т.к. указан формат числа с двумя цифрами после десятичной точки.
Если для вывода значений использована функция
printf(“%7.2f e”,a,b);
то будет выведена строка:
_ _ _ 3.681.010000е+01
(7 позиций)
Поскольку для вывода значения переменной b применена спецификация е, то результат выдан в экспоненциальной форме. Следует отметить, что , если ширина поля меньше, чем число цифр в числе, то поле автоматически расширяется до необходимого размера.
Как было отмечено выше, в управляющей строке могут содержаться управляющие символьные константы. Среди управляющих символьных констант наиболее часто используются следующие:
Предположим, в результате работы программы переменная i получила значение 50. В результате записи инструкции вызова функции
printf(“\t ЭВМ\n%d\n”,i);
сначала выполнится горизонтальная табуляция (\t), т.е. курсор сместится от края экрана на 8 позиций, затем на экран будет выведено слово “ЭВМ”, после этого курсор переместится в начало следующей строки (\n), затем будет выведено целое значение i по формату d, и окончательно курсор перейдет в начало новой строки (\n). Таким образом, результат работы этой функции на экране будет иметь вид:
_ _ _ _ _ _ _ _ ЭВМ
1.3.2 Ввод данных
Для форматного ввода данных используется функция
scanf(«управляющая строка», аргумент1, аргумент2,...);
Если в качестве аргумента используется переменная, то перед ее именем записывается символ &.
Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. спецификации для определения типов аргументов такие же, как и для функции printf. Перед символами d,o,x,f может стоять буква l. В первых трех случаях соответствующие переменные должны иметь тип long, а в последнем double.
Рассмотрим пример. Требуется ввести значения для переменных i (целого типа) и a (вещественного типа). Эту задачу выполнит функция:
scanf(“%d%f”,&i,&a);
В управляющей строке спецификации трех типов могут быть отделены друг от друга различными знаками, в том числе и пробелом. Следовательно, при занесении значений переменных необходимо использовать указанный разделитель. Если спецификации не отделены одна от другой никакими значениями, то значения переменных заносятся через пробел.
В языке СИ есть две очень удобные функции puts и gets, позволяющие вводить и выводить строку символов. Пример их использования показан ниже:
#include<stdio.h>
main()
{
char q[40]; /*объявление строки символов*/
puts(“Введите строку символов”);
gets(q); /*ввод строки символов*/
puts(q); /*вывод строки символов*/
}
В результате работы программы вначале на экране появится текст:
Введите строку символов,
после чего следует ввести какую-либо строку символов. Эта информация при помощи оператора gets будет присвоена элементам символьного массива q. Оператор puts выведет строку символов.
Выражения широко используются в программах на языке СИ и представляют собой формулы для вычисления переменных. Они состоят из операндов (переменные, константы и др.), соединенных знаками операций (сложение, вычитание, умножение и др.). Порядок выполнения при вычислении значения выражения определяется их приоритетами и может регулироваться с помощью круглых скобок. Наиболее часто арифметические выражения используются в операторе присваивания. Этот оператор заменяет значение переменной в левой части оператора на значение выражения, стоящего в правой части, и имеет следующую форму:
переменная = выражение;
В языке СИ может быть использован модификатор const, запрещающий какие бы то ни было переопределения константы: ее уменьшение, увеличение и т.п. Модификатор const, используемый отдельно, эквивалентен const int. Приведем примеры:
const float a=3.5;
const j=47;
В таблице 1 приведены арифметические операции, используемые в языке СИ.
Таблица 1
Знак операции |
Выполнение действия |
+ |
Сложение |
|
Вычитание |
* |
Умножение |
/ |
Деление |
% |
Деление по модулю |
Результатом деления по модулю является остаток от деления. Например, если b=5, c=2, то при выполнении операции
а=b%c,
переменная а получит значение 1.
Широкое распространение находят также выражения с еще одной нетрадиционной терпарной операцией ?: . В выражении
у=х?а:b,
у=а, если х не равно нулю, и у=b, если х равно нулю. Следующее выражение
у=(а>b)?a:b;
позволяет присвоить переменной y значение большей переменной (а или b), т.е. y=max(a,b).
В таблице 2 приведены некоторые функции, применяемые при программировании на СИ.
Таблица 2
Математическая запись |
Запись на языке СИ |
| X | |
int abs(int X) |
| X | |
float fabs(float X) |
arccos X |
double acos(double X) |
arcsin X |
double asin(double X) |
arctg X |
double atan(double X) |
cos X |
double cos(double X) |
sin X |
double sin(double X) |
tg X |
double tan(double X) |
eX |
double exp(double X) |
ln X |
double log(double X) |
log X |
double log10(double X) |
√X |
double sqrt(double X) |
XY |
double pow(double X, double Y) |
Перед аргументом и функцией указан допустимый тип (при программировании эта запись типа опускается).
В программах на языке СИ важная роль отводится комментариям, которые повышают наглядность и удобство чтения программ. Они могут быть записаны в любом месте программы и обрамляются символами /* и */.
Рассмотрим пример программы на языке СИ.
Требуется вычислить:
Для работы с математическими функциями необходимо перед функцией main поместить строку:
#include <math.h>
Программа на СИ имеет вид:
#include <stdio.h>
#include <math.h>
main()
{
float z,f,k; /*объявление вещественных переменных z,f,k*/
double y,a,b,c,d,x; /*объявление переменных y,a,b,c,d,x переменными двойной точности*/
scanf(“%f %f %f %lf %lf”, &z, &f, &k, &d, &x); /* ввод с клавиатуры переменных z,f,k,d,x*/
a=log(x)+(z+f)/k;
b=sin(x)+tan(x);
c=pow(d+exp(x),1./5);
y=(a+b)/c;
printf(“%lf %lf %ef %lf”, a, b, c, y); /*вывод на экран значений переменных a,b,c,y*/
}
Следует обратить внимание на то, что при вычислении переменной с, выражение, стоящее в правой части, представлено как 5√(d+ex), поэтому применена функция pow. Еще одно замечание. Следует осторожно подходить к делению целых чисел. Если оба операнда целые, то результат тоже будет целым, а дробная часть отбрасывается. таким образом, при выполнении операции 1/5, результат будет равен нулю. Для того чтобы сохранить дробную часть, хотя бы один из операндов должен быть вещественным. Это условие выполнено при вычислении 1./5 .
Из таблицы 3 взять задание по варианту и написать программу для вычисления выражения на языке СИ.
Таблица 3
№ варианта |
Задание |
Исходные данные |
c = sin2 (x + y) ln x
;