Язык программирования Си «После нескольких лет работы вы


Язык программирования Си «После нескольких лет работы вы так и не можете решить восхищаться им или проклинать» (Джефф Элджер)

Джефф Элджер насчитал 2 786 942 книги по С и С++

Переменные и константы Имена переменных. Имена могут состоять из букв латинского алфавита, цифр и символа подчеркивания "_", который считается буквой. Строчные и прописные буквы различаются. Beta, beta , BETA - разные имена. Число символов в имени не ограничено.

Типы данных В языке Си имеются два существенно различных типа данных: int- целый; float - вещественный.

Из них можно создавать еще два типа: char - символьный , double - вещественный с двойной точностью. Из этих четырех базовых типов может быть получено много других типов.

Константы Целые константы и константы с плавающей точкой записываются в общепринятой для языков программирования форме: 13, -941, 0, 76; 13.0, 13E+0, -1.76, 0.123e-2, 6.02E23

Целый тип данных

Пример unsigned int n; unsigned int b; int c; (подразумевается signed int c ); unsigned d; (подразумевается unsigned int d ); signed f; (подразумевается signed int f ).

Для определения длины памяти, занимаемой переменной, можно использовать операцию sizeof языка СИ. a = sizeof(int); b = sizeof(long int); c = sizeof(unsigned long); d = sizeof(short);

Данные плавающего типа float, double, long double

float занимает 4 байта: 1 бит отводится для знака, 8 бит для экспоненты, 23 бита для мантиссы. Диапазон значений переменной с плавающей точкой приблизительно равен от 3.14E-38 до 3.14E+38.

double занимает 8 байт в памяти: 1 бит для знака, 11 бит для экспоненты, 52 бита для мантиссы. Диапазон значений равен от 1.7E-308 до 1.7E+308.

Выражения Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением.

Унарные операции + унарный плюс; ++ увеличение (инкремент); -- уменьшение (декремент);

Унарные операции выполняются справа налево Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.

Операции уменьшения и увеличения Пусть n=5 Чему равны m и n после вычислений? 1) m=n++ 2) m=++n

Бинарные операции выполняются слева направо

Преобразования при вычислении выражений 1. Операнды типа float преобразуются к типу double. 2. Если один операнд long double, то второй преобразуется к этому же типу. 3. Если один операнд double, то второй также преобразуется к типу double. 4. Любые операнды типа char и short преобразуются к типу int.

Преобразования при вычислении выражений 5. Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int. 6. Если один операнд типа unsigned long, то второй преобразуется к типу unsigned long. 7. Если один операнд типа long, то второй преобразуется к типу long. 8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.

Пример double ft,sd; unsigned char ch; unsigned long in; int i; .... sd=ft*(i+ch/in);

Мультипликативные операции int i=5; float f=0.2; double g,z; g=f*i; Тип произведения i и f преобразуется к типу double, затем результат присваивается переменной g.

Мультипликативные операции int i=49, j=10, n, m; n = i/j; /* результат 4 */ m = i/(-j); /* результат -4 */

Мультипликативные операции 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 */ Операция остаток от деления (%) дает остаток от деления первого операнда на второй. Знак результата зависит от конкретной реализации. В данной реализации знак результата совпадает со знаком делимого

Аддитивные операции В некоторых случаях над операндами аддитивных операций выполняются общие арифметические преобразования. Однако преобразования, выполняемые при аддитивных операциях, не обеспечивают обработку ситуаций переполнения и потери значимости. Информация теряется, если результат аддитивной операции не может быть представлен типом операндов после преобразования. При этом сообщение об ошибке не выдается!

Пример int i=30000, int j=30000, k; k=i+j; В результате сложения k получит значение равное -5536.

Операции увеличения (++) и уменьшения (--) являются унарными операциями присваивания. Если знак операции стоит перед операндом (префиксная форма записи), то изменение операнда происходит до его использования в выражении и результатом операции является увеличенное или уменьшенное значение операнда.

В том случае если знак операции стоит после операнда (постфиксная форма записи), то операнд вначале используется для вычисления выражения, а затем происходит изменение операнда.

Примеры: int t=1, s=2, z, f; z=(t++)*5; Вначале происходит умножение t*5, а затем увеличение t. В результате получится z=5, t=2.

f=(++s)/3; Вначале значение s увеличивается, а затем используется в операции деления. В результате получим s=3, f=1.

Приоритеты операций и порядок вычислений

Массивы это конечная совокупность данных одного типа. Индексы массива в Си всегда начинаются с 0, а не с 1, т.е. описание int x[5]; порождает элементы: x[0], x[1], x[2], x[3], x[4].

Начальные значения массивам в языке Си могут быть присвоены при компиляции только в том случае, если они объявлены с классом памяти extern или static, например: static int a[5]={5,0,4,-17,49};
![#include <stdio.h> main() { int p,i=0; static a[10]={10,11,12,13,14,15,16,17,18,19}; while(i<10/2) { #include <stdio.h> main() { int p,i=0; static a[10]={10,11,12,13,14,15,16,17,18,19}; while(i<10/2) {](https://present5.com/presentacii-2/20171208\4220-yazyk_si.ppt\4220-yazyk_si_33.jpg)
#include

Многомерные массивы В случае многомерных массивов количество пар скобок соответствует размерности массива, а число внутри скобок показывает размер массива по данному измерению. Например, матрица из 2 строк и 5 столбцов: int a[2][5].
![#define M 5 #include <stdio.h> main() { int a[M][M]; #define M 5 #include <stdio.h> main() { int a[M][M];](https://present5.com/presentacii-2/20171208\4220-yazyk_si.ppt\4220-yazyk_si_35.jpg)
#define M 5 #include
![Функции Функция имеет вид: [тип] имя([список формальных Функции Функция имеет вид: [тип] имя([список формальных](https://present5.com/presentacii-2/20171208\4220-yazyk_si.ppt\4220-yazyk_si_36.jpg)
Функции Функция имеет вид: [тип] имя([список формальных параметров]) описания формальных параметров; { описания; операторы; } По умолчанию тип функции целый.

Возвращающее функцией значение передается в вызывающую программу оператором return (выражение). Значение выражения (возвращаемого значения) и есть результат функции.

Если в программе функция физически следует за вызывающей ее функцией, то надо объявить функцию внешней с помощью описателя extern: extern int fun()


/*Возведение в степень - главная программа*/ #include

/*СОРТИРОВКА */ #include
![/*функция сортировки*/ int sor(int x[], int n) { int i,j,z; /*функция сортировки*/ int sor(int x[], int n) { int i,j,z;](https://present5.com/presentacii-2/20171208\4220-yazyk_si.ppt\4220-yazyk_si_42.jpg)
/*функция сортировки*/ int sor(int x[], int n) { int i,j,z; for(i=0;i

4220-yazyk_si.ppt
- Количество слайдов: 42