Лотерея. Программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру - C (СИ)

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

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

нужно написать программу которая позволяет загружать данные о 10 абонентах(Имя и 9-ти значный номер телефона) и выборе победителя следующим образом: программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру. Если никто не выигрывает, процедура выбора победителей повторяется.

Решение задачи: «Лотерея. Программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
#define MAX_SUBSCRIBERS 10
 
 
typedef struct subscriber
{
    size_t phone;
    char name[20];
} subscriber;
 
 
void loadInfo(subscriber *sub);
 
 
int main(int argc, char *argv[])
{
    subscriber *sub = (subscriber *) malloc(sizeof(subscriber) * MAX_SUBSCRIBERS);
    int i = 0;
    size_t rand_number;
    unsigned char founded = 0;
    
    srand(time(NULL));
    
    printf("\nВведите данные абонентов\n");
 
    while(!founded)
    {
        
        for( i = 0; i < MAX_SUBSCRIBERS; i++)
            loadInfo(&sub[i]);
    
        rand_number = rand()%9;
 
        for( i = 0; i < MAX_SUBSCRIBERS; i++, sub++)
        {
            if(rand_number == (sub->phone % 10))
            {
                founded = 1;
                printf("%d совпало с последней цифрой абонента %s (%lu)\n",
                                rand_number, sub->name, sub->phone);
            }
        }
        if(!founded)
            printf("\nСовпадений не найдено (случайное число - %d)\n", rand_number);
    }
    
    return 0;
}
 
void loadInfo(subscriber *sub)
{
    printf("\nВведите имя абонента\n");
    scanf("%s", sub->name);
    printf("\nВведите номер телефона\n");
    scanf("%lu", &sub->phone);
}

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

  1. Включаем необходимые заголовочные файлы для работы с C
  2. Определяем максимальное количество абонентов, которые могут быть добавлены в список
  3. Создаем структуру абонент, которая содержит имя и номер телефона абонента
  4. Определяем функцию loadInfo, которая позволяет вводить данные абонента
  5. Входим в главный цикл программы, который продолжается до тех пор, пока не будет найдено совпадение
  6. Заполняем список абонентов с помощью функции loadInfo
  7. Генерируем случайное число от 0 до 9 (так как последняя цифра номера телефона будет в этом диапазоне)
  8. Проверяем каждый номер телефона в списке на совпадение последней цифры с сгенерированным числом
  9. Если совпадение найдено, выводим сообщение об этом
  10. Если после проверки всех номеров телефона совпадение не найдено, выводим сообщение об этом
  11. Выходим из главного цикла программы
  12. Выводим итоговое сообщение о результате розыгрыша
  13. Определяем функцию loadInfo, которая позволяет вводить данные абонента (подтверждаем, что это функция была определена ранее)
  14. Вводим данные абонента, используя функцию scanf (подтверждаем, что это происходит в функции loadInfo)

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

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