Описать структуру с именем STUDENT, содержащую следующие поля:
- фамилия и инициалы;
- номер группы;
- успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT, записи должны быть упорядочены по алфавиту;
- вывод на дисплей фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2;
- если таких студентов нет, вывести соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<windows.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text);//функция для распознавания русских символов int compare(const void *student1,const void *student2); //объявление функции для сортировки const int m=5,k=30; //объявление именованных констант struct student //объявление структуры { char fio[k]; //объявление int numb; //полей int ball[m]; //структуры }; int main(int argc, char* argv[]) { int i,j,n,cnt=0; //объявление переменных cout<<rus(" Введите количество структур STUDENT: ");cin>>n;//ввод кол-ва структур cout<<endl; student *Student=new student[n];//выделение в динамической памяти место под массив структур for(i=0;i<n;i++) { cout<<rus(" Введите фамилию и инициалы ")<<(i+1); cout<<rus(" студента: ");cin.ignore();cin.getline(Student[i].fio,k); //ввод cout<<rus(" Введите номер группы: ");cin>>Student[i].numb; //данных cout<<rus(" Введите оценки:")<<endl; //в структуру for(j=0;j<m;j++) { cout<<' '<<(j+1)<<rus(" оценка: ");cin>>Student[i].ball[j]; } cout<<endl; } qsort(Student,n,sizeof(student),compare); //вызов функции для сортировки cout<<endl; cout<<rus(" Список студентов упорядоченных по алфавиту:\n\n"); for(i=0;i<n;i++) { //вывод отсортированной структуры cout<<rus(" Фамилия и инициалы студента: ")<<Student[i].fio<<endl; cout<<rus(" Номер группы: ")<<Student[i].numb<<endl; cout<<rus(" Оценки:")<<endl; for(j=0;j<m;j++) { cout<<' '<<(j+1)<<rus(" оценка: ")<<Student[i].ball[j]<<endl; } cout<<endl; } cout<<rus("\n Список студентов имеющих хотя бы одну оценку 2:")<<endl<<endl; for(i=0;i<n;i++) //поиск { //студентов for(j=0;j<m;j++) //имеющих if(Student[i].ball[j]==2) //хотя бы одну оценку 2 { cout<<rus(" Фамилия и инициалы студента: ")<<Student[i].fio<<endl; //вывод cout<<rus(" Номер группы: ")<<Student[i].numb<<endl; //запрошенной cnt++; //информации cout<<endl; } } //если таких студентов нет выводится сообщение if(0==cnt)cout<<rus(" Таких студентов нет!"); getch(); return 0; } //--------------------------------------------------------------------------- int compare(const void *student1,const void *student2) //функция для сортировки { return strcmp((reinterpret_cast<const student*>(student1))->fio, (reinterpret_cast<const student*>(student2))->fio); } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text,bufrus); return bufrus; } //---------------------------------------------------------------------------
Для уменьшения количества выводимой на экран информации, заполним только 2 структуры STUDENT.
Результат работы программы: