[C语言]如何使用C语言创建题库,进行高效刷题?

2023-10-26

事情是这样的:

        鄙人的学校开展了一个校内的知识竞赛,赛事主办方提供给了我们一个题库进行练习(但是是Word版本的),题目量不多(单选题 “ 也就 ” 140多道题目)。

        当然,我们完全可以对着那个枯燥无味的Word文档进行死记硬背,但是,身为一名计算机专业的学生,这样做显然不符合我们 专 业 风 格 ”,特别是对于我这种一面对长篇文字就倍感倦意的人来说,能有一个 刷题程序 来帮助我提高记忆的效果是再好不过的了。

        激动过后冷静想了想,作为一名大一的学生,觉得以我目前所学的知识,是完全有可能驾驭得住我的想法的!!!!


具体的实现: 

       需求分析:                                                                          

        由于我的需求非常的简单呐,仅仅是需要创建一个单项选择题库,实现类似于背英文单词的APP那样的一个小程序,程序给我提供问题,我提供选项,程序判断我的对错即可

        二、题目分析:      

        题 目 例 子:

       从图中我们不难看出,一道题目大刀阔斧的可以分成三个部分:题干、选项、答案;  

        那么,事情变简单了,我们把一道题目概括为一个结构体,结构体内部包含以上三种内容,分别用字符串、字符串、字符进行概括;  如下: 

struct ques{
	char question[300];       //保存问题
	char select[5][100];      //二维数组用来保存选项
	char temp[20];            //临时读取 “答案:A” 这样的字符串
	char answer;              //获取临时读取的字符串中的答案“A”
}a[150];

      解 释 一 下:        

        Q1:为什么数组要开这么大?

       因为据我所知,中文字符需要占据两个字符的位置,因此如果有15个汉字,就必须至少开辟一个str[30]这样一个空间;

        Q1:a[150]是什么意思?

        如上所述,结构体数组a中每一个元素代表了一个问题的全部概括。

        三、具体的实现:      

        有了以上的分析,程序设计起来就十分的方便了。

        第一步、把Word文档中的题库复制到一个txt文件中

   

        第二步、读取txt文件中的内容存储到事先定义好的结构体数组中

        第三步、将结构体数组中的问题一个一个输出并根据我们的输入进行判断我们的回答是                        否正确;

以下是完整的代码以及效果

(别走开后面还有总结部分:精华!!!):

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
struct ques{
	char question[300];
	char select[5][100];
	char temp[20];
	char answer;
}a[150];
int main(){
	int randnum,count=0;
	int pan[150]={0};
	srand((unsigned)time(NULL));
	randnum=rand()%138+1;
	FILE *fp = NULL;
	fp=fopen("C:\\Users\\ryq\\Desktop\\shuati\\test22.txt","r+");
	if(fp==NULL){
		printf("WRONG!!!!!!!");
		return 0;
	}
	for(int i=1;i<=138;i++){     //第二步、读取txt文件中的内容存储到事先定义好的结构体数组中
		fscanf(fp,"%s",a[i].question);
		for(int j=1;j<=4;j++){
			fscanf(fp,"%s",a[i].select[j]);
		}
		fscanf(fp,"%s",a[i].temp);
		a[i].answer=a[i].temp[6];
	}
	while(1){                    //第三步、循环输出问题并进行判断
		char an,flag;
		randnum=rand()%138+1;
		if(pan[randnum]==1)       //这里的判断条件是记录每道题目出现的次数,
                                  //博主是设置一道题目只出现一次,如果想出现两次
                                  //更改为pan[randnum]>=2即可
			continue;
		pan[randnum]++;
		printf("\n\t%s\n\n",a[randnum].question);
		for(int j=1;j<=4;j++){
			printf("\t%s\n\n",a[randnum].select[j]);
		}
		scanf("%c",&an);
		if(an==a[randnum].answer)
			printf("Y E S\n");
		else{
			printf("W R O N G\n");
			printf("正确答案是:%C\n",a[randnum].answer); 
		}
		count++;                               //count的作用是记录已经做了道题目
		printf("你已经做了 %d 道题,还要继续吗?/Enter\n",count);
		getchar();
		scanf("%c",&flag);
		if(flag!='\n')
			break;
	}
	return 0;
}

运行截图:

        

总结部分 :     

        1、代码中用了随机数进行题目的随机输出题目;

        2、增加了一些细节:比如题目出现的次数、已经做的题目数量等等;

        3、使用\t\n等转义字符进行了简单的排版

个人感触:这次敲代码的感觉明显就和以往不一样了,以前是为了做题目而敲代码,但这次                    感觉到的是所学到的知识真真切切得方便了我的生活。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C语言]如何使用C语言创建题库,进行高效刷题? 的相关文章

随机推荐

  • 封装v-loading全局自定义指令

    当我们刷新页面或者是首次加载的时候 如果后端数据请求比较慢的情况下 页面是会出现白屏情况的 所以我们可以使用 v loading 去优化一下 增加用户的体验性 我们可以有两种方式去实现 1 定义一个 loading 的组件 然后在每一个需要
  • Python---自动生成二维码

    专栏 python 个人主页 HaiFan 专栏简介 本专栏主要更新一些python的基础知识 也会实现一些小游戏和通讯录 学时管理系统之类的 有兴趣的朋友可以关注一下 自动生成二维码 二维码的本质上 就是一段字符串 我们可以把任意的字符串
  • 一位大三学生(准大四)面试网络工程师后的一些想法

    首先声明 这是我面试一家公司的网络工程师后想要表达的一些东西 早就面试完了 但是一直现在才发 以上均为个人想法 本科大学就不说名字了吧 非211 985 是省重点建设高校 省内知名 省外无名 本人专业通信 但是对这个专业无感 所以投身于了网
  • 成为一名黑客(网络安全),需要掌握哪些黑客技能?

    前言 黑客技能是一项非常复杂和专业的技能 需要广泛的计算机知识和网络安全知识 你可以参考下面一些学习步骤 系统自学网络安全 在学习之前 要给自己定一个目标或者思考一下要达到一个什么样的水平 是学完找工作 进大厂 还是兴趣学习提升 成为一个黑
  • Etcd恢复报错:error listing data dir: /var/lib/etcd/default.etcd

    通过systemd托管的etcd数据备份还原无法启动服务并且报错 error listing data dir var lib etcd default etcd 但是单独执行启动命令可以 usr bin etcd debug name d
  • 各种数据结构的时间复杂度分析

    对于同一个数据结构来说 底层实现的不同往往会呈现出不同的时间复杂度 以数组为例 普通数组实现 顺序数组实现 二分搜索树 平衡 插入 O 1 O n O logn 查找 O n O logn O logn 删除 O n O n O logn
  • 青龙面板及使用(拔毛助长)

    提示 码文不易 来源 学习日常 前言 简单说一下这个原理吧 就是把写好的脚本挂在面板上 让他定时运行 得有个服务器 我用的是腾讯的 搭建的问题 直接搜吧 我就不在过多说些什么了 最好有俩种设备 安卓 苹果 知识储备的话 懂点python j
  • c语言中空格算空行吗,1、程序中空格与空行使用规范

    在程序代码中 善用空格与空行 可使程序板式更加优美 空格 使用 1 在C语言的关键字 像if for while switch等 之后要留有空格 以突显出该关键字 在函数之后不要留空格 紧跟左括号 以与关键字作区别 但在函数定义的参数之间
  • NAT技术详解

    前言 我们知道现在流行的IPv4的IP地址是32位的 那说明IP地址总数是2 32次方个 但是随着互联网的发展 现在的入网设备早就超过了2 32次方个了 拿为什么我们现在的主机IP还够用呢 这里用到了NAT技术来解决 一 NAT技术概念 在
  • 如何阅读他人的程序代码(上)——技巧学习篇

    一 读懂程序代码 使心法皆为我所用 程序代码是别人写的 只有原作者才真的了解程序代码的用途及涵义 许多程序人心里都有一种不自觉的恐惧感 深怕被迫去碰触其他人所写的程序代码 但是 与其抗拒接收别人的程序代码 不如彻底了解相关的语言和惯例 当成
  • java中如何进行日期时间比较?4种方法介绍

    1 Date compareto java util Date提供了在Java中比较两个日期的经典方法compareto 1 如果两个日期相等 则返回值为0 2 如果Date在date参数之后 则返回值大于0 3 如果Date在date参数
  • Docker 应用部署

    文章目录 一 部署 MySQL 二 部署 Tomcat 三 部署 Nginx 四 部署 Redis 提示 以下是本篇文章正文内容 Docker 系列学习将会持续更新 一 部署 MySQL 搜索并拉取 mysql 镜像 docker sear
  • 最近碰到的一个关于memcpy的奇葩问题

    最近写代码 碰到一个奇葩问题 memcpy函数用起来 编译居然提示我stackoverflow 简直是对写C的码农的最大羞辱 WTF UINT8 numBuffers 0 UINT16 cpLength 0 TPM2B DIGEST buf
  • 排序和复杂度

    常见的排序方式 1 冒泡排序 时间复杂度 最好情况是 O n 最坏情况是 O n2 空间复杂度 开辟一个空间交换顺序O 1 2 快速排序 时间复杂的 最好情况是 O nlogn 最坏情况是 O n2 空间复杂度 最好的情况 每一次base值
  • 结构型模式之外观模式

    复习用 不适合初学 复习用 不适合初学 复习用 不适合初学 定义 Facade Pattern 外部与一个子系统的通信必须通过一个统一的外观对象进行 为子系统中的一组接口提供一个一致的界面 外观模式定义了一个高层接口 这个接口使得这一子系统
  • collate chinese_prc_ci_as null解说

    我们在create table时经常会碰到这样的语句 例如 password nvarchar 10 collate chinese prc ci as null 那它到底是什么意思呢 不妨看看下面 首先 collate是一个子句 可应用于
  • 计算机程序的思维逻辑 (12) - 函数调用的基本原理

    栈 上节我们介绍了函数的基本概念 在最后我们提到了一个系统异常java lang StackOverflowError 栈溢出错误 要理解这个错误 我们需要理解函数调用的实现机制 本节就从概念模型的角度谈谈它的基本原理 我们之前谈过程序执行
  • 小知识·PD充电协议

    目录 PD充电器硬件结构 pd充电协议是什么 pd协议快充什么意思 PD快充协议优势 USB PD快速充电通信原理 PD充电器硬件结构 典型的手机充电器的硬件结构 以基于Dialog方案的高通QC2 0快充协议为例 如图1所示 iW626作
  • dd命令测试linux磁盘io情况,详解三种Linux测试磁盘IO性能的方法总结

    概述 在磁盘测试中我们一般最关心的几个指标分别为 iops 每秒执行的IO次数 bw 带宽 每秒的吞吐量 lat 每次IO操作的延迟 当每次IO操作的block较小时 如512bytes 4k 8k等 测试的主要是iops 当每次IO操作的
  • [C语言]如何使用C语言创建题库,进行高效刷题?

    事情是这样的 鄙人的学校开展了一个校内的知识竞赛 赛事主办方提供给了我们一个题库进行练习 但是是Word版本的 题目量不多 单选题 也就 140多道题目 当然 我们完全可以对着那个枯燥无味的Word文档进行死记硬背 但是 身为一名计算机专业