Структуры и функции
Переменные типа структура могут быть параметрами функций. Функции могут возвращать в качестве результата величину структурного типа. Допустимо присваивание структурных переменных.
// Пример 6.1.2
// Пример программы с простой структурой языка С и функциями
#include <iostream>
using namespace std;
// объявление структуры для карандаша
// члены-данные, свойства, поля (data members, properties, fields)
// длина-см.; диаметр-мм.; резинка; цвет; цена; подпись
typedef unsigned short int USHORT;
enum MyColor {Red, Yellow, Green, Blue, Black, Simple};
struct Pencil {
USHORT itsLength;
USHORT itsRadius;
bool itsLastic;
MyColor itsColor;
float itsPrice;
char itsCaption[31];
};
// объявление функций
void ViewPencil(Pencil); // просмотр сведений карандаша
// определение сведений карандаша
Pencil SetPencil(USHORT, USHORT, bool, MyColor,float, char []);
// главная функция
int main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
Pencil p1,p2,p3; // объявление структурных переменных(объектов)
// просмотр сведений - мусор
ViewPencil(p1);
ViewPencil(p2);
ViewPencil(p3);
cin.get();
// определение данных
p1=SetPencil(100,8,false,MyColor::Red,0.9,"KOHINOOR");
p2=SetPencil(40,10,true,MyColor::Green,0.25,"FRANCE");
p3=SetPencil(80,6,false,MyColor::Yellow,0.8,"ABCD");
// просмотр сведений
ViewPencil(p1);
ViewPencil(p2);
ViewPencil(p3);
cin.get();
// вычисление средней стоимости
double avg;
avg=(p1.itsPrice + p2.itsPrice + p3.itsPrice)/3.;
cout << "Средняя цена (AVG) =" << avg << endl;
cin.get();
// вычисление количества с резинкой
int k=0;
if (p1.itsLastic == true) k++;
if (p2.itsLastic) k++;
if (p3.itsLastic) k++;
cout << "k=" << k << endl;
cin.get();
// присваивание структур
p1=p2;
// просмотр сведений после присваивания
ViewPencil(p1);
ViewPencil(p2);
cin.get();
return 0;
}
// реализация функций
// просмотр сведений карандаша
void ViewPencil(Pencil p) {
cout << "Длина : " << p.itsLength << endl
<< "Радиус : " << p.itsRadius << endl
<< "Резинка : " << p.itsLastic << endl
<< "Цвет : " << p.itsColor << endl
<< "Цена : " << p.itsPrice << endl
<< "Надпись : " << p.itsCaption << endl << endl << endl;
}
// определение сведений карандаша
Pencil SetPencil(USHORT l, USHORT r , bool la, MyColor c ,float pr, char ca[]) {
Pencil p;
p.itsLength=l;
p.itsRadius=r;
p.itsLastic=la;
p.itsColor=c;
p.itsPrice=pr;
//p.itsCaption=ca; // Ошибка!!!
strcpy(p.itsCaption,ca);
return p;
}
// Пример 6.1.3
// Пример программы с простой структурой языка С и функциями
# include <iostream>
using namespace std;
// структура с данными о сотруднике
struct Sotrudnic {
long int number; // номер
char name[11]; // фамилия
char gender; // пол
int age; // возраст
float weight; // вес
bool smoke; // курит?
float salary; // зарплата
};
// объявление функций
void ToScreen(Sotrudnic s); // вывод данных на экран
Sotrudnic FromKey(); // ввод данных с клавиатуры
// определение данных
Sotrudnic SetSotr(long int, char [], char, int, float, bool, float);
// главная функция
int main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
Sotrudnic s1,s2; // s1,s2-структурные переменные (объекты)
// размер структурных переменных
cout << "Размер = " << sizeof(Sotrudnic) << endl; // имя типа
cout << "Размер = " << sizeof(s1) << endl; // имя объекта
// вывод данных на экран - мусор
ToScreen(s1);
ToScreen(s2);
// определение данных
s1=SetSotr(1000,"Ivanov",'m',25,70.5,true,500.5);
s2=SetSotr(2000,"Petrova",'w',22,60.5,false,400.5);
// вывод данных на экран
ToScreen(s1);
ToScreen(s2);
// ввод данных с клавиатуры
s1=FromKey();
s2=FromKey();
// вывод данных на экран
ToScreen(s1);
ToScreen(s2);
// вычисление среднего возраста
float avg=(s1.age + s2.age)/2.;
cout << "Средний возрамт (AVG) =" << avg << endl << endl;;
cin.get();
return 0;
}
// реализация функций
// вывод данных на экран
void ToScreen(Sotrudnic s) {
cout<<"Номер: "<<s.number<<'\n'<<"Фамилия: "<<s.name<<'\n'
<<"Пол: "<<s.gender<<endl;
cout<<"Возраст: " <<s.age <<'\n'<<"Вес: "
<<s.weight<<" кг."<<'\n'<<"Курение: "<<s.smoke<<endl;
cout<<"Зарплата: "<<s.salary<<"\n\n\n"<<endl;
cin.get();
}
// ввод данных с клавиатуры
Sotrudnic FromKey() {
Sotrudnic s;
cout<<"Номер: "<<endl;
cin>>s.number;
cout<<"Фамилия: "<<endl;
cin>>s.name;
cout<<"Пол: "<<endl;
cin>>s.gender;
cout<<"Возраст: "<<endl;
cin>>s.age;
cout<<"Вес: "<<endl;
cin>>s.weight;
cout<<"Курение?(1-да,0-нет): "<<endl;
cin>>s.smoke;
cout<<"Зарплата: "<<endl;
cin>>s.salary;
return s;
}
// определение данных
Sotrudnic SetSotr(long int tn, char fam [], char p, int a, float w, bool k, float st) {
Sotrudnic s;
s.number=tn;
strcpy(s.name,fam);
s.gender=p;
s.age=a;
s.weight=w;
s.smoke=k;
s.salary=st;
return s;
}