Функции ввода-вывода информации 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции ввода-вывода информации



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

рrintf (управляющая строка, список вывода);

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

Спецификация преобразования имеет вид

% < флаг > < размер поля. точность > спецификация

где флаг может принимать следующие значения:

- выравнивание влево выводимого числа (по умолчанию - вправо);

+ выводится знак положительного числа;

размер поля – минимальная ширина поля, т.е. длина числа; при недостаточной ширине поля выполняется автоматическое расширение;

точность – количество цифр в дробной части числа;

спецификация - вид выводимой информации.

Основные форматы функции печати:

%d (%i) - десятичное целое число;
%c - один символ;
%s - строка символов;
%e - число с плавающей точкой (экспоненциальная запись);
%f - число с плавающей точкой (десятичная запись);
%u - десятичное число без знака;
%o - восьмеричное число без знака;
%x - шестнадцатеричное число без знака.

Для данных типа long, double – используется дополнительный формат l, на пример: % ld - длинное целое, % lf – вещественное с удвоенной точностью.

При необходимости вывода управляющих символов (% \ и т.п.) их нужно указать 2 раза, н апример:  

printf ("Только %d%% предприятий не работало. \n",5);

получим: Только 5% предприятий не работало.

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

\n – переход на новую строку;

\t – горизонтальная и \v – вертикальная табуляция;

\b – возврат назад на один символ;

\r – возврат в начало строки;

\f – прогон бумаги до начала новой страницы;

\a – звуковой сигнал;

\? – знак вопроса.

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

Функция puts - предназначена для вывода строки символов с переходом на начало новой строки;

Для форматированного ввода информации используется функция:

scanf (управляющая строка, список ввода);

Для нее, как и для функции printf, указывается управляющая строка, однако функция scanf использует в списке ввода указатели на перемен­ные, т.е. их адреса. Для обозначения указателя перед именем переменной записывается символ &, обозначающий адрес переменной. Для ввода значений строковых переменных символ & не используется. При использовании формата %s строка вводится до первого пробела. Вводить данные можно как в одной строке через пробел, так и в разных строках.

Приме р: int course;

float grant;

char name[20];

                  printf ("Укажите ваш курс, стипендию, имя \n");

                 scanf ("%d%f%s", &course, &grant, name);

Функция gets - ввод строки символов до нажатия клавиши Enter (могут быть использованы и пробелы).

 

Стандартные математические функции

Декларации математических функций языка Си содержатся в файле math.h. В последующих записях аргументы x и y имеют тип double. Аргументы тригонометрических функций задаются в радианах (2 p радиан = 360О). Все приведенные математические функции возвращают значение (результат) типа double.

Таблица 2

Математическая функция Имя функции в языке Си Математическая функция Имя функции в языке Си
sqrt(x) arcsin(x) asin(x)
|x| fabs(x) arctg(x) atan(x)
ex exp(x) arctg(x/y) atan2(x,y)
xy pow(x,y) sh(x)=1/2 (ex-e-x) sinh(x)
ln(x) log(x) ch(x)=1/2 (ex+e-x) cosh(x)
lg10(x) log10(x) tgh(x) tanh(x)
sin(x) sin(x) Остаток от деления x на y fmod(x,y)
cos(x) cos(x) Наименьшее целое ³ x ceil(x)
tg(x) tan(x) Наибольшее целое £ x floor(x)

Операция присваивания

Операция присваивания имеет две формы записи, полная форма:

имя переменной = выражение;

в которой сначала вычисляется выражение, а затем результат присва­ива­ется имени_переменной, например: y = (x +2) / (3* x) - 5;

С помощью одного оператора можно присвоить одно значение несколь­ким перемен­ным, например: x = y = z = 0;   (x, y, z = 0)

или z = (x = y)*5;   - сначала переменной x присваивается значение переменной y, далее вычисляется выражение x *5, и результат присваивается переменной z.

Сокращенная форма:

имя переменной <операция> = выражениe;

где операция – одна из арифметических операций (+, -, *, /, %), например:       x *= 5;   «x = x*5;     

s += 7;   «s = s+7;     

y /= x+3;     «y = y/(x+3); 

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

В языке Си существуют операции уменьшения (--) и увеличения (++) значения переменной на 1. Операции могут быть префиксные (++i и --i) и постфиксные (i++ и i--). При использовании данной операции в выражении в случае префиксной операции сначала выполняется сама операция (изменяется значение i), и только потом вычисляется выражение. В случае постфиксной операции – операция применяется после вычисления выражения, например:           

b = 7;

n = 1;

1) c=b*++n; «n = n+1, c = b*n «c = 14

2) c=b*n++; «c = b*n, n = n+1 «c = 7

                

Пример программы для вычисления выражения     ,

(при x = 2,444; y = 0,00869; z=-130, должно быть получено: -0.49871):

#include <stdio.h>

#include <conio.h>

#include <math.h>

void main(void) {

    double rezult,dop,a,b,c;

        printf(“\n Введите x, y, z: “);

              scanf(“%lf %lf %lf”, &x, &y, &z);

dop = fabs(y-x);

         a = pow(x,y+1)+exp(y-1);

         b = 1+x*fabs(y-tan(z));

         c = 0.5*pow(dop,2)-pow(dop,3)/3;

         rezult = a/b*(1+dop)+c;

        printf("\n Ответ: rezult=%lf, Press any key...", rezult);

getch();                            // Задержка до нажатия клавиши

}

Варианты заданий

Составить программу для расчета значений z 1 и z 2 (результаты должны совпадать).

1. .

2. .

3.  .

4.  .

5.  .

6. .

7.  .

8. .

9. .

10. .

11.  .

12.  .

13.  .

14.  .

15.  .

 

 

Контрольные вопросы

1. Какие типы переменных применяются в языке Си?

2. Какие формы записи операции присваивания применяются в языке Си, приведите примеры?

3. Чем отличаются инфиксная и постфиксная формы операции присваивания, приведите примеры?

4. Перечислите основные отличия функций printf и scanf.

5. Перечислите основные форматы ввода/вывода данных в Си.


ЗАДАНИЕ 2. Разветвляющиеся вычислительные процессы

 

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

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

Оператор безусловного перехода

                  goto метка;

Управление передается оператору с данной меткой:       

метка: оператор;

В языке Си метка не декларируется.

Оператор условного перехода if применяется для выбора одной из ветвей вычислений.

Общая форма записи:

if (условие) оператор _1;

else оператор _2;

Например: if(x>y) max = x;

                                              else max = y;

Если оператор _1 или оператор _2 содержат два и более операторов, то они заключаются в фигурные скобки { }, т.е. применяется составной оператор, называемый - блок. Оператор if проверяет истинность или ложность условия. Если условие истинно (не равно 0), то выполняется оператор _1, иначе (ложно - равно 0), выполняется оператор _2.

Вторая часть оператора (else оператор _2;) может отсутствовать, такую форму называют сокращенной. Тогда в случае ложности условия управление передается на следующий за if оператор.

Если оператор _1 и оператор _2 в свою очередь являются операторами if, то такой оператор называют вложенным. При этом ключевое слово else  принадлежит ближайшему предшествующему if.

Общий вид вложенного оператора if:   

if (условие _1) оператор _1;

else if (условие _2) оператор _2;

else оператор _3;

В языке Си используют операции отношений:

  < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно). Пары символов разделять нельзя.

Общий вид операции отношения:

выражение _1 < знак_операции > выражение _2

Значения операндов перед сравнением преобразуются к одному типу.

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

! (отрицание или логическое НЕТ), && (конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ).

Например:               (0<x)&&(x<=100)

                       ((!x)&&(y>0)||((z==1)&&(k>0))

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

Тернарная условная операция? имеет форму:

условие? выражение _1: выражение _2;

результат которой выражение _1, если условие истинно, иначе – выражение _2. Например, найти наибольшее из двух чисел: max = a>b? a: b;

Оператор выбора switch

Общая форма оператора выбора:

switch (выражение) {

         case const_1: операторы;   break;

                                  …

case const_N: операторы; break;

default: операторы;

              }

где const_1…const_N - целые или символьные константы; default - выполняется, если результат выражения не совпал ни с одной константой; может отсутствовать; break - оператор завершения работы switch. После выполнения одной из ветвей case все остальные ветви будут опущены. Если оператор break не записан, то выполняются операторы следующей ветви case. Оператор switch проверяет, совпадает ли значение выражения с одним из значений, приведенных ниже констант. При совпадении выполняются операторы, стоящие после совпавшей константы.

Например:  

switсh(i) {

case 1: f = pow(x,2); break;

case 2: f = fabs(x);   break;

default: printf(“Ошибка!”); exit(1);

     }

f=f+5;

       

Пример: вычислить значение функции

   

вывести сообщение о том, по какой ветви происходило вычисление:

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

void main(void) {

double x, y, f;                  

puts("Введите значения x и y");

scanf("%lf %lf",&x,&y);        

if ((x>0)&&(y<0)) {

    f = (x + tan(3*y))/(5-2*x);

    puts("F=(x+tg3y)/(5-2x)");

}

else if ((x<0)&&(y>0)) {

    f = (pow(x,2./3) > cos(y*y))? pow(x,2./3): cos(y*y);                    puts("F=max(pow(x,2/3),cos(y*y))");

}

else if ((x>0)&&(y>0)) {

    f = (0.5*x-2*pow(sin(y),2) < exp(y))? 0.5*x-2*pow(sin(y),2): exp(y);           puts("F=min(0.5x-2*pow(sin(y),2),exp(y))");

}

else {

puts("Функция F не определена!");

    exit(1);       // Принудительное завершение программы

}

printf ("ОТВЕТ: F = %lf ",f);          

}

        

Варианты заданий

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

,  где  

             где  

          где

                 где

        где

              где

         где

       где

                  где

               где

                     где

,        где

, где

,            где

,               где

 

Контрольные вопросы

1. Какие операции используются для составления условных выражений?

2. Какие формы записи операторов if применяются в языке Си?

3. Чем отличается оператор if от оператора switch?

4. Как работает тернарная условная операция?

5. Можно ли вкладывать операторы if друг в друга?


ЗАДАНИЕ 3. Циклические вычислительные процессы

 

Цель работы: изучить приемы составления циклических алгоритмов, правила использования операторов for, while, do – while.

 



Поделиться:


Последнее изменение этой страницы: 2020-11-28; просмотров: 90; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.202.30 (0.101 с.)