Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 403; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.236 (0.007 с.) |