3位整数程序不会执行

时间:2014-03-10 03:40:24

标签: c

是的,这是一个基本的C编码作业问题。不,我不只是在寻找有人为我做这件事。考虑到这是我的第一个编程课程,我并不感到惊讶,我无法让它工作,我确信它有很多错误。我只是想要一些帮助来指出我的代码中的问题以及缺少的东西,以便我可以自己解决它们。

家庭作业问题:

  

写一个程序只读一个整数(你的输入必须是   一个3位数字,从100到999),并将数字视为一个数字   是ABC(其中A,B和C是数字的3位数)。现在,   形成数字,成为ABC,BCA和CAB,然后找出   这三个数字的剩余部分除以11。   假设余数分别为X,Y和Z并加上它们   向上为X + Y,Y + Z和Z + X.现在,如果这些总结中的任何一个是奇怪的   数字,如果总和加上11小于20,则增加11,   否则将总和减少11(此求和运算   必须是正数但小于20)。最后,划分每个   总和的一半。现在,打印出所有结果数字。

我的代码:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    //Declare all variables
    int OrigNumber;
    int x, y, z;
    int number;
    number = x, y, z;
    int sum;
    //
    printf("Input a three digit number");
    //
    int c;
    c = OrigNumber %10;
    //
    int b;
    b=((OrigNumber - c) % 100)/10;
    //
    int a;
    a = (OrigNumber - (b + c))/100;
    //
    int abc, bca, cab;
    abc = (a*100) + (10*b) + c;
    bca = (10*b) + c + (a*100);
    cab = c + (a*100) + (10*b);
    //
    if((number % 2) == 1)
        {
            if(number + 11 < 20)
                number += 11;
            else if((100 - 11 > 0) && (100 - 11 < 20))
                number -= 11;
        }
    //
    x = abc/11;
    y = bca/11;
    z = cab/11;
    //
    sum = (x + y),
          (y + z),
          (z + x);
}

4 个答案:

答案 0 :(得分:2)

首先,您需要阅读输入。从包含回车符的提示开始:

printf("Input a three digit number: \n");

由于它是一个三位数字,您可以添加以下行来阅读输入:

scanf("%3d", &OrigNumber);

下一段代码效果很好,直到你到达if (number % 2)这是没有意义的,因为你没有真正定义number - 好吧,你做了,但行

number = x, y, z;

不会按照您的想法行事。如果你添加

printf("So far I have abc=%d, bca=%d, cab=%d\n", abc, bca, cab);

在您第一次阅读该数字并计算出这三个数字后,您将看到自己正在路上。

请注意

number = x, y, z;

使用称为“逗号运算符”的东西。所有的东西(a,b,c)都被“评估”但不返回它们的值。无论如何,如果你有这条线,你还没有为x,y和z赋值。

这足以让你开始吗?

更新现在您已经有几个小时的时间来考虑这个问题了,这里有几个指针。

你对abc, cab, bca的计算毫无意义。我会告诉你其中一个:

cab = c*100 + a*10 + b;

接下来,您需要计算x,y和z中的每一个。同样,这是三个中的一个:

y = bca%11;

现在你必须付款 - 我称之为xyyzzx。只是其中之一:

zx = z + x;

接下来,处理指令:“现在,如果这些求和中的任何一个是奇数,如果求和加11小于20,则将其增加11,否则将求和减少11:

if(xy % 2 == 1) {
  if(xy + 11 < 20) xy += 11; else xy -= 11;
}

对所有三个总和使用类似的代码。然后“除以2”:

xy /= 2;

根据需要重复。

最后,打印出结果:

printf("xy: %d, yz: %d, zx: %d\n", xy, yz, zx);

令人惊奇的是,如果你做得对,你会得到原始数字......

您可以通过使用值数组并循环遍历代码来使代码更紧凑 - 而不是重复我上面用不同变量编写的代码片段。但我怀疑这远远超出了你现在应该知道的范围。

你能从这里拿走吗?

答案 1 :(得分:1)

#include <stdio.h>
int main()
{
    //Declare all variables
    int OrigNumber;
    int a, b, c;
    int abc, bca, cab;
    int x, y, z;
    int xplusy , yplusz, xplusz;

    printf(" A program to read ONLY one integer number.\n Input must be one 3 digit number from 100 to 999 : ");    
    scanf("%d", &OrigNumber);   // Get input from console

    if(OrigNumber > 999 || OrigNumber < 100) {
        printf("Invalid number. Quiting program. This is error handling. Important while learning programming.");   
    return 0;
    }

    c = OrigNumber %10; // digit at unit's place

    b=((OrigNumber) % 100)/10; //digit at the ten's place

    a = (OrigNumber)/100; //digit at the 100's place. Note: 734/100 = 7. NOT 7.34.

    printf("\n Three numbers say A,B, C : %d, %d , %d ", a, b, c);  

    abc = a*100 + 10*b + c;
    bca = 100*b + 10*c + a;
    cab = c*100 + a*10 + b;

    printf("\n Three numbers say ABC, BCA, CAB : %d, %d , %d ", abc, bca, cab);

    x = abc % 11;   // Reminder when divided by 11.
    y = bca % 11;
    z = cab % 11;

    printf("\n Three numbers say X, Y, Z : %d, %d , %d ", x, y, z);

    xplusy = x + y; // Adding reminders two at a time.
    yplusz = y + z;
    xplusz = x + z;

    printf("\n Three numbers  X+Y, Y+Z, X+Z : %d, %d , %d ", xplusy, yplusz, xplusz);

    if((xplusy % 2) == 1) {
        if(xplusy + 11 < 20)
            xplusy += 11;
        else
        xplusy -= 11;
    }

    if((yplusz % 2) == 1) {
        if(yplusz + 11 < 20)
            yplusz += 11;
        else
            yplusz -= 11;
    }

    if((xplusz % 2) == 1) {
        if(xplusz + 11 < 20)
            xplusz += 11;
        else
            xplusz -= 11;
    }

    xplusy /= 2; // Finally, divide each of the sum in half.
    yplusz /= 2;
    xplusz /= 2;

    printf("\n Now print out all the resulting digits :  %d, %d , %d \n", xplusy, yplusz, xplusz);

    return 0;
}

答案 2 :(得分:0)

int abc, bca, cab;
abc = (a*100) + (10*b) + c;
bca = (10*b) + c + (a*100);
cab = c + (a*100) + (10*b);

我建议在代码中打印出这些数字。

printf( "%d %d %d", abc, bca, cab );

我想你会看到你需要解决的一个问题。

答案 3 :(得分:0)

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    int n, a, b, c, abc, bca, cab, x, y, z, p, q, r;
    scanf("%d", &n);
    c=n%10;
    b=(n/10)%10;
    a=n/100;
    abc=a*100+b*10+c;
    bca=b*100+c*10+a;
    cab=c*100+a*10+b;
    x=abc%11;
    y=bca%11;
    z=cab%11;
    p=x+y;
    q=y+z;
    r=z+x;
    return 0;
}
  

现在,如果这些总结中的任何一个是奇数,如果是,则将其增加11   求和加11小于20,否则减去求和   11(此求和运算必须是正数但小于   20)。最后,将每个总和分成两半。现在,打印出所有的   结果数字。

我没有得到最后一部分,你能更清楚地解释一下吗?