Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab2.doc
Скачиваний:
63
Добавлен:
12.04.2015
Размер:
276.99 Кб
Скачать

Спецификатор типа

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

Значения типов:

  • d, i — десятичное знаковое число, размер по умолчанию, sizeof( int ). По умолчанию записывается с правым выравниванием, знак пишется только для отрицательных чисел. '%d' и '%i' ведут себя одинаково при выводе, но имеют разные значения при вводе с помощью функции scanf();

  • o — восьмеричное беззнаковое число, размер по умолчанию sizeof( int );

  • u — десятичное беззнаковое число, размер по умолчанию sizeof( int );

  • x и X — шестнадцатеричное число, x использует маленькие буквы (abcdef), X большие (ABCDEF), размер по умолчанию sizeof( int );

  • f и F — числа с плавающей запятой. По умолчанию выводятся с точностью 6, если число по модулю меньше единицы, перед десятичной точкой пишется 0. Величины ±∞ представляются в форме [-]inf или [-]infinity, Величина Nan представляется как [-]nan или [-]nan(любой текст далее). Использование F выводит указанные величины заглавными буквами (-INF, NAN). Аргумент по умолчанию имеет размер double.

  • e и E — числа с плавающей запятой в экспоненциальной форме записи (вида 1.1e+44); e выводит символ «e» в нижнем регистре, E — в верхнем (3.14E+0);

  • g и G — число с плавающей запятой; форма представления зависит от значения величины (f или e);

  • a и A — число с плавающей запятой в шестнадцатеричном виде;

  • c — вывод символа с кодом, соответствующим переданному аргументу; переданное число приводится к типу unsigned char (или wint t, если был указан модификатор длины l);

  • s — вывод строки с нулевым завершающим байтом; если модификатор длины — l, выводится строка wchar_t*. В Windows значения типа s зависят от типа используемых функций. Если используется семейство printf функций, то s обозначает строку char*. Если используется семейство wprintf функций, то s обозначает строку wchar_t*.

  • S — то же самое что и s с модификатором длины l; В Windows значения типа S зависит от типа используемых функций. Если используется семейство printf функций, то S обозначает строку wchar_t*. Если используется семейство wprintf функций, то S обозначает строку char*.

  • p — вывод указателя, внешний вид может существенно различаться в зависимости от внутреннего представления в компиляторе и платформе (например, 16 битная платформа MS-DOS использует форму записи вида FFEC:1003, 32-битная платформа с плоской адресацией использует адрес вида 00FA0030);

  • n — запись по указателю, переданному в качестве аргумента, количества символов, записанных на момент появления командной последовательности, содержащей n;

  • % — символ для вывода знака процента (%), используется для возможности вывода символов процента в строке printf, всегда используется в виде %%.

1.5.2. Работа с компилятором g++

Для начала напишем программу для вывода сообщения

#include <stdio.h>

int main {

printf(“Program work!\n”);

return 0;

}

Сохраним ее под именем lab2.cc. Чтобы скомпилировать ее, в командной строке набираем:

user@localhost:~$ g++ lab2.cc –o lab2

g++- имя компилятора c++

lab2.cc– имя компилируемого исходного файла

-o lab2– с помощью ключа“-o” задаем имя выполняемого файла

Теперь в текущем каталоге появится файл lab2. Чтобы его выполнить наберите:

user@localhost:~$ ./lab2

Если программа состоит из нескольких исходных файлов, каждый из них компилируется по-отдельности:

user@localhost:~$ g++ -c lab2.cc

в результате чего появляется объектный файл lab2.o, а затем все объектные файлы собираются вместе в один исполняемый:

user@localhost:~$ g++ lab2.o -o lab2

Для автоматизации этих действий используется утилита make. Для ее использования в каталоге с исходными файлами создается файл Makefile, с описанием зависимостей и порядка компиляции.

Необходимо создать следующие файлы:

Файл lab2.cc

//-----------------------------------------------

#include <stdio.h>

#include “fib.hh”

int main(){

int fib[10];

View_Fib(fib);

printf(“Числа Фибоначчи”\n);

for (int i=1;i<=10;i++){

printf(“%d \n”,fib[i]);

}

}

//-----------------------------------------------

Файл fib.cc

//-----------------------------------------------

#include “fib.hh”

void View_Fib(int fib[10]){

int f1,f2,fbn,i;

f1 = 0;

f2 = 1;

i = 1;

while (i<=10){

fbn = f1 + f2;

f1++;

f2++;

fib[i] = fbn;

i++;

}

}

//-----------------------------------------------

Файл fib.hh

//-----------------------------------------------

void View_Fib(int fib[10]);

//-----------------------------------------------

Файл Makefile (вместо <TAB> нужно поставить знак табуляции)

//-----------------------------------------------

lab2: fib.o lab2.o

<TAB>g++ fib.o lab2.o -o lab2

fib.o: fib.cc fib.hh

<TAB>g++ -c fib.cc

lab2.o: lab2.cc fib.hh

<TAB>g++ -c lab2.cc

clean:

<TAB>rm -f lab2 lab2.o fib.o

//-----------------------------------------------

Makefile является списком правил. Каждое правило начинается с указателя, называемого «Цель». После него стоит двоеточие, а далее через пробел указываются зависимости. В нашем случае ясно, что конечный файл lab2 зависит от объектных файлов fib.o и lab2.o. Поэтому они должны быть собраны прежде сборки lab2. После зависимостей пишутся команды. Каждая команда должна находиться на отдельной строке, и отделяться от начала строки клавишейTab.

В трех первых правилах выполняются те же самые команды, которыми мы уже пользовались. А что же означает правило clean?

В правиле clean стоит команда rm, удаляющая исполняемый и объектные файлы. Флаг-f означает, что, если удаляемый файл отсутствует, программа должна это проигнорировать, не выдавая никаких сообщений. Итак, правило clean предназначено для «очистки» проекта, приведения его к такому состоянию, в каком он был до команды make.

Если запустить

user@localhost:~$ make

появятся объектные файлы и исполняемый.

Если выполнить

user@localhost:~$ make clean

Объектные и исполняемый файлы исчезнут. Останутся только cc-файлы, hh-файл и сам Makefile. То есть, проект «очищается» от результатов команды make.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]