Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Уровень 14 (операторы присваивания)
Порядок: ß Правило записи: e 1[< op >]= e 2 Здесь e 1 - переменная (простая или с индексами), которой задается значение e 2. e 2 - выражение. e 2 преобразуется к типу e 1 (если возможно). Запись < op > является необязательной и означает выполнение указанной операции над "старым" значением e 1 (в качестве второго операнда выступает e 2), а затем присваивание полученного "нового" значения переменной e 1. Допустимыми операциями являются: + - сложение, - – вычитание, * – умножение, / – деление, % – остаток, >>, << – сдвиг вправо или влево, &, ^, | – поразрядные операторы. Пример. a*=5; // Это эквивалентно a=a*5; Замечание. Выражение x*=y+1 означает x=x*(y+1), а не x=x*y+1, поскольку уровень оператора *= ниже уровня оператора +. В комбинированных операциях значение e 1 вычисляется 1 раз, т.е. выражение a[i++]*=n; эквивалентно a[i]=a[i]*n; i=i+1; (постфиксный оператор ++), а выражение a[++i]*=n; - выражению i=i+1; a[i]=a[i]*n; (префиксный оператор ++). Оператор = может входить в состав выражения. Пример. while ((c= getchar ())!= EOF){// Это означает посимвольное чтение текстового // файла до его окончания EOF ( End Of File ) – символическая константа, означающая конец файла и определенная в файле stdio.h. Переменная e 1 может быть указателем. Пример. int *x; ....... x+=2; // Изменяет значение x на 4 байта. Замечание. Не увлекайтесь сложными выражениями, пишите проще! Уровень 15 (оператор ',' - запятая) Порядок:à Формат: e 1[, e 2]..., где e 1, e 2 - выражения. Результат имеет тип и значение самого правого выражения списка. Как правило, используется с выражениями, содержащими оператор присваивания. Весьма удобен при достаточно сложных инструкциях цикла. Пример. for (i=0, j=N-1; i<j; i++, j--){ // Одновременное изменение в одном цикле переменных i // и j в разных направлениях Некоторые замечания 1. При трансляции программы возможно переупорядочивание коммутативных или ассоциативных операторов. Если порядок вычисления важен, используйте промежуточные переменные. 2. В языке C не задан порядок вычисления операндов. При побочных эф-фектах результат машинно зависим. Побочным эффектом называют изменение значений аргументов функций. В выражении x = f ( x, y )+ g (& x, & y ); при перестановке слагаемых изменится результат. 3. Также не фиксирован порядок вычисления аргументов функций.
Пример. printf ("%d%d\n", ++n, pow (2,n)); // Результат неоднозначен 4. Не применяйте неоднозначных выражений. Чему равно, например, выражение a [ i ++] = i ++;? Так не писать не следует!!! Постоянные выражения Постоянные выражения – это выражения, состоящие из литералов и символических констант. Они используются в таких конструкциях языка, как: - многоальтернативный выбор – инструкция switch, опция case; - границы массивов; - директивы препроцессора. Пример. int a[SIZE1+SIZE2]; # define PI 3.141593 # define PI2 2*PI Вопросы для самопроверки и контроля Вопросы для самопроверки 1. Чему равно значение выражения sizeof (<имя_типа>)? 2. Какой тип должен иметь левый операнд оператора ->? 3. Дано: i=4; y=i++; x=++i. Чему равны значения i, y, x? 4. Какой тип имеет результат выполнения унарного оператора &? 5. Что означают операторы = и == в языке C? Чей приоритет выше? 6. В чем отличие операторов унарного и бинарного оператора &? 7. Какой оператор имеет 3 операнда? Контрольные вопросы 1. Требуется сформировать массив из отрицательных элементов другого массива. Правильно ли предложенное решение? float x[10], y[10], s; short i, k; for (s=k=i=0; i<10; i++){ x[++k]=y[ i ]<0? y[ i ]: 0; } 2. В чем отличие постфиксной и префиксной форм оператора ++? 3. Что означают операторы & и &&? 4. В чем смысл оператора "запятая"? 5. Дано: a=3; b=4; c=5; Чему равно выражение: a<b<c? 6. Где употребляются постоянные выражения?
ПЕРЕДАЧА ДАННЫХ ПОТОКОМ Этот раздел посвящен дополнительным средствам ввода-вывода в языке C, используемых для ввода-вывода символьной информации. Средства языка Basic для ввода с клавиатуры и вывода на экран и принтер не рассматриваются, поскольку они входят в состав визуальных средств и будут излагаться в последующих курсах программирования. Функции scanf и printf и некоторые другие, о которых речь пойдет ниже, называют функциями передачи данных потоком. Это означает, что все данные, вводимые последовательными инструкциями scanf, образуют единый поток ввода, в котором начало и конец элемента данных определяются параметром соответствующей спецификации w или d либо специальными символами – ограничителями, внесенными в поток. Аналогично последовательность инструкций printf образует единый поток вывода. Проще всего данные каждого потока представить в виде непрерывной символьной строки.
В языке определены 3 стандартных потока обмена данных: поток ввода stdin, поток вывода stdout и поток сообщений об ошибках stderr. По умолчанию поток stdin связан с клавиатурой, потоки stdout и stderr – с экраном монитора. На самом деле поток stdin также связан с экраном, поскольку большинство функций ввода отображают каждый вводимый с клавиатуры символ на экран. Точнее эти функции вставляют отображение вводимых символов в поток stdout. Это приводит к очереди за пользование ресурсом (экраном) и иногда к конфликтным ситуациям, описанным ранее. 12.1. Спецификация "s" управляющей строки функций scanf и printf Предназначена для ввода-вывода символьных строк. Напомним, что в языке C определены только строковые литералы, которые представляют собой последовательность символов, завершающуюся нулевым символом. В качестве переменных применяются массивы типа char. Все функции ввода строк добавляют конечный нулевой символ. Ввод. Формат спецификации: % [w]s. Поле ввода ограничивается параметром спецификации w либо символами пробел или перевод строки (клавиша Enter). Пример. %5s [Ивано]в // Будет введен текст, заключенный в [ ] Замечание. Ограничитель ввода остается в потоке и будет восприниматься последующими инструкциями ввода, что может привести к некоторым неожиданным последствиям. Например следующая за функцией scanf функция gets, у которой символ перевод строки является ограничителем, введет пустую строку. Вывод. Формат спецификации %[w][.d]s. Ограничителем является конечный нулевой символ либо параметр d спецификации. Пример. Выводимая строка имеет значение: "Привет, Коля!". На экране получим: %s Привет, Коля! %.6s Привет Функции getchar и putchar Прототип: int getchar (void); - чтение одного символа с клавиатуры. Файл прототипа: stdio.h. Возвращаемое значение: символ (при успешном вводе)или EOF (ошибка ввода или конец файла). Признак конца файла при вводе: символы Ctrl + z. Прототип: int putchar (int); - вывод одного символа на экран. Файл прототипа: stdio.h Возвращаемое значение: символ (успех)| EOF (ошибка). Пример. /* Чтение строки с терминала. */ /* Возвращает указатель на строку и ее длину */ int getline(char *s, // Введенная строка int lim){ // Ее максимальная длина int c, // Вводимый символ i; fo r(i=0; i<lim && (c= getchar ())!= EOF && c!='\n'; i++){ s[ i ]=c; } s[ i ]='\0'; return i; } // End getline Функции gets и puts Прототип: char * gets (char *); - чтение строки символов. Файл прототипа: stdio.h. Возвращаемое значение: указатель на введенную строку (успех) | NULL - "пустой" указатель. Ограничитель ввода: символ перевод строки, который после ввода заменяется на конечный нулевой символ. Пример. char string[20]; ................ gets (string); Замечание. Можно включать в строку пробелы в отличие от спецификации s функции scanf. Прототип: int puts (char *); - вывод на экран строки символов. Файл прототипа: stdio.h. Возвращаемое значение: последний выведенный символ (успех) | EOF (конец файла). Замечание. Конечный 0 не выводится. В конец строки добавляется символ перевод строки.
|
||||||
Последнее изменение этой страницы: 2017-02-08; просмотров: 321; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.134.193 (0.02 с.) |