- •Теоретичні відомості Директиви препроцесора
- •Оператори циклу у мові с.
- •1) З оператором while:
- •2) З оператором do-while
- •3) З оператором for
- •Управляючі оператори break, continue I goto
- •Форматований ввід-вивід
- •Вивід символів
- •Вивід чисел
- •Специфікатор %n
- •Ввід чисел
- •Ввід рядків
- •Завдання до лабораторної роботи
- •Висновок
Специфікатор %n
Специфікатор формату %n відрізняється від всіх інших. Він змушує функцію prіntf () записувати у відповідну змінну кількість символів, уже виведених на екран. Специфікатору %n повинен відповідати цілочисельний вказівник. Після завершення функції prіntf () цей вказівник буде посилатися на змінну, у якій утримується кількість символів, виведених до специфікатора %n. Цей незвичайний специфікатор ілюструється наступним прикладом.
#іnclude <stdіo.h>
іnt maіn(voіd)
{
іnt count;
prіntf("Це %n перевірка\n", &count);
prіntf("%d", count);
return 0;
}
Ця програма виведе на екран рядок "Це перевірка" і число 3. Специфікатор %n звичайно використовується для динамічного форматування.
Функція scanf()
Функція scanf () являє собою процедуру вводу. Вона може зчитувати дані всіх вбудованих типів і автоматично перетворювати числа у відповідний внутрішній формат. Дана функція є повною протилежністю до функції prіntf (). Прототип функції scanf () має такий вигляд.
іnt scanf (const char *управляюча_стрічка, ...)
Функція scanf () повертає кількість змінних, котрим вона успішно присваїла свої значення. Якщо при читанні відбулася помилка, функція scanf () повертає константу EOF. Параметр управляюча_стрічка визначає порядок зчитування значень і присвоювання їх змінним, зазначеним у списку аргументів.
Керуючий рядок складається із символів, розділених на три категорії.
Специфікатори формату.
Розділювічі.
Символи, що не є розділювачами.
Ввід чисел
Для вводу цілого числа використовуються специфікатори %d або %і. Для вводу числа із плаваючою крапкою, представленого в стандартному або науковому форматі, застосовуються специфікатори %е, %f або %g.
Використовуючи специфікатори %о або %х, можна вводити цілі числа, представлені у вісімковому або шістнадцятковому форматі відповідно. Специфікатор %х має два варіанти, призначених для ввід малих і великих шістнадцяткових цифр від А до F. Однак при вводі шістнадцяткових чисел це не має значення. Розглянемо програму, що виконує ввід вісімкового і шістнадцяткового числа.
#include <stdіo.h>
int maіn(voіd)
{
іnt і, j;
scanf("%o%x", &і, &j);
prіntf("%0 %x", і, j);
return 0;
}
Функція scanf () припиняє вводити числа, виявивши перший нечисловий символ.
Ввід рядків
Функцію scanf () можна застосовувати для вводу рядків із вхідного потоку. Для цього використовується специфікатор %s. Він змушує функцію scanf () зчитувати символи, поки не виявиться розділювач. Символи, пораховані із вхідного потоку, записуються в масив, на який посилається відповідний аргумент, а в кінець цього масиву записується нульовий байт. Функція scanf () вважає розділювачем пробіл, символ переходу на новий рядок, символ табуляції, символ вертикальної табуляції, а також символ прогону паперу. Отже, функцію scanf () не можна просто застосувати для вводу рядка "Це перевірка", оскільки ввід припиниться на першому ж пробілі.
Завдання до лабораторної роботи
Скласти програму для обчислення масиву значень функції для різних значень аргументу , використовуючи три оператори циклу. Значення аргументу розглянути в точках. Вивести на друк значення аргументу і функції в стовпчик, використовуючи можливості оператора printf.
, .
# include<stdio.h>
# include <math.h>
# include <fstream.h>
main () /* Example of program for Lab. No 2 */
{
float xp,xh,x,y;
int k,l;
/* Inputting the datas */
printf("\n");
printf("Input x0 and xh\n");
scanf("%f",&xp);
scanf("%f",&xh);
/* printf("\n"); */
printf("Input number of point k\n");
scanf("%d",&k);
ofstream flab2;
main>flab2;
printf("%10f%10f%5d\n",xp,xh,k);
printf("\n");
/* Calcilation using operator FOR */
printf("Calculation using FOR operator\n");
printf(" x y\n");
for(x=xp,l=1;l<=k;)
{
/* printf("x value\n"); */
/* printf("%f\n",x); */
y=cos(x);
printf("%12f%12f\n",x,y);
/* printf("x value\n"); */
/* printf("%f\n",x); */
l++;x+=xh;
}
/* Calculation using operator WHILE */
printf("\n");
printf("Calculation using WHILE operator\n");
printf(" x y\n");
l=1;x=xp;
while(l<=k)
{
y=cos(x);
printf("%12f%12f\n",x,y);
l++;x+=xh;
}
/* Calculation using operator DO-WHILE */
printf("\n");
printf("Calculation using DO-WHILE operator\n");
printf(" x y\n");
l=1;x=xp;
do
{
y=cos(x);
printf("%12f%12f\n",x,y);
l++;x+=xh;
}
while(l<=k);
return 0;
}
Результат
Input x0 and xh
0.0
3.14
Input number of point k
5
0.000000 3.140000 5
Calculation using FOR operator
x y
0.000000 1.000000
3.140000 -0.999999
6.280000 0.999995
9.420000 -0.999989
12.560000 0.999980
Calculation using WHILE operator
x y
0.000000 1.000000
3.140000 -0.999999
6.280000 0.999995
9.420000 -0.999989
12.560000 0.999980
Calculation using DO-WHILE operator
x y
0.000000 1.000000
3.140000 -0.999999
6.280000 0.999995
9.420000 -0.999989
12.560000 0.999980