发布网友 发布时间:2022-07-06 12:41
共2个回答
热心网友 时间:2023-10-08 17:32
/**
有什么问题,给我发信息
没有考虑一些细节,VC6.0 编译通过
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/*错误时,输出用法 并结束程序 */
void usage()
{
printf("参数错误\n");
printf("命令行计算器\n");
printf("compute 操作数1 + | - | * | / | # | ! [操作数2]\n");
exit(-1); /*结束程序*/
}
/*求阶乘*/
double factorial(int n)
{
int i = 1;
double result = 1.0;
for(i = 1; i <=n ; i++)
result *= i;
return result;
}
/*判断运算符需要的操作数,不合法时返回-1,双目返回2,单目返回1*/
int opnum(char op)
{
int n = -1;
if(op == '+' || op == '-' || op == '*' || op == '/')
n = 2;
else if(op == '#' || op == '!')
n = 1;
return n;
}
/*根据字符型的运算符进行相应的运算*/
double compute(double num1, char op,double num2)
{
double result = 0.0;
switch(op)
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
/*除数为0时,输出错误信息并结束程序*/
if(!num2)
{
printf("除0错误\n");
exit(-1);
}
result = 1.0 * num1 / num2;
break;
case '!':
/*不能求负数的阶乘*/
if(num1 < 0)
{
printf("不能求负数的阶乘\n");
exit(-1);
}
result = factorial((int)num1);
break;
case '#':
/*实数范围内,不能求负数的平方根*/
if(num1 < 0)
{
printf("实数范围内平方根错误\n");
exit(-1);
}
result = sqrt(num1);
break;
}
return result;
}
int main(int argc, char* argv[])
{
/*
argc是命令行参数的个数, argv字符数组存放每个参数
注意程序名本身也算一个参数,如argv[0] = "compute"
用法 compute num1 + | - | * | / | # | ! [num2]
compute 操作数1 + | - | * | / | # | ! 操作数2
其中
#表示求平方根,操作数2可省
!表示求阶乘,操作数2可省
*/
int n = -1; /*运算符所需操作数个数*/
double result = 0.0; /*结果*/
/*至少需要3个参数,否则输出用法并结束程序*/
if(argc < 3)
usage();
/*第3个参数为运算符,不能多于1个字符,此条件可以不用*/
if(strlen(argv[2]) > 1)
usage();
/*求出所需操作数,不合法时为-1 */
n = opnum(argv[2][0]);
/*如果操作数< 0说明运算符不合法
双目运算符时 第4个参数即操作数2不能省
否则输出用法,并结束程序
*/
if((n < 0) || (n == 2 && argc < 4))
usage();
/*双目运算符
按a + b = c 的形式输出
*/
if(n == 2)
{
result = compute(atof(argv[1]), argv[2][0], atof(argv[3]));
printf("%s %c %s = %f\n", argv[1], argv[2][0], argv[3], result);
}
/*单目运算符
按a ! = c 的形式输出
*/
else
{
result = compute(atof(argv[1]), argv[2][0], 0);
printf("%s %c = %f\n", argv[1], argv[2][0], result);
}
return 0;
}
热心网友 时间:2023-10-08 17:32
个人觉得,如果这样的题目,你自己能够通过思考,分析,并开发出来的话,对你的学习帮助特别大。