Лекция 4 Области видимости и структуры в языке С.

Презентация:



Advertisements
Похожие презентации
Лекция 3 Массивы и Функции.. Массивы Массив – набор данных, связанных одним именем, расположенных последовательно в памяти. Каждому элементу массива присвоен.
Advertisements

Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
ПРОЦЕДУРЫ И ФУНКЦИИ CPascal Подпрограмма – группа операторов реализующая законченный алгоритм и оформленная как самостоятельная синтаксическая единица.
Лекция 2 Функции библиотек языка C. stdio.h Заголовочный файл стандартной библиотеки языка C. Содержит определения констант, объявления функций и типов.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Даная матрица Задача 1. Дана матрица X[0:n-1][0:m-1] и массив Y[0:k-1]. Написать программу, которая вычисляет массив Z, состоящий из элементов X, расположенных.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Вводный курс в С++ Занятие 1 Олег Власенко Заместитель директора ООО СимбирСофт Старший.
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Часть 1: «Основы программирования». Содержание Основные понятия. Структура программы. Ввод-вывод Программирование циклов. Операторы цикла while, for и.
Основы алгоритмизации и программирования Чабанюк Виктория 10 класс.
Лекция 10 Структуры. Классификация типов данных Простые Целые, вещественные, void, перечисления Являются атомарными не состоят из других типов Адресные.
Лабораторная работа 4. Подпрограммы. Задание на лабораторную работу Написать программу, реализующую хранение информации, указанной в вариантах индивидуальных.
Строки в Pascal
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Элементы языка СИ Средства для написания простейших программ.
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Транксрипт:

Лекция 4 Области видимости и структуры в языке С

Внешние переменные и область видимости #include #define MAXLINE 1000 /* максимальный размер вводимой строки */ int max; /* длина максимальной из просмотренных строк */ char line[MAXLINE]; /* текущая строка */ char longest[MAXLINE]; /* самая длинная строка */ int getline(void); void copy(void); /* печать самой длинной строки; специализированная версия */ int main () { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* была хотя бы одна строка */ printf("%s", longest); return 0; }

Символьные массивы /* copy: специализированная версия */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; }

Преобразование типов Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу. int a = 30000; float b; b = (float) a * 12; (переменная a целого типа явно преобразована к типу float; если этого не сделать, то результат будет потерян, т.к. a * 12 > 32767).

itoa /* itoa: преобразует число n в строку символов s */ void itoa(int n, char s[]) { int i, sign; if ((sign = n) < 0) /* записываем знак */ n = -n; /* делаем число положительным */ i = 0; do { /* генерируем цифры в обратном порядке */ s[i++] = n % 10 + '0'; /* извлекаем цифру */ } while ((n /= 10) > 0); /* удаляем ее */ if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); }

Функции, возвращающие нецелые значения #include /* atof: преобразование строки s в число типа double */ double atof(char s[]) { double val, power; int i, sign; for(i = 0; isspace(s[i]); i++) /* пропуск пробелов */ sign = (s[i] =='-') ? -1 : 1; if (s[i] == '+' || s[i] == '-') i++; for(val = 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - '0'); if (s[i] == '.') i++; for (power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val + (s[i] - '0'); power *= 10; } return sign * val / power; }

Поиск подстроки /* strindex: вычисляет место t в s или выдает -1, если t нет в s */ int strindex (char s[], char t[]) { int i, j, k; for (i = 0; s[i] != '\0'; i++) { for (j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++) ; if (k > 0 && t[k] == '\0') return i; } return -1; }

Рекурсивный вызов #include /* printd: печатает n как целое десятичное число */ void printd(int n) { if (n < 0) { putchar('-'); n = -n; } if (n / 10) printd(n / 10); putchar(n % 10 + '0'); }

Структуры struct point { int x; int у; };

Структуры /* объявление переменной типа структуры*/ struct {…} х, у, z; //x,y,z имена переменных // если структура была задана ранее struct point pt; // присваивание в структуре struct point maxpt = { 320, 200 }; /* обращение к структуре(вывод значений на экран)*/ printf("%d,%d", pt.x, pt.y);

Вложенные структуры struct rect { struct point pt1; struct point pt2; };

Вложенные структуры Структура rect содержит две структуры point. Если мы объявим screen как struct rect screen; то screen.pt1. x обращается к координате х точки pt1 из screen.

Структуры в функциях /* makepoint: формирует точку по компонентам(аргументам) х и y */ struct point makepoint(int x, int y) { struct point temp; temp.x = x; temp.у = у; return temp; }

Структуры в функциях struct rect screen; struct point middle; struct point makepoint(int, int); screen.pt1 = makepoint(0, 0); screen.pt2 = makepoint(XMAX, YMAX); middle = makepoint((screen.pt1. x + screen. pt2.x)/2, (screen.pt1. y + screen.pt2.y)/2);

Структуры в функциях /* addpoint: сложение двух точек */ struct point addpoint(struct point p1, struct point p2) { p1. x += p2.x; p1. y += p2.y; return p1; }

Структуры /* ptinrect: возвращает 1, если р в r, и 0 в противном случае */ int ptinrect(struct point p, struct rect r) { return p.x >= r.ptl.x && p.x < r.pt2. x && p.y >= r.ptl.y && p.y < r.pt2.y; }