#include<stdio.h> #include<stdlib.h> #include<time.h> int n;//记录输入的题目个数 int a,b,c,da;//a,b分别代表第一,第二操作数,c代表得数,da代表输入的答案 //进行加法运算 void jia(); void jian(); void chen(); void chu(); void main() { int choice; srand((unsigned)time(NULL));//随机产生0-99之间的随机数 while(1) { switch(choice) { case 1: jia(); break; case 2: jian(); break; case 3: chen(); break; case 4: chu(); break; case 5: printf("谢谢使用"); exit(0); } choice=selectmenu(); } } void jia() { int i; printf(" 欢迎使用,以下是加法运算 "); printf("请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; c=a+b; printf("%d+%d=? ",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) //判断答案是否正确 printf(" 恭喜你,答对了! "); else { printf(" 抱歉,你答错了!你还有一次机会 "); printf("%d+%d=? ",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf(" 恭喜你,答对了! "); else printf(" 抱歉,你又答错了 "); } } } //进行减法运算 void jian() { int i,temp;//temp是中间变量 printf(" 欢迎使用,以下是减法运算 "); printf("请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; if(a<b)//保证得出的数不是负数 { temp=a; a=b; b=temp; } c=a-b; printf("%d-%d=? ",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf(" 恭喜你,答对了! "); else { printf(" 抱歉,你答错了,你还有一次机会 "); printf("%d-%d=? ",a,b); printf("请输入你的答案:"); scanf("%d",&da); if(da==c) printf(" 恭喜你,答对了! "); else printf(" 抱歉,你又答错了 "); } } } //进行乘法运算 void chen() { int i; printf(" 欢迎使用,以下是乘法题 "); printf(" 请输入题目数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%100; c=a*b; printf("%d*%d=? ",a,b); printf("请输入答案:"); scanf("%d",&da); if(da==c) printf(" 恭喜你,答对了! "); else { printf(" 抱歉,你答错了,你还有一次机会! "); printf("%d*%d=? ",a,b); printf("请输入答案:"); scanf("%d",&da); if(da==c) printf(" 恭喜你,答对了! "); else printf(" 抱歉,又答错了! "); } } } //进行除法运算 void chu() { int i,j,k;//j,k用于记录输入的数 char dn;//用以保存除法运算符 float an;//用以保存除法运算得出的答案 printf(" 欢迎使用,以下是除法题 "); printf("请输入题数:"); scanf("%d",&n); for(i=0;i<n;i++) { a=rand()%100; b=rand()%99+1;//使得随机出现的数不会有0,保证了除数不会出现0情况 c=a/b; if(a%b==0) //判断数能否除尽,若a对b求余为0,则说明除得尽,以整数形式输入,否则则为除不尽,提示以分数输入 { printf("%d/%d=? ",a,b); printf(" 请输入你的答案:"); scanf("%f",&an); if(an==c) printf("恭喜你,答对了! "); else { printf("抱歉,你答错了,你还有一次机会! "); printf("%d/%d=? ",a,b); printf(" 请输入你的答案:"); scanf("%f",&an); if(an==c) printf("恭喜你,答对了! "); else printf("抱歉,你又答错了! "); } } else { dn='/';//dn保存除法运算符 printf("%d/%d=? ",a,b); printf(" 请输入你的答案(请以分数形式输入):"); scanf("%d%c%d",&j,&dn,&k); if(j/k==a/b) printf("恭喜你,答对了! "); else printf("抱歉,你答错了! "); } } } int selectmenu() { int choice; printf(" 1:加法运算 "); printf(" 2:减法运算 "); printf(" 3:乘法运算 "); printf(" 4:除法运算 "); printf(" 5:谢谢使用 "); printf("请选择(1-5):"); while((!scanf("%d",&choice)||(choice<0)||(choice>6))) { printf(" 1:加法运算 "); printf(" 2:减法运算 "); printf(" 3:乘法运算 "); printf(" 4:除法运算 "); printf(" 5:谢谢使用 "); printf("请选择(1-5):"); } return choice; }
代码:
这是对第一次作业的改进,设置了一个菜单选择供用户选择。在做这次作业的过程,发现理解题目要求很重要,代码的重用性的好坏也很重要,写出来的代码首先要符合逻辑,其次是要让别人也可以看懂你的代码;在理解了题目要求后要明白大概要实现什么功能,怎么实现,需要什么等等,明白需求后在着手打代码并逐渐完善,虽然这不是第一次使用C,但仍然出现不少问题,以下就是我对编程过程的总结:
没有解决的一个问题:
1、
当出现结果除不尽的情况时,用户输入的数没有以分数形式输入时,不知如何设置提示输入错误,尝试用while语句来判断时,如果输入整型,无论结果是否对都会提示对了
总结:
1、在对加减乘除进行运算时搞清楚存放操作数的数组的位置以及数组与变量的类型,否则会出错
1、 使用srand()函数来产生随机数时,必须要含有头文件#include<time.h>
2、 做减法运算时要考虑结果为负数的情况,因此要对第一个操作数和第二个操作数进行判断,如果是第一个操作数小,则要根据中间变量将他们进行位置调换,再进行减法运算
3、 做除运算时要考虑除数不能为0的情况或者如果结果不能除尽的情况;因此将其分为两种情况,首先是将除法运算中除数产生的随机数取值在1到100之间,然后将被除数对除数进行求余运算,若是求余结果为0,则是除得尽,则用户输入结果为整型,否则就是除不尽,则提示用户要以分数的形式输入
4、将题目的个数设置为用户任意输入