- •Вопрос1)Общая структура программы на языке Си.
- •1.Внутреннее представление данных в оперативной памяти;
- •2.Совокупность значений (диапазон), которые могут принимать данные этого типа;
- •3.Набор операций, которые допустимы над такими данными.
- •Вопрос2)Константы в программах
- •Вопрос3)Операции, выражения
- •Вопрос 4
- •Вопрос 5
- •Вопрос 6 Общая структура программы на языке Си.
- •Вопрос 7
- •Вопрос 8 Арифметические операции
- •Вопрос 9
- •Вопрос 10
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •Вопрос 11
- •Вопрос 12
- •Вопрос 13
- •Вопрос 14
- •Вопрос 15
- •Вопрос 16
- •Вопрос 17
- •Вопрос 19 Операция sizeof
- •Вопрос 20
- •Вопрос 21
- •Вопрос 22 Связь указателей и массивов.
- •Вопрос 23
- •Вопрос 24
- •Вопрос 25 Массивы структур
- •Вопрос 26
- •Вопрос 27
- •Вопрос 28
- •Вопрос 29
- •Вопрос 30
- •Вопрос 31
- •Закрытие файла
- •Вопрос 32
- •Вопрос 33 Вложенные структуры
- •Вопрос 34 Массивы структур
- •Вопрос 35 Размещение структурных переменных в памяти
- •Вопрос 36
- •Вопрос 37
- •Вопрос 38
- •Вопрос 39
Вопрос 5
Консольные функции вывода данных на экран
Наряду с потоковым вводом-выводом, в консольных приложениях применяются и функции ввода-вывода языка Си. Их декларации приведены в заголовочных файлах stdio.h и conio.h .
Для вывода информации на экран монитора (дисплей) в языке Си служат функции printf() и puts().
Формат функции форматного вывода на экран:
printf( управляющая строка , список объектов вывода);
В управляющей строке, заключенной в кавычки, записывают: текст, выводимый на экран ; спецификаторы форматов, указывающие компилятору способ вывода объектов (каждый спецификатор формата начинается с символа '%' ).
В списке объектов вывода указываются выводимые на экран переменные, константы или выражения, разделенные запятыми. Список объектов вывода может отсутствовать.
Каждый из спецификаторов формата соответствует своему объекту из списка вывода, в порядке следования. Поэтому количество и порядок следования спецификаторов форматов должны совпадать с количеством и порядком следования выводимых объектов. Функция printf выполняет вывод данных в соответствии с указанными форматами. Весь остальной (кроме спецификаторов форматов) текст управляющей строки выводится на экран без изменений.
Имеется большое количество различных спецификаторов формата. Основные из них:
%d (%i) – десятичное целое число;
%f – вещественное число, запись с фиксированной точкой;
%е – вещественное число, экспоненциальная запись;
%g – вещественное число, запись с фиксированной точкой либо экспоненциальная запись, в зависимости от значения величины;
%o – восьмеричное число без знака;
%x – шестнадцатеричное целое число без знака (малые буквы a-f);
%X – шестнадцатеричное целое число без знака (большие буквы A-F);
%c – один символ;
%s – строка символов (массив char).
Для "длинных" типов чисел добавляется символ l : %ld – long (длинное целое), %lf – double (вещественное число с удвоенной точностью). Для еще более длинных типов чисел вместо l добавляется L : %Ld - long long, %Lg - long double в соответствии с форматом %g.
Если нужно напечатать сам символ %, то его нужно указать 2 раза:
printf ("Только %d%% предприятий не работало. \n",5);
Получим: Только 5% предприятий не работало.
Пример:
int number = 5; float but = 255; int cost = 11000;
printf(" %d студентов съели %f бутербродов. \n", number, but);
printf(" Значение числа pi равно %f. \n", M_PI);
printf(" Стоимость этой вещи %d %s. \n", cost, "Руб.");….
В спецификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d – для целых, %4.2f – для вещественных (означает поле общей шириной 4 символа, две цифры после запятой). Недостающие позиции будут слева заполнены пробелами (если нужно заполнить их нулями, перед шириной поля надо поставить символ '0' , например: %05d ). Если, наоборот, указанных позиций не хватает для вывода целой части числа, то происходит автоматическое расширение поля до нужной ширины.
Если после «%» указан знак «минус», то выводимое значение будет выравниваться по левой (а не по правой) позиции поля вывода заданной ширины, например: % – 10d.
Использование функции printf для преобразования данных:
1) printf("%d", 336.65); получим: 336;
2) printf("%o", 336); получим: 520, т.е. 5*8**2+2*8+0*1 = 336;
3) printf("%x", 335); получим: 14f (шестнадцатеричное).
Можно использовать функцию printf для нахождения кода ASCII некоторого символа:
printf (" %c – %d\n", 'a', 'a');
получим десятичный код ASCII символа а: a – 65 .
Функция puts(строка); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).
Аналогом такой функции будет: printf(“строка\n”);
Консольные функции ввода информации
Функция scanf предназначена для форматированного ввода исходной информации с клавиатуры:
scanf (управляющая строка , список адресов объектов ввода);
Список адресов объектов ввода представляет собой имена переменных, разделенные запятыми, перед каждой из которых указывается символ &, обозначающий здесь операцию «взять адрес».
В управляющей строке (заключенной в кавычки) указывается список спецификаторов форматов. Каждый спецификатор формата начинается с символа '%', за которым следует тип спецификатора, указывающий компилятору способ ввода объекта. Функция scanf() использует практически тот же набор модификаторов форматов, что и printf(), отличия от функции вывода следующие: форматы %f, %e, %g – эквивалентны. Для ввода коротких целых чисел (short) введен модификатор формата %h.
Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter.
Поэтому функцией scanf() по формату %s строка вводится только до первого пробела. Для ввода произвольной строки текста, содержащей пробелы, используется функция:
gets (ID символьного массива);
В управляющей строке функции scanf(), как и в printf(), между спецификаторами формата можно помещать текст. Но предназначение его иное: если введенные данные окажутся разделены теми же символами, что и в управляющей строке, эти введенные символы будут пропущены. Это можно использовать для ввода значений, разделенных не пробелами, например:
scanf("%d:%d:%d", &hour, &min, &sec);
позволяет вводить с клавиатуры время в обычном формате.
Функцию scanf() также можно записывать в виде:
целая переменная = scanf (управляющая строка , список адресов объектов ввода);
При этом целая переменная получит значение, равное количеству успешно введенных объектов ввода. Например, после выполнения оператора
n=scanf("%lf%lf%lf", &x,&y,&z);
значение n будет от 0 (ничего не прочтено) до 3 (при успешном вводе).
Отдельные символы вводятся при помощи функции getch(). Причем простой ее вызов - getch(); - организует паузу, при которой система программирования приостановит выполнение программы и будет ждать нажатия любой клавиши. Так поступают в том случае, когда нужно просмотреть какие то результаты работы, при выводе их на экран монитора.
Если же использовать ее в правой части операции присваивания, например:
char c;. . .
c = getch();
то символьная переменная с получит значение символа (кода) нажатой клавиши.
С началом работы консольной программы автоматически открываются стандартные потоки для ввода данных – stdin, который по умолчанию связан с клавиатурой, и вывод – stdout, связанный с экраном монитора.
Внимание. Ввод данных функциями gets(), getch() выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед ее использованием необходимо очистить поток (буфер) ввода с помощью функции
fflush(stdin);
Отметим, что не гарантируется одновременная работа функций ввода-вывода и потокового ввода-вывода; однако на практике они конфликтуют
Потоковый ввод-вывод
Поток – это абстрактное понятие, которое относится к любому переносу данных от источника к приемнику. Потоки С++ обеспечивают надежную работу как со стандартными (stdin, stdout), так и с определенными пользователем типами данных. Поток определяется как последовательность байтов не зависящая от конкретного устройства.
Для ввода-вывода в консольных приложениях в языке С++ используются два объекта класса iostream: cin (класс istream), cout (класс ostream) и две операции: >> и <<. Для их работы необходимо подключить заголовочный файл iostream.h.
Формат записи операций извлечения из потока >> (ввод с клавиатуры) и помещения в поток << (вывод на экран) следующий:
cout << выражение ;
cin >> ID(имя) переменной ;
Стандартный поток вывода cout по умолчанию связан со стандартным устройством вывода stdout (дисплей монитора), а ввода cin – со стандартным устройством ввода stdin, т.е. клавиатурой. Приведем пример:
#include<iostream.h>
void main (void)
{
int i, j, k;
cout << “ Hello! ” << endl; // «end line» – переход на новую строку
cout << “ Input i, j ”;
cin >> i >> j ;
k = i + j ;
cout << “ Sum i , j = “ << k << endl;
}