Разделы презентаций


Язык программирования С Тема Типы данных, операции и

Содержание

Лекция 16.09.13г.Обзор вопросов прошлой лекцииСтроковые константыКонстанты перечислимого типаОбъявления переменныхОперации, виды операцийАрифметические операцииОперации отношенияЛогические операцииОперации инкремента и декрементаПоразрядные (битовые) операции

Слайды и текст этой презентации

Слайд 1Язык программирования С
Тема «Типы данных, операции и выражения»
(продолжение)
Лекция 16.09.13г.

Язык программирования СТема «Типы данных, операции и выражения»(продолжение)Лекция 16.09.13г.

Слайд 2Лекция 16.09.13г.
Обзор вопросов прошлой лекции
Строковые константы
Константы перечислимого типа
Объявления переменных
Операции, виды

операций
Арифметические операции
Операции отношения
Логические операции
Операции инкремента и декремента
Поразрядные (битовые) операции

Лекция 16.09.13г.Обзор вопросов прошлой лекцииСтроковые константыКонстанты перечислимого типаОбъявления переменныхОперации, виды операцийАрифметические операцииОперации отношенияЛогические операцииОперации инкремента и декрементаПоразрядные

Слайд 3Лекция 16.09.13г.
Операция присваивания
В языке С операция присваивания существенно отличается от

аналогичной операции в других языках:
Присваивание a = b действительно является

операцией (а не оператором), т.е. после завершения этой операции получается некоторое значение (в данном примере – значение переменной b), которое может быть использовано для последующих вычислений. Следовательно, присваивание может применяться внутри выражений, наряду с другими операциями.

//Ex008.c – иллюстрация операции присваивания
#include
#include
int main() {
int a = 12, b, c;
printf("result = %d \n", c=(b=a)-5);
system("PAUSE");
return 0;
}

Лекция 16.09.13г.Операция присваиванияВ языке С операция присваивания существенно отличается от аналогичной операции в других языках:Присваивание a =

Слайд 4Лекция 16.09.13г.
Операции, совмещенные с присваиванием
Кроме обычного присваивания существует ещё 10

модификаций, в которых присваивание совмещается с какой-либо бинарной операцией, например,

k += 2 эквивалентно k = k + 2, или ещё: x >>= 1 эквивалентно x = x >> 1 и т.д. Полный перечень бинарных операций, совмещаемых с присваиванием:
+ - * / % << >> & ^ |

//Ex009.c – подсчет количества единичных битов в двух байтах
#include
#include
int main() {
unsigned short x = 0x1234;
int b;
for (b=0; x!=0; x >>= 1)
if (x & 01) b++;
printf("the number of bits = %d \n", b);
system("PAUSE");
return 0;
}

Лекция 16.09.13г.Операции, совмещенные с присваиваниемКроме обычного присваивания существует ещё 10 модификаций, в которых присваивание совмещается с какой-либо

Слайд 5Лекция 16.09.13г.
Тернарная условная операция
Во многих алгоритмах часто встречается конструкция вида:
if

(условие) x = ;
else x = ;
Иными словами, переменная x

получает значение одного из двух выражений, в зависимости от истинности условия.
В языке С для компактной записи такого фрагмента существует специальная тернарная условная операция:
x = условие ? <выраж1> : <выраж2>

//Ex010.c – иллюстрация условной операции
#include
#include
#define N 57
int main() {
int i, x[N];
for (i=0; i for (i=0; i printf("%6d%c", x[i], (i%8==7 || i==N-1) ? '\n' : ' ');
system("PAUSE");
return 0;
}

Лекция 16.09.13г.Тернарная условная операцияВо многих алгоритмах часто встречается конструкция вида:if (условие) x = ;else x = ;Иными

Слайд 6Лекция 16.09.13г.
Приоритет и ассоциирование операций
Всего операций: 47

Лекция 16.09.13г.Приоритет и ассоциирование операцийВсего операций: 47

Слайд 7Лекция 16.09.13г.
Приоритет и ассоциирование операций
Операции, находящиеся в одной строке таблицы,

принадлежат одной группе, т.е. имеют одинаковый приоритет и одинаковый порядок

выполнения (слева направо или наоборот).
Все 47 операций распределены по 15 группам, группа 1 имеет наивысший приоритет, а группа 15 – наиболее низкий приоритет.
1-я группа: () - вызов функции, [] – доступ к элементу массива, -> - обращение к элементу структуры через указатель, . - обращение к элементу структуры через имя структуры.
2-я группа (унарные операции): + - - унарные «плюс» и «минус», * - «разыменование» указателя, т.е. обращение к объекту, на который он указывает, & - получение адреса объекта, (тип) – преобразование типа операнда к заданному типу, sizeof – определение размера объекта.

15-я группа: , - операция «запятая» - это бинарная операция, имеющая вид: выражение1 , выражение2. Действие операции заключается в последовательном вычислении выражений, а её результатом является значение второго выражения.
Лекция 16.09.13г.Приоритет и ассоциирование операцийОперации, находящиеся в одной строке таблицы, принадлежат одной группе, т.е. имеют одинаковый приоритет

Слайд 8Лекция 16.09.13г.
Иллюстрация к операциям
//Ex011.c – иллюстрация операции «запятая»
#include
#include
int

main() {
int i, s, x[] = {1, 3, 5,

7, 9};
for(i = 0, s = 0; i < sizeof(x)/sizeof(x[0]); s+=x[i++]);
printf("s = %d\n", s);
system("PAUSE");
return 0;
}

кол-во элем. массива

операция «запятая»

Лекция 16.09.13г.Иллюстрация к операциям//Ex011.c – иллюстрация операции «запятая»#include #include int main() { int i, s, x[] =

Слайд 9Лекция 16.09.13г.
Иллюстрация к приоритету операций
//Ex012.c – иллюстрация сложного выражения
#include
#include


int main() {
int x = 4, y = 6,

k = 5, i = 1;
y*=x+=--k<<++i;
printf("y = %d, x = %d, k = %d, i = %d\n", y, x, k, i);
system("PAUSE");
return 0;
}

Чему равно значение переменной y после вычисления выражения:
y*=x+=--k<<++i

2

1

3

4

5

Лекция 16.09.13г.Иллюстрация к приоритету операций//Ex012.c – иллюстрация сложного выражения#include #include int main() { int x = 4,

Слайд 10Лекция 16.09.13г.
Преобразование (приведение) типов
Приведение типа (type conversion) — преобразование значения

одного типа в значение другого типа.
Различают явное и неявное

приведения типов.
при явном приведении с помощью унарной операции (тип) указывается тип, к которому необходимо преобразовать значение выражения, расположенного справа от этой операции;
при неявном приведении преобразование происходит автоматически, по правилам, установленным в языке программирования.

//Ex013.c – иллюстрация приведения типов
int main() {
int x = 32768, y = 65535;
short sx = 32768, sy = 65535; char c1 = 32768, c2 = 65535;
unsigned z = 0xffffffff;
float fz = 0xffffffff;
printf("%d %d %d %f %d\n", x, (short)x, sx, (float)x, c1);
printf("%d %d %d %f %d\n", y, (short)y, sy, (float)y, c2);
printf("%u %f %f %f\n", z, (float)z, (double)z, fz);
system("PAUSE");
return 0;
}

Лекция 16.09.13г.Преобразование (приведение) типовПриведение типа (type conversion) — преобразование значения одного типа в значение другого типа. Различают

Слайд 11Лекция 16.09.13г.
Преобразование (приведение) типов
Корректными преобразования типов, не вызывающими искажения значений

или потери точности, являются приведения более «узких» типов к более

«широким».
Если же значение более «широкого» типа приводится к более «узкому» типу, возможно искажение значения или потеря точности, о чем выдает предупреждение (warning) компилятор.
Явные преобразования типов всегда происходят по «инициативе» программиста, а инициатором неявных преобразований выступает компилятор в тех случаях, когда при выполнении операции ожидается один тип, а фактически требуется другой тип.
Замечание. В некоторых случаях неявное преобразование бывает неосуществимым «по определению». Например, в выражении 3.0%2.0 значения 3.0 и 2.0 не преобразуется автоматически к целому типу, т.к. операция % применима только к целочисленным значениям и поэтому компилятор выдаст сообщение об ошибке (error).
Лекция 16.09.13г.Преобразование (приведение) типовКорректными преобразования типов, не вызывающими искажения значений или потери точности, являются приведения более «узких»

Слайд 12Тема
«Управляющие конструкции языка С»
Лекция 16.09.13г.

Тема «Управляющие конструкции языка С»Лекция 16.09.13г.

Слайд 13Лекция 16.09.13г.
Простые операторы и блоки
Если в конце любого выражения поставить

символ ; (точка с запятой), получим элементарную «строительную конструкцию» программы

– простой оператор:
z = foo(x+y); x += y; 4*5; …

Простые операторы в программе могут располагаться последовательно, друг за другом:
temp = x+y; z = foo(temp);

Последовательность операторов любого вида можно заключить в фигурные скобки { и }. В этом случае получится составной оператор, или, иначе – блок, который синтаксически эквивалентен простому оператору и компилируется как самостоятельная конструкция. После закрывающей скобки точка с запятой не ставится.

Блок может быть пустым: {}
Лекция 16.09.13г.Простые операторы и блокиЕсли в конце любого выражения поставить символ ; (точка с запятой), получим элементарную

Слайд 14Лекция 16.09.13г.
Простые операторы и блоки
Внутри блока можно размещать объявления переменных:
{

int temp = x+y;
z = foo(temp);
}

Такие переменные будут локальными; они создаются при входе в блок и исчезают при выходе из блока. За пределами блока локальные переменные невидимы. Локальные переменные размещаются в области памяти, которая называется стек.

Блоки могут быть вложенными, при этом глубина вложенности не ограничивается:
{
int temp = x+y;
z = foo(temp);
{
float temp2 = x∗y;
z += bar(temp2);
}
}
Лекция 16.09.13г.Простые операторы и блокиВнутри блока можно размещать объявления переменных:{  int temp = x+y;  z

Слайд 15Лекция 16.09.13г.
Операторы простого выбора
В простейшем варианте выбора требуется выбрать для

выполнения определенный оператор, если некоторое условие истинно (т.е. его значение

отлично от 0). Это записывается так:
if (условие) оператор
Например: if(x%2) y += x/2;
Т.е. если x – нечетно, то y увеличивается, в противном случае ничего не делается.
Если при выполнении условия нужно выполнить последовательность операторов, необходимо использовать блок

В другом случае требуется выбрать для выполнения один из двух операторов, в зависимости от некоторого условия:
if (условие) оператор1 else оператор2
Например: if (a>b) c=a; else c=b;

Лекция 16.09.13г.Операторы простого выбораВ простейшем варианте выбора требуется выбрать для выполнения определенный оператор, если некоторое условие истинно

Слайд 16Лекция 16.09.13г.
Вложенные операторы выбора
a>b
d = a
≠0
=0
Если в качестве исполняемого оператора

в операторе выбора используется другой оператор выбора, возникает ситуация вложенности

операторов выбора.
Пример: найти: d = max(a, b, c)

d = b

d = c

a>c

d = c

b>c

≠0

=0

=0

≠0

//Ex014.c
#include
#include
int main() {
int a = 4, b = 15, c = 7, d;
if (a>b)
if (a>c) d = a;
else d = c;
else
if (b>c) d = b;
else d = c;
printf("max = %d\n", d);
system("PAUSE");
return 0;
}

оператор1

оператор2

Лекция 16.09.13г.Вложенные операторы выбораa>bd = a≠0=0Если в качестве исполняемого оператора в операторе выбора используется другой оператор выбора,

Слайд 17Лекция 16.09.13г.
Вложенные операторы выбора
a>b
d = a
≠0
=0
Модифицируем алгоритм:
d = b
a>c
d =

c
b>c
≠0
=0
≠0
//Ex015.c
#include
#include
int main() {
int a = 4, b

= 15, c = 7, d = c;
if (a>b)
if (a>c) d = a;
else
if (b>c) d = b;
printf("max = %d\n", d);
system("PAUSE");
return 0;
}

=0

Неверно!


if (a>b)
{if (a>c) d = a;}
else
if (b>c) d = b;

Нужно так!


Слайд 18Лекция 16.09.13г.
Множественный выбор
Фрагмент алгоритма программы «Калькулятор»:

if (c==‘+’) r =

a + b;
else if (c==‘-’) r = a -

b;
else if (c==‘*’) r = a * b;
else if (c==‘/’) r = a / b;
else printf(“error!\n");

Лекция 16.09.13г.Множественный выборФрагмент алгоритма программы «Калькулятор»:… if (c==‘+’) r = a + b; else if (c==‘-’) r

Слайд 19Лекция 16.09.13г.
Оператор множественного выбора switch
Для алгоритмов с множественным выбором существует

специальный оператор:

switch(c){
case '+': r = a

+ b; break;
case '-': r = a - b; break;
case '*': r = a * b; break;
case '/': r = a / b; break;
default: printf(“error!\n");
}

Лекция 16.09.13г.Оператор множественного выбора switchДля алгоритмов с множественным выбором существует специальный оператор:… switch(c){   case '+':

Слайд 20Лекция 16.09.13г.
Важное замечание!
При отсутствии операторов break реализуется совсем другой алгоритм:
c==‘+’
r

= a+b
=0
≠0
=0
≠0
=0
c==‘-’
c==‘*’
c==‘/’
r = a-b
r = a*b
r = a/b
Ошибка!
≠0
≠0
=0

switch(c){

case '+': r = a + b;
case '-': r = a - b;
case '*': r = a * b;
case '/': r = a / b;
default: printf(“error!\n");
}

Лекция 16.09.13г.Важное замечание!При отсутствии операторов break реализуется совсем другой алгоритм:c==‘+’r = a+b=0≠0=0≠0=0c==‘-’c==‘*’c==‘/’r = a-br = a*br =

Слайд 21Лекция 16.09.13г.
Оператор множественного выбора switch
Общий вид оператора switch:
switch (выражение) {

case констант-выраж1: операторы
case констант-выраж2: операторы

default: операторы
}
Действие оператора: вычисляется значение выражения, которое затем последовательно сравнивается со значениями константных выражений в блоках case. Если произошло совпадение значений, выполняются операторы соответствующего блока case. Как правило, последним оператором в каждом блоке case является оператор break («прервать») и поэтому по завершению выбранного case-блока вычислительный процесс выходит за пределы оператора switch. Если совпадения значений не произошло ни для одного из case-блоков, то выполняются операторы блока default (если он есть) или вычислительный процесс сразу выходит за пределы оператора switch.
Лекция 16.09.13г.Оператор множественного выбора switchОбщий вид оператора switch:switch (выражение) {  case констант-выраж1: операторы  case констант-выраж2:

Слайд 22Лекция 16.09.13г.
Иллюстрация оператора switch
//Ex017.c - статистика
#include
#include
int main() {

int c, i, nwhite, nother, ndigit[10];
nwhite = nother =

0;
for (i = 0; i < 10; i++) ndigit[i] = 0;
while ((c = getchar()) != '$') {
switch (c) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
ndigit[c-'0']++; break;
case ' ': case '\n': case '\t':
nwhite++; break;
default: nother++; break;
}
}
printf("digits =");
for (i = 0; i < 10; i++) printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
system("PAUSE");
return 0;
}
Лекция 16.09.13г.Иллюстрация оператора switch//Ex017.c - статистика#include #include int main() { int c, i, nwhite, nother, ndigit[10]; nwhite

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика