用c语言编写背单词系统要求背单词和测验,浏览单词

用c语言编写背单词系统要求背单词和测验,浏览单词,第1张

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

struct word

{

    char english[30]

    char chinese[100]

    int  count         /* 记录背单词的正确次数 */

}dic[4000]

char getChoice()

{

    char str[10]

    gets(str)

    while (strlen(str)==0)

    {

        printf("输入为空,请重新输入:")

        gets(str)

    }

    return str[0]

}

int main()

{

    FILE *fp

    char ch,line[100]

    int kong,i,count=0,j=0,end=0,k=0

    int last_process = 0

    if((fp=fopen("cet4.txt","r"))==NULL)

    {

        printf("cannot open the txt!!!\n")

        exit(0)

    }

    /* 读取所有单词 */

    while(fgets(line,sizeof(line),fp)!=0)

    {

        /* 每一行记录的格式【单词 中文 正确数】*/

        /* 读取单词 */

        j=0

        for(i=0i<line[i]!=' 'i++)

        {

            dic[count].english[j]=line[i]

            j++

        }

        dic[count].english[i]='\0'

        /* 特殊处理,如果这个字段是自定义的上次进度标记,则记下进度,假如进度标记是#last_process# */

        if(strcmp(dic[count].english,"#last_process#") == 0)

        {

            last_process = atoi(line+i+1)

            continue

        }

        /* 读取中文 */

        j=0

        for(i=kong+1i<line[i]!=' 'i++)

        {

            dic[count].chinese[j]=line[i]

            j++

        }

        dic[count].chinese[j]='\0'

        /* 正确数 */

        dic[count].count = atoi(line+i+1)

        count++

    }

    fclose(fp)

    /* 打印下读取的信息 */

    printf("单词数:%d\n上次背到第%d个单词\n", count, last_process)

    /*while*/ 

    /* 这里背单词策略,可以根据count来判断单词熟悉度,该值越大表示越熟悉 */

    /* 负数表示记错了的次数,错的越多,负的越大 */

    i = last_process

    while(ch!=0)

    {

        // 可根据需要排序单词,排序依据是count字段大小

        puts("\n1.随机20个单词测试\n")

        puts("\n2.强化记忆\n")

        puts("\n前一个(P)后一个(N)收藏(C)结束浏览(M)")

        while(ch!=0)

        {

            ch=getChoice()

            if(ch=='P'||ch=='p')

            {

                i = (last_process+count-1)%count

                printf("%s\n\n",dic[i].english)

                printf("%s\n\n",dic[i].chinese)

            }

            if(ch=='N'||ch=='n')

            {

                i = (last_process+1)%count

                printf("%s\n\n",dic[i].english)

                printf("%s\n\n",dic[i].chinese)

            }

            else if(ch=='C'||ch=='c')

            {

                printf("已经加入单词本")

            }

            if(ch=='M'||'m')

            {

                break

            }

        }

    }

    /* 程序退出 */

    last_process = i

    if((fp=fopen("cet4.txt","w"))==NULL)

    {

        printf("cannot open the txt!!!\n")

        exit(0)

    }

    /* 把单词进入重新写入单词文件 */

    for (i=0 i<count i++)

    {

        fprintf(fp, "%s %s %d\n", dic[i].english, dic[i].chinese, dic[i].count)

    }

    fprintf(fp,"#last_process# %d", last_process)

    fclose(fp)

    

    return 0

}

大致这样子,懒得写了~~~有需要可讨论

这还不简单?

为每个单词设定一个索引值。

假设一共有100个单词吧?

使用rand()%100,就可以得到0-99之间的随机值了。

+1就是1—100之间的随机值。

你先定义一个容量为200或更大的数组,给他们全部用上述方法附上随机值。然后挨个读取就可以了。

至于具体代码要自己研究。注意:

1.要生成随机种子。srand((unsigned)time(0))否则总是生成同一个。

2.随机种子产生以此即可。

3.你还可以使用队列,挨个读取,还可以设定优先级,让经常错的优先级提高--这就算人工智能吧,呵呵。

http://zhidao.baidu.com/question/38052334.html

#包括

#包括

包括

结构的字/ /构造一个单词的定义,其中两名成员提出英语单词和相应的中国翻译

{

字符中国[20] [20]

炭英语

}

整数点= 0/ /统计分数

诠释COUNT1 = 0/ /添加一些测试

无效田家(字的海峡[100],诠释计数)/ /函数声明的词汇短语

无效叔初(字海峡结构[100],诠释计数)/ /函数声明,所有的输出词典中的短语

无效fanyi1(结构字海峡“[100],诠释及数量)/ /函数声明,输入中文,英文翻译访问以

无效fanyi2(字海峡结构[100],诠释计数)的

无效的chaxun(INT点,诠释COUNT1),/ /函数声明的输出结果!

无效的主要()

{

诠释计数= 0

结构字海峡“[100]/ /定义一个结构海峡

整数N

字符CH chioch阵列

(1)

{

printf的(“ *************背单词系统********************* \ n“)

printf(”请* ************ 1,添加词库********************* \ n“)

printf(”请* ************中国英语*********************** \ n“)

输出( “************* 3,英语对中国*********************** \ n”)

>printf(“请************* 4,输出所有的词库***************** \ n”}

输出(“************* 5,成绩查询********************* \ n”)

输出(“************* 0,退出************************* \ n”)/>printf(“请******************************************** \ N“)

printf的(”请输入您去 *** 作的行:\ n“)

scanf的(”%d“,&N)

<BR /开关(N)

{

案件1:田家(STR,计数)打破/ /函数调用

案例2:fanyi1(海峡,计数)打破/ /函数调用

案例3:fanyi2(海峡,计数)打破/ /函数调用

情况下,叔初(海峡,计数)突破

案例5:chaxun(点,COUNT1)的打破/ /函数调用

情况下,0:{printf的(“你确定要退出吗?Y / N!\ n”)

scanf的(“%C%C”,&通道,chioch)

(CH =='Y'| | CH =='Y')出口(0)

}

默认:printf(“请您输入错误的 *** 作不能被执行“)

出口(0)

}

}

}

无效田家(字海峡结构[100],诠释计数)/ /的词汇短语

{

字符CH

{

printf的(“词库输入!\ n “)

printf的(”请输入英文单词的词汇:\ n“)

scanf函数(”%s“的话,str [计数。英语)

printf的(”\ n请进入中国的意义:\ n“)

scanf的(”%s“的话,str [计数]。中国)

数+ +

printf的(”是否继续进入Y / N!\ n“)

scanf的(”%s“,&CH)

}(CH =='Y')

输出,计数(“%d \ n \ n”)

}

无效叔初(字STR [100],诠释计数)/ /输出词典短语

{

INT I = 0

printf的(“输出词典的词!\ n”)

(<= 0){printf(“请不的话,可以不输出!\ n“)回报}

其他{

(i = 0<算,我+ +){

printf的(”英语单词:%s“的话,str [i]的英文)

printf的(”\ n中国的意义:%s“的话,str [i]的中国)

printf的(”\ n \ n“)

}

printf的(“词库所有单词输入完毕!!\ n”)

}

}

无效fanyi1(字海峡结构[100],诠释计数)/ /输入中文,英文翻译访问

{

字符路[20]

字符BH [20]

printf的(“请输入英文单词:\ n”)

scanf的(“%s”,CH)

printf(“请输入一个翻译的中国:\ n“)

scanf的(”%s“,BH)

(i = 0我算,我+ +)

{

(STRCMP(通道,海峡[I]英语)== 0)

{

(STRCMP(BH海峡[I]。中国)== 0)

{

点+ +的

COUNT1 + +

printf的(“恭喜你!正确!\ n”)

}

其他

{ / a>

COUNT1 + +

printf的(“不幸的是,弄错了!!正确的翻译是:%S \ n”,STR [I]。中国)

} BR />}

}

}

无效fanyi2(结构字海峡“[100],INT和数)/ /输入英文,中文翻译访问

{

诠释我

字符CH [20]

字符BH [20]

printf的(“请进入中国:\ n“)

scanf的(”%s“,CH)

printf的(”请输入英文翻译:\ n“)

scanf的(”%s的“ BH)

为(i = 0<计数我+ +)

{

(STRCMP(CH话,str [i]的。中国)== 0) />{

(STRCMP(BH,海峡[I]。英语)== 0){

点+ +

COUNT1 + +

printf的(“恭喜,你得到它!!\ n“)

}

其他

{

COUNT1 + +

printf的(”不幸的是,答错了!正确的翻译是:%S \ n“,STR [I]英语)

}

}

}

}

无效chaxun(点,诠释COUNT1)

{

printf的(“本次测试的结果是:\ n”)

>printf(“请总数:%d \ n”,COUNT1)</输出(正确:%DA \ n“,点)

/ / printf(”请正确率:%d \ \ n “,点* 100/count1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11726391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存