- •1.Теоретические положения
- •1.2. Установка и настройка geant4
- •1.3. Пакет geant4
- •1.4. Основные концепции.
- •Структура управляющей последовательности
- •Спецификатор ширины
- •Спецификатор точности
- •Спецификатор размера
- •Спецификатор типа
- •1.6. Примеры
- •1.7. Конфигурационные файлы и визуализация
- •2. Задания к лабораторной работе
- •3. Контрольные вопросы
- •4. Содержание отчета
Спецификатор типа
Тип указывает не только на тип величины (с точки зрения языка программирования Си), но и на конкретное представление выводимой величины (например, числа могут выводить в десятичном или шестнадцатеричном виде). Записывается в виде одного символа. В отличие от остальных полей является обязательным. Максимальный поддерживаемый размер вывода от единичной управляющей последовательности составляет по стандартам как минимум 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.