Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Начало и конец функции или блока

Поиск

ОСНОВНЫЕ ЭЛЕМЕНТЫ ПРОГРАММЫ

Изучаемая версия языка

Существует большое количество версий языка Си. Мы будем изучать язык Турбо Си 2.0 фирмы Borland. При желании можно пользоваться версиями Турбо С++ 3.0 или Borland C++ 3.1. Для самостоятельной работы с этим языком программирования рекомендуется книга [3], в которой рассматривается версия языка Си фирмы Borland.

Программа «Hello World»

Пример 1.1

Основные элементы рассмотрим на примере простейшей программы, предложенной ее создателем Денисом Ритчи [1]. При вводе программы необходимо точно соблюдать ее синтаксис, а именно:

– вводить программу строчными буквами;

– некоторые строки программы заканчиваются символом точка с запятой.

Листинг 1.1

/* Программа `Привет мир!` */

#include <stdio.h> /* подключение файла библиотеки */

void main(void) /* главная функция */

{ /* начало блока */

printf(“Hello world!\n”); /* вывод на экран сообщения */

} /* конец блока */

Рассмотрим основные элементы программы.

Комментарии

Комментарий начинается с символов /* и заканчивается теми же символами, идущими в обратном порядке */. Они служат для ввода пояснений в программе. Например, строка

/* главная функция */

представляет собой комментарий. При запуске программы комментарии компилятором языка игнорируются.

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

/* Это

просто

строка

комментария */

Заголовочные файлы

Вначале содержательной части программы на языке Си всегда используются так называемые «директивы препроцессора», начинающиеся с символа #. В данной программе используется строка

#include <stdio.h>

которая означает, что необходимо подключить заголовочный файл «stdio.h». Это позволяет использовать в программе библиотеку стандартного ввода-вывода, а именно, в данной программе используется функция стандартного вывода данных на экран printf().

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

stdio.h библиотека стандартного ввода-вывода, например, для использования функций ввода с клавиатуры и вывода на экран scanf() и printf(), ввода/вывода в файл fprintf()и fscanf()
conio.h библиотека консольного ввода-вывода, например, для функций ввода одиночного символа getch(), конольного ввода/вывода cscanf() и cprintf(), очистки экрана clrscr(), перемещения курсора gotoxy(), изменения цвета символов textcolor()
math.h математическая библиотека, например, для функций sqrt(), sin(), cos(), log(), exp()
graphics.h графическая библиотека, например, для функций инициализации графики initgraph(), рисования графических примитивов line(), rectangle()

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

#include <stdio.h>

#include <conio.h>

#include <math.h>

Главная функция

Листинг программы на Си содержит одну или несколько функций. Обязательным является использование главной функции – функции main(). Строка описания главной функции в приведенной программе содержит ключевое слово void. Это означает, что после окончания функции ничего не возвращается. В общем виде описание каждой функции, в том числе и функции main(), имеет следующий синтаксис (символы русского алфавита и знаки < и > используются только для пояснения):

<ТипВозвращаемогоЗначения> <ИмяФункции> (<СписокФормальныхПеременных>)

где <ТипВозвращаемогоЗначения> – результат исполнения функции, точнее тип возвращаемого значения переменной (допустимо использовать разрешенные типы, например, void, int, float и т.д.);

<ИмяФункции> – идентификатор (имя) функции;

<СписокФормальныхПеременных> – перечень типов и идентификаторов формальных переменных.

Чтобы стала понятной эта форма описания функции, приведем запись функции в естественной математической форме:

y = sin (x)


ТипВозвращаемогоЗначения ИмяФункции СписокФормальныхПеременных

В рассматриваемом примере программы «Hello World!» строка описания заголовка функции

void main(void)

означает, что имя функции main, список формальных параметров отсутствует и после ее завершения ничего не возвращается.

Вывод на экран сообщения

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

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

\n – перевод строки;

\t – горизонтальная табуляция (перенос курсора вправо на несколько позиций);

\а – подача звукового сигнала.

Количество и последовательность специальных символов не ограничивается. Например, вызов функции

printf(“Эта\n\tПросто\n\t\tСтрока\n”);

позволит вывести на экран сообщение в нескольких строках со смещением в каждой новой строке:

Эта

Просто

Строка

В рассматриваемом примере программы на экран выводится сообщение “Hello world!” и курсор переводится на новую строку.

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

Пример 1.2

Усложним программу: необходимо ввести с клавиатуры два целых чисел и результат вывести на экран.

Листинг 1.2

/* Расчет суммы двух чисел */

#include <stdio.h>

#include <conio.h>

main()

{

int a,b,c; /* объявление трех целых переменных */

clrscr(); /* очистка экрана */

printf(“Введите два целых числа:\n”);

scanf(“%d%d”,&a,&b); /* ввод с клавиатуры двух переменных */

c=a+b; /* выполнение арифметической операции */

printf(“Сумма чисел равна: %d\n”,c);

/* вывод результата */

getch(); /* ожидание нажатия любой клавиши */

}

Рассмотрим только новые элементы программы.

Исполнение программы

После ввода программы, ее компиляции, компоновки и запуска на исполнение на чистом экране появится сообщение “Введите два целых числа:”. После этого необходимо будет ввести два целых числа. Пример выполнения программы приведен ниже:

 

Введите два целых числа:

Сумма чисел равна: 23

 

Окно редактора

При работе с программой Турбо Си все средства разработки программы, а именно, редактирование, компиляция, компоновка, отладка программы, находятся под рукой. Эти средства называются интегрированной средой разработки (оболочкой программы). На рис. 1.2 представлена интегрированная среда с набранной программой «Привет мир!».

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

 

Рис. 1.2. Интегрированная среда разработки

Задания для решения

1.6.1. Напишите программу, в которой на экран выводятся фамилия, имя, отчество, при этом каждое слово выводится с новой строки.

1.6.2. Измените предыдущую программу таким образом, чтобы текст выводился в центре экрана (в текстовом режиме экран содержит 25 строк, 80 столбцов).

1.6.3. Напишите программу возведения целого числа в квадрат: с клавиатуры вводится целое число, это число умножается само на себя и на экран выводится результат.

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

Введите R1: __

Введите R2: __

Суммарное сопротивление R1||R2: __

1.6.5. По введенным с клавиатуры значениям сопротивления R и приложенного напряжения U программа рассчитывает ток I, протекающий через сопротивление и мощность P, выделяемую на нем. Экран исполнения программы должен быть примерно такой:

Введите R= __

Введите U= __

Расчет тока и мощности:

Ток I= __

Мощность P= __

1.6.6. На основе листинга 1.2 составьте программу, которая выдает одновременно результат деления двух целых чисел (операция '/') и остаток от деления двух целых чисел (операция '%'). Выполните анализ полученной программы – выводится ли дробная часть числа, выполняется ли округление, делятся ли отрицательные числа, делятся ли вещественные числа?

1.6.7. Модифицируйте предыдущую программу для деления вещественных чисел (смените тип данных – вместо int установите float, и спецификации формата – вместо %d установите %f). Выполните анализ полученных при делении чисел – выводится ли дробная часть числа, делятся ли отрицательные числа, делятся ли целые числа?

1.6.8. Напишите программу для ввода комплексного числа в алгебраической форме: вещественной и мнимой частей, и вывода в показательной форме: модуля и аргумента комплексного числа.

Рекомендации при составлении программы. Для использования математических функций (гармонических, показательных, логарифмических и т.д.) в программы на языке Си включается файл <math.h>. Перечень всех математических функций и их описанием можно просмотреть используя контекстную помощь (нажать клавиши Ctrl+F1 на имени включаемого файла <math.h>). Для написания заданной программы необходимо: использовать функцию квадратного корня (функция sqrt). Для ввода вещественных чисел смените тип данных – вместо int установите float, и спецификации формата – вместо %d установите %f).

 

 


ПЕРЕМЕННЫЕ И КОНСТАНТЫ

Любая программа обрабатывает информацию или данные, в программе можно использовать переменные и константы. Как понятно из названия переменные во время исполнения программы могут изменять свои значения. Эти значения могут изменяться в определенном диапазоне в соответствии с заданным типом данных. Термин константа в общем случае относится к данным, которые не могут быть изменены во время исполнения программы.

Типы данных

В языке Си можно использовать различные типы данных для хранения и обработки информации. Данные каждого типа могут принимать значения в некотором заранее известном диапазоне. В памяти они занимают определенное количество байт. Таким образом, тип данных - это способ хранения информации в памяти.

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

Основные типы данных языка ТС

Таблица 2.1

Тип данных Название типа Размер занимаемой памяти, Байт Диапазон допустимых значений
char символ   -128... 127
unsigned char беззнаковый символ   0...255
int целое   -32768...32767
unsigned int беззнаковое целое   0...65535
long длинное целое   -2147483648... 2147483647
unsigned long беззнаковое длинное целое   0...4294967295
float вещественное   ±(3,4*10-38…3,4*1038)
double вещественное двойной точности   ±(1,7*10-308…1,7*10308)
long double длинное вещественное двойной точности   ±(3,4*10-4932... 3.4*104932)

Типы данных char, int u long являются типами для хранения целых чисел. Действительно любой символ связан с целым числом – кодом этого символа по так называемой таблице символов ASCII. Этот символ необходим для идентификации нажатой на клавиатуре клавиши или при выводе на принтер.

Различие между целыми типами данных со знаком и без него (модификатор unsigned) состоит в том, как преобразуется старший бит целого числа. Для знакового числа старший бит определяет знак числа - если си равен нулю - число положительное, если равен единице - число отрицательное-

Типы float, double и long double являются типами данных для представления чисел с плавающей запятой.

Переменные

Переменная - это область памяти, имеющая имя и предназначенная для хранения меняющихся данных определенного типа,

Прежде чем использовать переменную в программе, необходимо объявить её. Для этого указывается тип данных, а затем имя переменной. В общем виде объявление переменной выполняется таким образом:

<ТипДанных> <ИмяПеременной>;

Например,

int i; /* объявление целой переменной i */

int j,n=5,k1,k2; /* объявление 4 целых переменных,

инициализация одной из них */

long g=10; /* объявление переменной g типа длинное целое и инициализация её началь­ным значением 10*/

float a, b=3.14, с;/* объявление 3 вещест­венных переменных а, b, с, инициализация начально­го значения b */

k1=2*n+1;

k2=3*j;

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

Вместе с объявлением переменной, ей можно присвоить начальное значение - этот процесс называется инициализацией. Переменные, которые объявлены, но не инициализированы, содержат случайные значения. Так, в выше приведенном примере после объявления переменных выполнены расчеты значений переменных k1 и k2. После расчета k1 будет иметь определенное значение и равно 11, значение же переменной k2 произвольное, так как в выражении значение переменной j неопределенно.

Имена переменных

Идентификаторы могут содержать буквы верхнего и нижнего регистров латинского алфавита:

A, B, C,..., Z, a, b, c,..., z,

символ подчеркивания:

_

а также цифры:

0, 1, 2..., 9.

Нельзя в имени использовать русские буквы, специальные символы, знаки препинания, пробелы. Обязательным также является следующее условие: имя не должно начинаться с цифры.

Максимально допустимая длина имени переменной различается в зависимости от реализации языка. Язык ТС различает первые 32 символа имени переменной, хотя длина может быть и большей. Еще одной особенностью является то, что имена переменных, написанные строчными и прописными буквами, определяются компилятором ТС как различные, например идентификаторы:

NUM Num num

определяют три различные переменные. При написании программ на языке Си стараются придерживаться следующего правила объявления имен переменных - имя записывается с использованием строчных букв (в отличие от констант, записываемых прописными буквами). Это облегчает чтение и понимание программ. Ниже приведены варианты правильно записанных и неверных именах переменных

Правильные имена Неправильные имена
first первый
massiv1 1massiv
hot_key hot-key
you_and_me you.and.me
number_5 number№5
  printf
  if

Два последних примера неправильных имен показывают, что нельзя в именах использовать ключевые слова языка (if) и названия функций (printf).

Кроме этого, хорошим стилем написания программы считается использование понятных имен переменных. Например, если в программе используется переменная «режим экрана», то можно конечно использовать имя m или r, но более наглядным будет имя mode_screen или rejim_ekran. К тому же при объявлении переменных желательно использовать в тексте программы комментарии, раскрывающие назначение введенных переменных.

Константы

В языке Си представляют собой постоянные параметры, константы, которые не изменяются в ходе исполнения программ. Константы могут быть для любого типа данных. Примеры констант приведены в табл. 2.2.

Пример констант различных типов данных

Таблица 2.2.

Имя константы Тип Примеры
символ char ’A’ ‘ч’ ‘\n’
целое int 10 -9345 32000
длинное целое long 100000 5L
вещественное двойной точности double 3.14 1.23456789 –8.9е-40

 

Константы типа символ

Можно задавать в двух формах в виде отдельного символа, который записывается в одиночных кавычках ('А ') или в виде целого числа (55). При этом необходимо помнить, что константы, например, '0' и 0 описывают различные данные.

В языке Си существуют символьные константы, обозначающие специальные управляющие символы, такие как: перевод строки, звуковой сигнал, горизонтальная табуляция. Эти символы нельзя ввести с клавиатуры. Для их использования вначале записывается символ '\' – обратный слеш. Например, символ, означающий перевод строки, описывается так: '\n', горизонтальная табуляция – '\t'. Перечень основных специальных символов приведен в таблице 2.3.

Специальные символы

Таблица 2.3.

Обозначение Назначение
\n перевод строки
\r возврат каретки
\t горизонтальная табуляция
\v вертикальная табуляция
\b стирание символа, возврат на шаг
\f перевод страницы
\” двойная кавычка
\’ апостроф, одиночная кавычка
\\ обратный слеш
\0 нулевой символ, конец строки
звуковой сигнал
\? символ вопроса

 

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

Эти константы не имеют десятичной точки и порядка числа. В программировании очень часто используются числа, записанные в других системах счисления - двоичной, восьмеричной и шестнадцатеричной. Для двух последних систем в языке Си есть специальная форма записи:

– для восьмеричных целых констант перед числом записывается ноль, и далее используются цифры 0…7;

– для шестнадцатеричных целых констант перед числом устанавливаются два символа 0х и далее используются цифры 0... 9, а также буквы латинского алфавита A, B, C, D, E, F обозначающие соответственно числа от 10 до 15. Примеры целых констант:

восьмеричные: 01 077 012340

шестнадцатеричные: 0х51 0х6А0 0xF59В

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

на языке Си по умолчанию воспринимаются программой как числа типа double. Их можно записать в двух формах:

– в виде числа с десятичной точкой, например, 0.1, 15.189;

– в научном виде (экспоненциальной форме), в котором вместо показателя основания записывается символ Е (или е), например: 1.1Е–10, –5е2 (что эквивалентно математической форме записи чисел 1.1×10–10 и –5×102).

Различие между числами float и double состоит не только в большем диапазоне последних, но и в более точном значении чисел типа double – верными являются 15...16 значащих цифр.

2.6. Макроопределения

Наряду с использованием в тексте программ констант в языке Си существует возможность применения макроопределений (макросов). Макроопределение устанавливает соответствие между именем и определённым значением. Для использования макросов существует несколько предпосылок. Если в программе используется одна и та же константа несколько раз в различных местах программ, то становится желательным использовать соответствующее макроопределение. Другой вариант применения макросов - использование хорошо понимаемых имен.

В общем случае форма записи макроопределения следующая:

#define <ИмяМакроса> <3аменяемоеВыражение>

где <ИмяМакроса> – любое разрешенное имя переменной, при этом желательно использовать заглавные буквы (что облегчает чтение программы). Примеры макросов:

#define NUNBER 1OO

#define LEFT 75

#define RIGHT 77

#define ENTER 13

#define SPACE 0x20

#define PI 3.14159

После определения этих макросов в заголовке, в тексте программы можно использовать имена NUMBER, LEFT, RIGHT и т.д. На этапе создания исполняемого файла (точнее в фазе препроцессора, выполняемой до компиляции) происходит замена имен макросов на соответствующие им значения. Например, если в тексте программы встречаются имена NUMBER, то происходит замена этого имени на значение 100.

2.7. Преобразование типов данных

Исходно предполагается, что пользователь правильно использует типы констант и переменных. Что произойдет, если в выражениях присутствуют данные различных типов? В этом случае язык Си выполняет автоматическое приведение типов данных. Например, какое число будет записано в переменной а после инициализации

int а=11.54;

Так как переменная а определяется как переменная целого типа, то дробная часть вещественной константы 11.54 будет отброшена без округления и в ячейке переменной а будет записано целое число 11.

То же самое произойдет, т.е. не будет учитываться дробная часть числа, если исполнить следующие операторы:

float i;

i=1/10;

Это происходит, потому что в начале вычисляется правая часть выражения, а она содержит только целые константы 1 и 10, следовательно, результат тоже будет целое число: 1/10=0, а не 0.1 как ожидалось. Окончательно переменной i будет присвоено значение 0 и это несмотря на то, что она определяется вещественной.

В общем случае при расчете арифметических выражений приведение типов данных в языке Си происходит следующим образом:

1) все переменные типа char преобразуются в тип int, переменные типа float - в тип double.

2) для любой пары операндов (т.е. в результате вычисления, например, суммы или произведения двух чисел) происходит следующее преобразование:

– если хотя бы один из операндов double, то и второй преобразуется в этот тип;

– если хотя бы один из операндов long, то и другой преобразуется в long;

– если хотя бы один из операндов unsigned, то и другой преобразуется в unsigned.

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

Рассмотрим пример вычисления арифметического выражения:

char а=25, b=20;

int i,j,

long k;

double d=l.55;

i=a*b;

k=10000*b;

j = b*d;

printf(“i=%d k=%ld j=%d”,i,k,j);

При вычислении значения переменной i хотя обе переменные имеют тип char и как будто бы результат перемножения должен выйти за максимальные размеры, но по первому правилу обе переменные приводятся к целому типу. В этом случае результат за допустимые пределы не выйдет i=25*20=500. Для второй переменной k целого типа результат выходит за пределы целого, хотя переменная k объявлена типа длинного целого, поэтому результат перемножения будет неверный. Чтобы исправить эту ошибку необходимо строчку переписать следующим образом:

k=(long)10000*b;

Для третьей переменной j результатом перемножения будет вещественное число двойной точности, при присвоении этого результата происходит приведение типа (double)®(int) и при этом происходит потеря дробной части полученного произведения. пределы.

Задания для решения

2.8.1. Составьте программу, в которой объявляются две целые переменные a1 и a2, вещественная переменная b и переменные типа символ c и d. Переменная a2 инициализирована значением 10.

2.8.2. Найдите ошибки в приведенной программе

#include <conio.h>

#include <studio.h>

void main() {

int printf=5; /* объявление целой переменной */

long number-one; объявление переменной типа длинное целое

double f=1e,

scanf=3.14;/* объявление вещественных переменных */

char if_else='a',

red%bull=100;/* объявление переменных типа символ */

unsigned float a=5,

void=1.e-10;;/* объявление вещественных переменных */

getch(); /* ожидание нажатия любой клавиши */

}

2.8.2. Напишите программу, в которой вводится переменная типа символ, она инициализируется значением 125. Прибавьте единицу к переменной и выведите новое значение переменной на экран. Повторите эти операции (увеличения на единицу и вывода на экран) еще 3 раза. Какие значения переменной будут выведены? Объясните результат.

2.8.4. Составьте программу, в которой сообщение "Привет мир" на экран бы выводилось в кавычках.

2.8.5. Запишите в тетради с указанием всех пробелов и созданных новых строк, что будет выведено на экран следующими функциями (символ V означает символ пробела):

printf(“Это\nVПростоVV\nСтрока\n\n”);

printf(“H\nVE\nVVL\nVVVL\nVVVVO\n”);

printf(“\t\tИванов\n\tПетров\n\Сидоров\n”);

 


ФУНКЦИИ ВВОДА-ВЫВОДА

Пример 3.1

Рассмотрим программу, в которой вычисляется значение функции y=sin(x) для двух введенных с клавиатуры значений аргумента. При этом вывод на экран необходимо выполнить в виде следующей таблицы (ширина поля каждой переменной 8 позиций, точность – 4 знака):

x y
xx.xxxx xx.xxxx
xx.xxxx xx.xxxx

Листинг 3.1

/* Программа вычисления функции y=sin(x) */

#include <stdio.h>

#include <math.h>

void main()

{

float x1,x2,y1,y2;

 

printf(“введите два значения аргумента:\n”);

scanf(“%f%f”,&x1,&x2);

printf(“\n| x | y |”);

printf(“\n|––––––––|––––––––|\n”);

y1=sin(x1);

y2=sin(x2);

printf(“|%8.4f|%8.4f|\n”,x1,y1);

printf(“|%8.4f|%8.4f|\n”,x2,y2);

}

Пример 3.2

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

Листинг 3.2

/* Рисование окна и ввод фамилии */

#include <conio.h>

void main()

{

char name[15];/*объявление массива символов для ввода строки*/

clrscr(); /* очистка экрана */

textcolor(YELLOW); /* задание цвета символов */

textbackground(BLUE); /* задание цвета фона */

gotoxy(30,11); /* задание положения курсора */

cprintf(“┌────────────────────┐”);

gotoxy(30,12);

cprintf(“│ Введите фамилию │”);

gotoxy(30,13);

cprintf(“│ │”);

gotoxy(30,14);

cprintf(“└────────────────────┘”);

textcolor(CYAN); /* задание цвета символов */

gotoxy(35,13);

cscanf(“%s”,name); /* ввод строки */

}

Примечание: для ввода программы необходимы символы псевдографики. При их вводе можно использовать коды символов:

218 ┌ 196 ─ 191 ┐

 

179 │ 179 │

 

192 └ 196 ─ 217 ┘

Пример 3.3

Написать программу, принимающую символ с клавиатуры и выдающую его код на экран

Листинг 3.3

/* программа вывода на экран кода нажатой клавиши */

#include <conio.h>

void main()

{

int kod; /* объявление переменной */

clrscr(); /* очистка экрана */

cprintf(“Нажмите клавишу: ”); /* вывод сообщения */

kod=getch(); /* ввод клавиши */

cprintf(“\nКод клавиши: %d\n”); /* вывод кода клавиши */

getch(); /* ожидание нажатия

произвольной клавиши */

}

3.6. Задание для самостоятельной работы

3.6.1. Записать отдельные строки программы, используя функции форматированного ввода-вывода:

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

б) вывод на экран значения переменных типа строка (массив символов) family, name, gruppa в следующем виде (после символов … должны идти значения указанных переменных):

Фамилия: …

Имя: …

Группа: …

в) вывести на экран две вещественные переменные в заданном формате: 10 позиций общая ширина поля переменной, 3 позиции – точность;

г) ввод двух переменных типа беззнаковое целое first и second;

д) ввод целой переменной x в шестнадцатеричном формате, вещественной переменной y и вещественной переменной двойной точности z;

е) выполнить ввод вещественных переменных power, moment и velocity, используя функции ввода-вывода в следующем формате (после символов … должен идти ввод указанных переменных):

Параметры двигателя:

мощность двигателя – …

момент двигателя – …

скорость двигателя – …

 

3.6.2. Записать отдельные строки программы, используя только функции консольного ввода-вывода:

а) очистить экран и далее вывести в центре экрана значения двух целых переменных
a и b, изменив при этом цвет символа и фона;

б) вывести значения четырех вещественных переменных a, b, c и d в следующем виде (ширина поля каждой переменной – 8 позиций, точность – 0 позиций):

a= …

b=…

c=…

d=…

в) выполнить предыдущий пример, но совмещенный с вводом значений этих переменных.

3.6.3. Написать программу: выполняется очистка экрана, вводится вещественное число, на экран выводится корень из введенного числа (функция корня находится в математической библиотеке и вызывается так: y=sqrt(x);). Вывод корня выполнить в следующем формате – выравнивание по левому краю, общая ширина поля – 10 позиций, точность – 2 символа после десятичной точки.

3.6.4. Составить программу, в которой: выполняется очистка экрана, рисуется на экране изображение окна, внутри окна выполняется ввод трех параметров двигателя (см. задачу 3.6.1,е).

 

 


ОСНОВНЫЕ ОПЕРАЦИИ ЯЗЫКА

Операции языка Си

В языке существует большое количество операций (операторов). С помощью операций языка выполняются вычисления, сравнения, присваивания, а также ряд специфических задач. Наиболее часто используемые приведены в табл. 4.1. При выполнении операторов учитываются следующие особенности их исполнения:

а) каждой операции соответствует определенное количество операндов:

– унарные операции, имеющие только один операнд, например, операция взятия адреса переменной x запишется так: &x, а операция инкрементирования переменной i: i++;

– бинарные операции, имеющие два операнда, например, простейшие арифметические операции сложения, вычитания и т.д.: a+b или 4*x;

– единственная трехоперандная операция в языке – операция выполнения условия <операнд1>? <операнд2>: <операнд3>.

б) некоторые операции могут работать только с определенными типами данных, например, побитовые операции применяются только к целым типам данных;

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

г) в сложных выражениях последовательность исполнения операций определяется их приоритетом (см. крайнюю правую колонку в табл. 4.1, где 1 – наибольший приоритет исполнения операции).

Таблица 4.1.

Опера-ция Назначение Пример Прио-ритет
  Первичные операции    
[] индекс массива x[2][0]=5;  
() вызов функции, очередность выполнения y=sin(6.28*(x+1));  
. элемент структуры (прямой доступ) time.tm_hour=5;  
-> элемент структуры (косвенный доступ) time->tm_hour=5;  
  Унарные операции    
++ инкремент (увеличение на единицу) i++  
–– декремент (уменьшение на единицу) i––  
sizeof размер в байтах x=sizeof(int);  
(тип) преобразование типа y=(float)5/2;  
- унарный минус (изменение знака) y=-x;  
* косвенная адресация int x=*y;  
& взятие адреса scanf(“%d”,&x);  
  Арифметические операции    
* умножение 20*x  
/ деление x/10  
% деление по модулю x%10  
+ сложение x+20  
вычитание 40–x  
  Битовые операции    
~ побитовое НЕ y=~x;  
<< побитовый сдвиг влево y=x<<1;  
>> побитовый сдвиг вправо y=x>>1;  
& побитовое И y=x&15;  
^ побитовое исключающее ИЛИ y=x^15;  
| побитовое ИЛИ y=x|15;  

Продолжение таблицы 4.1.

Опера-ция Назначение Пример Прио-ритет
  Операции отношения    
< меньше if (x<6)  
> больше if (x>6)  
<= меньше или равно if (x<=6)  
>= больше или равно if (x>=6)  
== равно if (x==6)  
!= не равно if (x!=6)  
  Логические операции    
! логическое отрицание (операция НЕ) if (!x)  
&& логическое умножение (операция И) if (x>0 && x<6)  
|| логическое сложение (операция ИЛИ) if (x<0 || x>6)  
  Условная операция    
?: при условии a>b?10;-10  
  Операции присваивания    
= присваивание x=5  
*= присвоение произведения x*=3  
/= присвоение частного x/=3  
%= присвоение остатка x%=3  
+= присвоение суммы x+=3  
–= присвоение разности x–=3  
<<= присвоение левого сдвига x<<=3  
>>= присвоение правого сдвига x>>=3  
&= присвоение И x&=3  
^= присвоение исключающего ИЛИ x^=3  
|= присвоение ИЛИ x|=3  
  Прочие операции    
, запятая a=1, b=2;  

Арифметические операции

Операции сложения, вычитания, умножения и деления можно использовать ко всем типам данных. Если операнды одного типа, то результат будет того же типа. Например, вычисляя выражение 12/5, так как операнды целые числа, то в результате получим целое число



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 804; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.171.43 (0.012 с.)