Операции над строками и файлами: подсчет количества студентов с тройками по физике - 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
. Вот список действий:
- Подключаются необходимые заголовочные файлы.
- Создаются переменные
stupids
(количество студентов с тройками) иdoc
(XML-документ). - Загружается XML-документ из файла
students.xml
. - Получается корневой элемент XML-документа.
- В цикле обходятся все элементы
student
. - Если элемент
student
найден, то в цикле обходятся все элементыscores
. - Если элемент
scores
найден, то в цикле обходятся все элементыdiscipline
. - Если элемент
discipline
найден, то проверяется название и результат. - Если название равно
Informatics
и результат равен2
, то увеличивается счетчикstupids
. - После завершения всех проверок, освобождается память, занятая строками
name
иresult
. - После завершения цикла, выводится количество студентов с тройками.
- Завершается работа программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д