Слайд 1Язык программирования Си
«После нескольких лет работы вы так и не
можете решить восхищаться им или проклинать»
(Джефф Элджер)
Слайд 2Джефф Элджер насчитал
2 786 942 книги по С и С++
Слайд 3
Переменные и константы
Имена переменных. Имена могут состоять из букв латинского
алфавита, цифр и символа подчеркивания "_", который считается буквой.
Строчные
и прописные буквы различаются.
Beta, beta , BETA - разные имена.
Число символов в имени не ограничено.
Слайд 4Типы данных
В языке Си имеются два существенно различных типа
данных:
int- целый;
float - вещественный.
Слайд 5Из них можно создавать еще два типа:
char - символьный ,
double - вещественный с двойной
точностью.
Из этих четырех базовых типов
может быть получено много других типов.
Слайд 6Константы
Целые константы и константы с плавающей точкой записываются в
общепринятой для языков программирования форме:
13, -941, 0,
76;
13.0, 13E+0, -1.76, 0.123e-2, 6.02E23
Слайд 8Пример
unsigned int n;
unsigned int b;
int c; (подразумевается signed int c
);
unsigned d; (подразумевается unsigned int d ); signed f; (подразумевается signed int f ).
Слайд 9Для определения длины памяти, занимаемой переменной, можно использовать операцию sizeof
языка СИ.
a = sizeof(int);
b = sizeof(long int);
c = sizeof(unsigned long);
d = sizeof(short);
Слайд 10Данные плавающего типа
float,
double,
long double
Слайд 11float
занимает 4 байта:
1 бит отводится для знака,
8
бит для экспоненты,
23 бита для мантиссы.
Диапазон значений переменной
с плавающей точкой приблизительно равен от 3.14E-38 до 3.14E+38.
Слайд 12double
занимает 8 байт в памяти:
1 бит для знака,
11 бит для экспоненты,
52 бита для мантиссы.
Диапазон значений равен
от 1.7E-308 до 1.7E+308.
Слайд 13Выражения
Комбинация знаков операций и операндов, результатом которой является определенное
значение, называется выражением.
Знаки операций определяют действия, которые должны быть
выполнены над операндами.
Каждый операнд в выражении может быть выражением.
Слайд 14Унарные операции
+ унарный плюс;
++ увеличение (инкремент);
-- уменьшение
(декремент);
Слайд 15Унарные операции выполняются справа налево
Если знак операции записан перед
операндом (префиксная форма), то изменение операнда происходит до его использования
в выражении.
Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.
Слайд 16Операции уменьшения и увеличения
Пусть n=5
Чему
равны m и n после вычислений?
1) m=n++
2)
m=++n
Слайд 17Бинарные операции
выполняются слева направо
Слайд 18Преобразования при вычислении выражений
1. Операнды типа float преобразуются к
типу double.
2. Если один операнд long double, то второй
преобразуется к этому же типу.
3. Если один операнд double, то второй также преобразуется к типу double.
4. Любые операнды типа char и short преобразуются к типу int.
Слайд 19Преобразования при вычислении выражений
5. Любые операнды unsigned char или unsigned
short преобразуются к типу unsigned int.
6. Если один операнд
типа unsigned long, то второй преобразуется к типу unsigned long.
7. Если один операнд типа long, то второй преобразуется к типу long.
8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.
Слайд 20Пример
double ft,sd;
unsigned char ch;
unsigned long in;
int i;
....
sd=ft*(i+ch/in);
Слайд 21Мультипликативные операции
int i=5;
float f=0.2;
double
g,z;
g=f*i;
Тип произведения i и
f преобразуется к типу double, затем результат присваивается переменной g.
Слайд 22Мультипликативные операции
int i=49, j=10, n, m;
n
= i/j;
/* результат 4 */
m = i/(-j); /* результат -4 */
Слайд 23Мультипликативные операции
int n = 49,
m = 10, i,
j, k, l;
i = n % m;
/* 9 */
j = n % (-m); /* 9 */
k = (-n) % m; /* -9 */
l = (-n) % (-m); /* -9 */
Операция остаток от деления (%) дает остаток от деления первого операнда на второй.
Знак результата зависит от конкретной реализации. В данной реализации знак результата совпадает со знаком делимого
Слайд 24Аддитивные операции
В некоторых случаях над операндами аддитивных операций выполняются
общие арифметические преобразования.
Однако преобразования, выполняемые при аддитивных операциях, не
обеспечивают обработку ситуаций переполнения и потери значимости.
Информация теряется, если результат аддитивной операции не может быть представлен типом операндов после преобразования.
При этом сообщение об ошибке не выдается!
Слайд 25Пример
int i=30000,
int j=30000, k;
k=i+j;
В результате сложения k получит значение равное
-5536.
Слайд 26Операции увеличения (++) и уменьшения (--)
являются унарными операциями присваивания.
Если
знак операции стоит перед операндом (префиксная форма записи), то изменение
операнда происходит до его использования в выражении и результатом операции является увеличенное или уменьшенное значение операнда.
Слайд 27В том случае если знак операции стоит после операнда (постфиксная
форма записи), то операнд вначале используется для вычисления выражения, а
затем происходит изменение операнда.
Слайд 28Примеры:
int t=1, s=2, z, f;
z=(t++)*5;
Вначале происходит умножение t*5, а затем увеличение t.
В
результате получится z=5, t=2.
Слайд 29f=(++s)/3;
Вначале значение s увеличивается, а затем используется в операции
деления.
В результате получим s=3, f=1.
Слайд 30Приоритеты операций и порядок вычислений
Слайд 31Массивы
это конечная совокупность данных одного типа.
Индексы массива в
Си всегда начинаются с 0, а не с 1,
т.е. описание int x[5];
порождает элементы:
x[0], x[1], x[2], x[3], x[4].
Слайд 32 Начальные значения массивам в языке Си могут быть присвоены при
компиляции только в том случае, если они объявлены с классом
памяти
extern или static,
например:
static int a[5]={5,0,4,-17,49};
Слайд 33#include
main()
{
int p,i=0;
static a[10]={10,11,12,13,14,15,16,17,18,19};
while(i
i++;
}
i=0;
while(i
Слайд 34Многомерные массивы
В случае многомерных массивов количество пар скобок соответствует размерности
массива, а число внутри скобок показывает размер массива по данному
измерению.
Например, матрица из 2 строк и 5 столбцов:
int a[2][5].
Слайд 35#define M 5
#include
main()
{ int a[M][M];
int
j,i=0;
while(i
while(j
Что будет выведено на экран?
Слайд 36Функции
Функция имеет вид:
[тип] имя([список формальных параметров])
описания
формальных параметров;
{
описания;
операторы;
}
По умолчанию тип функции целый.
Слайд 37Возвращающее функцией значение передается в вызывающую программу оператором return (выражение).
Значение выражения (возвращаемого значения) и есть результат функции.
Слайд 38 Если в программе функция физически следует за вызывающей ее функцией,
то надо объявить функцию внешней с помощью описателя extern:
extern
int fun()
Слайд 40 /*Возведение в степень - главная программа*/
#include
main()
{
int a,n;
printf("Введи a,n \n");
scanf("%d %d",&a,&n);
printf("%d в
степени %d =%d",
a,n,power(a,n));
}
Слайд 41/*СОРТИРОВКА */
#include
main()
{
extern int sor();
int i,n;
static a[10]={10,1,9,2,8,3,7,4,6,5};
n=10;
sor(a,n);
for(i=0; i
printf(" %d",a[i]);
}
Слайд 42/*функция сортировки*/
int sor(int x[], int n)
{
int i,j,z;
for(i=0;i
for(j=i+1;jx[j])
{
z=x[i];
x[i]=x[j];
x[j]=z;
}
return;
}