程序设计——小型计算机

这是我设计的小型计算机

请在程序所在文件下自行建立dictionary.txt和xinxi.txt,dictionary.txt中所存储的是常见的八千左右的英语单词,格式如下

abandon 抛弃,放弃 v.

xinxi.txt中所存储的是你自己的密码如123456

main函数

#include <stdio.h>
#include <stdlib.h>
#include "head.h"
#include <string.h9
int main()
{
    printf("欢迎来到熊熊森林!\n");
    mima();//输入密码进入系统
    work();//运行系统的功能
    return 0;
}
head函数

#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
/*************************************************************
功能描述:用来讲背景故事……
输入参数:无
返 回 值:空……
其他说明:无
*************************************************************/
void start1();
/*************************************************************
功能描述:实现第一个难度的计算题……
输入参数:无
返 回 值:整形…
其他说明:无
*************************************************************/
int jiafayunsuan1();
/*************************************************************
功能描述:实现第二个难度的计算题……
输入参数:无
返 回 值:整形
其他说明:无
*************************************************************/
int jiafayunsuan2();
/*************************************************************
功能描述:将两个难度的题目联合在一起
输入参数:无
返 回 值:空
其他说明:无
*************************************************************/
void suanshu();
/*************************************************************
功能描述:用来查生单词……
输入参数:n-元素个数
     s-存储数据的数组
     c-字符
返 回 值:……
其他说明:无
*************************************************************/
void chazidian();
/*************************************************************
功能描述:修改密码……
输入参数:无
返 回 值:…空
其他说明:无
*************************************************************/
void xiugaimima();
/*************************************************************
功能描述:玩小游戏……
输入参数:无
返 回 值:…空…
其他说明:无
*************************************************************/
void jianzibaofuchui();
/*************************************************************
功能描述:登录系统……
输入参数:无
返 回 值:…空
其他说明:无
*************************************************************/
void shurumima();
/*************************************************************
功能描述:修改密码……
输入参数:无
返 回 值:…空
其他说明:无
*************************************************************/
void mima();
    /*************************************************************
功能描述:实现功能……
输入参数:无
返 回 值:空
其他说明:无
*************************************************************/
void work();
#endif // HEAD_H_INCLUDED
start函数

#include <stdio.h>
#include <stdlib.h>
void start1()
{
    printf("———————————————熊出没之数字王国!———————————————\n");
    printf("又是一个晴朗的上午,熊大熊二还在睡梦中,突然从远处传来了砍树的声音,不用想就知道是光头强来砍树了,两只熊赶快从床上爬了起来,来到了森林里,谁知光头强开了个机器怪物,一下子吧熊大打晕了,熊二只有答对数学题才能打败它。");
    printf("小盆友赶快来帮助熊二吧!\n\n");
    return;
}
suanshu函数

#include <stdio.h>
#include <stdlib.h>
#include "head.h"
#include <string.h>
#include <time.h>
void suanshu()
{
    int jiafayunsuan1();
    int jiafayunsuan2();
    int (*p)();//定义指针函数,指向jifayunsuan1,2
    int n,b,c=0;//n,b均是用来接收信号的,c是用来做标记的
    p=jiafayunsuan1;//先进行jiafayunsuan1
    int x;//定义x,用来接收加法运算1,2的得分
    printf("————————————————第一关:加法运算————————————————\n");
    start1();//显示算数游戏的故事背景
    do
    {
        {
            x=p();//先调用函数p(),在将x赋值为得分
            if (x>=60)
            {
                c++;//c是用来做标记的
                if(c!=2)
                {
                    printf("真厉害!是否进入第二关呢?");
                    printf("1:继续!\n");
                    printf("2:退出!\n");
                    scanf("%d",&b);//b是用来接收信号的
                    switch(b)
                    {
                    case 1:
                        p=jiafayunsuan2;
                        break;
                    case 2:
                        ;
                        break;
                    }
                }
            }
            else
            {
                printf("很抱歉你输了!\n");
                printf("小勇士,是否继续帮助熊二呢?\n");
                printf("1:继续!\n");
                printf("2:我放弃了!\n");
                scanf("%d",&n);//n也是用来接收信号的
                switch(n)
                {
                case 1:
                    p=(c==0?jiafayunsuan1:jiafayunsuan2);//实现两种难度的转换
                    break;
                case 2:
                    break;
                }
            }
        }
        if(c==2)//如果两种难度的题都做完了,则退出循环
            break;
    }
    while(1);
    return;
}
int jiafayunsuan1()
{
int sum=0;//sum表示总得分
    int a,b,d,t;//a,b表示运算符两边的数;d表示结果,t表示用户输入的数字
    char c;//c用来判断符号
    int i;//i用来判断循环
    FILE *fp;
    fp=fopen("excise.txt","r");
    if(fp==NULL)
    {
        printf("cannot open file!\n");
        exit(1);
    }
    for(i=0; i<10; i++)
    {
        fscanf(fp, "%d%c%d", &a, &c, &b);
        printf("第 %d 题: ", i+1);
        switch(c)
        {
        case '+':
            d=a+b;
            printf("%d+%d=", a, b);
            break;
        case '-':
            d=a-b;
            printf("%d—%d=", a, b);
            break;
        case '*':
            d=a*b;
            printf("%d×%d=", a, b);
            break;
        case '/':
            d=a/b;
            printf("%d÷%d=", a, b);
            break;
        }
        scanf("%d", &t);
        if(t==d)
        {
            printf("    right! \n");
            sum++;
        }
        else
            printf("    wrong! \n");
    }
    printf("共答对了%d道题,得分%d\n", sum, sum*10);
    fclose(fp);
    return sum*10;
}
int jiafayunsuan2()
{
    int sum=0;//sum表示总得分
    int a,b,d,t;//a,b表示运算符两边的数字,d表示正确的答案,t是用户自己输入的答案
    int c;//c表示运算符
    int i;//i判断循环
    srand(time(0));
    for(i=0; i<10; i++)
    {
        printf("第 %d 题: ", i+1);
        c=rand()%4;
        do
        {
            a=rand()%100+1;
            b=rand()%100+1;
            if(a<b&&(c==1||c==3))
            {
                d=a;
                a=b;
                b=d;
            }
            if(c==3)
                a=(a/b)*b;
        }while((a+b)>=100||a*b>=100);
        switch(c)
        {
        case 0:
            d=a+b;
            printf("%d+%d=", a, b);
            break;
        case 1:
            d=a-b;
            printf("%d—%d=", a, b);
            break;
        case 2:
            d=a*b;
            printf("%d×%d=", a, b);
            break;
        case 3:
            d=a/b;
            printf("%d÷%d=", a, b);
            break;
        }

        scanf("%d", &t);
        if(t==d)
        {
            printf("    right! \n");
            sum++;
        }
        else
            printf("    wrong! \n");
    }
    printf("共答对了%d道题,得分%d\n", sum, sum*10);
    return sum*10;
}
chazidian函数

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

//定义词条类
typedef struct
{
    char english[20];
    char chinese[30];
    char word_class[10];
} Word;

Word words[8000];  //将词典数组设置成全局的结构体数组
int wordsNum=0;    //词典中的词条数目

/*从文件中将词读到字典中*/
void readDictionary()
{
    FILE *fp;
    //将文件中的数据读入到对象数组中
    fp = fopen("dictionary.txt","r");  //以输入的方式打开文件
    if(fp==NULL)       //测试是否成功打开
    {
        printf("dictionary open error!\n");
        exit(1);
    }
    while (!feof(fp))
    {
        fscanf(fp, "%s%s%s", words[wordsNum].english, words[wordsNum].chinese,words[wordsNum].word_class);
        ++wordsNum;
    }
    fclose(fp);
}

int BinSearch(int low, int high, char *key)
{
    int mid;
    while(low<=high)
    {
        mid=(low + high) / 2;
        if(strcmp(words[mid].english, key)==0)
        {
            return mid; //查找成功返回
        }
        if(strcmp(words[mid].english, key)>0)
            high=mid-1; //继续在w[low..mid-1]中查找
        else
            low=mid+1; //继续在w[mid+1..high]中查找
    }
    return -1; //当low>high时表示查找区间为空,查找失败
}

void searchWord(char *key)
{
    int low=0,high=wordsNum-1;  //置当前查找区间上、下界的初值
    int index=BinSearch(low, high, key);
    if(index>=0)
        printf("%s ---> %s \t %s", key, words[index].word_class, words[index].chinese);
    else
        printf("查无此词");
    printf("\n\n");
}

void chazidian( )
{
    readDictionary();
    char key[20];
    do
    {
        printf("请输入待查询的关键词(英文),0000结束:\n");
        scanf("%s", key);
        if (strcmp(key,"0000"))
        {
            searchWord(key);
        }
        else
        {
            break;
        }
    }
    while(1);
    printf("欢迎再次使用!\n\n");
    return ;
}


jianzibaofuchui函数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void jianzibaofuchui()
{
    int i=1;//i用来判断循环的
    int w=0;//表示我方赢得分数
    int n=0;//表示对方赢得分数
    int ab;
    printf("1:人机对战\n");
    printf("2:人人对战\n");
    scanf("%d",&ab);
    switch (ab)
    case 1:
{
    {
        do
        {
            srand(time(0));
            int c,m;//c用来存储随机数,m用来存储用户的选择
            c=rand()%3+1;
            printf("第%d轮!\n",i);
            printf("请输入你要出的拳法:\n");
            printf("1:石头\n");
            printf("2:布\n");
            printf("3:剪刀\n");
            scanf("%d",&m);
            switch(m)
            {
                case 1:printf("你出的是石头\n");break;
                case 2:printf("你出的是布\n");break;
                case 3:printf("你出的是剪刀\n");break;
            }
            switch(c)
            {
                case 1:printf("电脑出的是石头\n");break;
                case 2:printf("电脑出的是布\n");break;
                case 3:printf("电脑出的是剪刀\n");break;
            }
            if((m==1&&c==3)||(m==2&&c==1)||(m==3&&c==2))
            {
                printf("赢\n");
                w++;
            }
            else if(m==c)
            {
                printf("平\n");
                n++;
            }
            else
                printf("输\n");
            i++;
        }
        while(i<=5);
        if(w>n)
            printf("这一局你赢了\n");
        if(w<n)
            printf("这一局你输了\n");
        if(w==n)
            printf("这是平局\n");
    };
    break;
    case 2:
    {
        int i=1;
        int h=0;//表示第一个玩家的选择
        int l=0;//表示第二个玩家的选择
        int y=0;//第一位玩家的得分数
        int e=0;//第二个玩家的得分数
        printf("人人对战\n");
        do
        {
            printf("1:石头\n");
            printf("2:布\n");
            printf("3:剪刀\n");
            printf("请输入第一个玩家的拳法:");
            scanf("%d",&h);
            switch(h)
            {
                case 1:printf("第一个玩家出的是石头\n");break;
                case 2:printf("第一个玩家出是布\n");break;
                case 3:printf("第一个玩家出是剪刀\n");break;
            }
            printf("请输入第二个玩家的拳法:");
            scanf("%d",&l);
            switch(l)
            {
                case 1:printf("第二个玩家出的是石头\n");break;
                case 2:printf("第二个玩家出是布\n");break;
                case 3:printf("第二个玩家出是剪刀\n");break;
            }
            if((h==1&&l==3)||(h==2&&l==1)||(h==3&&l==2))
            {
                printf("第一个玩家赢\n");
                y++;
            }
            else if(h==l)
            {
                printf("平\n");
            }
            else
               {
                printf("第二个玩家赢\n");
                e++;
               }
                i++;
        }
        while(i<=5);
        if(y>e)
            printf("\n第一个玩家获胜\n");
        if(y<e)
            printf("\n第二个玩家获胜\n");
        if(y==e)
            printf("\n这场比赛是平局\n");
    };
    break;
    }
    return;
}
xiugaimima函数

#include <stdio.h>
#include <stdlib.h>
void xiugaimima()
{
    FILE *fp;//用于文件操作
    int iPassInFile;//存储新的密码
    int iNewPass1, iNewPass2;//用于修改密码
    printf("请输入新密码:");
    scanf("%d", &iNewPass1);
    printf("再输入新密码:");
    scanf("%d", &iNewPass2);
    if(iNewPass1==iNewPass2)
    {
        iPassInFile = iNewPass1;
        printf("密码修改成功,请注意保密.\n");
        if ((fp=fopen("xinxi.txt", "w"))==NULL)
        {
            printf("password file cannot open!");
            exit(0);
        }
        fprintf(fp, "%d", iPassInFile);
        fclose(fp);
    }
    else
        printf("两次输入不一致,密码修改失败.\n");
    return;
}
mima函数

#include <stdio.h>
#include <stdlib.h>
void mima()
{
    int iPass;//用户验证时输入的密码
    int iPassInFile;//记录正确的密码
    int iTry=3;//进入系统时尝试的次数
    FILE *fp;//用于文件操作
    if ((fp=fopen("xinxi.txt", "r"))==NULL)
    {
        printf("password file cannot open!");
        exit(0);
    }
    fscanf(fp, "%d", &iPassInFile);
    fclose(fp);
    do
    {
        iTry--;
        printf("请输入密码:");
        scanf("%d", &iPass);
        if(iPass==iPassInFile)
            break;
        else
        {
            if(iTry>0)
                printf("超过3次将退出,你已经尝试%d次!\n", iTry);
            else
            {
                printf("对不起,你不能进入系统,但是可以让你尝试我们的应用\n");
            }
        }
    }
    while(iTry);
    return;
}
work函数

#include <stdio.h>
#include <stdlib.h>
#include "head.h"
void work()
{
    printf("1:算数\n");
    printf("2:查字典\n");
    printf("3:修改密码\n");
    printf("4:拳王之战\n");
    int a;//用来接收信号
    scanf("%d",&a);
    switch (a)
    {
    case 1:
    {
        suanshu();
    }
    break;
    case 2:
    {
        chazidian();
    }
    break;
    case 3:
        xiugaimima();
        break;
    case 4:
        jianzibaofuchui();
        break;
    }
    return;
}
运行结果:








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值