当前位置: 代码迷 >> C语言 >> 求救--VC++基本程序代码
  详细解决方案

求救--VC++基本程序代码

热度:409   发布时间:2008-06-25 14:37:53.0
starwing能否告诉我那个欧拉定理?
----------------解决方案--------------------------------------------------------
那个吗?你自己去问FancyMouse吧,数学我超级菜鸟……
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-25 06:40:19
StarWing83

来 自:湖北工业大学
等 级:贵宾
威 望:19
帖 子:3946
专家分:748
注 册:2007-11-16
  得分:0 
嘿嘿~~~~可是main的确只需要四行嘛~~~~
不过,你觉得做工程,会出这么弱智的工程给你做么?
就算是做工程吧。不骗你,AStyle的main函数就是这么个写法。只不过比我这个复杂多了而已。
----------------解决方案--------------------------------------------------------
关键在于Practise的写法,只写了8行而已。我开始太高估C的输入输出了- -如果要我用C++式的输入输出,真的有把握30行搞定呢……我写个STL标准运算到运算符的映射可以省掉Calc函数,单纯cin::IntegerIterator可以省掉InputNum函数,所以算下来绝对30行搞定……
----------------解决方案--------------------------------------------------------
如果非要说main函数可读性不高的话,可以这么写:
    while (CLS(),printf(MENU),n=getchar(),n!='0')
        if (n>='1' && n<='4')while (Practise(n-'1'));

长度是一样的- -
----------------解决方案--------------------------------------------------------
完全可以做到一行
只不过懒的写库函数定义了
程序代码:

#include<stdio.h>
#include<stdlib.h>
char op[]="+-*/",*right[]={"你真聪明!","继续保持!","加油!"},*wrong[]={"再想一想,你还有两次机会。","不要着急,要把握住最后一次机会喔!","要加强练习喔!"};int Calc(int* n1,int pn,int* n2){switch (op[pn]){case '+':return *n1 + *n2;case '-':return *n1 - *n2;case '*':return *n1 * *n2;case '/':*n2=rand()%10;*n1=*n2*(rand()%10+1);return *n1 / *n2;}return 0;}int InputNum(){int n;while (scanf("%d",&n) != 1){while (getchar()!='\n');puts("对不起,请重新输入!");}while (getchar()!='\n');return n;}int Practise(int pn){int n1=rand()%100+1,n2=rand()%100+1,ans=Calc(&n1,pn,&n2),i;for(printf("%d %c %d = ?\n",n1,op[pn],n2),i=0;i<3 && InputNum()!=ans;i++)printf("不正确,%s\n",wrong[i]);if(i==3)printf("正确答案是%d.\n",ans);else printf("正确,%s\n",right[i]);printf("是否继续练习?(Y/N)");return getchar()=='y';}int main(n){while(system("cls"),printf("***************************************************\n           小学生四则运算练习系统\n***************************************************\n               1--加法练习\n               2--减法练习\n               3--乘法练习\n               4--除法练习\n               0--退出\n请选择(0--4):"),(n=getchar())!='0')if(n>='1' && n<='4')while(Practise(n-'1'));return 0;}

----------------解决方案--------------------------------------------------------
再缩一下:
程序代码:

#include<stdio.h>
#include<stdlib.h>
char op[]="+-*/",*right[]={"你真聪明!","继续保持!","加油!"},*wrong[]={"再想一想,你还有两次机会。","不要着急,要把握住最后一次机会喔!","要加强练习喔!"};int Calc(int* n1,int pn,int* n2){switch (op[pn]){case '+':return *n1 + *n2;case '-':return *n1 - *n2;case '*':return *n1 * *n2;case '/':*n2=rand()%10;*n1=*n2*(rand()%10+1);return *n1 / *n2;}return 0;}int InputNum(){int n;while (scanf("%d",&n) != 1){while (getchar()!='\n');puts("对不起,请重新输入!");}while (getchar()!='\n');return n;}int Practise(int pn){int n1=rand()%100+1,n2=rand()%100+1,ans=Calc(&n1,pn,&n2),i;for(printf("%d %c %d = ?\n",n1,op[pn],n2),i=0;i<3 && InputNum()!=ans;i++)printf("不正确,%s\n",wrong[i]);if(i==3)printf("正确答案是%d.\n",ans);else printf("正确,%s\n",right[i]);printf("是否继续练习?(Y/N)");return getchar()=='y';}int main(n){while(system("cls"),printf("***************************************************\n%11c小学生四则运算练习系统\n***************************************************\n%15c1--加法练习\n%15c2--减法练习\n%15c3--乘法练习\n%15c4--除法练习\n%15c0--退出\n请选择(0--4):",' ',' ',' ',' ',' ',' '),(n=getchar())!='0')if(n>='1' && n<='4')while(Practise(n-'1'));return 0;}

----------------解决方案--------------------------------------------------------
咳咳……事实上,这代码我可以一行写完……不过有什么意义呢?
在保持良好代码风格的前提下,代码行数最短。


谢谢。
----------------解决方案--------------------------------------------------------
还有,LS的LS的代码是3行,不是一行,哈哈哈~~~~
----------------解决方案--------------------------------------------------------