Описать структуру с именем STUDENT - C (СИ) (79122)
Формулировка задачи:
У меня такое задание, но не знаю как вывести чтобы студенты были отсортированы по возрастанию среднего балла. Помогите сделать сортировку. Заранее спасибо.
Описать структуру с именем STUDENT, содержащую следующие поля:
•фамилия и инициалы;
•номер группы;
•успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
•ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT; записи должны быть упорядочены по возрастанию среднего балла;
•вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5;
•если таких студентов нет, вывести соответствующее сообщение.
начал делать так:
// 7 тщм.cpp : Defines the entry point for the console application.
#include "stdafx.h"
struct student{
char fam[15];
char inisial[10];
int grup;
int marks[5];
}str[3],tmp;
#define N 4.0
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,t,k,k2,flag=0;
float avg,tmp1;
float mas[3];
student str[3]={
{"Ivanov","F. P.",1102,4,3,4,3,4},
{"Popov","D. S.",1305,3,4,3,4,3},
{"Smirnov","K. G.",1208,3,4,3,4,4}
};
//for (i = 0; i<3; i++){
//printf("\nStudent %i\nEnter name: ", i+1);
//scanf("%s", str[i].fam);
//printf("Enter group: ");
//scanf("%i", &(str[i].grup));
//for (int j = 0; j<5; j++){
//printf("Enter ses %i: ", j+1);
//scanf("%i", &(str[i].marks[j]));
//}
//}
for(i=0;i<3;i++){
printf("\n\n%s ",str[i].fam);
printf("%s\n",str[i].inisial);
printf("%d\n",str[i].grup);
for(j=0;j<5;j++)
printf("%d ",str[i].marks[j]);}
for(i = 0; i < 3; ++i) {
avg = 0;
for(j = 0; j < 5; ++j)
avg += str[i].marks[j];
avg /= 5;
printf("\n%4.2f\n\n",avg);
mas[t=i]=avg;}
for(t=0;t<3;t++)
printf("%4.2f ",mas[t]);
printf("\n\nball vishe %2.2f\n", N);
//for(i=0;i<3;i++){
//if(avg>N){
// printf("\nF.I.O.: %s\nGruppa: %d\n ", str[i].fam, str[i].grup);
// flag=1;}}
//if(flag==0)
// printf("\ntakih stydentov net\n");
k2=0;
for (i=0; i<3; i++)
{
k=0;
for (j=0; j<5; j++)
if (str[i].marks[j]==5)
{
if (k!=1){
printf ( "\n This student has mark 2 %s, %d \n" , str[i].fam , str[i].grup);;
k=1;
k2++;}
}
}
if (k2==0) printf ("HET DVOEK");
for(k = 0;k < 3; k++){
for(t = 0; t <2; t++)
if(mas[t]>mas[t+1]){
tmp1=mas[t];
mas[t]=mas[t+1];
mas[t+1]=tmp1;}}
//for(i=0;i<3;i++){
//tmp=str[i];
//str[i]=str[i+1];
//str[i+1]=tmp;}}}
printf("\n");
for(t=0;t<3;t++)
printf("%4.2f ",mas[t]);
return 0;
}Решение задачи: «Описать структуру с именем STUDENT»
textual
Листинг программы
#include <iostream>
using namespace std;
struct Student
{
char fio[20];
int group;
int marks[5];
} str[10];
int main () {
setlocale(LC_ALL,"Rus");
for(int i = 0;i < 10;i++){
cout << "Введите фамилию и инициалы: "; gets(str[i].fio);
cout << "Группа: "; cin >> str[i].group;
cout << "Оценки: ";
for(int j = 0;j < 5;j++){
cout << "Предмет " << j+1 << ": "; cin >> str[i].marks[j];
}
system("cls");
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с потоками ввода-вывода
- Объявление структуры данных STUDENT с полями: fio — строка (массив символов) для хранения фамилии и инициалов студента, group — целочисленное поле для хранения номера группы, marks — массив целых чисел для хранения оценок по 5 предметам.
- Создание массива структур типа STUDENT, размер которого составляет 10 элементов.
- Ввод данных о студентах с помощью цикла for, который выполняется 10 раз. В каждой итерации происходит: — Ввод фамилии и инициалов студента с помощью функции gets, — Ввод номера группы с помощью функции cin, — Ввод оценок по 5 предметам с помощью цикла for и функции cin.
- Очистка консоли с помощью функции system(
cls) после каждой итерации цикла.