Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Определение динамического массива из n структур






    Объявление указателя на структуру типа stud:

    stud *st;

    int n;

    printf(" n=");

    scanf(" %i", & n); //ввод количества элементов динамического массива st

    st=(stud*)malloc(n*sizeof(stud)); // выделение динамической памяти

    // под n структур типа stud.

    Массив представлен на рис.9. Значением переменной st будет адрес нулевого элемента (первой структуры) динамического массива структур. Число n будет определять количество однотипных объектов (структурный тип stud описывает каждый такой объект), информация о которых будет храниться в созданном динамическом массиве. Именем этого массива будет имя указателя st.

     

      Элемент массива Элемент массива Элемент массива
         
    Поля структуры fio fio fio
    kurs kurs kurs
    facultet facultet facultet
    spec spec spec
    st        
    № элемента массива     n -1
    Рис.9

    Примеры обращения к полям i-го элемента динамического массива структур st.

    gets((st+i)–> fio); //вводится с клавиатуры поле fio

    scanf(" %i", & (st+i)–> kurs); //с клавиатуры вводится целочисленное

    //поле kurs

    printf (" kurs=%i\n", (st+i)–> kurs); // на экран выводится значение поля

    // kurs

    Здесь операция & определяет адрес в ОП поля kurs i-го элемента динамического массива структур st. Операция –> (записанные последовательно друг за другом два знака: минус (–) и больше (>)) обозначает доступ к полю структуры через указатель:

     
     

     


    Пример. Каждого студента можно описать при помощи следующих характеристик: ФИО, курс, специальность, предмет1, предмет2, предмет3. Написать программу, определяющую количество студентов:

    1) сдавших сессию на «отлично»;

    2) не сдавших хотя бы 1 экзамен.

     

    Ход выполнения работы

    1. Алгоритм решения данной задачи – алгоритм обработки одномерного массива. В задаче каждым элементом массива будет структура, т.е. элемент массива представляет собой набор переменных различного типа. Для ввода элемента массива нужно вводить значения каждого поля элемента массива поочередно. Так как работаем с массивом, то ввод-вывод элементов массива производится с помощью циклов с параметром.

    2. Написать программу, соответствующую алгоритму.

    Запишем алгоритм решения задачи и соответствующие программы с использованием статического и динамического массивов.

    Использование динамических массивов:

    Алгоритм Программа
    структурный_тип stud { сhar fio[30]; int kurs; сhar spec[30]; int hist; int math; int phis; }; объявление stud *st; цел: n, i, count_5, count_2; ввод n выделение динамической памяти под указатель st для i=0 до n-1 шаг 1 заполнить каждое поле элемента массива структур отдельно все_для i count_5=count_2=0 для i=0 до n-1 шаг 1 //определяем количество //отличников если sti–> hist= =5 & & sti–> math= =5 & & sti–> phis= =5 count_5++; все_если // определяем количество студентов, // не сдавших хотя бы один экзамен если sti–> hist==2|| sti–> math==2|| sti–> phis==2 count_2++; все_если все_если все_для i печать count_5; печать count_2; освободить выделенную динамическую память под указатель st;     #include " stdio.h" #include " stdlib.h" typedef struct { char fio[30]; int kurs; char spec[30]; int hist; int math; int phis; } stud; int main() { stud *st; int n, i, count_5, count_2; printf(" n="); scanf(" %i", & n); st=(stud*)malloc(n*sizeof(stud)); // заполнение массива структур for(i=0; i< =n-1; i++) { printf(“fio=”); gets((st+i)–> fio); printf(“spec=”); gets((st+i)–> spec); printf(" kurs="); scanf(" %i", & (st+i)–> kurs); printf(" history="); scanf(" %i", & (st+i)–> hist); printf(" math="); scanf(" %i", & (st+i)–> math); printf(" phis="); scanf(" %i", & (st+i)–> phis); } count_5=count_2=0; for (i=0; i< =n-1; i++) { //определяем количество // отличников if((st+i)–> hist= =5& & (st+i)–> math= =5 & & (st+i)–> phis==5) count_5++; //определяем количество студентов, //не сдавших хотя бы один экзамен if((st+i)–> hist= =2|| (st+i)–> math= =2|| (st+i)–> phis= =2) count_2++; } printf(" count_5=%i\n", count_5); printf(" count_2=%i\n", count_2); free(st); return; }

    Использование статических массивов:

    Алгоритм Программа
    структурный_тип stud { сhar fio[30]; int kurs; сhar spec[30]; int hist; int math; int phis; }; объявление stud st[10]; цел: i, count_5, count_2; для i=0 до 10-1 шаг 1 заполнить каждое поле элемента массива структур отдельно все_для i count_5=count_2=0 для i=0 до 10-1 шаг 1 //определяем количество //отличников если st[i]–> hist= =5 & & st[i]–> math= =5 & & st[i]–> phis= =5 count_5++; все_если // определяем количество // студентов, не сдавших // хотя бы один экзамен если st[i]–> hist= =2|| st[i]–> math= =2|| st[i]–> phis= =2 count_2++; все_если все_если все_для i печать count_5; печать count_2;     #include " stdio.h" #include " stdlib.h" #define n 10 typedef struct { char fio[30]; int kurs; char spec[30]; int hist; int math; int phis; } stud; int main() { stud st[n]; int i, count_5, count_2; // заполнение массива структур for(i=0; i< =n-1; i++) { printf(“fio=”); gets(st[i].fio); printf(" kurs="); scanf(" %i", & st[i].kurs); printf(“spec=”); gets(st[i].spec); printf(" history="); scanf(" %i", & st[i].hist); printf(" math="); scanf(" %i", & st[i].math); printf(" phis="); scanf(" %i", & st[i].phis); } count_5=count_2=0; for (i=0; i< =n-1; i++) { //определяем количество отличников if(st[i].hist= =5& & st[i].math= =5& & st[i].phis= =5) count_5++; //определяем количество студентов, //не сдавших хотя бы один экзамен if(st[i].hist= =2|| st[i].math= =2|| st[i].phis= =2) count_2++; } printf(" count_5=%i\n", count_5); printf(" count_2=%i\n", count_2); return; }

    3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.