TianC_Wen 2017-11-20 15:44 采纳率: 50%
浏览 1015
已采纳

C语言初学者,一个小小的编程题目求答疑

如图一所示的C语言编程题图片说明
起初我没有用函数来做,编译运行时,有几组数的结果没有输出(空白)。(貌似是有第4和6组)
当我把计算骰子点数的内容做成函数内容后,就成功了。我想知道我那个没用函数的方法是哪里出了问题。还是有漏掉了什么细节。没用函数和用了函数的代码如下。谢谢解答!

#include<stdio.h>
int main(void)
{
    unsigned int a[200],b[200];
    int sum1=0;
    int sum2=0;
    int n;
    int i=1;
    int j=1;
    int m1,m2;
    int m;
    int num1,num2;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%u%u",&a[i],&b[i]);
    for(j=1;j<=n;j++)
    {   sum1=sum2=0;
        while(a[j]!=0){
        num1=a[j]%10;
        a[j]/=10;
        sum1+=num1;}
        while(b[j]!=0){
        num2=b[j]%10;
        b[j]/=10;
        sum2+=num2;}
        m1=sum1%6+1;
        m2=sum2%6+1;
        m=m1+m2;
        if((m==7)||(m==11))
            printf("success!\n");
        else if((m==2)||(m==3)||(m==12))
            printf("fail!\n");
        else
        {
            a[j]++;
            b[j]++;
            while(a[j]!=0)
            {   sum1=sum2=0;
                while(a[j]!=0){
                num1=a[j]%10;
                a[j]/=10;
                sum1+=num1;}
                while(b[j]!=0){
                num2=b[j]%10;
                b[j]/=10;
                sum2+=num2;}
                m1=sum1%6+1;
                m2=sum2%6+1;
                if((m1+m2)==m)
                {
                    printf("success!\n");
                    a[j]=0;
                }
                else if ((m1+m2)==7)
                {
                    printf("fail!\n");
                    a[j]=0;
                }
                else
                {
                    a[j]++;
                    b[j]++;
                }
             }
         }
    }
    return 0;
}

 #include<stdio.h>
int sum(int a,int b);
int main(void)
{
    unsigned int a[200],b[200];
    int n;
    int i=1;
    int j=1;
    int m;
    int S;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%u%u",&a[i],&b[i]);
    for(j=1;j<=n;j++)
    {
        m=sum(a[j],b[j]);
        if((m==7)||(m==11))
            printf("success!\n");
        else if((m==2)||(m==3)||(m==12))
            printf("fail!\n");
        else
        {
            a[j]++;
            b[j]++;
            while(a[j]!=0)
            {
                S=sum(a[j],b[j]);
                if (S==m)
                {
                    printf("success!\n");
                    a[j]=0;
                }
                else if (S==7)
                {
                    printf("fail!\n");
                    a[j]=0;
                }
                else
                {
                    a[j]++;
                    b[j]++;
                }
             }
         }
    }
    return 0;
}

int sum(int a,int b)
{   int m1,m2;
    int m;
    int num1,num2;
    int sum1,sum2;
        sum1=sum2=0;
        while(a!=0){
        num1=a%10;
        a/=10;
        sum1+=num1;}
        while(b!=0){
        num2=b%10;
        b/=10;
        sum2+=num2;}
        m1=sum1%6+1;
        m2=sum2%6+1;
        m=m1+m2;
        return m;
}

  • 写回答

2条回答 默认 最新

  • 沉寂的种子 2017-11-20 16:45
    关注

    for里面的a[j],b[j],你已经改变它们的值了,下面else里面进行++,得到的不是原来值的后一位了,而是原来值最高位的数值上边加一,你下面的能成功,就是你传的是参数,每次改变的是参数的值,真实的a,b没变,下次的运算才能从a++,b++开始

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵