浪费我3天,搞的我天昏地暗,用C语言写了700多行的废程序(算术练习)...还是dos版的.....不知为何,网页上头文件显示不出,先将5个头文件公布:
stdlib.h/stdio.h/time.h/ctype.h/math.h
就此公布本人写的原代码:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <ctype.h>
#include <math.h>
FILE *fp,*fp1;
struct shuzi_fuhao//保存产生的随即符号和随即数字的结构体
{
double shuzi[2];
char fuhao;
}lx;
struct shezhi_baocun//保存设置内容的结构体
{
int ab;//保存符号
int bc;//保存难度
}sz;
struct time_date
{
char year[10],month[10],date[10],shijian[20];
double score;
}timenow,timemax[100];//成绩文件保存相关结构体
int cba; //主菜单跳回变量
int ij=0,ijk=0;//输出文件循环控制
char fuhao1[12]={'+','-','*','/','+','-','*','/','+','-','*','/'};
int main()
{
int x,a;
double panduan(double);//结果判断函数,正确返回1,错误返回0;
void zhucaidan();
void lianxi();
void ceyan();
void tishusheding();
void shezhi();
void chengji();
int duqushezhi();
int suijishu(int);
void time1();
void qingkongchengji();
void tishu();
tishu();
lp: zhucaidan();
lp1:scanf("%d",&x);
getchar();
switch(x)
{
case(1):
{
if((fp=fopen("d:\设置.txt","r"))==NULL)
{
printf("*****请先设置!*****");
// fclose(fp);
lp3:printf("*****请先设置!*****");
printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
goto lp;
else
{
printf("******输入错误!******");
goto lp3;
}
}
else
{
duqushezhi();
lianxi();
printf("n已返回主菜单,请重新选择模式");
}
goto lp;
}
case(2):
{
if((fp=fopen("d:\设置.txt","r"))==NULL)
{
lp2: printf("*****请先设置!*****");
printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
goto lp;
else
{
printf("******输入错误!******");
goto lp2;
}
// fclose(fp);
}
else if((fp=fopen("d:\测验题数设定.txt","r"))==NULL)
{
lp5: printf("******请先设定题数!******");
printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
goto lp;
else
{
printf("******输入错误!******");
goto lp5;
}//
}
else
{
ceyan();printf("n已返回主菜单,请重新选择模式");
}
goto lp;
}
case(3):
{
tishusheding();
printf("n已返回主菜单,请重新选择模式");
goto lp;
}
// goto lp;
case(4):
{
qingkongchengji();
printf("n已返回主菜单,请重新选择模式");
goto lp;
}
case(5):
{
shezhi();
printf("n已返回主菜单,请重新选择模式");
goto lp;
}
case(6):
{
chengji();
printf("n已返回主菜单,请重新选择模式");
goto lp;
}
case(0):exit(0);
}
}
////////////////////////////////////////////////////////////////////////////
void zhucaidan()//显视主菜单
{
printf("nnn");
printf("***********************************n");
printf(" 算术练习n");
printf(" 1: 练 习n");
printf(" 2: 测 验n");
printf(" 3: 测验题数设定n");
printf(" 4: 清空历史成绩n");
printf(" 5: 设 置n");
printf(" 6: 查看成绩n");
printf(" 0: 退出并保存 n");
printf("***********************************n");
printf("请输入数字选择: ");
}
///////////////////////////////////////////////////////////////////////////
int shezhi()//设置成功返回1,失败返回0
{
int a=1;
int b;//符号确定变量
printf("***********************************n");
printf(" 1: 加 法n" );
printf(" 2: 减 法n");
printf(" 3: 乘 法n");
printf(" 4: 除 法n");
printf(" 5: 混合运算n");
printf("请输入数字选择: ");
scanf("%d",&b);
getchar();
printf(" 请选择难度:n");
printf(" 1:一位运算n");
printf(" 2:二位运算n");
printf(" 3:三位运算n");
printf("请输入数字选择: ");
scanf("%d",&a);
getchar();
printf("***********************************n");
if((fp=fopen("d:\设置.txt","w+"))==NULL)
{ printf("设置文件生成失败!");
return(0);
}
fprintf(fp,"难度:%dn运算(1.加法,2.减法,3.乘法,4.除法,5.混合运算):%d",a,b);
fclose(fp);
return(1);
}
//////////////////////////////////////////////////////////////////////////////
int suijishu(int nandu)//接受所需位数,返回相映随机数
{
int b=32765;
if(nandu==1)
{
while(b>=10||b==0)
b=rand();
return(b);
}
else if(nandu==2)
{
while(b>=100)
b=rand();
return(b);
}
else if(nandu==3)
{
while(b>=1000)
b=rand();
return(b);
}
else
{
printf("n******随即位数设定错误,请重新设定!******");
lp: printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return(-1);
else
{
printf("******输入错误!******");
goto lp;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
void lianxi()
{
double panduan(double);
double x,y;//x保存输入结果
int i,j=0,d1=0,d2=0;//d1为正确计数,d2为错误计数
int suijishu(int);
char z='Y';//z:练习继续?
if(suijishu(sz.bc)==-1)
return;
srand(time(NULL));
while(z!='N'&&z!='n')
{
if(sz.ab==1)
{
lx.shuzi[0]=(double)suijishu(sz.bc);
lx.shuzi[1]=(double)suijishu(sz.bc);
lx.fuhao='+';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&x);
y=panduan(x);
if(y==1)
{
printf("答对了!");
d1++;
printf("n 答对%d,答错%d",d1,d2);
}
else
{
printf("答错了!n正确答案:%.2lf",y);
d2++;
printf("n 答对%d,答错%d",d1,d2);
}
}
else if(sz.ab==2)
{
lx.shuzi[0]=(double)suijishu(sz.bc);
lx.shuzi[1]=(double)suijishu(sz.bc);
lx.fuhao='-';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&x);
y=panduan(x);
if(y==1)
{
printf("答对了!");
d1++;
printf("n 答对%d,答错%d",d1,d2);
}
else
{
printf("答错了!n正确答案:%.2lf",y);
d2++;
printf("n 答对%d,答错%d",d1,d2);
}
}
else if(sz.ab==3)
{
lx.shuzi[0]=(double)suijishu(sz.bc);
lx.shuzi[1]=(double)suijishu(sz.bc);
lx.fuhao='*';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&x);
y=panduan(x);
if(y==1)
{
printf("答对了!");
d1++;
printf("n 答对%d,答错%d",d1,d2);
}
else
{
printf("答错了!n正确答案:%.2lf",y);
d2++;
printf("n 答对%d,答错%d",d1,d2);
}
}
else if(sz.ab==4)
{
lx.shuzi[0]=(double)suijishu(sz.bc);
lx.shuzi[1]=(double)suijishu(sz.bc);
lx.fuhao='/';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&x);
y=panduan(x);
if(y==1)
{
printf("答对了!");
d1++;
printf("n 答对%d,答错%d",d1,d2);
}
else
{
printf("答错了!n正确答案:%.2lf",y);
d2++;
printf("n 答对%d,答错%d",d1,d2);
}
}
else if(sz.ab==5)
{
lx.shuzi[0]=(double)suijishu(sz.bc);
lx.shuzi[1]=(double)suijishu(sz.bc);
lx.fuhao=fuhao1[suijishu(1)];
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&x);
y=panduan(x);
if(y==1)
{
printf("答对了!");
d1++;
printf("n 答对%d,答错%d",d1,d2);
}
else
{
printf("答错了!n正确答案:%.2lf",y);
d2++;
printf("n 答对%d,答错%d",d1,d2);
}
}
else
{
printf("n******运算符号设定错误,请重新设定!******");
lp1: printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return;
else
{
printf("******输入错误!******");
goto lp1;
}
}
printf("n是否继续(Y/N?):");
getchar();
scanf("%c",&z);
if(z=='n'||z=='N')
{
printf("n******本次练习结束******");
lp2:printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return;
else
{
printf("******输入错误!******");
goto lp2;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
int duqushezhi() //成功返回1,失败返回0
{
int d;
int c;
if((fp=(fopen("d:\设置.txt","r")))==NULL)
{
fclose(fp);
exit(0);
}
else
{
fscanf(fp,"难度:%dn运算(1.加法,2.减法,3.乘法,4.除法,5.混合运算):%d",&d,&c);
sz.bc=d;//难度传递到设置结构体
sz.ab=c;
//运算传递到结构体
fclose(fp);
return(1);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
double panduan(double x)//正确返回0,不正确返回正确答案.
{
double y,z;
// printf("%c",lx.fuhao);
switch(lx.fuhao)
{
case('+'):y=(lx.shuzi[0])+(lx.shuzi[1]);break;
case('-'):y=(lx.shuzi[0])-(lx.shuzi[1]);break;
case('*'):y=(lx.shuzi[0])*(lx.shuzi[1]);break;
case('/'):y=(lx.shuzi[0])/(lx.shuzi[1]);break;
}
if(fabs(x-y)<0.01)
return(1);
else
{
return(y);
}
}
void ceyan()
{
void time1();
int tishusheding();
int i,j,d1=0,d2=0,ts;//ts为总题数,d1为正确计数,d2为错误计数
int ab,bc;
double a[1000]={},b[1000]={},x;//a[1000]保存输入结果,b[1000]保存正确结果
// abc=1;
fp=fopen("d:\测验题数设定.txt","r");
fscanf(fp,"测验题数:%d",&ts);
fclose(fp);
fp=(fopen("d:\设置.txt","r"));
fscanf(fp,"难度:%dn运算(1.加法,2.减法,3.乘法,4.除法,5.混合运算):%d",&bc,&ab);
fclose (fp);
if(suijishu(bc)==-1)
return;
srand(time(NULL));
if(ab==1)
{
for(i=0;i<ts;i++)
{
printf("%d: ",i+1);
lx.shuzi[0]=(double)suijishu(bc);
lx.shuzi[1]=(double)suijishu(bc);
lx.fuhao='+';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&a[i]);
getchar();
x=panduan(a[i]);
if(x==1)
{
b[i]=a[i];
d1++;
}
else
{
d2++;
b[i]=x;
}
}
}
else if(ab==2)
{
for(i=0;i<ts;i++)
{
printf("%d: ",i+1);
lx.shuzi[0]=(double)suijishu(bc);
lx.shuzi[1]=(double)suijishu(bc);
lx.fuhao='-';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&a[i]);
getchar();
x=panduan(a[i]);
if(x==1)
{
b[i]=a[i];
d1++;
}
else
{
d2++;
b[i]=x;
}
}
}
else if(ab==3)
{
for(i=0;i<ts;i++)
{
printf("%d: ",i+1);
lx.shuzi[0]=(double)suijishu(bc);
lx.shuzi[1]=(double)suijishu(bc);
lx.fuhao='*';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&a[i]);
getchar();
x=panduan(a[i]);
if(x==1)
{
b[i]=a[i];
d1++;
}
else
{
d2++;
b[i]=x;
}
}
}
else if(ab==4)
{
for(i=0;i<ts;i++)
{
printf("%d: ",i+1);
lx.shuzi[0]=(double)suijishu(bc);
lx.shuzi[1]=(double)suijishu(bc);
lx.fuhao='/';
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&a[i]);
getchar();
x=panduan(a[i]);
if(x==1)
{
b[i]=a[i];
d1++;
}
else
{
d2++;
b[i]=x;
}
}
}
else if(ab==5)
{
for(i=0;i<ts;i++)
{
printf("%d: ",i+1);
lx.shuzi[0]=(double)suijishu(bc);
lx.shuzi[1]=(double)suijishu(bc);
lx.fuhao=fuhao1[suijishu(1)];
printf("%.2lf %c %.2lf=",lx.shuzi[0],lx.fuhao,lx.shuzi[1]);
scanf("%lf",&a[i]);
getchar();
x=panduan(a[i]);
if(x==1)
{
b[i]=a[i];
d1++;
}
else
{
d2++;
b[i]=x;
}
}
}
else if(ab!=1&&ab!=2&&ab!=3&&ab!=4&&ab!=5)
{
printf("n******运算符输入错误,请重新设置!******");
lp2:printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return;
else
{
printf("******输入错误!******");
goto lp2;
}
}
printf("测试结束,以下为测试结果:");
for(i=0;i<ts;i++)
{
if(a[i]==b[i])
printf("n %-3d: %-6.2lf 正确!",i+1,a[i]);
else
printf("n %-3d: %-6.2lf 错误! 正解为:%4.2lf",i+1,a[i],b[i]);
}
printf("n 答对:%d,答错:%d",d1,d2);
timenow.score=(double)100/(d1+d2);
timenow.score=d1*(timenow.score);
printf("n 得分:%4.2lf",timenow.score);
tishu();
fp=fopen("d:\测试成绩.dat","a");
time1();
fwrite(&timenow,sizeof(timenow),1,fp);
fclose(fp);
fp=fopen("d:\题数记录1.txt","rb+");//ij记录文件
if(ij==-1)
ij++;
ij++;
fwrite(&ij,sizeof(int),1,fp);
fclose(fp);
lp3:printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return;
else
{
printf("******输入错误!******");
goto lp3;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int tishusheding()//成功返回1,失败返回0
{
int x;
if((fp=fopen("d:\测验题数设定.txt","w"))==NULL)
{
// fclose(fp);
return(0);
}
lp: printf("请输入测验的题数:");
scanf("%d",&x);
getchar();
if(x<0&&x==0)
{
printf("n******题数需要是为大于0的整数!请重新设定!******");
goto lp;
}
fprintf(fp,"测验题数:%d",x);
fclose(fp);
return(1);
}
void time1()
{
struct tm *p;
size_t h=50;
time_t k;
k=time(NULL);
p=localtime( &k);
strftime(timenow.shijian,h,"%X",p);
// printf("时间:%sn",d);
strftime(timenow.year,h,"%Y",p);
// printf("年份:%sn",a);
strftime(timenow.month,h,"%m",p);
// printf("月份:%sn",b);
strftime(timenow.date,h,"%d",p);
// printf("日期:%sn",c);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void qingkongchengji()
{
int i;
fp=fopen("d:\测试成绩.dat","wb");
remove(fp);
fclose(fp);
fp=fopen("d:\题数记录1.txt","wb+");
remove(fp);
fclose(fp);
ij=-1;
ijk=0;
printf("******清空成功!******n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void chengji()
{
int i,j;
if((fp=fopen("d:\测试成绩.dat","rb"))==NULL)
printf("n********从未进行测试!********");
else if(ij==-1)
printf("n********成绩已经被清除!********");
else
{
tishu();
fp=fopen("d:\测试成绩.dat","rb");
for(i=0;i<ij;i++)
{
fseek(fp,i*sizeof(timenow),0);
fread(&timemax[i],sizeof(timenow),1,fp);
printf("%s年%s月%s日tt%stt得分:%6.2fn",timemax[i].year,timemax[i].month,timemax[i].date,timemax[i].shijian,timemax[i].score);
}
}
lp2:printf("n1.返回主菜单t0.退出程序:");
scanf("%d",&cba);
if(cba==0)
exit(4);
else if(cba==1)
return;
else
{
printf("******输入错误!******");
goto lp2;
}
}
void tishu()
{
fp=fopen("d:\题数记录1.txt","rb+");
{
fread(&ij,sizeof(int),1,fp);
// printf("ijk=%d",ij);
}
fclose(fp);
}
这么会有这么傻的代码...
大哥佩服