- •Int fact(int n)
- •Int fact(int n)
- •Void main()
- •Void main()
- •Void main()
- •Int AkkR(int m, int n);
- •Int main()
- •Int AkkR(int m, int n)
- •Int main()
- •Int smacc(int, int);
- •Int test(char *s, char *r)
- •Void main() { Stepp(""); }
- •Int step(int X, int y)
- •If (step(X-1, y))
- •If (step(X, y-1))
- •Void main(void)
- •Void main()
- •Int rings;
- •Init(rings);
- •Void convert (int z)
- •Void f(struct man *q)
- •Int mark[4];
- •Void main()
- •Void proc(man *p)
- •Void main()
- •Void main()
- •Int telephon;
- •Void main()
- •Void fNumber(number * const doc)
- •Void main()
- •Int main()
- •Void main()
- •Void main()
- •Void main()
- •Int fgets (char *s, int m, file *f);
- •Int fputs (char *s, file *f);
- •Void main()
- •Int fread( void *ptr, int size, int n,
- •Int fwrite( void *ptr, int size, int n,
- •Int rate;
- •Void main()
- •Int fseek(file *fp, long pos, int mode);
- •Void main()
- •Int np, n, I; long p[5]; char str[80];
- •Void main()
- •Int main() {
- •Int fread (void *buf, int size, int nrec, file *fd);
- •Int fwrite (void *buf, int size, int nrec, file *fd);
- •Int main()
- •Int main()
- •Infl.Open(“a.Txt”);
- •If (!infl) … //открытие успешно
- •Int main()
- •Inout.Seekg(0);
- •Int main()
- •Void main()
- •Void main()
- •Void main(void)
- •Ifstream prm2("a.Txt") ;
- •If (prm2.Fail())
Void f(struct man *q)
{ ... }
Инициализация структур
и доступ к компонентам
Структуры могут быть инициализированы списками значений элементов, заключенных в фигурные скобки и перечисленных через запятую, как и массивы:
struct Student
{ char *name;
int id, age;
char pol;
} ;
Student st1 = {“Петров”, 1, 20, ‘М’};
Доступ к компонентам структуры осуществляется при помощи составных имен двумя способами.
С использованием операции принадлежности .
st1.name = “Сидоров”;
st2.id = st1.id;
2. Для работы с указателями на структурированные переменные существует специальная операция косвенной адресации –> (минус-больше), которая понимается как выделение элемента в структурированной переменной, адресуемой указателем.
Student *pA, A;
pA = &A;
pA > age; //эквив. (*pA).age
Можно проконтролировать значения полей после инициализации при отладке в окнах Видимые, Локальные, Контрольные значения
(Отладка / Окна / Контрольные значения / Контрольное значение 1 (2, 3, 4)).
Можно также посмотреть распределение памяти:
Отладка / Окна / Память / Память 1
(2, 3, 4)
Здесь адрес st1 – 0x0012FF54, внутри которого хранится адрес name - 0x00415830, внутри которого содержится текст Петров.
По адресу 0x0012FF58 содержится id = 1.
По адресу 0x0012FF5c содержится age = 14 (или 20 в десятичной системе счисления).
Доступ к полю, например, id возможен только с использованием операции принадлежности: st1.id. Чтобы посмотреть адрес надо ввести в окне Контрольное значение адрес &st1.id
С помощью оператора sizeof можно определить общую длину полей структуры:
int k = sizeof(st1);
cout<<k;
Например, для структуры
struct Student
{ char *name;
int id, age;
char pol;
} ;
длина равна 16.
Длина *name - 4 байта, id - 4 байта, age - 4 байта, char pol – 1 байт и добавляется 3 байта, чтобы выровнять до 4.
Работа со структурами поддерживается средствами Intellisense. По мере ввода членов структуры вслед за именем структурированной переменной редактор показывает окно со списком всех членов данной структуры.
Допустимыми операциями являютcя следующие:
операция присваивания одной структуры другой структуре того же типа;
операция взятия адреса (&) структуры;
операция доступа к элементам структуры;
операция sizeof для определения размера структуры.
Остальные операции, такие как сравнение (== и !=), не определены.
Пример. Информация о студентах содержит фамилии, имена и оценки. В программе вводятся данные, и определяется средний балл. Вывод результатов осуществляется в порядке возрастания средних баллов.
#include <iostream>
using namespace std;
struct Student
{ char fam[30];
Int mark[4];
float sr;
};
Student St[30], buf;
Void main()
{ setlocale(LC_ALL, "Rus");
int i, j, n = 0;
do
{ cout<<"Фамилия ";
cin>>St[n].fam;
for (i = 0; i < 4; i++)
{ cout<<"Введите оценку по экзамену № "<< i + 1<<' ';
cin>>St[n].mark[i];
}
n++;
cout<<"Прекратить ввод? (0 - да, 1 - нет) ";
cin>>i;
} while(i);
for (i = 0; i < n; i++)
{ St[i].sr = 0;
for (j = 0; j < 4; j++)
St[i].sr += St[i].mark[j];
St[i].sr /= 4;
}
for (i = 0; i < n - 1; i++)
for (j = i; j < n; j++)
if (St[i].sr > St[j].sr)
{ buf = St[i];
St[i] = St[j];
St[j] = buf;
}
for (i = 0; i < n; i++)
{ cout<<"Студент "<<St[i].fam;
cout<<" Средний балл = " << St[i].sr << endl;
}
}
Указатель на структуру как формальный параметр
Объекты типа структур можно передавать как параметры функции. Пусть имеется структура:
struct man
{ char name[20];
int d, m, y;
char *addr;
}
A, X[5], B = {"Ivan", 12, 4, 2000};
Фрагмент ниже содержит указатель на структуру man *p в качестве формального параметра, а &B в основной программе – фактический параметр.