回 帖 发 新 帖 刷新版面

主题:新手编的4进制计算器 大家看看~

#include<stdio.h>
#define TRUE 1
#define FALSE !TRUE
int main(void){
// declarations with descriptive variable names
int operand1,operand2;double ans, xs,b,result;
int sum,i,a1,a2,i1,i2,input1,input2,j,zs,num_int,xs_int;
char oprtr,ask;
int done = FALSE, problemflag = FALSE;
// Title prompt
printf("A Simple Base-4 Calculator\n");
do {// Loop while variable done is FALSE
// Prompt user for arithmetic expression
printf("Enter calculator command in the following form:\n");
printf("<operand> <oprtr> <operand>\n");
printf("Only digit'0','1','2','3'could appear in your input\n");
printf("Valid operators are +, -, *, and /.\n");
scanf("%d %c %d", &input1, &oprtr, &input2);
a1=input1;a2=input2;/*Store the inputs*/
/*Convert the first base-10 input into base-4 numbers*/
operand1=0;i1=0;
do{ 
  operand1+=input1%10*(int)pow(4,i1);
  input1=input1/10;
  i1++;
 }while(input1!=0);  
/*Convert the second base-10 input into base-4 numbers*/
operand2=0;i2=0;
 do{
  operand2+=input2%10*(int)pow(4,i2);
  input2=input2/10;
  i2++;
 }while(input2!=0);  
// Based on operation, perform calculation
switch(oprtr) {
case '+':
ans = operand1 + operand2;
break;
case '-':
ans = operand1 - operand2;
break;
case '*':
ans = operand1 * operand2;
break;
case '/':
if (operand2 == 0.0) {
printf("Error. Cannot divide by 0.\n");
ans = 0;
problemflag = TRUE;  
} else {
ans = (double)operand1 / (double)operand2;/*Change int into double*/
}
break;
default:
printf("*** Invalid operator. *** \n");
problemflag = TRUE;      
break;
}
if (problemflag) {
// if there was a problem encountered
printf("Arithmetic operation not performed.\n");   
problemflag = FALSE; // Our error checking flag reset
} else {/*Convert the base-10 output into base-4*/
    i=0;sum=0;j=1;b=0;
    /*This is for the integer part*/
    zs=ans;
    while(zs)
    {
        sum+=zs%4*pow(10,i);
        zs/=4;
        i++;
    };
zs=sum;
/*This is for the fractional part*/
    num_int=ans;
    xs=ans-num_int;/*Get the fraction part of the answer*/
   for(xs_int=xs;xs-xs_int!=0.00&&j<=3;j++){
       xs=xs*4;
       xs_int=xs;/*Get the integer part*/
       b+=xs_int/pow(10,j);
       xs=xs-xs_int;/*Get the new fractional part*/
   };
result=(double)sum+b;
/*Add the integer part and the fraction part together*/}
printf("%d %c %d = %.2f", a1, oprtr, a2, result);
printf("\n\n Enter ’1’ to continue or ’0’ to quit: ");
scanf("%d", &ask);
if (ask == 0) // ask if done          
done = TRUE;
} while (!done);     
return(0);
}

回复列表 (共2个回复)

沙发

是您編的么?為何用/*注釋?如果不是大塊代碼的臨時刪除式的注釋,盡量用//來代替/*:)

板凳

楼主的钻研精神令人敬佩,不过编程风格需要好好改改,您的IDE没有自动缩进功能?

我来回复

您尚未登录,请登录后再回复。点此登录或注册