Описать структуру "Студент" - C (СИ)
Формулировка задачи:
5. Описать, используя структуру данных сведения об учениках (фамилия, улица, дом, квартира). Составить программу, определяющую: 1) сколько учеников живет на улице Свердлова; 2)список учеников, живущих в доме номер 45 по улице Сиреневой.
подскажите почему счетчик всегда выдает 0?
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define STUDS 4 typedef struct { char name[15]; char street[15]; int house[4]; int flat[4]; }Student; int main(void) { Student stud[STUDS]; int i,k=0,j=0,z=2; int *p; p=&z; char *Sv="Свердлова", *Si="Сиреневая"; puts("Information about students"); for(i=0;i<STUDS;i++) { printf("---STUDENT #%d---\n",i+1); printf("Familiya:"); scanf("%s",&stud[i].name); printf("Street:"); scanf("%s",&stud[i].street); printf("House:"); scanf("%d",&stud[i].house); printf("Flat:"); scanf("%d",&stud[i].flat); } puts("----End of input----"); for(i=0;i<STUDS;i++) if(strcmp(stud[i].street,Sv)==0) k++; for(i=0;i<STUDS;i++) if((stud[i].house==p) && (strcmp(stud[i].street,Si)==0)) j++; printf("Living in Sverdlova:%d",k); printf("\nLiving in Sirenevaya, in 45 house:%d",j); system("PAUSE"); return 0; }
Решение задачи: «Описать структуру "Студент"»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define STUDS 4 typedef struct { char name[15]; char street[15]; int house; /* не является массивом */ int flat; /* не является массивом */ }Student; int main(void) { Student stud[STUDS]; int i,k=0,j=0,z=45; /* здесь вероятно 45 */ int *p; /* указатель */ p=&z; /* ссылка-указатель на переменную int z */ char *Sv="Sverdlova", *Si="Sirenevaya"; puts("Information about students"); for(i=0;i<STUDS;i++) { printf("---STUDENT #%d---\n",i+1); printf("Familiya:"); scanf("%s",stud[i].name); /* не нужен &, так как имя массива является указателем */ printf("Street:"); scanf("%s",stud[i].street); /* не нужен &, так как имя массива является указателем */ printf("House:"); scanf("%d",&stud[i].house); printf("Flat:"); scanf("%d",&stud[i].flat); } puts("----End of input----"); for(i=0;i<STUDS;i++) if(strcmp(stud[i].street,Sv)==0) k++; for(i=0;i<STUDS;i++) if((stud[i].house==*p) && (strcmp(stud[i].street,Si)==0)) //требовалось разыменование j++; printf("Living in Sverdlova:%d",k); printf("\nLiving in Sirenevaya, in 45 house:%d\n",j); system("PAUSE"); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляется константа STUDS, которая определяет количество студентов
- Создается структура
Студент
с полями name, street, house и flat - В главной функции main создается массив из STUDS структур Student
- Инициализируются переменные i, k, j и z
- Указатель p инициализируется как ссылка на переменную z
- Переменные Sv и Si инициализируются как строки
- Выводится заголовок цикла, который позволяет ввести данные о студентах
- В цикле происходит ввод данных о каждом студенте
- После ввода данных выводится сообщение об окончании ввода
- В двух отдельных циклах подсчитывается количество студентов, проживающих на улице Sverdlova и в доме 45 на улице Sirenevaya
- Выводятся результаты подсчета
- В конце программы вызывается функция system(
PAUSE
), чтобы программа не закрылась сразу после вывода результатов - Функция main возвращает 0, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д