main函数带命令行参数的使用

该博客介绍了一个C语言程序,该程序能够接收命令行输入的数学表达式,如'100+200'或'100*200',并返回计算结果。程序通过解析字符串,查找运算符,将操作数转换为浮点数并执行相应的数学运算,最后以保留两位小数的形式输出结果。这个程序涉及到字符串处理、运算符识别和浮点数计算,是C语言编程的一个基础应用示例。
摘要由CSDN通过智能技术生成

任务描述

请编写一个程序:把程序build后生成的可执行文件(假设文件名为mycal.exe)放到C盘根目录下,在命令行提示符下,转到c:\下 ,键入mycal 100+200 运行的结果为 300.00;键入mycal 100*200 运行的结果为20000.00 等。 程序中的运算符与C语言中的运算符在字符上保持一致。计算结果保留小数点后两位有效数字

编程要求

本程序的源文件包含两个,1个是main函数所在的源文件main.c,另一个是对一个字符串进行解析的函数的定义源文件myfun.c,你只需要在理解main.c中代码的基础上,在右侧代码区给定的地方完成myfun.c中的代码即可(你也可以删除已有代码,按照你的思路从零开始)。main.c的代码如下:

  1. #include<stdio.h>
  2. void processUserInputStr(char* s);
  3. int main(int argc,char* argv[])
  4. {
  5.   processUserInputStr(argv[1]);
  6.   return 0;
  7. }
    #include <string.h>
    #include <stdlib.h>
    
    //s:一个形如a[运算符]b的字符串,例如:4.5+9,6-9,4/5,8*7...
    //该函数经过处理,输出数的运算结果,例如若s为"20.3+1",则该函数在屏幕上输出21.30(保留小数点后面2位有效数字
    //此函数内部操作的基本算法为:
    //第1步:找到运算符对应的位置索引
    //第2步:根据运算符位置,将其前面的字符串复制到strA,后面的字符串复制到strB
    //第3步:将strA,strB转换为数值(使用函数atof,具体用法请百度)a,b
    //第4步:根据运算符,对a,b进行相应的运算
    //第5步:输出运算结果result
    void  processUserInputStr(char *s) {
    	int len = strlen(s); //s中有效字符的个数
    	//strA,strB分别用于存放两个操作数对应的字符串
    	char strA[100], strB[100];
    	//a,b分别用于存放将字符串转换后的数,result用于保存运算结果
    	double a, b, result;
    	char op;//用于存储s中的运算符对应的字符串
    	int k, posOp; //posOp:符号的位置索引
    
    	/**********begin**********/
    	for (k = 0; k < len; k++) {
    		if (*(s + k) == '+') {
    			posOp = k;
    			op = *(s + k);
    
    			for (k = 0; k < posOp; k++) {
    				strA[k] = *(s + k);
    			}
    
    			for (k = 0; posOp < len; k++, posOp++) {
    				strB[k] = *(s + posOp+1);
    			}
    
    			a = atof(strA);
    			b = atof(strB);
    			result = a + b;
    		} else if (*(s + k) == '-') {
    			posOp = k;
    			op = *(s + k);
    
    			for (k = 0; k < posOp; k++) {
    				strA[k] = *(s + k);
    			}
    
    			for (k = 0; posOp < len; k++, posOp++) {
    				strB[k] = *(s + posOp+1);
    
    			}
    
    			a = atof(strA);
    			b = atof(strB);
    			result = a - b;
    		} else if (*(s + k) == '*') {
    			posOp = k;
    			op = *(s + k);
    
    			for (k = 0; k < posOp; k++) {
    				strA[k] = *(s + k);
    			}
    
    			for (k = 0; posOp < len; k++, posOp++) {
    				strB[k] = *(s + posOp+1);
    
    			}
    
    			a = atof(strA);
    			b = atof(strB);
    			result = a * b;
    		} else if (*(s + k) == '/') {
    			posOp = k;
    			op = *(s + k);
    
    			for (k = 0; k < posOp; k++) {
    				strA[k] = *(s + k);
    			}
    
    			for (k = 0; posOp < len; k++, posOp++) {
    				strB[k] = *(s + posOp+1);
    			}
    
    			a = atof(strA);
    			b = atof(strB);
    			result = a / b;
    		}
         }
    	 printf("%.2f",result);
    		/**********end**********/
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值