请问这个为什么输出总是0啊
这是找一个三位数,找出完全平方数又有两位数字相同的数的个数的题#include<stdio.h>
#include<math.h>
void input1(int n);
int swap(int n);
int main()
{
int n,number;
input1(n);
printf("n=%d",n);
swap(n);
printf("count=%d\n",swap(n));
return 0;
}
void input1(int n)
{
int num;
printf("pls input a number:");
scanf("%d",&n);
}
int swap(int n)
{
int i=0,j=0,k=0,num=0;
for(int s=101;s<=n;s++)
{
double digit=sqrt(s);
i=s/100;
j=s/10%10;
k=s%10;
if((digit==(int)digit)&&(i==j||i==k||j==k))
num++;}
return num;
}
问题出在input1函数和swap函数中。在 C 语言中,函数参数默认是按值传递的,所以在input1函数中对n的修改并不会影响main函数中的n的值。正确的做法是将input1函数的参数改为指针类型,这样可以修改main函数中的n的值。另外,在main函数中调用swap(n)两次,第二次调用并没有使用返回值,这是多余的。
以下是修改后的代码:
#include<stdio.h>
#include<math.h>
void input1(int *n); // 修改参数为指针类型
int swap(int n);
int main()
{
int n, number;
input1(&n); // 传入 n 的地址
printf("n=%d", n);
int count = swap(n); // 保存返回值
printf("count=%d\n", count);
return 0;
}
void input1(int *n) // 修改参数为指针类型
{
printf("pls input a number:");
scanf("%d", n); // 通过指针修改 n 的值
}
int swap(int n)
{
int i = 0, j = 0, k = 0, num = 0;
for (int s = 101; s <= n; s++)
{
double digit = sqrt(s);
i = s / 100;
j = s / 10 % 10;
k = s % 10;
if ((digit == (int)digit) && (i == j || i == k || j == k))
num++;
}
return num;
}
通过这些修改,代码应该能够正确地输出符合条件的数的个数。
页:
[1]