我刚结束了我的第一次考试,通过了(感谢你)。 我还有一个问题要问:我必须找到一个struct数组的最大值,然后使用递归算法printf其中包含max值的数组元素。为了解决这个问题,我一直在键盘上砸了大约一个星期,但我似乎无法做到这一点。你能救我吗?
这是代码: 请不要关心STRCPY,ty。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char autori[100];
char titolo[100];
int anno;
int codice;
float prezzo;
char stato[50];
} libro;
int massimo(int m, int n );
libro ricorsivo(libro a[], int len);
void main()
{
libro max;
int len=30;
libro elenco[100];
strcpy(elenco[0].autori,"Angelo Ciaramella e Giulio Giunta");
strcpy(elenco[0].titolo,"Manuale di Programmazione in C");
elenco[0].anno=2009;
elenco[0].codice=0;
elenco[0].prezzo=0.0;
strcpy(elenco[0].stato,"Disponibile");
max=ricorsivo(elenco, len);
printf ("il massimo vale %d", max);
}
libro ricorsivo(libro a[], int len)
{
if (len==1)
return a[0];
else
return massimo(a.prezzo[len-1],ricorsivo(a,len-1));
}
int massimo(int m, int n)
{
if (n>m)
return n;
else if (m>n)
return m;
}
我知道算法不完整,但问题最多的部分就是那些功能。我希望你能帮助我,谢谢你。
答案 0 :(得分:0)
以下是一些可以帮助您修复代码的提示:
首先,您的massimo
(max
)函数定义不正确。在m == n
此函数不返回任何内容的情况下,不允许这样做。你想要的是n > m
你返回n
,否则只返回m
,即
int max(int m, int n) { return n > m ? n : m; }
接下来,在你的递归函数中,你在这一行中有一些类型错误:
return massimo(a.prezzo[len-1], recorsivo(a, len-1))
a
不属于libro
类型,属于libro[]
类型,因此不会有prezzo
字段。a
类型为libro
,并且您访问了其prezzo
字段,则其类型为float
,所以它会对它执行数组索引不正确。a.prezzo[len-1]
生成数组的prezzo
元素的len-1
值,那么它将具有float
类型,但是您的massimo
函数仅接受int
s。ricorsivo(a, len-1)
会返回libro
,并且会将massimo
传递给int
。要解决这些问题,请尝试以下方法:
massimo
功能,但不需要它。prezzo
与prezzo
元素的len-1
值进行比较。libro
返回prezzo
。您应该能够将上述内容翻译成一些非常简单的C代码。