|
Фраза "Структурная переменная описывается с помощью переменной структурного типа" на мой Взгляд является тафтология. Из нее сложно понять суть утверждения. Хотелось бы полке понятного описания. |
Операторы
Применение функции scanf( )
Поскольку мы будем пользоваться функцией scanf( ) эпизодически, мы рассмотрим здесь только основные особенности ее применения. Для функции scanf( ) указывается управляющая строка и следующий за ней список аргументов. Основное различие функций printf( ) и scanf( ) заключается в особенностях данного списка. Функция printf( ) использует имена переменных, константы и выражения, а функция scanf( ) - только указатели на переменные. Мы ничего не должны знать о таких указателях. Необходимо помнить только два правила:
- Если нам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.
- Если мы хотим ввести значение строковой переменной, использовать символ & не нужно.
Пример:
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( ) следующие:
- Отсутствует спецификация %g.
- Спецификации %f и %e эквивалентны. Обе спецификации допускают наличие или отсутствие знака строки цифр с десятичной точкой или без нее и поля показателя степени.
- Для чтения целых чисел типа 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 до закрывающей фигурной скобки.