C语言课程设计(这个没在老师给定的题目内)——实用的作答题目小代码

时间:2022-10-07 00:38:32
c语言小代码:随机加减乘除的计算

功能介绍:
随机出现两组数字,计算二者的简单数学运算,
统计做题结果的正确和错误的题目个数,
适合一二三年级小朋友拿来玩耍。

感想:
其实也就是自己寒假
在读小学的表弟弟和妹妹
天天没事干,
就弄来了这个为他打发时间。
不要喷我昂,
毕竟这个还不算是成熟。
如有BUG,敬请指正,共同学习。
小将学习,如有雷同,请联系。



版本:1.1(2016年7月25日09:29:13)
简化代码的重复部分以及增加更多注释。
参考代码:
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#include <windows.h>
#define MYDD 30000

int a[MYDD],b[MYDD],c[MYDD];
double ans,youans;// ans 记录正确答案;youans记录个人答案
int cuo,dui;//统计题目 错误,正确个数 
int chengji=0;//记录成绩

void RED() {//控制台调整前景色为红色
	HANDLE kai_1 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_1, FOREGROUND_INTENSITY | FOREGROUND_RED); // 为红色
}

void GREEN() {//控制台调整前景色为绿色
	HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_GREEN);// 为绿色
}

void LIGHT() {//控制台调整前景色为强光
	HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);// 为强光
}

void ans_yourans() {// 多次用到以下代码片段,所以直接定义一部分函数
	GREEN();
	scanf("%lf",&youans);
	if(youans==ans) {
		printf("   你的答案是 √恭喜正确,继续努力.\n\n");
		chengji+=10;
		dui++;
	} else {
		LIGHT();
		printf("   正确答案为  %.0lf\n    你的答案是  × 不要气馁,再仔细算算.\n\n",ans);
		chengji-=12;
		cuo++;
	}
}

int main() {
	int i,j,N,dd;//务必符合 c 语言变量的定义规则:必须在函数的最开始定义变量
	GREEN();//控制台以下字体为绿色
	printf("小同学,要努力昂:\n");
	printf("你想做多少道题目?\n请键入你想要做的题目。\n");
	RED();//控制台以下字体为红色
	scanf("%d",&N) ;// N 做题数量 
	printf("你想做的 %d 道\n得分规则:正确一道得分+10,错误一道得分-12\n请键入数字 1 后,回车键开始挑战!\n",N);
	scanf("%d",&dd);//是否确定 
	if(dd==1) {
		srand((int)time(0));
		dui=cuo=0;//记录做题数目的对错情况
		for(int k=1; k<=N; k++) {
			LIGHT();
			printf("当前第 %d 题,剩余 %d 题\n     现在你的分数是  %d  分\n",k,N-k,chengji);
			c[k]=1+(int)(4.0*rand()/(RAND_MAX+1.0));//字符随机数不会,模拟的数字随机数确定运算符号
			switch(c[k]) {

				case 4: {//加法
					RED();
					a[k]=1+(int)(10000.0*rand()/(RAND_MAX+1.0));// 10000 可修改,表示产生的随机整数的最大值
					b[k]=1+(int)(10000.0*rand()/(RAND_MAX+1.0));
					ans=a[k]+b[k];
					printf("     %d + %d 答案是  ",a[k],b[k]);
					ans_yourans();//目的简化代码,自定义重复的函数
					break;
				}

				case 1: {//减法
					RED();
					a[k]=1+(int)(5000.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(a[k]*rand()/(RAND_MAX+1.0));// 此处的 a[k] 目的保证,减数<被减数,避免小学生计算负数
					ans=a[k]-b[k];
					printf("     %d - %d 答案是  ",a[k],b[k]);
					ans_yourans();
					break;
				}

				case 2: {//乘法
					RED();
					a[k]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(10.0*rand()/(RAND_MAX+1.0));
					ans=a[k]*b[k];
					printf("     %d * %d 答案是  ",a[k],b[k]);
					ans_yourans();
					break;
				}

				case 3: {//除法
					RED();
					a[k]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(10.0*rand()/(RAND_MAX+1.0));
					ans=(double)a[k]/(double)b[k];//不会出现 b[k]=0 的情况
					printf("     %d / %d 答案是(两位小数,四舍五入)  ",a[k],b[k]);
					ans_yourans();
					break;
				}
			}
		}

		LIGHT();
		printf("\n*********************解  题  报  告*********************\n你的分数是 %d .\n",chengji);
		printf("你一共做了 %d 道题,正确 %d 题,错误 %d 题 。\n",N,dui,cuo);
		printf("请点击 Ctrl + Shift +J (搜狗输入法截图快捷键)截图保存该报告。\n");
	} else
		printf("让你按的是昂,Baby!*****  1  *****!!!!\n");
	system("pause");//屏幕暂停函数

	return 0;
}



版本:1.0(2016年1月29日14:34:07)
代码:
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#include <windows.h>
#define MYDD 30000 

void RED() {//控制台调整前景色为红色
	HANDLE kai_1 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_1, FOREGROUND_INTENSITY | FOREGROUND_RED); // 为红色
}

void GREEN() {//控制台调整前景色为绿色
	HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_GREEN);// 为绿色
}

void LIGHT() {//控制台调整前景色为强光
	HANDLE kai_2 = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(kai_2, FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);// 为强光
}

int main() {
	int a[MYDD],b[MYDD],c[MYDD];
	double e[MYDD],d[MYDD];
	int x,y,N,wqs;
	double ans,youans; 
	int i,j,cuo,dui;
	GREEN(); 
	printf("小同学,要努力昂:\n");
	printf("你想做多少道题目?\n请键入你想要做的题目。\n");
	RED();
	scanf("%d",&N) ;
	printf("你想做的 %d 道\n得分规则:正确一道得分+10,错误一道得分-12\n请键入数字 1 后,回车键开始挑战!\n",N);
	scanf("%d",&wqs);
	if(wqs==1) {
		srand((int)time(0));
		int chengji=0;//记录成绩 
		dui=cuo=0;//记录做题数目的对错情况 
		for(int k=1; k<=N; k++) {
			LIGHT();
			printf("当前第 %d 题,剩余 %d 题\n     现在你的分数是  %d  分\n",k,N-k,chengji);
			c[k]=1+(int)(4.0*rand()/(RAND_MAX+1.0));//字符随机数不会,模拟的数字随机数确定运算符号 
			switch(c[k]) {
				case 4: { 
					RED();
					a[k]=1+(int)(10000.0*rand()/(RAND_MAX+1.0));// 10000 可修改,表示产生的随机整数的最大值 
					b[k]=1+(int)(10000.0*rand()/(RAND_MAX+1.0));
					ans=a[k]+b[k];
					printf("     %d + %d 答案是  ",a[k],b[k]);
					GREEN();
					scanf("%lf",&youans);
					if(youans==ans) {
						printf("   你的答案是 √恭喜正确,继续努力.\n\n");
						chengji+=10;
						dui++;
					} else { 
						LIGHT();
						printf("   正确答案为  %.0lf\n    你的答案是  × 不要气馁,再仔细算算.\n\n",ans);
						chengji-=12;
						cuo++;
					}
					break;
				}
				case 1: { 
					RED();
					a[k]=1+(int)(5000.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(a[k]*rand()/(RAND_MAX+1.0)); 
					ans=a[k]-b[k];
					printf("     %d - %d 答案是  ",a[k],b[k]);
					GREEN();
					scanf("%lf",&youans);
					if(youans==ans) {
						printf("   你的答案是 √恭喜正确,继续努力.\n\n");
						chengji+=10;
						dui++;
					} else {
						LIGHT();
						printf("   正确答案为  %.0lf\n    你的答案是  × 不要气馁,再仔细算算.\n\n",ans);
						chengji-=12;
						cuo++;
					}
					break;
				}
				case 2: { 
					RED();
					a[k]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(10.0*rand()/(RAND_MAX+1.0));
					ans=a[k]*b[k];
					printf("     %d * %d 答案是  ",a[k],b[k]);
					GREEN();
					scanf("%lf",&youans);
					if(youans==ans) {
						printf("   你的答案是 √恭喜正确,继续努力.\n\n");
						chengji+=10;
						dui++;
					} else {
						GREEN();
						printf("   正确答案为  %.0lf\n    你的答案是  × 不要气馁,再仔细算算.\n\n",ans);
						chengji-=12;
						cuo++;
					}
					break;
				}
				case 3: { 
					RED();
					a[k]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
					b[k]=1+(int)(10.0*rand()/(RAND_MAX+1.0));
					ans=(double)a[k]/(double)b[k]; 
					printf("     %d / %d 答案是(两位小数,四舍五入)  ",a[k],b[k]);
					GREEN();
					scanf("%lf",&youans);
					if(youans==ans) {
						printf("   你的答案是 √恭喜正确,继续努力.\n\n");
						chengji+=10;
						dui++;
					} else {
						GREEN();
						printf("   正确答案为  %.2lf\n    你的答案是  × 不要气馁,再仔细算算.\n\n",ans);
						chengji-=12;
						cuo++;
					}
					break;
				}
			}
		}
		LIGHT();
		printf("\n*********************解  题  报  告*********************\n你的分数是 %d .\n",chengji);
		printf("你一共做了 %d 道题,正确 %d 题,错误 %d 题 。\n",N,dui,cuo);
		printf("请点击 Ctrl + Shift +J 截图保存该报告。\n");
	} else
		printf("让你按的是  1   !!!!\n");
	system("pause"); 
	return 0;
}