Привет всем, в общем такой вопрос, вот у меня структура студент, проходим динамические структуры. .
Я сделал программу, но не могу сделать функцию сортировки массива студентов по возрасту. .
Прошу помочь, завтра уже сдавать надо (( Заранее спасибо!
/*9. Ввести структуру СТУДЕНТ с полями ФИО, ГОД РОЖДЕНИЯ, КОД ГРУППЫ. Написать и протестировать функцию
a) добавления нового студента в массив студентов;
b) вывода на экран массива студентов;
c) поиска в массиве студентов по номеру группы;
d) сортирующую массив студентов по возрасту;. */
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct student
{
char fio[30];
int chislo;
int mesec;
int year;
};
int n=3;
student *stud = new student [n];
int i=0;
int b;
void st()
{
printf("Vvedite FIO: ");
fflush(stdin);
scanf("%s", stud.fio);
printf("Vvedite chiclo: ");
scanf("%d", &stud.chislo);
printf("Vvedite mesec: ");
scanf("%d", &stud.mesec);
printf("Vvedite god: ");
scanf("%d", &stud.year);
i++;
}
void out(){
for(int m=0; m < i; m++)
{
printf("%s ", stud[m].fio);
printf("%d ", stud[m].chislo);
printf("%d ", stud[m].mesec);
printf("%d ", stud[m].year);
printf("\n");
}
}
void poisk(){
int p;
printf("Vvedite god rozhdeniya");
scanf("%d", &p);
for(int z=0; z < i; z++){
if (stud[z].year == p) printf("%s, %d, %d",stud[z].fio,stud[z].chislo,stud[z].mesec,stud[z].year);
}
}
void main()
{
int l;
do {
printf("\n");
printf("Vvedite # funkcii\n");
printf("1 - dobavlenie studenta\n");
printf("2 - vivod studentov\n");
printf("3 - poisk studenta\n");
printf("4 - sortirovka po vozrastu\n");
printf("0 - exit\n");
scanf("%d", &l);
switch(l)
{
case 1: st(); break;
case 2: out(); break;
case 3: poisk(); break;
case 0:break;
default: printf("net takoi funkcii");
}
}
while (l !=0);
getch();
}
Другие языки программирования и технологии
Помогите с программированием СИ
В Си нет оператора new, вместо него используются функции malloc, calloc и realloc. А для освобождения ресурсов в динамической памяти используется функция free. Все они объявлены в заголовочном файле stdlib.h
Для того, чтобы считывать функцией scanf_s строку с пробелами, следует вначале для поля fio, в структуре, определить её размер макро константой, примерно так.. .
#define MAX_FIO 32
Затем в структуре использовать.. .
char fio[MAX_FIO];
И scanf_s для этого поля будет выглядеть так.. .
scanf_s("%[^\n]s", stud.fio, MAX_FIO);
А считывать с использованием функции fputs, вот так.. .
fputs(stud[m].fio, stdout);
Почему не подходит puts, потому что записывает в строку символ перевода строки!
А ещё в языке Си все переменные должны быть объявлены в начале блока, в котором они используются.
Для того, чтобы увидеть все свои ошибки, следует компилировать файл с расширением *.c
В задании требуется иметь три поля: ФИО, группа и год рождения. Рекомендую добавлять переменную типа целое со знаком, для определения статуса записи в массиве. 0 - не существует, 1 - существует, видимая, -1 - существует, скрытая. Но это в том случае, если записи придётся удалять из массива, то их проще просто скрыть. И, опять же преимущество, всегда можно будет отыскать и восстановить!
Для реализации символов и символьных строк на русском языке есть тип wchar_t, который по своей сути unsigned short. С его помощью реализована поддержка Unicode и продублированы все функции, которые используются для работы с типом char.
Для того, чтобы считывать функцией scanf_s строку с пробелами, следует вначале для поля fio, в структуре, определить её размер макро константой, примерно так.. .
#define MAX_FIO 32
Затем в структуре использовать.. .
char fio[MAX_FIO];
И scanf_s для этого поля будет выглядеть так.. .
scanf_s("%[^\n]s", stud.fio, MAX_FIO);
А считывать с использованием функции fputs, вот так.. .
fputs(stud[m].fio, stdout);
Почему не подходит puts, потому что записывает в строку символ перевода строки!
А ещё в языке Си все переменные должны быть объявлены в начале блока, в котором они используются.
Для того, чтобы увидеть все свои ошибки, следует компилировать файл с расширением *.c
В задании требуется иметь три поля: ФИО, группа и год рождения. Рекомендую добавлять переменную типа целое со знаком, для определения статуса записи в массиве. 0 - не существует, 1 - существует, видимая, -1 - существует, скрытая. Но это в том случае, если записи придётся удалять из массива, то их проще просто скрыть. И, опять же преимущество, всегда можно будет отыскать и восстановить!
Для реализации символов и символьных строк на русском языке есть тип wchar_t, который по своей сути unsigned short. С его помощью реализована поддержка Unicode и продублированы все функции, которые используются для работы с типом char.
Обычная пузырьковая сортировка. Сравниваешь только поля ВОЗРАСТ, а обмениваешь при необходимости пару структур полностью.
Похожие вопросы
- Помогите с программированием СИ
- Помогите с программированием на Си
- Язык программирования Си
- Помогите пожалуйста решить задачу по программированию (язык программирования СИ)
- Как в языке программирования СИ осуществлять вызов подпрограммы, которая находится в другом файле?
- Как на языке программирования си сделать, чтобы при вводе полного бреда программа не поломалась?
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Помогите с программированием на Си. Задача про треугольники
- Помогите с программированием на си
- Привет, помогите с программированием на СИ, передача массива в функцию..
Если не сложно, можешь код написать по отношению к моей программе?