我刚刚在C语言中使用数组,函数等编写了一个程序,但它在乘法,子和除法中没有显示准确的结果。也许执行操作的公式是错误的。请帮助完成此程序,这是代码:
#include<stdio.h>
#include<conio.h>
void SimpleArithematic();
int main()
{
clrscr();
SimpleArithematic();
getch();
return 0;
}
void SimpleArithematic()
{
char ch;
int n;
long num=0,i,sum[100];
printf("Which Operation you want to perform: +,-,*,/?\n");
scanf("%c",&ch);
printf("Input Total Inputs: \n");
scanf("%d",&n);
printf("Input Numbers \n");
for(i=0;i<n;i++)
{
printf("Enter Number %d: \n",i+1);
scanf("%ld",&sum[i]);
}
switch(ch)
{
case '+':
for(i=0;i<n;i++)
num=num+sum[i];
printf("Addition: %ld",num);
break;
case '-':
for(i=0;i<n;i++)
{
num=num-sum[i];
}
printf("Subtraction: %ld",num);
break;
case'*':
for(i=0;i<n;i++)
sum[i]=sum[i]*num;
printf("Multiplication: %ld",num);
break;
case'/':
for(i=0;i<n;i++)
num=num/sum[i];
printf("Division: %ld",num);
break;
default:
printf("Invalid Input!!");
}
}
答案 0 :(得分:1)
您要划分两个long
变量:
num=num/sum[i];
如果num
小于sum[i]
,则结果num
将为零,因为小数位在整数分割中被截断。
无论如何,num
被初始化为0
,所以无论你将它除以什么都会再次给你0
。
另外,对于你的乘法,你可能有一个拼写错误:
sum[i]=sum[i]*num;
然而,由于num
被初始化为0
,因此无论您将其乘以,都会给您0
。
答案 1 :(得分:1)
循环都以num = 0
开头,然后对所有输入数字进行操作。这恰好与添加有效,因为0 + x = x
(身份函数),但它不适用于其余部分。 0 - x = -x
,0 / x = 0
和0 * x = 0
。
相反,请设置num = sum[0]
并从i = 1
开始循环。
这是对其他答案中指出的问题的补充。
作为旁注,我建议不要命名除n
之类的循环变量之外的任何东西。很难理解他们的意思,他们很难找到。称之为num_sum
以表明其在sum
中的数量。 (sum
也是一个坏名字,因为它不是总和。它应该被称为inputs
,因为它是输入。)
此外,初始化循环变量(即i
)。这通过避免代码顶部的大量变量初始化器使代码更容易准备。当所有变量必须在函数开始时声明时,这种风格是Ye Olden Days的延续。并且它避免了在下次使用时保留的局部变量值难以调试的情况。例如......
int i;
for( i = 0; i < blah; i++ ) {
...
}
...later on...
for( i; i < blah; i++ ) {
...
}
由于i
保留了之前循环中的值,因此不会对您的错误发出警告。