鱼C论坛

 找回密码
 立即注册
查看: 1345|回复: 1

[已解决]请问这个为什么输出总是0啊

[复制链接]
发表于 2023-11-15 18:47:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是找一个三位数,找出完全平方数又有两位数字相同的数的个数的题


#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;
}

最佳答案
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;
}

通过这些修改,代码应该能够正确地输出符合条件的数的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}

通过这些修改,代码应该能够正确地输出符合条件的数的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-3 07:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表