100 1904 +100 a*(c-d) x=0 x=y++ x>3
В отличие от большинства других языков, в языке Си для задания определенного порядка вычисления *, +, |, ^ ) даже при наличии скобок. Для задания желаемого порядка выполнения
Необходимо с осторожностью использовать
j=3; i=(k=j+1)+(j=5);
значение переменной i будет равно 9 или 11 в зависимости от того, какое подвыражение второй операции будет вычислено первым. Таким образом, с использованием разных компиляторов можно получить различные результаты.
int, char и enum, операции sizeof, унарных ~, бинарных + * / % | ^ << >> = = != < > <= >= и ?:.
switch, в инициализаторах границ массивов и в #if.
Логические операции ||, являются условными логическими операциями, т. к. второй
Важным свойством языка Си является то, что каждое
| Выражение | Значение |
|---|---|
| -14+16 | 2 |
| a=3+8 | 11 |
| 5>3 | 1 |
| 14<3 | 0 |
| 6+(c=3+8) | 17 |
Любое
выражение;
является
line = 5
- это всего лишь
line = 5;
является
5+5
не является законченной инструкцией, а служит указанием компьютеру сложить 5 и 5, но не говорит, что делать с результатом.
dog=5+5;
служит указанием компилятору, а затем компьютеру, поместить результат 10 в ячейку памяти, помеченную именем dog. После занесения в память числа 10 компьютер может приступить к выполнению следующих действий.
printf( ) и scanf( ).
Пусть нам нужно каким-то образом заставить компьютер выполнять повторяющиеся вычисления. Язык Си предлагает несколько способов реализации повторяющихся вычислений. Сейчас мы коротко обсудим один из них. Данный способ называется "циклом с предусловием while ". Цикл while работает следующим образом. Когда программа в процессе выполнения впервые достигает while, осуществляется проверка истинности условия, заключенного в круглые скобки. Затем идет тело цикла, заключенное в фигурные скобки. В теле цикла перевычисляется переменная, которая анализируется в условии, там где встречается закрывающая фигурная скобка (конец тела цикла while ), управление передается на while. Если условие не выполняется, то управление передается за тело цикла, т.е. за закрывающую фигурную скобку.
Все
Пример 1:
/* От города А до города В расстояние равно 20 км.
Велосипедист выехал из А и в первый день проехал
10 км. В последующие дни он проезжал со скоростью,
в 1,5 раз большей, чем в предыдущий день. За сколько
дней велосипедист доберется до города В.*/
#include<stdio.h>
#include<conio.h>
float km=10;
int main()
{
clrscr(); /* чистка экрана, функция берется
из головного файла conio.h*/
int d;
d=1; /* первый день, за который велосипедист
проехал 10 км.*/
while(km<20) /* пока выполнено условие цикла,
подсчитываются километры и дни*/
{
km+=(km*0.5);
d++;
}
printf("велосипедист был в пути %d дней",d);
getch();
}
Функции printf( ) и scanf( ) дают нам возможность взаимодействовать с программой. Мы называем их функциями ввода-вывода. Это не единственные функции, которыми мы можем воспользоваться для ввода и вывода данных с помощью программ на языке Си, но они наиболее универсальны. Эти функции входят в описание языка Си и они даны в библиотеке stdio.h. Обычно функции printf( ) и scanf( ) работают во многом одинаково - каждая использует управляющую строку и список аргументов. Сначала мы рассмотрим работу функции printf( ), затем scanf( ).
| Формат | Тип выводимой информации |
|---|---|
| %d | десятичное целое число |
| %c | один символ |
| %s | строка символов |
| %e | экспоненциальная запись |
| %f | число с плавающей точкой, десятичная запись |
| %g | используется вместо записи %f или %e |
| %u | десятичное целое число без знака |
| %o | восьмеричное целое число без знака |
| %x | шестнадцатеричное целое число без знака |
Инструкции, передаваемые функции printf( ), когда мы хотим напечатать некоторую переменную, зависят от того, какого типа эта переменная. Например, при выводе на печать целого числа применяется формат %d, а при выводе символа - %c. Форматы перечислены в таблице.
Посмотрим теперь, как эти формы применяются:
/* печать */
#include <stdio.h>
#define PI 3.14159
int main( )
{
int number = 2003;
printf("Интернет-университет информационных технологий был открыт в %d году \n", number);
printf("Значение числа pi равно %f.\n", PI);
}
Формат, указываемый при обращении к функции printf( ), выглядит следующим образом:
printf(Управляющая строка, аргумент1, аргумент2,_);
аргумент 1, аргумент 2 и т.д. - это печатаемые параметры, которые могут быть переменными, константами или даже
Управляющая строка - строка символов, показывающая, как должны быть напечатаны параметры. Например, в
printf("%d студентов получили оценку %f.\n",
number, z);
управляющей строкой служит фраза в кавычках, а number и z - аргументы или в данном случае значения двух переменных.
Мы видим, что в управляющей строке содержится информация двух различных типов:
Каждому аргументу из списка, следующего за управляющей строкой, должна соответствовать одна
printf("Эта книга не очень дорогая!\n");
printf("%c%d\n",'$',cost);
Если нужно напечатать сам символ %, то компилятор примет его за ошибочную % подряд.
Например:
int i=2+3;
printf("Только %d%% населения способно учиться самостоятельно! \n",i);
Результат работы программы будет выглядеть следующим образом:
Только 5% населения способно учиться самостоятельно!
Мы можем расширить основное определение % и символом, определяющим тип преобразования. При использовании одновременно нескольких модификаторов они должны быть указаны в том порядке, в котором перечислены в таблице.
| Модификаторы | Значение |
|---|---|
| - | Аргумент будет печататься с левой позиции поля заданной ширины. Обычно печать аргумента оканчивается в самой правой позиции поля. Пример: %-10 |
| строка цифр | Задает минимальную ширину поля. Большее поле будет использоваться, если печатаемое число или строка не помещается в исходном поле Пример: %4d |
| строка цифр | Определяет точность: для типов данных с плавающей точкой число печатаемых цифр справа от десятичной точки; для символьных строк - максимальное число печатаемых символов Пример:
|
l |
Соответствующий элемент данных имеет тип long, а не int Пример: %ld |
Примеры:
int main( )
{
printf("/%d/\n",135);
printf("/%2d/\n",135);
printf("/%10d/\n",135);
printf("/%-10d/\n",135);
}
Первая %d не содержит модификаторов. Это так называемый выбор по умолчанию, т. е. результат действия компилятора в случае, если вы не дали ему никаких дополнительных инструкций. Вторая %2d. Она указывает, что ширина поля должна равняться 2, но, поскольку число состоит из трех цифр, поле автоматически расширяется до необходимого размера. Следующая %10d показывает, что ширина поля равна 10. Последняя %-10d также указывает ширину поля, равную 10, а знак - приводит к сдвигу всего числа к левому краю.
Поскольку мы будем пользоваться функцией 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 до закрывающей фигурной скобки.
{
определения и описания
операторы
}
Определения переменных внутри
| ! | Применяйте отступы от поля в строках, чтобы сделать структуру программы наглядной! |
Подведем итог.
| int name; | |
| current=12; | |
| printf("Текст\n"); | |
| Управляющий |
while (n < 111) n=n+5; |
| Пустой |
; |
Примеры:
/* Задача № 1.
Вычислить величину дохода по вкладу. Процентная
ставка (в процентах годовых), время хранения
(в днях) и сумма задаются во время работы программы.*/
#include <stdio.h>
float p,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);
}
100 1904 +100 a*(c-d) x=0 x=y++ x>3
В отличие от большинства других языков, в языке Си для задания определенного порядка вычисления *, +, |, ^ ) даже при наличии скобок. Для задания желаемого порядка выполнения
Необходимо с осторожностью использовать
j=3; i=(k=j+1)+(j=5);
значение переменной i будет равно 9 или 11 в зависимости от того, какое подвыражение второй операции будет вычислено первым. Таким образом, с использованием разных компиляторов можно получить различные результаты.
int, char и enum, операции sizeof, унарных ~, бинарных + * / % | ^ << >> = = != < > <= >= и ?:.
switch, в инициализаторах границ массивов и в #if.
Логические операции ||, являются условными логическими операциями, т. к. второй
Важным свойством языка Си является то, что каждое
| Выражение | Значение |
|---|---|
| -14+16 | 2 |
| a=3+8 | 11 |
| 5>3 | 1 |
| 14<3 | 0 |
| 6+(c=3+8) | 17 |
Любое
выражение;
является
line = 5
- это всего лишь
line = 5;
является
5+5
не является законченной инструкцией, а служит указанием компьютеру сложить 5 и 5, но не говорит, что делать с результатом.
dog=5+5;
служит указанием компилятору, а затем компьютеру, поместить результат 10 в ячейку памяти, помеченную именем dog. После занесения в память числа 10 компьютер может приступить к выполнению следующих действий.
printf( ) и scanf( ).
Пусть нам нужно каким-то образом заставить компьютер выполнять повторяющиеся вычисления. Язык Си предлагает несколько способов реализации повторяющихся вычислений. Сейчас мы коротко обсудим один из них. Данный способ называется "циклом с предусловием while ". Цикл while работает следующим образом. Когда программа в процессе выполнения впервые достигает while, осуществляется проверка истинности условия, заключенного в круглые скобки. Затем идет тело цикла, заключенное в фигурные скобки. В теле цикла перевычисляется переменная, которая анализируется в условии, там где встречается закрывающая фигурная скобка (конец тела цикла while ), управление передается на while. Если условие не выполняется, то управление передается за тело цикла, т.е. за закрывающую фигурную скобку.
Все
Пример 1:
/* От города А до города В расстояние равно 20 км.
Велосипедист выехал из А и в первый день проехал
10 км. В последующие дни он проезжал со скоростью,
в 1,5 раз большей, чем в предыдущий день. За сколько
дней велосипедист доберется до города В.*/
#include<stdio.h>
#include<conio.h>
float km=10;
int main()
{
clrscr(); /* чистка экрана, функция берется
из головного файла conio.h*/
int d;
d=1; /* первый день, за который велосипедист
проехал 10 км.*/
while(km<20) /* пока выполнено условие цикла,
подсчитываются километры и дни*/
{
km+=(km*0.5);
d++;
}
printf("велосипедист был в пути %d дней",d);
getch();
}
Функции printf( ) и scanf( ) дают нам возможность взаимодействовать с программой. Мы называем их функциями ввода-вывода. Это не единственные функции, которыми мы можем воспользоваться для ввода и вывода данных с помощью программ на языке Си, но они наиболее универсальны. Эти функции входят в описание языка Си и они даны в библиотеке stdio.h. Обычно функции printf( ) и scanf( ) работают во многом одинаково - каждая использует управляющую строку и список аргументов. Сначала мы рассмотрим работу функции printf( ), затем scanf( ).
| Формат | Тип выводимой информации |
|---|---|
| %d | десятичное целое число |
| %c | один символ |
| %s | строка символов |
| %e | экспоненциальная запись |
| %f | число с плавающей точкой, десятичная запись |
| %g | используется вместо записи %f или %e |
| %u | десятичное целое число без знака |
| %o | восьмеричное целое число без знака |
| %x | шестнадцатеричное целое число без знака |
Инструкции, передаваемые функции printf( ), когда мы хотим напечатать некоторую переменную, зависят от того, какого типа эта переменная. Например, при выводе на печать целого числа применяется формат %d, а при выводе символа - %c. Форматы перечислены в таблице.
Посмотрим теперь, как эти формы применяются:
/* печать */
#include <stdio.h>
#define PI 3.14159
int main( )
{
int number = 2003;
printf("Интернет-университет информационных технологий был открыт в %d году \n", number);
printf("Значение числа pi равно %f.\n", PI);
}
Формат, указываемый при обращении к функции printf( ), выглядит следующим образом:
printf(Управляющая строка, аргумент1, аргумент2,_);
аргумент 1, аргумент 2 и т.д. - это печатаемые параметры, которые могут быть переменными, константами или даже
Управляющая строка - строка символов, показывающая, как должны быть напечатаны параметры. Например, в
printf("%d студентов получили оценку %f.\n",
number, z);
управляющей строкой служит фраза в кавычках, а number и z - аргументы или в данном случае значения двух переменных.
Мы видим, что в управляющей строке содержится информация двух различных типов:
Каждому аргументу из списка, следующего за управляющей строкой, должна соответствовать одна
printf("Эта книга не очень дорогая!\n");
printf("%c%d\n",'$',cost);
Если нужно напечатать сам символ %, то компилятор примет его за ошибочную % подряд.
Например:
int i=2+3;
printf("Только %d%% населения способно учиться самостоятельно! \n",i);
Результат работы программы будет выглядеть следующим образом:
Только 5% населения способно учиться самостоятельно!
Мы можем расширить основное определение % и символом, определяющим тип преобразования. При использовании одновременно нескольких модификаторов они должны быть указаны в том порядке, в котором перечислены в таблице.
| Модификаторы | Значение |
|---|---|
| - | Аргумент будет печататься с левой позиции поля заданной ширины. Обычно печать аргумента оканчивается в самой правой позиции поля. Пример: %-10 |
| строка цифр | Задает минимальную ширину поля. Большее поле будет использоваться, если печатаемое число или строка не помещается в исходном поле Пример: %4d |
| строка цифр | Определяет точность: для типов данных с плавающей точкой число печатаемых цифр справа от десятичной точки; для символьных строк - максимальное число печатаемых символов Пример:
|
l |
Соответствующий элемент данных имеет тип long, а не int Пример: %ld |
Примеры:
int main( )
{
printf("/%d/\n",135);
printf("/%2d/\n",135);
printf("/%10d/\n",135);
printf("/%-10d/\n",135);
}
Первая %d не содержит модификаторов. Это так называемый выбор по умолчанию, т. е. результат действия компилятора в случае, если вы не дали ему никаких дополнительных инструкций. Вторая %2d. Она указывает, что ширина поля должна равняться 2, но, поскольку число состоит из трех цифр, поле автоматически расширяется до необходимого размера. Следующая %10d показывает, что ширина поля равна 10. Последняя %-10d также указывает ширину поля, равную 10, а знак - приводит к сдвигу всего числа к левому краю.
Поскольку мы будем пользоваться функцией 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 до закрывающей фигурной скобки.
{
определения и описания
операторы
}
Определения переменных внутри
| ! | Применяйте отступы от поля в строках, чтобы сделать структуру программы наглядной! |
Подведем итог.
| int name; | |
| current=12; | |
| printf("Текст\n"); | |
| Управляющий |
while (n < 111) n=n+5; |
| Пустой |
; |
Примеры:
/* Задача № 1.
Вычислить величину дохода по вкладу. Процентная
ставка (в процентах годовых), время хранения
(в днях) и сумма задаются во время работы программы.*/
#include <stdio.h>
float p,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);
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.