是的,这是一个基本的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);
}
答案 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;
现在你必须付款 - 我称之为xy
,yz
和zx
。只是其中之一:
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)。最后,将每个总和分成两半。现在,打印出所有的 结果数字。
我没有得到最后一部分,你能更清楚地解释一下吗?