我想用C编写一个程序,它以数组作为输入,并告诉哪些数字是完全平方数


#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循环的开始值和结束条件,以防止超出界限的错误。

  • 并尝试统一格式的代码,使用好的名称和良好的缩进,以提高可读性,维护性,可重用性。

最新更新