C语言课程设计题1:算数练习原创代码...(未经准许,不得传播)

浪费我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);
 
}

This entry was posted in 未分类 and tagged , , , , . Bookmark the permalink.

2 Responses to C语言课程设计题1:算数练习原创代码...(未经准许,不得传播)

  1. 访客 says:

    这么会有这么傻的代码...

  2. 中博网友 says:

    大哥佩服

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>