liujianan123 发表于 2023-11-15 18:47:25

请问这个为什么输出总是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;
}

isdkz 发表于 2023-11-15 18:47:37

问题出在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]
查看完整版本: 请问这个为什么输出总是0啊