这个程序创建随机数组,其中带有参数1,3,5,7 ...,19的元素是负数,这个程序应该找到最大的负面元素但是当测试程序时它会写一些随机数(6784345而不是数组)你能帮我找错吗?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void najneg(int *pa,int *nn)
{
nn=0;
for(int i=0;i<20;i++)
{
if((pa+i)<nn) nn=(pa+i);
}
}
int main()
{
int a[20],nn,i;
srand(time(0));
for(i=0;i<20;i++)
{
if(i%2==0) a[i]=rand()%(61);
else
a[i]=(rand()%(61))*(-1);
}
printf("Formirani niz je:\n");
for(int i=0;i<20;i++)
{
printf("\ "); printf("%d",a[i]);
}
najneg(a,&nn);
printf("\n\nNajveci negativni clan niza je:%d\n",nn);
return 0;
}
答案 0 :(得分:3)
在此代码中,......
void najneg(int *pa,int *nn)
{
nn=0;
for(int i=0;i<20;i++)
{
if((pa+i)<nn) nn=(pa+i);
}
}
你忘了取消引用指针,
void najneg(int *pa,int *nn)
{
*nn=0;
for(int i=0;i<20;i++)
{
if(*(pa+i)<*nn) *nn=*(pa+i);
}
}
此功能最重要的修复方法是将其名称更改为可读且自描述的内容,没有任意缩短。选择名称时,请考虑使调用代码可读且清晰。例如,najneg
→most_negative_value_in
。
其次,使用函数返回值而不是逻辑out参数。
第三,如果该功能不需要更改数据,请使用const
让它提供保证,它不会更改数据。
第四,避免像<{1}}这样的幻数:将数组大小作为参数传递。
这加上一些纯粹的外观变化,产生了:
20
答案 1 :(得分:1)
此功能应为
void najneg(int *pa,int *nn)
{
*nn=0; //As you want to modify nn.
for(int i=0;i<20;i++)
{
if(pa[i]<*nn) *nn=pa[i]; //Here, you want to compare values and swap them. Not just address.
}
}
不要试图使它复杂化。
答案 2 :(得分:0)
除了其他人指出的内容外:
您可以简化for
循环的内容:
for(i = 0; i < 20; i++)
{
// The array slot is assigned a random value
// whether the index is positive or negative.
a[i] = rand() % 61;
// If the index is odd, change the value
// to a negative number.
if(i % 2 == 1)
{
a[i] *= -1;
}
}
在下一个循环中,您应该合并为一个printf
调用:
for(int i = 0; i < 20; i++)
{
printf("\ %d", a[i]);
}
此外,格式说明符,制表符或空格中的"\ "
是什么?