课程设计--C语言关键字中英翻译机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
学院、系:
专业名称:计算机科学与技术
课程设计科目C语言程序课程设计所在班级:
学生学号:
学生姓名:
指导教师:
完成时间:2012年3月-5月
C语言关键字中英翻译机
一、设计任务与目标
(1)输入中文关键字可以翻译成英语,如输入“整型”则输出关键字“int”;
(2)输入英文关键字可以翻译成中文,如输入“int”则输出关键字“整型”;
(3)可多次查询;
(4)输入bye时退出。
二、方案设计与论证
(1)定义两个字符型数组分别存放中文关键字和英文关键字,中文和英文的顺序要一一对应,即数组的下标值要相同;
(2)定义一个字符型数组用来存放输入的字符串;
(3)利用strcmp()函数和循环结构实现输入的英文或中文关键字和已定义的字符型数组中的英文或中文关键字逐一比较;
(4)输入的关键字和已有的关键字比较相同则利用中英相对应的下标值相同输出对应的英文或中文;
(5)利用循环结构实现多次查询的功能;
(6)利用exit()函数实现输入“bye”时退出程序;
三、程序框图或流程图,程序清单与调用关系
四、全部源程序清单
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int i,x,k,time;
char a[15];
char
*En[]={"int","float","double","for","return","auto","if","while","con tinue","break"};
char *Ch[]={"整型","单精度","双精度","循环","返回","自动","如果","当","继续","退出"};
cout<<"中文翻译成英文输入1,英文翻译成中文输入0(要退出程序请在输入1、0后输入bye):"<<endl;
for(time=0;time<100;time++)
{
cin>>x;
if (x==1)
{
cout<<"请输入中文:";
cin>>a;
if (strcmp(a,"bye")==0)
exit(0);
cout<<"翻译后的英文:";
for (i=0;i<10;i++)
{
if (strcmp(a,Ch[i])==0)
{
cout<<En[i];
}
}
cout<<endl<<endl;
}
if (x==0)
{
cout<<"请输入英文:";
cin>>a;
if (strcmp(a,"exit")==0)
exit(0);
cout<<"翻译后的中文:";
for (i=0;i<10;i++)
{
if (strcmp(a,En[i])==0)
{
cout<<Ch[i];
}
}
cout<<endl<<endl;
}
}
}
五、程序运行结果测试与分析
(1)输入“1+回车”为中文翻译成英文,输入“0+回车”为英文翻译成中文;
(2)输入中文关键字翻译成英文关键字;
(3)输入英文关键字翻译成中文关键字;
(4)输入“1或0+回车”后输入“bye”则退出程序。
六、结论与心得
在做这个程序的时候首先遇到的问题就是如何实现中英互译,一开始感觉很难。
后来通过仔细的思考和研究,就想到通过两个一维数组分别来保存中文和英文,并且通过使对应英文和中文数组下标保持一致,来实现通过输入的英文或中文跟数组已有的来比较,比较相同,则通过下标值来查找对应的中文或英文,然后输出即可。
但是这个程序还是有不足的地方,因为保存的词比较少,所以只是通过一位数组来保存,而且是没有规律的,如果要像输入法那样保存大量的词汇,这样的方法使用起来很不方便。
所以需要想一种更高效的方法来解决这个问题。
比如通过二维数组来保存词汇,词汇按字母顺序之类的方法来保存,这样就能实现更加高效的查询。
但是实现过程还需要一定的研究。
所以目前所做的程序虽然达到要求,却还是存在很大的不足。
以后需要花多一点时间来考虑并完善该程序。
通过这次课程设计使我懂得了理论与实际相结合的重要性,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这毕竟是自己独立做的,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过这次课程设计之后,一定要把以前所学过的知识重新温习一下。
七、参考资料
[1] 余江等编著,C语言程序设计,天津科学技术出版社,94-104页
八、致谢
衷心感谢许杰辉同学对我的帮助。
年历显示
一、设计任务与目标
(1)输入一个年份,输出是在屏幕上显示该年的日历;
(2)输入年月,输出该月的日历;
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日;
(4)某人自1990年1月1日开始,"三天打鱼两天晒网",输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。
二、方案设计与论证
(1)定义2个全局数组,一个数组用来保存闰年和平年的天数,另外的数组用来保存闰年和平年每月的天数。
(2)leapyear函数判断是否是闰年。
能被4整除不能被100整除的年份是閏年,能被100整除又能被400整除的年份也是閏年;
(3)alldays函数用来计算从公元1年1月1号开始计算到某年某月某日的总天数;
(4)festival函数用来保存一年中公历的节日;
(5)outputtoscreen函数用来显示输出界面的格式;
(6)oneyear函数通过输入年份,再调用alldays函数和outputtoscreen 函数来显示该年份的日历;
(7)onemonth函数是通过输入年月,通过调用alldays函数和outputtoscreen汉化来显示查询的某年某月的日历;
(8)howlong函数通过输入现在的年月日和要查询的年月日,通过相减得出相差多少天,再通过调用alldays函数计算要查询的日期的总天数除以7取模来显示查询的日期是星期几。
由于会出现除以7整除的情况,所以要另外写一个输出语句使得整除的时候输出为“星期日”。
然后再调用festival函数得出是否是公历节日。
(9)fishornet函数是通过输入某年某月某日,再调用alldays函数来实现某年某月某日的总天数减去1990年1月1日的总天数,然后除以5取模来得出某年某月某日是在打鱼还是在晒网;
(10)list函数显示出选项并输入要使用的功能选项序列号;
(11)choose函数通过调用list函数返回一个序列所代表的数值,再通过数值调用所需的功能函数。
三、程序框图或流程图,程序清单与调用关系
调用alldays(int y,int m)函数
四、全部源程序清单
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int dayofyear[2]={365,366};
int
dayofmonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30 ,31,30,31,31,30,31,30,31}};
int leapyear(int year) //判断是否是闰年
{
if(year%4==0 && year%100!=0 || year%100==0 && year%400==0) return 1; //闰年
else
return 0; //平年
}
int alldays(int y,int m) //公元1月1号到某年某月的总天数
{
int a,b,days=1; //因为日历是日一二三四五六的顺序排的,所以要加1避免第一天排在日的位置
for(a=m;a>1;a--)
days=days+dayofmonth[leapyear(y)][a-2]; //根据上个月的剩余天数来确定下个月的起始位置,所以要减2
for(b=1;b<y;b++)
days=days+dayofyear[leapyear(b)];
return days;
}
int festival(int month,int day)
{
int fes[12][31];
fes[0][0]=fes[1][13]=fes[2][7]=fes[3][0]=fes[4][0]=fes[5][0]=1;
fes[6][0]=fes[7][0]=fes[8][9]=fes[9][0]=fes[11][24]=1;
if(fes[month-1][day-1]==1)
return 1;
else
return 0;
}
void outputtoscreen(int year,int month,int l) //输出屏幕的日期
{
int j,k;
cout<<"\t"<<"\t"<<"\t"<<"****"<<year<<"年***"<<month<<"月****"<<endl;
cout<<"\t"<<"日"<<"\t"<<"一"<<"\t"<<"二"<<"\t"<<"三"<<"\t"<<"四"<<"\t"<<"五"<<"\t"<<"六"<<endl;
if(l==0)
{
for(k=1;k<=dayofmonth[leapyear(year)][month-1];k++)
{
cout<<"\t"<<k;
if((l+k)%7==0)
cout<<endl;
}
}
else
{
for(j=0;j<l;j++)
cout<<"\t";
for(k=1;k<=dayofmonth[leapyear(year)][month-1];k++)
{
cout<<"\t"<<k;
if((l+k)%7==0)
cout<<endl;
}
}
cout<<endl<<endl;
}
void oneyear() //查询一年的日期{
int i,l,year,month;
system("cls");
cout<<"请输入要查询的年份:";
cin>>year;
for(month=1;month<13;month++)
{
i=alldays(year,month);
l=i%7;
outputtoscreen(year,month,l);
}
getchar();
}
void onemonth() //查询一个月的日期{
int i,l,year,month;
system("cls");
cout<<"请输入要查询的年月份:";
cin>>year>>month;
i=alldays(year,month);
l=i%7;
outputtoscreen(year,month,l);
getchar();
}
void howlong()
{
int year1,year2,month1,month2,day1,day2,one,two,result,date;
system("cls");
cout<<"请输入要查询的年月日: ";
cin>>year1>>month1>>day1;
cout<<endl<<endl<<"请输入现在的时间年月日: ";
cin>>year2>>month2>>day2;
one=alldays(year1,month1)+day1;
two=alldays(year2,month2)+day2;
if(one>two)
result=one-two-1;
else
result=two-one-1;
date=(alldays(year1,month1)+day1-1)%7; //函数alldays中day=1,所以要在这里减1
if(result==-1)
cout<<endl<<endl<<"查询的时间和今天是同一天"<<endl<<endl<<endl;
else
cout<<endl<<endl<<"所查询的日期距离今天的天数: "<<result<<"天"<<endl<<endl<<endl;
if(date==0)
cout<<"查询的日期具体是星期几:星期日"<<endl<<endl<<endl;
else
cout<<"查询的日期具体是星期几:星期"<<date<<endl<<endl<<endl;
cout<<"查询的日期是否是公历节日: ";
if(festival(month1,day1)==1)
cout<<"是"<<endl<<endl<<endl;
else
cout<<"不是"<<endl<<endl<<endl;
getchar();
}
void fishornet()
{
int year,month,day,time,i;
system("cls");
cout<<"某人自1990年1月1日开始,三天打鱼两天晒网,"<<endl;
cout<<"如果你想知道某年某月某日是在打鱼还是晒网。
"<<endl<<endl<<endl;
cout<<"请输入要查询的具体年月日: ";
cin>>year>>month>>day;
time=(alldays(year,month)+day)-((alldays(1990,1)+1));
i=time%5;
if(i>=0 && i<=2)
cout<<endl<<endl<<"查询结果:"<<year<<"年"<<month<<"月"<<day<<"日正在打鱼"<<endl<<endl<<endl;
else
cout<<endl<<endl<<"查询结果:"<<year<<"年"<<month<<"月"<<day<<"日正在晒网"<<endl<<endl<<endl;
getchar();
}
int list()
{
int choice;
system("cls");
cout<<"应用功能:"<<endl;
cout<<"1:输入一个年份,输出是在屏幕上显示该年的日历。
"<<endl<<endl;
cout<<"2:输入年月,输出该月的日历。
"<<endl<<endl;
cout<<"3:输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
"<<endl<<endl;
cout<<"4:某人自1990年1月1日开始,三天打鱼两天晒网,输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。
"<<endl<<endl;
cout<<"0:退出";
cout<<endl<<endl<<endl<<endl<<endl<<"请选择所需要功能所代表的选项: ";
cin>>choice;
return choice;
}
void choose()
{
int sign=0;
system("cls");
switch(list())
{
case 1:oneyear();
break;
case 2:onemonth();
break;
case 3: howlong();
break;
case 4:fishornet();
break;
case 0: exit(0);
}
}
void main()
{
int i;
cout<<endl<<endl<<endl<<endl<<endl;
cout<<"\t"<<"\t"<<"\t"<<"\t"<<"********************"<<endl<<endl< <endl;
cout<<"\t"<<"\t"<<"\t"<<"\t"<<"欢迎使用万年历查询器"<<endl<<endl<<endl;
cout<<"\t"<<"\t"<<"\t"<<"\t"<<"********************"<<endl<<endl< <endl;
cout<<"\t"<<"\t"<<"\t"<<"\t"<<" "<<"请按回车键继续"<<endl;
getchar();
for(i=0;i<100;i++)
{
choose();
}
}
五、程序运行结果测试与分析
(1)程序欢迎界面: 能输出理想结果
(2)功能选项界面: 能输出理想结果
(3)功能1:查询某年
A.输入界面: 能输出理想结果
B.输出界面: 能输出理想结果
(4)功能2:查询某年某月
A.输入界面: 能输出理想结果
B.输出界面: 能输出理想结果
(5)功能3:输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
A.输入界面: 能输出理想结果
B.输出界面: 能输出理想结果
(6)功能4:某年某月某日是在打鱼还是在晒网A.输入界面: 能输出理想结果
B.输出界面: 能输出理想结果
(7)功能5:输入0退出程序,能够成功运行。
六、结论与心得
本次课程设计是我通过自己的实践对书本上的知识进行了与生活相关的运用。
在这个程序中,主要应用了所学过的循环,条件语句,数组以及调用函数。
这些知识的应用使我对课本所学过的内容的认识得到了更深刻的理解。
在编写程序的过程中,也出现了很多错误。
比如函数语句的编写错误导致输出结果并没有出现符合实际的结果。
出现这些情况后,通过研究分析,才慢慢找到错误,想出解决错误的办法。
最后才得到了正确的结果。
七、参考资料
[1] 余江等编著,C语言程序设计,天津科学技术出版社,132-149页
八、致谢
衷心感谢刘焕波同学对我的帮助。
课程设计成绩评定表。