Similar presentations:
Программирование на языке высокого уровня. Язык Си линейные алгоритмы
1.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГОУРОВНЯ. ЯЗЫК СИ
ЛИНЕЙНЫЕ АЛГОРИТМЫ
2.
ЭТАПЫ СОЗДАНИЯ ПРОГРАММЫ3.
СТРУКТУРА ПРОГРАММЫ#<Директивы препроцессора>
main()
{
< тело функции main>
}
function1( )
{
< тело функции function1>
}
function2( )
{
< тело функции function2>
}
. .
Любая программа на языке С состоит из одной и
более функций, одна из которых должна иметь
имя main , и именно ей передаётся управление
из операционной системы.
Функция – это коллективное имя для некоторой
группы описаний и операторов, заключённых в
фигурные скобки { } и являющихся телом
функции.
4.
ДИРЕКТИВЫ ПРЕПРОЦЕССОРАСамой важной для программиста директивой препроцессора, несомненно, является
директива #include
С её помощью препроцессор даёт распоряжение включить файл, указанный в качестве
аргумента в текущий файл. В большинстве случаев включается так называемый файлзаголовок, который содержит объявления, символьные константы, макросы и/или
определения типов. Включение файла-заголовка может происходить в любом месте текущего
файла, однако, существует соглашение, включение происходит в начале файла.
Использование файла-заголовка целесообразно для программы, состоящей из нескольких
исходных файлов
5.
ДИРЕКТИВЫ ПРЕПРОЦЕССОРАСтандартно подключаемые библиотеки:
<stdio.h> ввода/вывода;
Включение в текст программы внешнего файла
<stdlib.h> стандартных функций;
#include <имя файла>
<math.h> математическая;
Угловые скобки означают, что файл будет взят из
некоторого стандартного каталога. Текущий
каталог не просматривается.
<string.h> работа со строками символов;
<time.h>
определение дат и времени;
<graphics.h> графическая.
6.
ДИРЕКТИВЫ ПРЕПРОЦЕССОРА#include “имя файла”
Имя файла должно удовлетворять требованиям
к именам DOS (допустима обратная наклонная
черта). Поиск осуществляется сначала в том
каталоге, в котором находится текущий
исходный файл, а в случае неудачи – в
стандартно каталоге.
#include “ABC”
Препроцессор заменяет эту строку содержимым
файла ABC.
#include “диск:\каталог\имя файла”
Компилятор осуществляет поиск только по
указанному пути.
#include “C:\prog\tools\typen.h”
7.
ИДЕНТИФИКАТОРЫИдентификаторы используются для обозначения имён переменных, функций и типов данных.
Идентификаторы состоят из прописных и строчных букв латинского алфавита, цифр и символов
подчёркивания. Длина идентификатора не ограничена , но только первые 32 являются значимыми.
Прописные и строчные буквы рассматриваются как различные буквы (index, Index, INDEX- разные
идентификаторы). Нельзя использовать зарезервированные слова.
8.
КОНСТАНТЫКонстанта – это такое данное в программе, которое в процессе работы
программы не меняет своё значение.
Константы обычно обозначаются большими буквами (LOWER, UPPER, STEP).
Язык С поддерживает целые, длинные, с плавающей точкой, символьные и
строковые константы.
9.
КОНСТАНТЫЦелые константы
Десятичные цифры 0-9 (первая цифра ≠0)
12
111 256 1007
8-ричные
цифры 0-7 (начинаются с 0)
012 0111 0256 01007
16-ричные
или 0X)
цифры 0-9, буквы A-F (начинаются с 0x
0х12=18, 0Х12=18, 0х2f=47
Константы с плавающей точкой всегда
представляются числом с плавающей точкой
двойной точности, т.е. имеющих тип double.
Общий вид mmmm.nnnn E xx , любая часть может
быть опущена.
Пример: 345.=345
307е-5
3.1459
1.2Е5 = 120000
10.
КОНСТАНТЫСимвольные константы – состоят из одного
символа кода ASCII , заключённого в
апострофы.
Всегда тип int –целые 'а', '\', '7'
Строковые константы – состоит из
‘\r’- возврат каретки;
последовательности символов кодов ASCII,
заключённых в кавычки («как, например, эта»).
Она располагается обязательно на одной
строке. Для продолжения символьной
последовательности на новой строке
необходимо использовать символ новой строки
‘\n’.
‘\t’- горизонтальная табуляция;
Всегда тип char.
Специальные управляющие символы:
‘\n’ – новая строка;
‘\v’ вертикальная табуляция
11.
ТИПЫ ДАННЫХОПЕРАТОРЫ ОБЪЯВЛЕНИЯ ТИПА ДАННЫХ
Все данные в программе должны быть описаны в программе с
помощью операторов объявления типа данных, имеющих
следующий вид:
<имя_типа><список переменных>
Типы данных задаются ключевыми словами
12.
ТИПЫ ДАННЫХЦЕЛОЧИСЛЕННЫЙ ТИП ДАННЫХ
Знак
числа
Целое число
Знак числа: 0-число положительное, 1-число отрицательное
Каждый из целочисленных типов может быть определён либо как знаковый
signed (наличие знака)либо как беззнаковый unsigned (по умолчанию
signed).
13.
ТИПЫ ДАННЫХЦЕЛОЧИСЛЕННЫЙ ТИП ДАННЫХ
char - символьный, целый длиной не менее 8 бит;
short int - короткий целый ( можно short );
int – целый;
long - длинный целый
14.
РАЗМЕРНОСТЬ ЦЕЛЫХ ДАННЫХТип данных
Размер, бит
Диапазон значений
Спецификатор
char
8
-128 - +127
%c, %d, %o, %x
unsigned char
8
0 - 255
%u
int
32
-2 147 483 648 / 2 147 483 647
%d, %i, %o,%x
unsigned int
32
long
32
0 /
4 294 967 295
-2 147 483 648 / 2 147 483 647
%u
%ld
15.
ТИПЫ ДАННЫХВЕЩЕСТВЕННЫЕ ТИПЫ ДАННЫХ
Знак
Экспонента
мантиссы (приведённый порядок)
float - вещественный одинарной точности;
Мантисса
double -вещественный удвоенной точности;
long double - вещественный максимальной точности;
void – без типа.
16.
РАЗМЕРНОСТЬ ДАННЫХ С ПЛАВАЮЩЕЙ ТОЧКОЙТип
данных
float
Размер,
бит
32
Диапазон значений
Спецификатор
-2 147 483 648.0 / 2 147 483 647.0
%f, %e
3.4E-38 - 3.4E+38
double
64
-9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775.0
1.7E-308 - 1.7E+308
pointer
16
указатели типа near,_cs,_ds, _es, _ss
указатели типа far, huge
32
%lf, %e
%p
17.
ФУНКЦИИ ВВОДА/ВЫВОДАФУНКЦИЯ ВЫВОДА
В языке С имеется большой набор различных функций ввода / вывода.
Формат функции вывода:
printf (“<управляющая_строка> “[, список_аргументов]);
список_аргументов – последовательность констант, переменных или
выражений, значения которых выводятся на экран дисплея в соответствии с
форматом управляющей строки;
управляющая_строка – содержит объекты трёх типов: обычные символы (текст,
выводимый на экран), спецификации преобразования (вызывают вывод на экран
значения очередного аргумента), управляющие символьные константы.
18.
ПРИМЕР : ВЫВЕСТИ НА ЭКРАН ЧИСЛА 4, 19.1, 27#include <stdio.h>
Int main()
{ char a,b;
float c;
a=4; b=27; c=19.1;
printf (“\n a=%d b=%x c=%f”, a, b, c);
return 0;
}
19.
СПЕЦИФИКАЦИИ ПРЕОБРАЗОВАНИЯ% [ <выравнивание>] [ <ширина>] [ <доп_признаки>] <символ_преобразования>
выравнивание вправо – по умолчания, влево - символ '-'.
ширина определяет минимальное число выводимых символов. Она может задаваться
целым числом. Символ * обозначает, что число выводимых символов будет определяться
текущим значением переменной.
Пример: printf(“ %d”,width_number );
дополнительные признаки
+ - печать знака «+»;
.число – количество знаков после точки в экспоненциальном виде;
l – указывает, что соответствующий аргумент имеет тип long;
L -double long.
20.
СПЕЦИФИКАЦИИ ПРЕОБРАЗОВАНИЯСИМВОЛЫ ПРЕОБРАЗОВАНИЯ
d –аргумент преобразуется в десятичное представление (% d -> 43, %+d
-> +43, % d -> ь43);
o- аргумент преобразуется в восьмеричное представление ( %o-> 05627);
x,X- аргумент преобразуется в шестнадцатеричное представление( %x -
> 2e59a3d, %X-> 2E59A3D);
c- значением аргумента является символ (%с ->А, %3с->ььА, %-3с->Аьь);
s-значением аргумента является строка символов ( %6s -> abcdef, %6.2s
-> ььььab, %-6.2s->abьььь);
21.
СПЕЦИФИКАЦИИ ПРЕОБРАЗОВАНИЯСИМВОЛЫ ПРЕОБРАЗОВАНИЯ
e - значением аргумента является величина типа float или double в
форме с плавающей точкой (%.3е -> 1.235е+03, %.4е->1.2345+03);
f - значением аргумента является величина в форме с фиксированной
точкой (%5.2f-> 679.41);
u - значением аргумента является целое беззнаковый число (%u->
77626577);
p - значением аргумента является указатель (адрес).
22.
ВВОД ДАННЫХscanf ( “управляющая строка”, список аргументов);
Аргументами scanf должны быть указателями на соответствующие значения (для этого перед
именем переменной, не являющейся указателем, записывается символ взятия адреса &).
Управляющая строка содержит спецификации преобразования и используется для установления
количества и типа аргументов. В неё могут включаться:
пробелы, символы табуляции и перехода на новую строку (все они игнорируются при вводе);
спецификации преобразования, состоящие из знака %, возможно числа, задающего максимальный
размер поля, и самого символа преобразования
float x;
char name[50];
scanf(“%d %f %s”, &i, &x, name); //name уже адрес
23.
ВВОД, ВЫВОД ДАННЫХ В С++Формат функции ввода
cin >> <имя переменной>;
cin>>a;
cin>>b;
Формат функции вывода
cout [<<“ комментарий”] << <имя переменной>[<<endl];
cout<<“ a=”<<a<<endl; cout<<b;
endl –перевод строки
24.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИВ языке С существуют арифметические операции сложения +, вычитания - ,
умножения* , деления /, деления по модулю %.
Особенности операции деления. Эта операция даёт целый результат, если оба
операнда целые. Чтобы получить действительный результат, необходимо
иметь хотя бы один действительный операнд.
9/5=1
9./5=1.8 .
Деления по модулю a % b даёт остаток от целочисленного деления a на b. 9 %
5=4.
Приоритет операций * и / выше, чем у операций сложения и вычитания =>
требуется применение скобок
25.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИПРЕФИКСНЫЕ И ПОСТФИКСНЫЕ ОПЕРАЦИИ
В языке существуют две нетрадиционные операции – операция увеличения (инкремента) «++»
и операция уменьшения (декремента) «--» на единицу значения операнда. Операции имеют
префиксную (++а или - - а значение операции стоит до операнда ) и постфиксную (а++ или а-значение операции стоит после операнда) формы записи. Префиксная - значение операнда а
сначала изменяется, а затем используется для дальнейших вычислений. Постфиксная значение операнда а сначала используется, а затем изменяется
sum=a + d++; // сложить числа a и d , присвоить результат sum и увеличить d на единицу
sum=a + ++d; //увеличить d на единицу, сложить числа a и d, присвоить результат sum
а=5;
х=++а; // х=6, а=6 сначала происходит увеличение а на 1, а затем использование операнда в
выражении
х=а++; // х=5, а=6 сначала использование операнда в выражении, затем увеличение а на 1
26.
СТАНДАРТНЫЕ МЕХАНИЗМЫ ПО АВТОМАТИЧЕСКОМУПРЕОБРАЗОВАНИЮ ОДНОГО ТИПА ДАННЫХ В ДРУГОЙ
Если в выражении присутствуют операнды различных типов, то они преобразуются в
некоторый общий тип. (Тип результата при выполнении любой арифметической операции с
двумя переменными а и в зависит от типа этих переменных)
char
int
long
float
double
char
char
int
long
float
double
int
int
int
long
float
double
long
long
long
long
float
double
float
float
float
float
float
double
double
double
double
double
double
double
а
в
27.
ПРИМЕРЫ СОСТАВЛЕНИЯ ЛИНЕЙНЫХ ПРОГРАММНаписать программу вычисления площади параллелограмма
#include <stdio.h>
int main()
{ char len;
float w,s;
printf(“Вычисление площади параллелограмма \nВведите исходные данные);
printf(“\nДлина (см)
->);
scanf (“%d”,&len);
printf(“\Ширина (см) ->); scanf (“%f”,&w);
s=len*w;
printf(“\n Площадь параллелограмма : % 6.2f кв.см.->”,s);
return 0;
}
28.
ПРИМЕРЫ СОСТАВЛЕНИЯ ЛИНЕЙНЫХ ПРОГРАММОписать переменную k и записать выражение,
вычисляющее сумму цифр числа, считая, что
переменная содержит двухзначное число.
Дано расстояние в сантиметрах. Найти
число полных метров в нём.
#include <stdio.h>
int main()
{ char len;
printf(“\nВведите расстояние в сантиметрах);
scanf (“%d”,&len);
len=len/100;
printf(“\nЧисло полных метров: % d ->”,len);
return 0;
}
#include <stdio.h>
int main()
{ char k,k1;
printf(“\nВведите двухзначное число ->”);
scanf (“%d”,&k);
k1=k/10;
printf(“\n Число десятков равно: % d ”,k1);
k1=k%10;
printf(“\n Число единиц равно: % d ”,k1);
return 0;
}
29.
БИБЛИОТЕЧНЫЕ ФУНКЦИИОбозначение
функции
abs(x)
fabs(x)
cos(x)
sin(x)
ceil(x)
Функция
Абсолютное значение
Косинус
Синус
Округление до большего целого
Тип
Файл описания
функции
int
double
double
double
double
аргумента
int
double
double
double
double
<stdlib.h>
<math.h>
<math.h>
<math.h>
<math.h>
Округление до меньшего целого
floor(x)
double
double
<math.h>
Степенная функция XY
Степенная функция ex
pow(x,y)
exp(x)
double
double
double
int
<math.h>
<math.h>
Логарифм натуральный
log(x)
double
double
<math.h>
Логарифм десятичный
Корень квадратный
Остаток от деления Х на Y
log10(x)
sqrt(x)
fmod(x)
double
double
double
double
double
double
<math.h>
<math.h>
<math.h>
rand(x)
int
Генератор случайных
диапазоне от 0 до 32767
чисел
в
<stdlib.h>
30.
ПРИМЕР: ИСПОЛЬЗОВАНИЕ БИБЛИОТЕЧНЫХ ФУНКЦИЙ.ЗАПИСЬ ФОРМУЛЫ НА ЯЗЫКЕ СИ
double x; /* параметр, который задаётся в программе */
double a=12.5, b=1.3; double c=14.1; double t2; /* результат */
double ax;
/* рабочая переменная */
printf("Введите x >"); scanf("%lf ", &x);
ax=a*x;
ax=sqrt(pow(c,2)-pow(b,2))*tan(ax);
t2=log((ax+2)/(ax-2))/(2*a*b);
31.
ОПЕРАЦИИ ПОРАЗРЯДНОЙ АРИФМЕТИКИПрименяются только для целочисленных операндов. Существуют следующие бинарные операции:
& - поразрядное И;
| - поразрядное ИЛИ;
^ - исключающее ИЛИ;
<< - сдвиг влево;
>> - сдвиг вправо;
~ - операция обращения (инверсия) - унарная операция
Поразрядная конъюнкция (И) битовых значений операндов, обеспечивает выключение битов flag=x&mask;
// x= 01011, mask= 01100,flag= 01000
Поразрядная дизъюнкция (ИЛИ) битовых значений операндов, обеспечивает включение битов flag=x|mask;
//
x= 01011, mask= 01101, flag= 01111
32.
ТАБЛИЦЫ ИСТИННОСТИ ЛОГИЧЕСКИХ ОПЕРАЦИЙ НЕ, И, ИЛИa
~a
a
b
a&b
0
1
0
0
0
1
0
0
1
0
1
0
0
1
1
1
a
b
a|b
0
0
0
0
1
1
1
0
1
1
1
1
33.
СДВИГОВЫЕ ОПЕРАЦИИпроизводят сдвиг своего 1-ого операнда на количество разрядов, указанное во 2-ом операнде.
x=x>>3; //эквивалентно делению на 8
x=x<<2; //эквивалентно умножению на 4
Примечание:
при сдвиге влево освободившиеся разряды заполняются нулями;
при сдвиге вправо освобождающиеся разряды заполняются либо значениями знакового разряда (при
сдвиге числа со знаком), либо нулями для чисел без знака;
второй операнд всегда должен быть положительным.
unsigned i, j, k;
i=0x00aa; j=0x55aa; k=(i<<8)+(j>>8); // k=aa55
34.
ЛОГИЧЕСКИЕ ОПЕРАЦИИДля получения логического значения («истинно», кодируемое цифрой 1, или
«ложно», кодируемое цифрой 0) используются операции отношения,
логические и побитовые операции.
В языке С используется обычный набор операций отношений: < (меньше), <=
(меньше или равно), > (больше), >= (больше или равно), == (равно) и != (не
равно).
Логическое выражение в виде отношения принимает значение 1 (истинно),
если оно удовлетворяется для входящих в него операндов, и 0 (ложно) в
противном случае, поэтому выражение 5>2 имеет значение 1, а 7<=0 – 0.
35.
ЛОГИЧЕСКИЕ ОПЕРАЦИИК логическим операциям относятся логическое И или логическое умножение
(&&), логическое ИЛИ или логическое сложение ( | | ), исключающее ИЛИ (^)
и логическое отрицание (!).
Выражения с участием логических связок будут раскрываться слева направо и
как только определяется истинность или ложность всего выражения
вычисления заканчиваются.
Если операнд операции отрицания равен нулю, то результат операции будет
равен единице; если же значение операнда отлично от нуля, результат
операции равен нулю.
36.
ЛОГИЧЕСКИЕ ОПЕРАЦИИОперация логического умножения даёт значение «истинно», если оба операнды истинны, т.е. отличны от
нуля; в противном случае результат операции будет равен нулю, т.е. ложен.
if (p!=NULL && p>7) //сначала проверяется значение b1, значение b2 проверяется только в том случае,
b1
b2
//если значение b1-истинно
Логическое сложение вырабатывает значение 1 (истинно), если хотя бы один из операндов истинен
(отличен от нуля) и 0 (ложно) в противном случае.
if (x<a||x>b)
printf (“out of range”);