Описать структуру "Студент" - C (СИ)

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

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

5. Описать, используя структуру данных сведения об учениках (фамилия, улица, дом, квартира). Составить программу, определяющую: 1) сколько учеников живет на улице Свердлова; 2)список учеников, живущих в доме номер 45 по улице Сиреневой.
#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;
}
подскажите почему счетчик всегда выдает 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;
}

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

  1. Включаются необходимые заголовочные файлы
  2. Объявляется константа STUDS, которая определяет количество студентов
  3. Создается структура Студент с полями name, street, house и flat
  4. В главной функции main создается массив из STUDS структур Student
  5. Инициализируются переменные i, k, j и z
  6. Указатель p инициализируется как ссылка на переменную z
  7. Переменные Sv и Si инициализируются как строки
  8. Выводится заголовок цикла, который позволяет ввести данные о студентах
  9. В цикле происходит ввод данных о каждом студенте
  10. После ввода данных выводится сообщение об окончании ввода
  11. В двух отдельных циклах подсчитывается количество студентов, проживающих на улице Sverdlova и в доме 45 на улице Sirenevaya
  12. Выводятся результаты подсчета
  13. В конце программы вызывается функция system(PAUSE), чтобы программа не закрылась сразу после вывода результатов
  14. Функция main возвращает 0, что означает успешное завершение программы

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


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

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

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