189.93K
Category: programmingprogramming

Программирование на языке высокого уровня. Язык Си линейные алгоритмы

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”);
English     Русский Rules