您的位置:首页 > 理论基础

程序设计——小型计算机

2017-01-04 17:10 351 查看
这是我设计的小型计算机

请在程序所在文件下自行建立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_INCLUDEDstart函数
#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];

4000
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;
}
运行结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: