鱼C论坛

 找回密码
 立即注册
查看: 1510|回复: 3

[已解决]代码错在哪里了啊(偶数位

[复制链接]
发表于 2023-10-18 20:27:02 | 显示全部楼层 |阅读模式

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

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

x
题目描述
输入一个正整数n
,编程统计1~n
的自然数中,各位数字之和是偶数的个数。

输入描述
多组数据输入,每一组只有一个数字n
输出描述
每个结果一行
#include<stdio.h>
int main()
{
    int n,a,sum,s=0;
    while(scanf("%d",&n)!=EOF)
    {
        s=0;
        for(int i=1;i<=n;i++)
        {
            sum=0;
            for(int j=i;j>0;)
            {
                a=j%10;
                sum+=a;
                j=j/10;
            }
            if (sum%2==0);s++;
        }
        printf("%d\n",s);
    }
}
最佳答案
2023-10-18 20:27:31
这段代码存在一个错误:

1. 在条件语句 if (sum%2==0);s++; 中,分号";"的位置不正确。在这个代码中,分号将if语句作为空语句,因此无论条件是否满足,下面的s++都会执行。应该将分号移除,使s++成为if语句的一部分。

修改后的代码如下:
++#include<stdio.h> int main() {     int n,a,sum,s=0;     while(scanf("%d",&n)!=EOF) {         s=0;         for(int i=1;i<=n;i++) {             sum=0;             for(int j=i;j>0;) {                 a=j%10;                 sum+=a;                 j=j/10;             }             if (sum%2==0)                s++;         }         printf("%d\n",s);     }     return 0;}
修改后的代码会根据输入的正整数n,统计从1到n的自然数中,各位数字之和为偶数的个数。每次输入一个n并计算完毕后,会输出结果s。然后继续进行下一组输入,直到文件结尾。请注意,之前的分号";"被移除,这样在条件满足时才会执行s++操作。最后代码会返回0,表示正常结束。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-18 20:27:26 | 显示全部楼层
代码中有一个小错误。在判断  sum  是否为偶数时,多了一个分号  ; ,导致  s  每次循环都会自增一次。

正确的代码应该是这样的:
#include<stdio.h>
int main()
{
    int n,a,sum,s=0;
    while(scanf("%d",&n)!=EOF)
    {
        s=0;
        for(int i=1;i<=n;i++)
        {
            sum=0;
            for(int j=i;j>0;)
            {
                a=j%10;
                sum+=a;
                j=j/10;
            }
            if (sum%2==0) s++;
        }
        printf("%d\n",s);
    }
}

这样修改后,代码就可以正确统计1~n中各位数字之和为偶数的个数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 20:27:31 | 显示全部楼层    本楼为最佳答案   
这段代码存在一个错误:

1. 在条件语句 if (sum%2==0);s++; 中,分号";"的位置不正确。在这个代码中,分号将if语句作为空语句,因此无论条件是否满足,下面的s++都会执行。应该将分号移除,使s++成为if语句的一部分。

修改后的代码如下:
++#include<stdio.h> int main() {     int n,a,sum,s=0;     while(scanf("%d",&n)!=EOF) {         s=0;         for(int i=1;i<=n;i++) {             sum=0;             for(int j=i;j>0;) {                 a=j%10;                 sum+=a;                 j=j/10;             }             if (sum%2==0)                s++;         }         printf("%d\n",s);     }     return 0;}
修改后的代码会根据输入的正整数n,统计从1到n的自然数中,各位数字之和为偶数的个数。每次输入一个n并计算完毕后,会输出结果s。然后继续进行下一组输入,直到文件结尾。请注意,之前的分号";"被移除,这样在条件满足时才会执行s++操作。最后代码会返回0,表示正常结束。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 20:27:40 | 显示全部楼层
你的代码中存在一个小错误,这个错误在if语句的结尾。你在if语句的结尾使用了一个分号,这实际上会使得if语句结束,而不会执行你期望的s++操作。这就是为什么你的代码没有按照你的预期工作的原因。

你应该将这行代码:
if (sum%2==0);s++;

改为:
if (sum%2==0) s++;

这样,只有当sum是偶数时,s才会增加。在你的原始代码中,无论sum是否为偶数,s都会增加,因为分号结束了if语句,使得s++成为了一个独立的语句。

所以,修正后的代码应该是:
#include<stdio.h> 
int main() { 
    int n,a,sum,s=0; 
    while(scanf("%d",&n)!=EOF) { 
        s=0; 
        for(int i=1;i<=n;i++) { 
            sum=0; 
            for(int j=i;j>0;) { 
                a=j%10; 
                sum+=a; 
                j=j/10; 
            } 
            if (sum%2==0) s++; 
        } 
        printf("%d\
",s); 
    } 
}

这样,你的代码应该能够正确地统计1到n的自然数中,各位数字之和是偶数的个数。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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