Вівторок, 19.03.2024, 10:26
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Які схеми ви любите паяти?
Всього відповідей: 5
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Применение функции scanf( )

Поскольку мы будем пользоваться функцией scanf( ) эпизодически, мы рассмотрим здесь только основные особенности ее применения. Для функции scanf( ) указывается управляющая строка и следующий за ней список аргументов. Основное различие функций printf( ) и scanf( ) заключается в особенностях данного списка. Функция printf( ) использует имена переменных, константы и выражения, а функция scanf( ) - только указатели на переменные. Мы ничего не должны знать о таких указателях. Необходимо помнить только два правила:

 
  1. Если нам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.
  2. Если мы хотим ввести значение строковой переменной, использовать символ & не нужно.
 

Пример:

 
int main()
{
 int age;
 float assets;
 char fio[50];
 printf("Введите ваш возраст, оклад, фамилию. \n");
 scanf("%d %f", &age, &assets);
 scanf("%s", fio); /* & отсутствует при указании 
 массива символов */
 printf("%d $%.0f %s\n",age, assets, fio);
}
 

Функция scanf( ) использует некоторые специальные знаки, пробелы, символы табуляции и "новая строка", для разбиения входного потока символов на отдельные поля. Она согласует последовательность спецификаций преобразования с последовательностью полей, опуская упомянутые специальные знаки между ними. Исключением является спецификация %c,обеспечивающая чтение каждого следующего символа даже в том случае, если это пустой символ.

 

Функция scanf( ) использует тот же набор символов спецификации преобразования, что и функция printf( ). Основные отличия функции scanf( ) следующие:

 
  1. Отсутствует спецификация %g.
  2. Спецификации %f и %e эквивалентны. Обе спецификации допускают наличие или отсутствие знака строки цифр с десятичной точкой или без нее и поля показателя степени.
  3. Для чтения целых чисел типа short применяется спецификация %h.
 

Функция scanf( ) не является одной из наиболее часто используемых функций языка Си. Мы обсуждаем ее из-за универсальности.

 

Особенности работы с языком Си. Задание фиксированной ширины полей оказывается полезным при печати данных столбиком.

 

Например:

 
printf("%d %d %5d\n",val1,val2, val3);
 

Результат выглядит так:

 
11 222 3333
4 5 23
22222 3332 11111
 

Эти же данные можно представить в улучшенном виде, если задать достаточно большую фиксированную ширину поля:

 
printf("%9d %9d %9d\n", val1,val2, val3);
 

Результат будет выглядеть так:

 
11 222 3333
 4 5 23
22222 3332 11111
 

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

 

А теперь рассмотрим два примера работы с циклом while:

 
/*квадраты чисел*/
int main( ) /*получение квадратов*/
{
 int n=1;
 while(n < 11) {
 printf("%10d %10d\n", n, n*n);
 n=n+1;
 }
}
 

Эта программа выводит на печать первые 10 чисел и их квадраты.

 

Второй пример.

 

Согласно легенде, один правитель обещал наградить ученого, оказавшего ему большую услугу. Ученый, когда его спросили, что бы он хотел получить в награду, указал на шахматную доску и сказал: "Положите одно пшеничное зерно на первую клетку, два - на вторую, четыре на третью, восемь на следующую и т.д." Правитель был поражен, услышав такую скромную просьбу. Программа, приведенная ниже, показывает, в какое положение попал правитель!

 
/* пшеница*/
#include <stdio.h> 
#define NUMBER 64 /* число клеток на шахматной доске*/
#define CROP 7E14 /* весь урожай пшеницы, 
 выраженный в числе зерен*/
int main( )
{
 double current, total;
 int count =1;
 printf("КЛЕТКА ЧИСЛО СУММА ЗЕРЕН ДОЛЯ\n");
 total = current = 1.0;/*начинаем с одного зерна*/
 printf("%4d %15.2e %13.2e %12.2e\n",count, 
 current, total, total/CROP);
 while(count < NUMBER) {
 count = count + 1;
 current = 2.0*current;
 /*удвоенное число зерен на следующей клетке */
 total = total +current; /* коррекция суммы*/
 printf ("%4d %15.2e %13.2e %12.2e\n",count, 
 current, total, total/CROP);
 }
}
 

Это пример составного оператора. От открывающей фигурной скобки оператора while до закрывающей фигурной скобки.

Составной оператор используется в следующих случаях:

 
  1. Чтобы сгруппировать несколько логических связанных операторов в один оператор.
  2. В качестве тела функции.
  3. Для ограничения видимости определений частью программы, т.е. для локализации действия описаний.
 

Составной оператор имеет следующую форму:

 
{
 определения и описания
 операторы
}
 

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

 
! Применяйте отступы от поля в строках, чтобы сделать структуру программы наглядной!
 

Подведем итог.

 

Выражение состоит из операций и операндов.

 

Оператор служит командой компилятору. Операторы бывают простыми и составными. Простые операторы оканчиваются символом "точка с запятой". Примеры:

 
Оператор описания: int name;
Оператор присваивания: current=12;
Оператор вызова функции: printf("Текст\n");
Управляющий оператор: while (n < 111) n=n+5;
Пустой оператор: ;
 

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

 

Примеры:

 
/* Задача № 1. 
Вычислить величину дохода по вкладу. Процентная 
ставка (в процентах годовых), время хранения 
(в днях) и сумма задаются во время работы программы.*/
#include <stdio.h> 
float р,t,s,d; 
int main()
{
 puts("Введите сумму s");
 scanf("%f",&s);
 puts("Введите процентную ставку р"); 
/* вывод строки */
 scanf("%f",&p);
 puts("Введите время хранения в днях t");
 scanf("%f",&t);
 d=p*s*t/36500;
 printf("\n Величина дохода d=%f",d);
}

/* Задача № 2
По заданной стороне куба А определить его объем, площадь 
грани и площадь поверхности.*/
#include <stdio.h>
float a,v,s,si;
int main()
{
 puts("\n Введите сторону а");
 scanf("%f",&a);
 v=a*a*a; 
 s=a*a;
 si=s*6;
 printf("\n объем v=%f",v);
 printf("\n площадь грани s=%f",s);
 printf("\n площадь поверхности si=%f",si);
}

/* Задача № 3
Определить реальное расстояние между населенными 
пунктами. Указан масштаб карты и расстояние между 
двумя точками, изображающими населенные пункты.*/
#include <stdio.h> 
float m,s,si; 
int main() 
{
 puts("Введите масштаб карты m"); 
 scanf("%f",&m);
 puts("Введите расстояние на карте si"); 
 scanf("%f", &si); 
 s=si*m; 
 printf("\n реальное расстояние s=%f",s);
}

 

Форма входа
Пошук
Друзі сайту
Календар
«  Березень 2024  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728293031

Єдина Країна! Единая Страна!