繁体   English   中英

计算元素频率的 C 程序

[英]C Program to Count Frequency of Element

我有这个代码,它从用户输入的数字中找到数字的出现。 我的问题是如何首先由用户输入数字,然后让用户在序列中找到他的号码。 如果这个问题很愚蠢,我很抱歉,但我只是一个试图自学编程的初学者:) 非常感谢您的帮助!

这是我当前的代码:

int main()
{
    int num, remainder, k, count = 0;

    printf("Which number do you want to find:  \n");
    scanf("%d", &k);

    while(1)
    {
        printf("Enter numbers(end by pressing 0): ");
        scanf("%d", &num);

        remainder=num;
        if(remainder==k)count++;
        if(remainder==0) break;

    }


    printf("\Number %d occurs %d times.\n", k, count);


    getch();
    return 0;
}

这是我尝试过的:

int main()
{
    int num, remainder, k, count = 0;


    while(1)
    {
        printf("Enter numbers(end by pressing 0): ");
        scanf("%d", &num);

        remainder=num;
        if(remainder==k)count++;
        if(remainder==0) break;

    }

    printf("Which number do you want to find:  \n");
    scanf("%d", &k);

    printf("\Number %d occurs %d times.\n", k, count);


    getch();
    return 0;

如果您想先读取数字列表,则需要使用变量以某种方式将其存储在内存中,然后才能在该列表中找到数字。

这可以通过使用 C 中的arrays概念来完成。

通常,数组存储类似类型数据的明确集合/列表。 例如,一个int数组存储一个整数集合。

你可以在这里阅读更多关于它们的信息,甚至你也可以用谷歌搜索。

来到您的代码,您可以像这样在数组中声明和存储数据,

int numbers[10]; // stores 10 integers, size 10 is static here.
int remainder, k, count = 0;

printf("Enter 10 digits to store : ");
for(int i = 0; i < 10; i++) { // this is a for-loop that executes below block 10 times
    scanf("%d", &numbers[i]); // read a number to location i
}


printf("Which number do you want to find:  \n");
scanf("%d", &k);

// now use for-loop to iterate over the numbers array(while-loop can also be used)
for(int i = 0; i < 10; i++) {
    remainder=numbers[i];
    if(remainder==k)count++; // you can also directly compare numbers[i] to k
    // below line is not needed since the loop stops at 10th iteration
    // if(remainder==0) break;
}

printf("\Number %d occurs %d times.\n", k, count);

笔记:

上面的代码仅在用户想要给出 10 个数字时才有效。 如果用户需要提供可变数量的数字以从中找到k ,那么您必须从用户读取数组的大小并创建该大小的动态数组。 参考这个

您可以放心地忽略除我之外的所有答案。:)

对于您的任务,您需要称为单链表的数据结构。 理论上它没有限制,您可以输入任何数字序列,直到输入 0。

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int number;
    struct node *next;
};

struct sequence
{
    struct node *head;
    struct node *tail;
};

int append( struct sequence *seq, int number )
{
    struct node *new_node = malloc( sizeof( *new_node ) );
    int success = new_node != NULL;

    if( success )
    {
        new_node->number =number;
        new_node->next = NULL;
        
        if ( seq->head == NULL )
        {
            seq->head = new_node;
        }
        else
        {
            seq->tail->next = new_node;
        }

        seq->tail = new_node;
    }

    return success;
}

size_t count( const struct sequence *seq, int number )
{
    size_t cnt = 0;

    for ( const struct node *current = seq->head; current != NULL; current = current->next )
    {
        if ( current->number == number ) ++cnt;
    }

    return cnt;
}

void clear( struct sequence *seq )
{
    while ( seq->head != NULL )
    {
        struct node *current = seq->head;
        seq->head = seq->head->next;
        free( current );
    }

    seq->tail = NULL;
}
        
int main(void) 
{
    struct sequence seq = { .head = NULL, .tail = NULL };

    printf( "Enter numbers (end by entering 0): " );

    int number;

    while ( scanf( "%d", &number ) == 1 && number != 0 && append( &seq, number ) );

    number = 0;

    printf( "Which number do you want to find: " );

    scanf( "%d", &number );

    printf( "\nNumber %d occurs %zu times.\n", number, count( &seq, number ) );

    clear( &seq );

    return 0;
}

它的输出可能看起来像

Enter numbers (end by entering 0): 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 0
Which number do you want to find: 1
Number 1 occurs 3 times.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM