gpt4 book ai didi

c - C 递归程序输出不准确

转载 作者:行者123 更新时间:2023-11-30 20:53:50 26 4
gpt4 key购买 nike

C 递归函数错误

我正在学习《实用C程序设计,第3版》由 Steve Oualline 编写,其中包含此作业,用于制作一个具有以下要求的程序。

Exercise 9-3: Write a function count(number, array, length) that counts the number of times number appears in array. The array has length elements. The function should be recursive. Write a test program to go with the function.

我用了大约 15 分钟编写了该程序,但我的输出并不完全是我想要的。代码如下:

#include <stdio.h>

int length;
int count(int num2count, int array[length], int size);

int main(void)
{
char check;
int i = 0;
long int num_to_be_counted;
int ans;
printf("Please enter the length of array:");
scanf("%d",&length);
long int numbers[length];

for(int i = 0; i != length; ++i) {
numbers[i] = 0;
}

printf("Enter the array:");

while( check != '\n') {
scanf("%li",&numbers[i]);
++i;
check = getchar();
}

printf("Enter the number to be counted in the array:");

scanf("%d",&num_to_be_counted);

for(int i = 0; i != length; ++i) {
numbers[i] = 0;
}

ans = count(num_to_be_counted,numbers,length);

printf("The number appears %d times in the array.",ans);

return 0;
}


int count(int num2count, int array[length], int size)
{
static int times = 0;
static int i = 0;

if ( array[i] == num2count) {
++times;
}

if(i == size) {
return times;
}

while( i != length ) {
++i;
count(num2count,array,length);
}
}

程序正常,没有错误(逻辑错误除外),这是示例输入和输出

length = 4
numbers = 1 2 2 4
number_to_count = 2
Output: 4

该函数甚至没有统计要统计的数字;它只返回数组的大小,例如本例中为 4。

任何形式的帮助将不胜感激。

最佳答案

代码中的问题:

  • 您的代码将输入数组重置为 0在对其进行任何操作之前。

  • count访问array[i]检查之前if(i == size) ,即您有越界访问权限。

  • 您对 count 的递归调用被包裹在一个循环中。这是没有意义的,因为嵌套的 count调用将循环自身(并且在每次迭代中再次调用 count,这将循环自身,...)。

  • count 中的所有局部变量是static ,这意味着该函数是无用的:您不能在任何程序中多次调用它。一个更好的测试程序来证明这一点将类似于:

    for (int i = 0; i < length; i++) {
    printf("%d appears %d times in the array\n", numbers[i], count(numbers[i], numbers, length));
    }

其他问题:

  • int i;在您的 main() 中未使用功能。
  • check第一次检查时未初始化。
  • 分配 getchar() 的结果到 char总的来说是个坏主意; getchar()返回int出于某种原因。
  • 您的程序中存在类型错误:numbers被声明为 long int 的数组,但是您将其传递给一个采用 int 数组的函数.
  • 您失踪了#include <stdlib.h>对于 system() .

关于c - C 递归程序输出不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44864562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com