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 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能