0% нашли этот документ полезным (0 голосов)
15 просмотров51 страница

01 Program Structure Data Types

Лекция охватывает основные аспекты программирования на языке Си, включая структуру программы, систему типов, переменные и константы. Объясняются директивы препроцессора, синтаксис объявления переменных и различные типы данных, а также правила именования переменных. Приводятся примеры кода и задания для закрепления материала.

Загружено:

vasyokzalupa322
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
15 просмотров51 страница

01 Program Structure Data Types

Лекция охватывает основные аспекты программирования на языке Си, включая структуру программы, систему типов, переменные и константы. Объясняются директивы препроцессора, синтаксис объявления переменных и различные типы данных, а также правила именования переменных. Приводятся примеры кода и задания для закрепления материала.

Загружено:

vasyokzalupa322
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 51

Лекция №1 Структура программы, система

типов, переменные и константы в языке Си


Структура программы

Система типов

Переменные и константы

1
Шаблоны


Для описания синтаксиса будут применяться ша-
блоны со следующими обозначениями:

 <имя переменной> — в угловых скобках запи-


сываются элементы (сущности), которые надо
подставить по смыслу
 [необязательная часть] — в квадратных скоб-
ках указывается часть, которая может отсут-
ствовать
2
Простейшая программа на языке Си


Простейшая программа на языке Си состоит из ди-
ректив препроцессора и описания главной функции

// Директивы препроцессора
#include <stdio.h> /* подключение стандартных функций
ввода-вывода */
#include <conio.h> /* подключение расширенных функций
ввода-вывода */

// Описание главной функции программы


int _tmain(int argc, _TCHAR* argv[])
{
.......
3 }
Препроцессор языка Си

Предназначен для предварительной обработки текста


программы:

Удаляет комментарии и лишние пробелы



По команде #include включает в состав программы
содержимое другого файла (обычно заголовочного
файла с расширением .h)

4
Подключение заголовочных файлов


Заголовочный файл содержит описание функций и
типов данных

Подключение файла с описанием библиотечных


функций:
#include <<имя файла>>
файла>

Подключение собственного файла, входящего в
проект:
#include "<имя файла>"
файла>
5
Задание

Напишите директивы препроцессора для


подключения библиотечного файла math.h и
собственного файла testing.h

6
Подключение заголовочных файлов

#include <math.h>
#include "testing.h"

7
Комментарии


Игнорируются компилятором. Используются про-
граммистом для пояснения своих действий

Многострочный комментарий:

/* <многострочный
текст> */

Однострочный комментарий:

// <однострочный текст>
8
Главная функция программы


Обязательной частью программы на языке Си яв-
ляется «главная» функция программы – main или
_tmain, выполнение которой считается выполнени-
ем программы

// Описание главной функции программы


int _tmain(int argc, _TCHAR* argv[])
{
<тело главной функции>
9
}
Тело главной функции


Тело функции – это последовательность объявле-
ний переменных и операторов (действий)
// Описание главной функции программы
int _tmain(int argc, _TCHAR* argv[])
{
int year; // объявление переменной

print("Current year is "); // оператор выражения


scanf("%d",&year); // оператор выражения
year = year + 1; // оператор выражения
print("Next year is %d",year); // оператор выражения

return 0; // оператор возврата из функции


10 }
Активная часть языка: действия


Оператор (statement) – это законченное действие на
языке программирования

Сложные операторы могут включать в себя другие
операторы

Примитивные операторы в языке Си завершаются
точкой с запятой ;
11
Разновидности операторов

Оператор вычисления выражения, например,


a = b + 1;

Пустой оператор: ;

Управляющий оператор, например,


if(a > b) { min = b; }


else { min = a; }
12
Разновидности операторов

Составной оператор - два или более операторов,
объединенных с помощью фигурных скобок {}, {}
например,
{
tmp = a;
a = b;
b = a;
}

Синтаксически составной оператор воспринимается
как единичный оператор и может использоваться в
любых конструкциях, где синтаксис требует одного
13 оператора
Пассивная часть языка: данные.
Понятие типа данных

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

Понятие типа применимо к переменным, константам
и результатам выражений

Использование операций с неразрешенными типами
данных приведет к ошибке компиляции невозможно
преобразовать ... в ... (can not convert ... to
14 ...)
Система типов данных в языке Си

Типы данных

Простые (скалярные) Структурированные Тип


Указатели
типы данных типы данных void

Арифметические Арифметические
Перечис- Объеди-
целочисленные типы с плавающей Массивы Структуры
лимый тип нения
типы точкой

Беззнаковые Встроенные типы


Знаковые
данных

char unsigned char float


short int unsigned short int double Типы данных,
int unsigned int long double определяемые
long int unsigned long int пользователем
15
Арифметические типы данных

Тип Диапазон Размер


char -128...127 (-27...27-1) 1 байт
unsigned char 0...255 (0...28) 1 байт
short int -32768…32767(-215...215-1) 2 байта
unsigned short int 0…65535 (0...216) 2 байта
int зависит от операционной системы,
в Win32 аналогичен long int
long int -2147483648…2147483647
(-231...231-1) 4 байта
unsigned long int 0…4294967295 (0...232) 4 байта
float ±3,4*10±38, 7 значащих цифр 4 байта
double ±1,7*10±308, 15 значащих цифр 8 байт
long double идентичен double

16
Константы

Константами называют неизменяемые


величины определенного типа, упоминаемые
в тексте программы

Например:
10, 0xA0, 3.14159, 1.45E-4, 'a', "Hello"

17
Целые константы

Тип данных: int

Формат Примеры
Десятичный - последовательность цифр, не
начинающаяся с нуля, если это число не 10, 16, 255
нуль
Восьмеричный - последовательность цифр 012, 020,
0-7, начинающаяся с нуля 0377
Шестнадцатеричный - последовательность 0xA, 0x10,
цифр и букв A-F, начинающаяся с 0x 0xFF

18
Представление логических значений:
ИСТИНА, ЛОЖЬ


Любое целое значение, отличное от нуля,
считается истиной

Целое значение, равное нулю, считается ложью


19
Вещественные константы

Тип данных: double


Формат Примеры
Десятичный:
5.7, .009, 34.
[<цифры>].[<цифры>]
Экспоненциальный: .057E2, 9e-3,
[<цифры>].[<цифры>]{E|e}[+|-][<цифры>] 3.4E1

Константа 3.4E1 означает 3.4*101. Число 3.4 называ-


ют мантиссой, а 1 — порядком.

Чтобы придать целой константе вещественный тип


20 необходимо записать ее как 2f или 2.0
Представление вещественных значений в па-
мяти компьютера (потеря младших разрядов)

исходное значение
0.1235 1834.7679 16755665.7689

0.1235 1834.767 16755660


считываемое значение
21
Задание

Метр это 0,000539665407 мили. Запишите это


число как вещественную константу в десятичном
и экспоненциальном формате.

22
Вещественные константы

Десятичный формат:

0.000539665407
Экспоненциальный формат:

5.39665407Е-4

23
Представление символов

Символы представляются целыми числами в


диапазоне [0, 255] – это коды из таблицы символов

24
Символьные константы
Тип данных: char

Формат Примеры
Обычный:
'A', 'z'
'<символ>'
Числовой:
'\0', '\0xA'
'\<код символа>'
Кроме обычных символов имеются управляющие
символы, которые называются escape-последова-
тельностями Последоват-ность Наименование
'\n' перевод строки
'\t' горизонтальная табуляция
'\\' обратная косая черта
'\"' двойная кавычка
25 '\'' одинарная кавычка
Строковые константы

Тип данных: char []

Формат Примеры
Последовательность символов, "Hello world!!!",
заключенная в двойные кавычки: "Our country is
"<символьные константы>" \tRussia"

'a' ≠ "a"
Внимание! 'a' не равно "a", так как слева символ, а
справа строка, которая является массивом символов

26
Задание

Создайте строку, содержащую свою фамилию,


имя и отчество.

Фамилия, имя и отчество должны располагаться


на разных строках

27
Строковые константы

Без переносов:

"Козлов Алексей Петрович"
С переносами:

"Козлов\nАлексей\nПетрович"

28
Понятие переменной


Переменная – это именованный объект определен-
ного типа, значение которого может изменяться в
ходе работы программы

Переменная – это именованная область памяти, в
которой хранятся данные

Переменную можно рассматривать как сущность, об-
ладающую именем, значением и типом
29
Понятие переменной


Имя и тип задаются при объявлении переменной и
остаются неизменными в течение ее существования

Значение переменной может меняться в ходе вычис-
лений

Получение начального значения переменной назы-
вается ее инициализацией

30
Имена переменных в языке Си


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

Имя переменной НЕ должно начинаться с цифры

Язык Си различает прописные и строчные буквы:
I и i — разные переменные

Корректные имена: i, weight123, my_name,
HisName, __yylval

Некорректные имена: 123weight, abc$ef
31
Имена переменных в языке Си


Имя переменной должно ясно обозначать ее назна-
чение (какие данные она хранит)

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

Слова в именах переменных могут разделяться
символом подчеркивания либо отделяться заглавной
буквой в начале каждого слова

Признаком качественного программирования яв-
ляется соблюдение стиля (языка слов, способа раз-
деления слов) одинаковым во всей программе.
32
Задание

Определите среди следующих имен хорошие,


неудачные и некорректные

getcwd, ResultFileHandle, 1j_list,


dlina_kvadrata, flag15, __,
слон_г, i, mini-car

33
Имена переменных в языке Си.
Хорошие имена

ResultFileHandle Точно описано какой файл,


слова с большой буквы, язык
английский

dlina_kvadrata 
Транслит, слова разделены
подчеркиванием

i 
Общепринятое обозначение
счетчика цикла, происходит от
34
слова iteration
Имена переменных в языке Си.
Неудачные имена

getcwd 
Сложно угадать, что имя обозначает get
current working directory

flag15 Непонятно, что именно обозначает 15-й


флаг и чем отличается от 14-го

__ 
Имя из одних подчеркиваний
допустимо, но совершенно непонятно
35
Имена переменных в языке Си
Некорректные имена

1j_list 
Начинается с цифры

слон_г 
Содержит русские буквы, допустимы
только латинские

mini-car

Содержит символ минус —
допустимы только подчеркивания

36
Синтаксис объявления переменной

Перед использованием переменная должна быть


объявлена:
<тип> <имя переменной> [= <выражение>];
<выражение>

Использование необъявленной переменной приведет


к ошибке компиляции ... необъявленный идентифи-
катор (...
( undeclared identifier)

37
Задание

Объявите целочисленную переменную i и


присвойте ей начальное значение 0

38
Синтаксис объявления переменной

int i = 0;

Другие примеры:

//Объявления переменных
int x, s; // без инициализации
int y = 0, u = 77; // обычная инициализация

// Допустимая инициализация
float w1 = 0f, w2 = 5.5,
w3 = w1 + w2 + 125.25;
39
Использование не инициализированной
переменной

Попытка использовать не инициализированную


переменную в вычислениях приводит к ошибке во
время выполнения программы

... Использована неинициализированная


локальная переменная ... (... The variable ...
is being used without being defined)

int x, y; // объявление без инициализации

x = y + 1; // возникнет ошибка выполнения


40 // программы
Основы форматированного ввода-вывода


Форматированный ввод и вывод в языке Си осуще-
ствляется с помощью функций библиотеки stdio.h

 printf (print formatted) — вывод на экран


 scanf (scan formatted) — ввод с клавиатуры

Первым аргументом обеих функций является фор-
матная строка, указывающая что и как выводить (вво-
дить), последующими — значения для вывода или
переменные для ввода

Форматная строка содержит спецификаторы, указы-
41 вающие тип значений переменных для ввода (вывода)
Спецификаторы ввода-вывода


Форматная строка содержит спецификаторы, указы-
вающие тип значений переменных для ввода (вывода)
и их формат:

 %d — целое десятичное число


 %o — целое восьмеричное число
 %x — целое шестнадцатеричное число
 %f, %e, %g — вещественные числа
 %с — символ
 %s — строка (вводится до пробела)
42
 %% - позволяет вывести символ %
Форматированный вывод


Функции printf указывается:
 форматная строка для вывода, которая содержит

сообщение с расставленными в нем специфика-


торами;
 значения для вывода (по количеству специфика-

торов)

int x = 5;
printf("This is number %s: %d\n Bye","five", x);
This is number five: 5
43 Bye
Форматированный ввод


Функции scanf указывается:
 форматная строка для ввода, обычно состоит из

одного спецификатора (не указывайте ничего


лишнего!);
 переменная для ввода, перед которой стоит знак

& (перед строками знак & НЕ ставится)

int x;
scanf("%d",&x);
//теперь х равен введенному с клавиатуры числу

44
Задание

Спросите у пользователя его возраст и введите его в


целочисленную переменную.

Напечатайте сообщение сколько лет пользователю


будет через год.

45
Форматированный ввод/вывод

int age = 5;
printf("Please enter you age\n");
scanf("%d", &age);
printf("Next year you will be %d years old\n",
age + 1);

Please enter you age


17
Next year you will be 18 years old

scanf("Please enter you age %d", &x);/* Ошибка!


В форматной строке функции scanf указывается ТОЛЬКО
46
спецификатор */
Это надо помнить!


Программа на языке Си строится из небольшого
числа элементов: команд препроцессора, констант,
переменных (идентификаторов), операций и ключе-
вых слов

Из этих элементов с помощью знаков препинания
строятся более сложные конструкции: выражения,
операторы, объявления и описания

Константы, переменные и выражения обязательно
имеют тип
47
Это надо помнить!


Простейший оператор языка Си состоит из выраже-
ния, заканчивающегося точкой с запятой

Символьная константа и строка из одного символа —
разные величины: 'a' не равно "a"

Переменная должна быть объявлена в начале функ-
ции

Перед использованием переменной необходимо
присвоить начальное значение (инициализировать)
48
Ошибки при компиляции
для VS 2008 Russian


'<имя>': необъявленный идентификатор — пере-
менная с указанным именем не была объявлена
(либо опечатка в имени переменной)

Отсутствие ';' перед ... - перед указанной стро-
кой отсутствует точка с запятой (т.е. предыдущий
оператор не завершен точкой с запятой).

49
Ошибки при компиляции
для VS 2005 English


'<имя>': undeclared identifier — переменная с
указанным именем не была объявлена (либо опе-
чатка в имени переменной)

missing ';' before ... - перед указанной стро-
кой отсутствует точка с запятой (т.е. предыдущий
оператор не завершен точкой с запятой)

50
Ошибки во время выполнения
для VS 2008 Russian / 2005 English


Диалог с надписью "Run-Time Check Failure #3 -
The variable '<имя>' is being used without
being defined." - указанная переменная не была
инициализирована (не получила начального значе-
ния) до ее использования

51

Вам также может понравиться