#include<stdio.h>
#include<math.h>
int perfectSquare(int arr[], int n);
int main()
{
int n , arr[n];
printf("number of elements to store in array");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf("enter %d number", i+1);
scanf("%d", &arr[i]);
}
perfectSquare(arr, n);
return 0;
}
int perfectSquare(int arr[], int n)
{
int i;
int a;
for (i = 0; i <= n; i++) //i=4 arr[4]==9 //arr[1]=2 i=1
{
a=sqrt((double)arr[i]); //a=3 //a=1.454=1
if ( a*a==arr[i] ) //a==3*3==9==arr[4] //a*a=1!=arr[2]
printf("%d", arr[i]);
}
}
我是新的编码,我目前正在学习c。我想出了这个代码,但它不工作,有人能告诉我这段代码的问题是什么?
这个练习有几个问题,但总的来说您是在正确的轨道上。以下是您的示例的一个版本,其中包含一些可能的更正:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void perfect_square(int arr[], int n);
int main(void)
{
int i, n, *arr;
printf("number of elements to store in array: ");
scanf("%d", &n);
if (n <= 0)
return -1;
arr = malloc(n*sizeof(int));
if (arr == NULL)
return -2;
for (i = 0; i < n; i++) {
printf("enter number %d: ", i+1);
scanf("%d", &arr[i]);
}
perfect_square(arr, n);
free(arr);
arr = NULL;
return 0;
}
void perfect_square(int arr[], int n)
{
int i, a;
for (i = 0; i < n; i++) {
a = (int)sqrt((double)arr[i]);
if (a*a == arr[i])
printf("%d ", arr[i]);
}
}
一些提示:
在编译时大小未知的数组通常用
malloc()
分配,并且必须用free()
重新分配(参见:alloca()
,calloc()
,realloc()
)。(在"最新"版本的"C"也可以使用可变长度数组,但这会限制代码的可移植性)。始终确保检查for循环的开始值和结束条件,以防止超出界限的错误。
并尝试统一格式的代码,使用好的名称和良好的缩进,以提高可读性,维护性,可重用性。