|
1楼 用法很简单,输入式子就可以得到答案。 支持一般的数学符号,有兴趣的可以补充。 如果看得懂得话就给个评价,这很重要。好就表扬一下,不好就批评漫骂都可以,最好是指出缺点,这也很重要。 如果看不懂代码,那么就拿去编译成文件用一用,好还是不好也评价一下。(我觉得读代码很难,特别是不明朗得代码,然而我这次写的代码很不好看.) 感谢大家,我是新来的PT,说明完毕,谢幕,退场 |
|
|
|
|
2楼 #include<conio.h> #include<math.h> #include<stdlib.h> #define UNKNOWN_CHAR 2 #define DIVISOR_IS_ZERO 3 #define FALSE 0 #define TRUE 1 /*定义结构,主要用于GetString函数,可以不管它*/ typedef struct string {char str; struct string *next; }string; /*函数声明*/ /*可以无限接受字符,输入一个字符就给你个空间,返回一个字符串首地址 . */ /*这个函数可以看成普通的scanf()*/ char *GetString(); /*从字符串str第*rank个字符开始分析直到遇到 ')' or ']' or '}' or '\0' . */ /*有错误就把错误代号装在*errorNum中,返回从中计算出的值*/ double GetASResultOf(char * str, int *rank, int *errorNum); /*从字符串str第*rank个字符开始分析直到遇到不符合要求的字符,返回这个单位值.*/ /*如:str="12+sin(30)+[12+cos(60)]" GetUnitageOf(str,0,errorNum)=12 GetUnitageOf(str,3,errorNum)=0.5 GetUnitageOf(str,11,errorNum)=12.5 */ double GetUnitageOf(char * str, int *rank, int *errorNum); |
|
|
|
|
3楼 int main() { /*定义变量*/ double value; int rank=0; int errorNum=TRUE; char * str; /*接收字符*/ printf("counter v1.0\n"); printf("Made by PT\n"); printf("Date 2005-07-16\n\n"); printf("Please input your arithmetic:\n"); str=GetString(); /*调用处理函数,*/ value = GetASResultOf(str, &rank, &errorNum); /*错误处理(没完善)*/ if (errorNum==TRUE) printf("The result is: %lf\n",value, rank); else if (errorNum==UNKNOWN_CHAR) printf("char error!\n"); else if (errorNum==DIVISOR_IS_ZERO) printf("Divisor could not be 0\n"); else printf("Other error\n"); getch(); return 0; } /*0==[=========>无限动态字符接受函数*/ char *GetString() { char *CharToString(string * sHead, int arraySize); int arraySize=0; string *s; string *sHead; s = (string *)malloc(sizeof(string)); sHead = s; s->str = getchar(); arraySize++; while((s->str)!='\n') { arraySize++; s->next=(string *)malloc(sizeof(string)); s=s->next; s->str=getchar(); } return CharToString(sHead, arraySize); } char *CharToString(string * sHead, int arraySize) { char *strArray; string *s=sHead; int i=0; strArray = (char*)malloc(arraySize*sizeof(char)); while(i<arraySize) { if (s->str=='=' || s->str=='\n') break; if (s->str!=32) strArray[i++]=s->str; s=s->next; } strArray[i]='\0'; return strArray; } |
|
|
|
|
4楼 double GetUnitageOf(char * str, int *rank, int *errorNum) { double CharToNum(char * str, int *rank); double value; /*如果是数字或负号就返回这个数字*/ if ((str[*rank]>=48 && str[*rank]<=57) || (str[*rank]=='-')) {if (str[*rank]=='-') {(*rank)++;value = (-1)*GetUnitageOf(str, rank,errorNum);} else {value = CharToNum(str, rank);}} /*如果是括号就用GetASResultOf取得括号里面的值并返回*/ else if (str[*rank]=='(' || str[*rank]=='[' || str[*rank]=='{' ) {(*rank)++; value = GetASResultOf(str, rank, errorNum);} /*返回sin(x)*/ else if (str[*rank]=='s' && str[(*rank)+1]=='i' && str[(*rank)+2]=='n') { (*rank)=(*rank)+3; value = GetUnitageOf(str, rank, errorNum); value = sin(value); } /*返回cos(x)*/ else if (str[*rank]=='c' && str[(*rank)+1]=='o' && str[(*rank)+2]=='s') {*rank=*rank+3; value = cos(GetUnitageOf(str, rank, errorNum));} /*返回tan(x)*/ else if (str[*rank]=='t' && str[(*rank)+1]=='a' && str[(*rank)+2]=='n') {*rank=*rank+3; value = tan(GetUnitageOf(str, rank, errorNum));} /*还可以加一些的,懒得加了*/ /*defult:处理错误*/ else {*errorNum = UNKNOWN_CHAR;value = 0;} /*检查errorNum*/ if (*errorNum==TRUE){return value;} else return FALSE; } /*0==[=========>这个是把字符转换成数字的函数,只在GetUnitageOf()里用*/ /*数字不能超过15个,其余的将被抹去.*/ double CharToNum(char * str, int *rank) { int j=0; double value=0; while((str[*rank]>=48 && str[*rank]<=57) || (str[*rank]==46)) { if (str[*rank]!='.') {if ((j++)<=15) {value = value*10+(str[*rank]-48);}} else {if (j<=15) { for ((*rank)++,j=1; (str[*rank]>=48 && str[*rank]<=57 && str[*rank]!='\0'); (*rank)++, j++) {value = value+(str[*rank]-48)*pow(0.1,j);} return value; } } (*rank)++; } return value; } |
|
|
|
|
5楼 函数和GetUnitageOf函数之间转啊转的*/ /*简单地说就是把str中第一个加减号前的式子算出来放在value变量中.再用函数 GetPDResultOf算出直到二个加减号前的式子然后与value相加或相减放在 变量value中,以此类推,直到遇上 ')' or ']' or '}' or '\0' */ double GetASResultOf(char * str, int *rank, int *errorNum) { double GetPDResultOf(char * str, int *rank, int *errorNum); double value; double dwIf_Zero; /*遇上 ')' or ']' or '}' or '\0' 就返回*/ while (str[*rank]!=')' && str[*rank]!=']' && str[*rank]!='}' && str[*rank]!='\0') { if ((str[*rank]>=48 && str[*rank]<=57) || str[*rank]=='s' || str[*rank]=='c' || str[*rank]=='t') { if ((str[*rank-1]==')' || str[*rank-1]==']' || str[*rank-1]=='}') && *rank!=0) {value = value*GetUnitageOf(str, rank, errorNum);} else {value = GetUnitageOf(str, rank, errorNum);} } else if (str[*rank]=='+') {if (str[*rank-1]!= '(' && str[*rank-1]!= '[' && str[*rank-1]!= '{' && (*rank)!=0 ) {(*rank)++; value = value + GetPDResultOf(str, rank, errorNum);} else {*errorNum=UNKNOWN_CHAR;return 0;}} else if (str[*rank]=='-') {if (str[*rank-1]!= '(' && str[*rank-1]!= '[' && str[*rank-1]!= '{' && (*rank)!=0 ) {(*rank)++; value = value - GetPDResultOf(str, rank, errorNum);} else {value = GetUnitageOf(str, rank, errorNum);}} else if (str[*rank]=='*') {if (str[*rank-1]!= '(' && str[*rank-1]!= '[' && str[*rank-1]!= '{' && (*rank)!=0 ) {(*rank)++; value = value * GetUnitageOf(str, rank, errorNum);} else {*errorNum=UNKNOWN_CHAR;return 0;}} else if (str[*rank]=='/') {if (str[*rank-1]!= '(' && str[*rank-1]!= '[' && str[*rank-1]!= '{' && (*rank)!=0 ) {(*rank)++; dwIf_Zero=GetUnitageOf(str, rank, errorNum); if (dwIf_Zero==0) {*errorNum=DIVISOR_IS_ZERO;return 0;} else value = value /dwIf_Zero;} else {*errorNum=UNKNOWN_CHAR;return 0;}} else if (str[*rank]== '(' || str[*rank]== '[' || str[*rank]== '{' ) {if (str[*rank-1]!= '(' && str[*rank-1]!= '[' && str[*rank-1]!= '{' && (*rank)!=0 ) {(*rank)++; value = value*GetASResultOf(str, rank, errorNum);} else {value = GetUnitageOf(str, rank, errorNum);}} else {*errorNum=UNKNOWN_CHAR;return FALSE;} if (*errorNum!=TRUE) return FALSE; } (*rank)++; return value; } double GetPDResultOf(char * str, int *rank, int *errorNum) { double value; double dwIf_Zero; value = GetUnitageOf(str, rank, errorNum); if (str[*rank]=='\0') return value; while (str[*rank]!='+' && str[*rank]!='-' && str[*rank]!=')' && str[*rank]!=']' && str[*rank]!='}') { if (str[*rank]=='*') value = value * GetUnitageOf(str, rank, errorNum); else if (str[*rank]=='/') { dwIf_Zero= GetUnitageOf(str, rank, errorNum); if (dwIf_Zero=0) {*errorNum=DIVISOR_IS_ZERO;return 0;} else value = value /dwIf_Zero; } else if (str[*rank]=='(' || str[*rank]=='[' || str[*rank]=='{') {(*rank)++; value = value * GetUnitageOf(str, rank, errorNum);} else {*errorNum=UNKNOWN_CHAR;return FALSE;} if (*errorNum!=TRUE) return FALSE; } return value; } |
|
|
|
|
8楼 我也想天天都来和你们切磋啊,可是明天就要上学了,上学就不能天天来了,再说我们高三了,高考可是很麻烦的事啊。 今后1年的时间里玩电脑的机会可是越来越少了,有点可惜 |
|
|
|
| 61.184.62.* |
12楼 补丁sp1补丁sp1补丁sp1补丁sp1补丁sp1补丁sp1补丁sp1补丁sp1补丁sp1 说明:修改下面2个问题 在GetPDResultOf()函数中的while 语句中 (1)在if (str[*rank]=='*')里面的 value = value * GetUnitageOf(str, rank, errorNum);前 加上(*rank)++; (2)在else if (str[*rank]=='/')语句中 dwIf_Zero= GetUnitageOf(str, rank, errorNum);前 加上(*rank)++; 还有就是…并把…if (dwIf_Zero=0)改成…… if (dwIf_Zero==0) …!^^^^sorry!! 没关系,人谁无过,程序谁无BUG,我原谅自己了呵呵 谢谢你了 |
|
|
|
13楼 表扬的大家都说得很多了,我就说一些批评的话吧: 有点粗心,不重视程序的TEST。 一个程序员不是把程序写出来就完事的, 首先要做到程序的正确运行, 再追求它安全、健壮, 再追求它高效、发展。 看得出来你在编程上已经小有心得了,在WIN32 API编程上估计也有些时日,照这样发展下去,应该会成为一个相当了得的程序员。 |
|
|
|
|
15楼 100个经典C语言程序 1、输入初始值,输出100个不能被3整除的数。 2、设计程序,求s=1+(1+2)+(1+2+3)+…………+(1+2+3+……+n)的值 3、设s=1^1*2^2*3^3*……n^n,求s不大于400000时最大的n。(1^1表示1的1次方,依此类推) 4、用1,2,3,4这四个数字可以组成一个4位数,编写程序,打印出所有可能的四位数(四个数字可以相同),并统计所组成的四位数的个数。 5、“水仙花数”是指一个三位数,其各位数的立方和等于该数,如:153=1^3+5^3+3^3(注:3^3表示3的3次方,但是在c语言里面不能这样写。) 6、打印九九乘法表 7、输入一个n,打印n行星号,期中,第一行1个,第二行3个,第三行5个,依此类推。如:n=3时: * *** ***** 8、利用c++编写程序,求百鸡百钱问题。 9、从键盘输入10个数,要求按照从小到大的顺序打印到屏幕。 10、从键盘输入20个数,将这20个数按照位置倒置。即第20个数与第1个数互换位置,第19个数与第2个数互换位置…… 11,题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 12,题目:八进制转换为十进制,将用户输入的一个八进制数转换成十进制。(带自动检错功能) 13,题目:求0—7所能组成的奇数个数。 14,题目:一个偶数总能表示为两个素数之和。(歌赫巴得猜想) 15,题目:判断一个素数能整除几个9,如3能被9整除,能整除一个9,所以结果为1。11能被99整除,也就是能整除两个9,所以结果为2。 16,题目:两个字符串连接程序。(使用字符串数组) 17,题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 18,题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 19,题目:取一个整数a从右端开始的4~7位。 20,题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? 21,题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 22,题目:输入某年某月某日,判断这一天是这一年的第几天?(闰年且输入月份大于3时需考虑多加一天。) 23,题目:要求输出国际象棋棋盘。(char a=219;用a表示白格棋盘,用空格表示黑格棋盘) 24,题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问20个月后兔子总数为多少? 25,题目:判断101-200之间有多少个素数,并输出所有素数。 26,题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 27,题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 28,题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 29,题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 30,题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 31,题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n 32,题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 33,题目:打印出杨辉三角形(要求打印出10行如下图) 34,题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 35,题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 36,题目:打印出如下图案(菱形) (菱形随输入的n不同而不同,输入n=4,得到如下图案:) * *** ****** ******** ****** *** * 37,题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 38,题目:求1+2!+3!+...+20!的和 39,题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 40,题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 |
|
|
|
| 221.211.69.* |
16楼 |
|
|
| 202.206.40.* |
17楼 |
|
|
| 202.206.40.* |
19楼 |
|
|
| 220.180.184.* |
20楼 main() { float a,b,result; char op; scanf("%f%c%f",&a,&op,&b); switch(op) { case'+': result=a+b; printf("=%f",result); break; case'-': result=a-b; printf("=%f",result); break; case'*': result=a*b; printf("%f",result); break; case'/': if(b==0.0) printf("error!\n"); result=a/b; printf("=%f",result); default: printf("error due to the illegal input!\n"); break; } } |
|
|
| 220.180.184.* |
21楼 拜托! |
|
|
| 221.194.116.* |
22楼 用二叉树计算表达式的值 实现+-*/% 以及浮点数 wjh70134@sina.com 万分感激 |
|
|
|
23楼 |
|
|
|
| 221.237.144.* |
24楼 |
|
|
| 222.18.140.* |
27楼 |
|
|
|
29楼 #include<stdio.h> #define N 10 void main() { int i,j; int max[N][N]; for(i=0;i<N;i++) { for(j=0;j<N;j++) { max[i][0]=1; max[i][i]=1; } } for(i=2;i<N;i++) { for(j=1;j<i;j++) { max[i][j]=max[i-1][j-1]+max[i-1][j]; } } for(i=0;i<N;i++) { for(j=0;j<=i;j++) { printf("%5d",max[i][j]); } printf("\n"); } } |
|
|
|
| 219.133.64.* |
30楼 #define N 10 void main() { int num[N][N],i,j; for(j=0;j<N;j++) { for(i=0;i<=j;i++) { if((i==0)||(i==j)) num[j][i]=1; else { num[j][i]=num[j-1][i-1]+num[j-1][i]; } printf("%d\t",num[j][i]); } printf("\n"); } } 我这个直接一些 |
|
|
