算术练习系统

21 篇文章 0 订阅
3 篇文章 0 订阅

要求:

没想到这年头还有人用vc6.0,10几年前的软件,都不更新。。。

devc++中.cpp成功运行,改成.c文件开头就报错,我根本就没用c++的语法。

把注释都删了就可以运行(不知道为啥)

同学的报错是这样的:

        然后我就知道是版本的原因啦

我之前devc++弄了一个这个(打脸拉跨)

 .c/.cpp流畅运行

 程序代码:

#include<stdio.h> 
#include <windows.h>//system
#include<stdlib.h>  //srand()
#include <time.h>

//专门用来接收用户输入的全局变量
int g_select = 0;
//设置的位数
int digit=0;
//设置的题数
int question_number=0;
//设置的总分 
int total_point=0;
//练习数量
int practice_number=0; 
//姓名
char name[20]; 
//欢迎
void welcome();
//处理欢迎界面之后的操作
void welcome_proc();

void practice();

void test();

void set();

void check();

void quit();

//用户登录界面
int main()
{
	welcome();
	while (1);
	return 0;
}
//欢迎
void welcome(){
	system("cls");//清除屏幕 windows.h system
	printf("************************************************\n");
	printf("*\t\t算术练习系统\t\t       *\n");
	printf("************************************************\n");
	printf("*\t\t请选择功能列表\t\t       *\n");
	printf("************************************************\n");
	printf("*\t\t1.练习\t\t\t       *\n");                                   
	printf("*\t\t2.测试 \t\t\t       *\n");                                          
	printf("*\t\t3.设置\t\t\t       *\n");
	printf("*\t\t4.查看测试成绩\t\t       *\n");
	printf("*\t\t0.退出\t\t\t       *\n");
	printf("************************************************\n");
	welcome_proc();
}

//处理欢迎界面之后的操作
void welcome_proc(){
	scanf("%d", &g_select);
	switch (g_select)
	{
	case 1:practice();	break;
	case 2:test();		break;
	case 3:set();		break;
	case 4:check();		break;
	/*case 0:quit();break;*/
	default:welcome();break;
	}
}

//练习
void practice(){
	system("cls");
	printf("请输入练习次数");
	scanf("%d",&practice_number);
	int x,y,z,t; 
 	srand(time(NULL));//随机数种子
 	int result=0;
 	int key=0;
 	int right=0;
    int rate=0; 
    
	for(int i=0;i<practice_number;i++)	//练习次数 
 	{
 		if(digit==1)
 		{
 			x=rand()%10;
	  		y=rand()%10;
		}
		if(digit==2)
 		{
 			x=rand()%100;
	  		y=rand()%100;
		}
		if(digit==3)
 		{
 			x=rand()%1000;
	  		y=rand()%1000;
		}
	 	z=rand()%4;
		switch(z)
  		{
  			case 0:
  				printf("%d+%d=",x,y); 
				result=x+y;	break;
  			case 1:
  				if(x<y)
			    {
				    int t=x;
				    x=y;
				    y=t;
			    }
				printf("%d-%d=",x,y); 
				result=x-y;	break;
			case 2:
				printf("%d*%d=",x,y); 
				result=x*y;	break;
			case 3:
				printf("%d/%d=",x,y); 
				result=x/y;	break;
		}
		scanf("%d",&key);
		if(result==key)
		{
			right++;	//正确数量 
			rate=(right*1.0/(i+1))*100;
			printf("答案正确 正确结果:%d 总答题数:%d 正确答题数:%d 答题正确率:%d%%\n",result,i+1,right,rate);
		}
		else
		{
			rate=(right*1.0/(i+1))*100;
			printf("答案错误 正确结果:%d 总答题数:%d 正确答题数:%d 答题正确率:%d%%\n",result,i+1,right,rate);
		}		
	}
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 


//设置
void set(){
	printf("请输入计算数据的位数(1-3位)");
	scanf("%d",&digit);
	printf("请输入测试模式题数");
	scanf("%d",&question_number);
	printf("请输入测试模式总分");
	scanf("%d",&total_point);
	
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
}

//测试
void test(){
	system("cls");
	FILE *fp; 
	fp=fopen("测试成绩.txt","a");		//以追加的方式打开 
	if(fp==NULL)
	printf("测试成绩.txt不能打开"); 
	printf("*\t\t欢迎参加考试\t\t       *\n");
	printf("请输入你的名字");
	scanf("%s",name);
	fprintf(fp,"姓名:%s\n",name);
	printf("考试开始\n"); 
	int x,y,z,t; 
 	srand(time(NULL));		//随机数种子
 	int result=0;
 	int key=0;
 	int right=0;
    int rate=0; 
    int a[question_number];
	for(int i=0;i<question_number;i++)	//测试数量 
 	{
 		if(digit==1)
 		{
 			x=rand()%10;
	  		y=rand()%10;
		}
		if(digit==2)
 		{
 			x=rand()%90+10;
	  		y=rand()%90+10;
		}
		if(digit==3)
 		{
 			x=rand()%900+100;
	  		y=rand()%900+100;
		}
	 	z=rand()%4;
		switch(z)
  		{
  			case 0:
  				printf("%d+%d=",x,y);
				result=x+y;	
				fprintf(fp,"题目%d:%d+%d=",i+1,x,y); break;
  			case 1:
  				if(x<y)
			    {
				    int t=x;
				    x=y;
				    y=t;
			    }
				printf("%d-%d=",x,y); 
				result=x-y;	
				fprintf(fp,"题目%d:%d-%d=",i+1,x,y); break;
			case 2:
				printf("%d*%d=",x,y); 
				result=x*y;	
				fprintf(fp,"题目%d:%d*%d=",i+1,x,y); break;
			case 3:
				printf("%d/%d=",x,y); 
				result=x/y;	
				fprintf(fp,"题目%d:%d/%d=",i+1,x,y); break;
		}
		scanf("%d",&key);
		fprintf(fp,"%d",key); 
		fprintf(fp,"\t答案是%d\n",result);
		a[i]=result;
		if(result==key)
			right++;					//正确数量 答对则加1 
	}
	fprintf(fp,"总的题数是%d",question_number);
	fprintf(fp,"\t答对%d道\t",right);
	fprintf(fp,"答错%d道\n",question_number-right);
	int grade=(right*1.0/question_number)*total_point;
	fprintf(fp,"本次测试成绩为%d分\n\n",grade);
	fclose(fp);
	printf("\n");
	for(int i=0;i<question_number;i++)
	printf("第%d题答案为%d\n",i+1,a[i]);
	printf("总的题数是%d",question_number);
	printf("你答对%d道\答错%d道\n",right,question_number-right);
	printf("\n你的测试成绩为%d分\n\n",grade);
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 

//查看成绩
void check(){
	system("cls");
	printf("*\t\t算术测验成绩表\t\t       *\n");
	FILE *fp1; 
	fp1=fopen("测试成绩.txt","r");		//以追加的方式打开 
	if(fp1==NULL)
	printf("测试成绩.txt不能打开");
	char ch;
	ch=fgetc(fp1);
	while(ch!=EOF){
		putchar(ch);
		ch=fgetc(fp1);
	}
	fclose(fp1);
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 

vc6.0版

vc6.0变量的定义必须在开头,不能在中间。FILE *pf只能在开头。

不能int a[n],我用的是指针申请a=(int *)malloc(sizeof(int)*question_number);由于要求纯c版此处采用malloc,没有用new。

fopen("C:\\Users\\27955\\Desktop\\测试成绩.txt","r");//绝对位置桌面,要根据自己电脑修改。

fopen("测试成绩.txt","r");//相对位置在自己建的工程文件下

程序代码:

#include<stdio.h> 
#include <windows.h>//system
#include<stdlib.h>  //srand()
#include <time.h>
 



int g_select = 0;
int digit=0;

int question_number=0;

int total_point=0;

int practice_number=0; 

char name[20]; 

void welcome();

void welcome_proc();

void practice();

void test();

void set();

void check();

void quit();


int main()
{
	welcome();
	while (1);
	return 0;
}

void welcome(){
	system("cls");
	printf("************************************************\n");
	printf("*\t\t算术练习系统\t\t       *\n");
	printf("************************************************\n");
	printf("*\t\t请选择功能列表\t\t       *\n");
	printf("************************************************\n");
	printf("*\t\t1.练习\t\t\t       *\n");                                   
	printf("*\t\t2.测试 \t\t\t       *\n");                                          
	printf("*\t\t3.设置\t\t\t       *\n");
	printf("*\t\t4.查看测试成绩\t\t       *\n");
	printf("*\t\t0.退出\t\t\t       *\n");
	printf("************************************************\n");
	welcome_proc();
}


void welcome_proc(){
	scanf("%d", &g_select);
	switch (g_select)
	{
	case 1:practice();	break;
	case 2:test();		break;
	case 3:set();		break;
	case 4:check();		break;
	case 0:exit(-1);break;
	default:welcome();break;
	}
}


void practice(){
	int x;
	int y;
	int z;
	int t; 
	int result=0;
 	int key=0;
 	int right=0;
    int rate=0; 
    int i;
	system("cls");
	printf("请输入练习次数");
	scanf("%d",&practice_number);

 	srand(time(NULL));
 	
	for(i=0;i<practice_number;i++)	
 	{
 		if(digit==1)
 		{
 			x=rand()%10;
	  		y=rand()%10;
		}
		if(digit==2)
 		{
 			x=rand()%100;
	  		y=rand()%100;
		}
		if(digit==3)
 		{
 			x=rand()%1000;
	  		y=rand()%1000;
		}
	 	z=rand()%4;
		switch(z)
  		{
  			case 0:
  				printf("%d+%d=",x,y); 
				result=x+y;	break;
  			case 1:
  				if(x<y)
			    {
				    t=x;
				    x=y;
				    y=t;
			    }
				printf("%d-%d=",x,y); 
				result=x-y;	break;
			case 2:
				printf("%d*%d=",x,y); 
				result=x*y;	break;
			case 3:
				printf("%d/%d=",x,y); 
				result=x/y;	break;
		}
		scanf("%d",&key);
		if(result==key)
		{
			right++;	
			rate=(int)((right*1.0/(i+1))*100);
			printf("答案正确 正确结果:%d 总答题数:%d 正确答题数:%d 答题正确率:%d%%\n",result,i+1,right,rate);
		}
		else
		{
			rate=(int)((right*1.0/(i+1))*100);
			printf("答案错误 正确结果:%d 总答题数:%d 正确答题数:%d 答题正确率:%d%%\n",result,i+1,right,rate);
		}		
	}
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 



void set(){
	printf("请输入计算数据的位数(1-3位)");
	scanf("%d",&digit);
	printf("请输入测试模式题数");
	scanf("%d",&question_number);
	printf("请输入测试模式总分");
	scanf("%d",&total_point);
	
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
}


void test(){
	FILE *fp; 
	int x,y,z,t; 
	int result=0;
 	int key=0;
 	int right=0;
    int rate=0; 
	int *a;
	int i;
	int j;
	int grade;
	a=(int *)malloc(sizeof(int)*question_number);
   
	
	system("cls");
	
	fp=fopen("C:\\Users\\27955\\Desktop\\测试成绩.txt","a");		
	if(fp==NULL)
	printf("测试成绩.txt不能打开"); 
	printf("*\t\t欢迎参加考试\t\t       *\n");
	printf("请输入你的名字");
	scanf("%s",name);
	fprintf(fp,"姓名:%s\n",name);
	printf("考试开始\n"); 

 	srand(time(NULL));		
 	
	for(i=0;i<question_number;i++)	 
 	{
 		if(digit==1)
 		{
 			x=rand()%10;
	  		y=rand()%10;
		}
		if(digit==2)
 		{
 			x=rand()%90+10;
	  		y=rand()%90+10;
		}
		if(digit==3)
 		{
 			x=rand()%900+100;
	  		y=rand()%900+100;
		}
	 	z=rand()%4;
		switch(z)
  		{
  			case 0:
  				printf("%d+%d=",x,y);
				result=x+y;	
				fprintf(fp,"题目%d:%d+%d=",i+1,x,y); break;
  			case 1:
  				if(x<y)
			    {
				    t=x;
				    x=y;
				    y=t;
			    }
				printf("%d-%d=",x,y); 
				result=x-y;	
				fprintf(fp,"题目%d:%d-%d=",i+1,x,y); break;
			case 2:
				printf("%d*%d=",x,y); 
				result=x*y;	
				fprintf(fp,"题目%d:%d*%d=",i+1,x,y); break;
			case 3:
				printf("%d/%d=",x,y); 
				result=x/y;	
				fprintf(fp,"题目%d:%d/%d=",i+1,x,y); break;
		}
		scanf("%d",&key);
		fprintf(fp,"%d",key); 
		fprintf(fp,"\t答案是%d\n",result);
		a[i]=result;
		if(result==key)
			right++;					
	}
	fprintf(fp,"总的题数是%d",question_number);
	fprintf(fp,"\t答对%d道\t",right);
	fprintf(fp,"答错%d道\n",question_number-right);
	grade=(int)((right*1.0/question_number)*total_point);
	fprintf(fp,"本次测试成绩为%d分\n\n",grade);
	fclose(fp);
	printf("\n");

	for(j=0;j<question_number;j++)
	printf("第%d题答案为%d\n",j+1,a[j]);
	printf("总的题数是%d",question_number);
	printf("你答对%d道答错%d道\n",right,question_number-right);
	printf("\n你的测试成绩为%d分\n\n",grade);
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 


void check(){
	FILE *fp1; 
	char ch;
	system("cls");
	printf("*\t\t算术测验成绩表\t\t       *\n");
	
	fp1=fopen("C:\\Users\\27955\\Desktop\\测试成绩.txt","r");		
	if(fp1==NULL)
	printf("测试成绩.txt不能打开");
	
	ch=fgetc(fp1);
	while(ch!=EOF){
		putchar(ch);
		ch=fgetc(fp1);
	}
	fclose(fp1);
	printf("退出请输入0\n");
	while(1)
	{
		scanf("%d", &g_select);
		if(g_select==0)
		welcome(); 
	} 	
} 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪八戒1.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值