鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 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)  两次,第二次调用并没有使用返回值,这是多余的。

以下是修改后的代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. void input1(int *n); // 修改参数为指针类型
  4. int swap(int n);
  5. int main()
  6. {
  7.     int n, number;
  8.     input1(&n); // 传入 n 的地址
  9.     printf("n=%d", n);
  10.     int count = swap(n); // 保存返回值
  11.     printf("count=%d\n", count);
  12.     return 0;
  13. }
  14. void input1(int *n) // 修改参数为指针类型
  15. {
  16.     printf("pls input a number:");
  17.     scanf("%d", n); // 通过指针修改 n 的值
  18. }
  19. int swap(int n)
  20. {
  21.     int i = 0, j = 0, k = 0, num = 0;
  22.     for (int s = 101; s <= n; s++)
  23.     {
  24.         double digit = sqrt(s);
  25.         i = s / 100;
  26.         j = s / 10 % 10;
  27.         k = s % 10;
  28.         if ((digit == (int)digit) && (i == j || i == k || j == k))
  29.             num++;
  30.     }
  31.     return num;
  32. }
复制代码


通过这些修改,代码应该能够正确地输出符合条件的数的个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-15 18:47:37 | 显示全部楼层    本楼为最佳答案   
问题出在  input1  函数和  swap  函数中。在 C 语言中,函数参数默认是按值传递的,所以在  input1  函数中对  n  的修改并不会影响  main  函数中的  n  的值。正确的做法是将  input1  函数的参数改为指针类型,这样可以修改  main  函数中的  n  的值。另外,在  main  函数中调用  swap(n)  两次,第二次调用并没有使用返回值,这是多余的。

以下是修改后的代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. void input1(int *n); // 修改参数为指针类型
  4. int swap(int n);
  5. int main()
  6. {
  7.     int n, number;
  8.     input1(&n); // 传入 n 的地址
  9.     printf("n=%d", n);
  10.     int count = swap(n); // 保存返回值
  11.     printf("count=%d\n", count);
  12.     return 0;
  13. }
  14. void input1(int *n) // 修改参数为指针类型
  15. {
  16.     printf("pls input a number:");
  17.     scanf("%d", n); // 通过指针修改 n 的值
  18. }
  19. int swap(int n)
  20. {
  21.     int i = 0, j = 0, k = 0, num = 0;
  22.     for (int s = 101; s <= n; s++)
  23.     {
  24.         double digit = sqrt(s);
  25.         i = s / 100;
  26.         j = s / 10 % 10;
  27.         k = s % 10;
  28.         if ((digit == (int)digit) && (i == j || i == k || j == k))
  29.             num++;
  30.     }
  31.     return num;
  32. }
复制代码


通过这些修改,代码应该能够正确地输出符合条件的数的个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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