Операции над строками и файлами: подсчет количества студентов с тройками по физике - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать функцию подсчета количества студентов с тройками по физике .

Решение задачи: «Операции над строками и файлами: подсчет количества студентов с тройками по физике»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
 
int main(void) {
    int stupids = 0;
    
    xmlDocPtr doc = xmlReadFile("students.xml", NULL, 0);
    if ( ! doc ) {
        perror("xmlReadFile");
        exit(1);
    }
    xmlNodePtr root = xmlDocGetRootElement(doc);
    if ( ! root ) {
        perror("xmlDocGetRootElement");
        xmlFreeDoc(doc);
        exit(1);
    }
    
    for ( xmlNodePtr stud = root->xmlChildrenNode; stud; stud = stud->next ) {
        if ( xmlStrcmp(stud->name, (xmlChar*)"student") == 0 ) {
            for ( xmlNodePtr data = stud->xmlChildrenNode; data; data = data->next ) {
                if ( xmlStrcmp(data->name, (const xmlChar*)"scores") == 0 ) {
                    for ( xmlNodePtr scor = data->xmlChildrenNode; scor; scor = scor->next ) {
                        if ( xmlStrcmp(scor->name, (xmlChar*)"discipline") == 0 ) {
                            xmlChar * name = NULL;
                            xmlChar * result = NULL;
                            
                            for ( xmlNodePtr dis = scor->xmlChildrenNode; dis; dis = dis->next ) {
                                if ( xmlStrcmp(dis->name, (xmlChar*)"name") == 0 )
                                    name = xmlNodeListGetString(doc, dis->xmlChildrenNode, 1);
                                else if ( xmlStrcmp(dis->name, (xmlChar*)"score") == 0 )
                                    result = xmlNodeListGetString(doc, dis->xmlChildrenNode, 1);
                            }
                            
                            if ( xmlStrcmp(name, (xmlChar*)"Informatics") == 0 && xmlStrcmp(result, (xmlChar*)"2") == 0 )
                                stupids += 1;
                            
                            xmlFree(name);
                            xmlFree(result);
                        }
                    }
                }
            }
        }
    }
    
    xmlFreeDoc(doc);
    
    printf("%d stupid students\n", stupids);
    return 0;
}

Объяснение кода листинга программы

Код считает количество студентов с тройками по физике в XML-файле students.xml. Вот список действий:

  1. Подключаются необходимые заголовочные файлы.
  2. Создаются переменные stupids (количество студентов с тройками) и doc (XML-документ).
  3. Загружается XML-документ из файла students.xml.
  4. Получается корневой элемент XML-документа.
  5. В цикле обходятся все элементы student.
  6. Если элемент student найден, то в цикле обходятся все элементы scores.
  7. Если элемент scores найден, то в цикле обходятся все элементы discipline.
  8. Если элемент discipline найден, то проверяется название и результат.
  9. Если название равно Informatics и результат равен 2, то увеличивается счетчик stupids.
  10. После завершения всех проверок, освобождается память, занятая строками name и result.
  11. После завершения цикла, выводится количество студентов с тройками.
  12. Завершается работа программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы