Смекни!
smekni.com

C=getch();

}

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

- Я вызываю функцию supervisor.

- Вы меня вызывали?

- Да. Посмотрите, кто из студентов спит, и разбудите их.

1.3 Ввод-вывод
Для решения задачи в какой-либо проблемной области необходимо написать программу, в которой должны быть команды, позволяющие:
- выделять место для хранения данных;

- вводить исходные данных;

- обрабатывать исходные данные по алгоритму;

- выводить выходные данные.

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

1.3.1. Вывод

Вывод осуществляется на экран, принтер, винчестер (гибкие диски), порт. Рассмотрим функции вывода на экран.

Функция printf предназначена для этой цели. Формат: printf(<формат>[,аргумент1],...).

Формат - это строка в двойных кавычках, которая выводится на экран. Перед выводом printf заменяет все объекты в строке в соответствии со спецификациями аргумента. Например, printf(" В %d М содержится %d cm&bsol;n", I,J); %d в строке формата - это спецификация аргумента.

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

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

- %d целое число;

- %u целое число без знака;

- %ld длинное целое число;

- %p значение указателя;

- %f число с плавающей точкой;

- %e число с плавающей точкой в экспоненциальной форме;

- %c cимвол;

- %s строка;

- %x целое в шестнадцатеричном формате.

Можно задать ширину поля, например %6d -поле шириной 6.

Значение будет напечатано сдвинутым вправо (впереди пробелы), так что общая ширина поля равна 6.

Для формата вещественных чисел можно указать дробную часть, например %8.4f - поле шириной 8, десятичная часть 4.

В конце форматной строки можно поставить знаки:

&bsol;n перевод строки;.

&bsol;f (перевод формата или очистка экрана)

&bsol;t (табуляция)

&bsol;b (забой <-)

&bsol;xhhh (вставка символа c кодом ASCII hhh, где hhh содержит от 1 до 3 16-ричных цифр)

Для вывода можно использовать функции: puts и putchar.

Функция puts выводит строку на экран. Например:

#include <stdio.h>

main ()

{

puts("Привет, студент");

}

Функция putchar выводит на экран один символ.

1.3.2 Ввод

Ввод в Си в основном осуществляется с клавиатуры, из файла и порта.

Функция scanf аналогична printf. Ее формат: scanf(<формата>[,аргумент1],...). В scanf используются те же спецификаторы формата, что и у функции printf. Необходимо отметить, что scanf имеет одну особенность: аргументы, следующие за строкой формата, должны быть адресами, а не значениями (это не распространяется на символьные переменные). Ранее в примерах мы видели, что при вводе целого числа записывалась функция следующим образом:

scanf("%d", &a);

& -операция адреса, которая передает scanf адреса.

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

scanf ("%d, %d", &a, &b);

Теперь можно вводить, например 23,56.

Имеются сложности с вводом строки символов из нескольких слов - введутся только данные до первого пробела. Для решения этой проблемы существует функция gets.

#include <stdio.h>

main ()

{

char name [60];

printf("Каквасзовут: ");

gets (name);

printf ("Привет, %s&bsol;n", name);

}

Функция gets читает все, что набирается до тех пор, пока не нажат Ввод.

В С++ ввод-вывод может осуществляться не только с помощью функций, но и с помощью операций. Операция вывода << операция ввода >>.

Формат вывода на экран:cout<< выражение.

Формат ввода с клавиатуры:cin<< переменная.

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

Пример:

#include <iostream.h>

main()

{

int i;

cout << "Целоечисло?: ";

cin >> i;

cout << " Квадратчисла: " << i*i << "&bsol;n";

return 0;

}

Возможен ввод-вывод нескольких величин (через пробел).


1.4 Базовые типы данных Языка Си

1.4.1 Идентификаторы

Имена, которые присваиваются константам, типам данных, переменным и функциям называются идентификаторами. В Си следующие правила создания идентификаторов: должны начинаться с буквы (a...z,A...Z) или с подчеркивания (_), остальная часть идентификатора должна состоять из букв, подчеркиваний и/или цифр(0...9).

1.4.2 Типизированные константы

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

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

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

Константы представляются в виде целого десятичного, восьмиричного или шестнадцатиричного числа.

Описание констант начинается с ключевого слова const, далее тип и значение, например const int Nalog=2.

1.4.3 Переменные

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


1.4.3.1 Целые типы

Целые числа представляются целыми типами. Целый тип - это обобщенный тип, представление которого зависит от операционной системы и типа процессора.

Рассмотрим основные типы целых чисел:

Целый тип Размер
Short int 16 битовое целое
Int 16 битовое целое
Unsigned long 32 битовое целое без знака
Long 32 битовое целое

Рассмотрим простой пример.

#include <stdio.h>

#include <conio.h>

main()

{

const int Nalog= 2;

int Stavka;

int Symma;

int C;

Stavka = 300;

Symma = Stavka * Nalog;

printf("Symma naloga = %d&bsol;n",Symma);

C=getch();

}

В примере объявлены одна константа и две переменные целого типа.

1.4.3.2 Вещественные типы

Для хранения чисел с дробной частью используется вещественный тип.

В C++ существуют следующие основные типы вещественных чисел:

Вещественный тип Размер
Float 32 битовое плавающее число
Double 64 битовое плавающее число
Long double 80 битовое плавающее число

Рассмотрим следующий пример.

#include <stdio.h>

main()

{

const float Nalog= 0.7;

int Stavka;

float Symma;

Stavka = 325;

Symma = Stavka * Nalog;

printf("Symma naloga = %8.4f&bsol;n",Symma);

}

В данном примере вещественный тип представлен переменной Symma.

1.4.3.3 Символьные типы

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

Символьный тип Размер
Unsigner char 8 бит без знака
Char 8 бит

Рассмотрим пример:

#include <stdio.h>

main()

{

char A;

char B;

char C;

A = 'D';

B = '!';

printf("A= %c B= %c&bsol;n",A,B);

C = '*';

printf("C= %c&bsol;n",C);

}

В данном примере переменной A присвоено значение ‘D’, переменной B значение ‘!’, а переменной С присвоено значение символа ‘*’.

1.4.4 Тип данных строка

Для представления строки символов в Си используют массивы типа char.

Рассмотрим пример.

#include <stdio.h>

#include <string.h>

main()

{

char A[256]; /* длина может быть до 256 символов */

char B[11];

char C[24];

strcpy(A,"IBM PC Pentium");

strcpy(B,"Windows 95");

strcpy(C,""); /* очисткапеременной */ printf("A= %s&bsol;n",A);

printf("B= %s&bsol;n",B);

strcpy(C,B);

printf("C= %s&bsol;n",C);

}

В данном примере представлены три строки символов A, B, C.

По команде, например, strcpy (A,"IBM PC Pentium"); в строку A помещается текст IBM PC Pentium.

Кроме рассмотренного примера, для определения строк можно использовать указатель на символы. Пример:

#include <stdio.h>

#include <string.h>

main()

{

char *msg;

msg = "Привет, студент";

puts(msg);

}

Звездочка перед msg означает, что msg является указателем на символ - т.е. msg может хранить адрес символа. Однако, при этом память для размещения символов не выделяется.

Команда msg = "Привет, студент " присваивает начальный адрес этой строки - (адрес символа П) переменной msg. Команда puts(msg) печатает символы до тех пор, пока она не встретит нулевой символ, обозначающий конец строки..

1.4.5 Структуры

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

1.4.5.1 Массивы

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

Рассмотрим пример.

#include <stdio.h>

main()

{

int B[3];

B[0] = 0;

B[1] = 10; B[2] = 20; B[3] = 30;

printf("B[0]= %d&bsol;n",B[0]);

printf("B[1]= %d&bsol;n",B[1]);

printf("B[2]= %d&bsol;n",B[2]);

printf("B[3]= %d&bsol;n",B[3]);

}

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

Существуют многомерные массивы, например:

int A[3][2];

Массив A -двумерный массив ( состоит из четырех строк и трех столбцов):

char A[3][3][3][3];

Массив A - четырехмерный массив.

Рассмотрим пример работы с двумерным массивом.

#include <stdio.h>

main()

{

float B[4][3];

B[0][0] = 0;

B[1][1] = 1.1;

B[2][1] = 1.2; B[3][1] = 1.3;

B[1][2] = 2.1;

B[2][2] = 2.2;

B[3][2] = 2.3;

printf("B[1,1]= %4.2f B[2,1]= %4.2f B[3,1]= %4.2f&bsol;n", B[1][1],B[2][1],B[3][1]);

printf("B[1,2]= %4.2f B[2,2]= %4.2f B[3,2]= %4.2f&bsol;n", B[1][2],B[2][2],B[3][2]);

}

1.4.5.2 Записи

В отличие от массивов запись позволяет хранить данные различных типов. Запись начинается после ключевого слова struct. Рассмотрим пример - в записи хранится информация о студентах: фамилия, год рождения, номер группы.