Читайте также:
|
|
Общий вид функции printf():
printf(<строка формата>, <объект>, <объект>…);
Строка формата ограничивается двойными кавычками. Перед выводом printf заменяет все дополнительно перечисленные объекты в строке в соответствии со спецификациями формата, указанными в сомой строке. Спецификации формата начинаются с символа процента (%) и сопровождаются одной буквой, обозначающей тип данных и способ их преобразования. Сами объекты могут быть переменными, константами, выражениями, вызовами функций. В таблице 1 приведены спецификации формата, используемые в языке Си.
#define PI 3.14159
#include <math.h>
main ()
{ float S, r;
printf (“введите радиус круга \ n”);
scanf (“%f”, &r);
S=PI*r*r;
printf (“площадь круга = %f \n”, S); }
Таблица 1 – Спецификации формата
Спецификации формата | Тип выводимой информации |
%d | Десятичное целое число |
%с | Один символ |
%s | Строка символов |
%е | Число с плавающей точкой, экспоненциальная запись |
%f | Число с плавающей точкой, десятичная запись |
%g | Используется вместо записей % f или % е, если он короче |
%u | Десятичное целое число без знака |
%о | Восьмеричное целое число без знака |
%х | Шестнадцатеричное целое число без знака |
Применение функции scanf ()
Общий вид функции scanf ():
scanf (<cтрока формата>, <адрес>, <адрес>, …);
Функция scanf() использует практически тот же набор символов спецификаций преобразования, что и функция printf (). Основные отличия в случае функции scanf () следующие:
1. Отсутствует спецификация %g.
2. Спецификации %f и %e эквивалентны.
3. Для чтения целых чисел типа short применяется спецификация % h.
Заметим:
1. При записи адреса используется операция адреса (&) для передачи адресов переменных.
2. При вводе значения строковой переменной символ & не пишется.
Пример программы:
main ()
{ char name[30];
printf (“Введите имя автора”);
scanf (“%s”, name);
printf (“Автором программы является % s\n”, name); }
т.к. name является массивом символов, значения name это адрес самого массива. Поэтому перед именем name не используется адресный оператор &.
Основные операции в языке Си.
Самой общей операцией является присваивание. В языке Си оператор присваивания записывается V=A;
где V – переменная, A – выражение.
Можно использовать последовательные присваивания, например sum=a=b;
Присваивание производится справа налево, то есть b будет присвоено a, которая в свою очередь будет присвоена sum, так что все три переменные получают одно и тоже значения (а именно; начальное значение b).
Язык Си поддерживает обычный набор арифметических операций:
* – умножение, / – деление, % – операция деления по модулю, + – сложение, – – вычитание.
Операция деление по модулю используется в целочисленной арифметике. Ее результатом является остаток от деления целых чисел (20 % 3 = 2).
Операции + и - имеют приоритет ниже, чем приоритет операций *, / и %, а у них он, в свою очередь, ниже приоритета унарного минуса.
Рассмотрим пример:
main()
{ int m1, m2;
m1=m2= -(15+3)*5+(11+9*(8+3)) – 266%16; /* m1=m2=10;
(операция выполняется справа налево) */
printf (“m1 = %d\n”, m1);
printf (“%d\n”, m2/3); }
Операции увеличения и уменьшения: ++ и - -.
Эти операции позволяют добавить 1 или вычесть 1 из любого операнда. Различают две формы указанных операций, постфиксная и префиксная. Они различаются между собой только тем, в какой момент осуществляется увеличение или уменьшение операнда. Операции увеличения и уменьшения могут быть выполнены в середине выражения, причем эти операции могут быть выполнены до и после вычисления выражения. Рассмотрим примеры.
Пример 1: Пусть l=10;
тогда
x=l++; присвоит переменной x значение 10,
x=++l; присвоит переменной x значение 11.
В двух случаях значение l станет равным 11.
Пример 2:
sum=a+b++;
sum=a+ ++b;
b++ – постфиксная форма: переменная b изменяется после того, как ее значение используется.
++b – префиксная форма: переменная b изменяется перед тем, как ее значение используется.
В первом случае: “сложить a и b, присвоить результат sum и увеличить b на единицу.
Во втором случае: “увеличить b на единицу, сложить a и b, и присвоить результат sum”.
Пример 3:
main()
{ int a, b, s=0;
a=b=10; s=a+b++;
printf(“%d %d \n”, s, b);
s=a+ ++b;
printf (“%d %d \n”, s, b); }
Операции вычисления и уменьшения имеют очень высокий уровень старшинства; только круглые скобки обладают более высоким приоритетом.
Преобразование типов
Если в выражении используются операнды различных типов, то они преобразуются к некоторому общему типу. Компилятор использует набор правил для автоматического преобразования типов. Приведем основные правила при преобразовании типов:
1. Если операция выполняется над данными двух различных типов, обе величины приводятся к «высшему» из двух типов. Этот процесс называется «повышением» типа.
2. Последовательность имен типов, упорядоченных от «высшего» типа к «низшему» выглядит так: double, float, long, int, short и char. Примечание ключевого слова unsigned повышает ранг соответствующего типа данных.
3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к «повышению» или «понижению» типа (во втором случае величина приводится к типу данных, имеющему более низкий приоритет).
«Повышение» типа обычно происходит гладко, а «понижение» необходимо выполнять с учетом представления данных в памяти.
Пример:
main ()
{ char ch; int i; float fl;
fl=i=ch=’A’;
printf (“ch=%c, i=%d, fl=%6.2f\n”,ch, i, fl);
ch=ch + f; (65+1=66 =>код символа ''В''=> в ch)
i=fl+2*ch; (66*2+65.00=>132.00+65.00=>197.00=>197)
fl=2.0*ch+c; printf (''сh=%с, i=%d, fl=%62f)n'',ch, i, fl); }
Результат:
ch=A, i=65, fl=65.00
ch=B, i=197, fl=329.10
Еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа float преобразуются в данные типа double. Это существенно уменьшает ошибку округления. Конечный результат, преобразуется обратно в число типа float, если это диктуется соответствующим оператором описания.
Дата добавления: 2015-11-04; просмотров: 109 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Типы данных в языке Си. | | | Операторы языка Си |