admin 管理员组

文章数量: 1086019


2024年4月30日发(作者:currenttime什么意思)

课 程 设 计 报 告

学院、系:

专业名称:

课程设计科目

所在班级:

学生学号:

学生姓名:

指导教师:

完成时间:

计算机科学与技术

C语言程序课程设计

2012年3月-5月

C语言关键字中英翻译机

一、设计任务与目标

(1)输入中文关键字可以翻译成英语,如输入“整型”则输出关键字“int”;

(2)输入英文关键字可以翻译成中文,如输入“int”则输出关键字“整型”;

(3)可多次查询;

(4)输入bye时退出。

二、方案设计与论证

(1)定义两个字符型数组分别存放中文关键字和英文关键字,中文和英文

的顺序要一一对应,即数组的下标值要相同;

(2)定义一个字符型数组用来存放输入的字符串;

(3)利用strcmp()函数和循环结构实现输入的英文或中文关键字和已定义

的字符型数组中的英文或中文关键字逐一比较;

(4)输入的关键字和已有的关键字比较相同则利用中英相对应的下标值相

同输出对应的英文或中文;

(5)利用循环结构实现多次查询的功能;

(6)利用exit()函数实现输入“bye”时退出程序;

三、程序框图或流程图,程序清单与调用关系

四、全部源程序清单

#include

#include

#include

void main()

{

int i,x,k,time;

char a[15];

i<10?

开始

输入x

x=1 x=0

输入a

输入a

退出

bye ? bye ?

退出

strcmp(a,Ch[i])

strcmp(a,En[i])

输出En[i]

相同

不相同

i++

time<100?

相同

不相同

i++

输出Ch[i]

i<10?

否 否

结束

char

*En[]={"int","float","double","for","return","auto","if","while","con

tinue","break"};

char *Ch[]={"整型","单精度","双精度","循环","返回","自动","如果","

当","继续","退出"};

cout<<"中文翻译成英文输入1,英文翻译成中文输入0(要退出程序请在输

入1、0后输入bye):"<

for(time=0;time<100;time++)

{

cin>>x;

if (x==1)

{

}

if (x==0)

{

cout<<"请输入英文:";

cout<<"请输入中文:";

cin>>a;

if (strcmp(a,"bye")==0)

exit(0);

cout<<"翻译后的英文:";

for (i=0;i<10;i++)

{

}

cout<

if (strcmp(a,Ch[i])==0)

{

}

cout<

}

}

}

cin>>a;

if (strcmp(a,"exit")==0)

exit(0);

cout<<"翻译后的中文:";

for (i=0;i<10;i++)

{

}

cout<

if (strcmp(a,En[i])==0)

{

}

cout<

五、程序运行结果测试与分析

(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函数返回一个序列所代表的数值,再通过

数值调用所需的功能函数。

三、程序框图或流程图,程序清单与调用关系

输入year

输入year,

month

输入现在

和查询的

year,mon

th,day

输入year,

开始

输入choice

choice=2 choice=3 choice=1 choice=4 choice=0

month,

调用

alldays

函数

time=alldays

-alldays1990

i=time%5

1≤i≤3?

alldays

函数

调用

alldays

函数

i=alldays

l=i%7

调用

outputtoscr

een函数

i=alldays

l=i%7

outputtoscr

een函数

调用

alldays

函数

one=alldays1,

two=alldays2

one>two?

result=one-two-1 result=two-one-1

输出

打鱼

输出

晒网

输出result

date=(one-1)%7

输出“星期日”

date=0?

输出“星期

date”

调用festival函数

结束

调用alldays(int y,int m)

函数

四、全部源程序清单

#include

#include

#include

#include

int dayofyear[2]={365,366};

开始

days=1,

a=m,b=1

a>1?

调用dayofmonth

和leapyear函数

days=days+dayofmo

nth[leapyear(y)][a-2]

a=a+1

b

调用dayofyear

和leapyear函数

days=days+dayofyea

r[leapyear(b)]

返回days

结束

b=b+1

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) //判断是否是闰年

{

}

int alldays(int y,int m) //公元1月1号到某年某月的总天数

{

int a,b,days=1; //因为日历是日一二三四五六的顺序排的,所以要加1

if(year%4==0 && year%100!=0 || year%100==0 && year%400==0)

return 1; //闰年

else

return 0; //平年

避免第一天排在日的位置

for(a=m;a>1;a--)

days=days+dayofmonth[leapyear(y)][a-2]; //根据上个月的剩余天

数来确定下个月的起始位置,所以要减2

}

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;

for(b=1;b

days=days+dayofyear[leapyear(b)];

return days;

}

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"<<"****"<

****"<

cout<<"t"<<"日"<<"t"<<"一"<<"t"<<"二"<<"t"<<"三"<<"t"<<"四

"<<"t"<<"五"<<"t"<<"六"<

if(l==0)

{

}

else

{

for(j=0;j

cout<<"t";

for(k=1;k<=dayofmonth[leapyear(year)][month-1];k++)

{

}

cout<<"t"<

if((l+k)%7==0)

cout<

for(k=1;k<=dayofmonth[leapyear(year)][month-1];k++)

{

cout<<"t"<

}

}

}

if((l+k)%7==0)

cout<

cout<

void oneyear() //查询一年的日期

{

}

void onemonth() //查询一个月的日期

{

int i,l,year,month;

system("cls");

cout<<"请输入要查询的年月份:";

cin>>year>>month;

i=alldays(year,month);

int i,l,year,month;

system("cls");

cout<<"请输入要查询的年份:";

cin>>year;

for(month=1;month<13;month++)

{

}

getchar();

i=alldays(year,month);

l=i%7;

outputtoscreen(year,month,l);

}

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<

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<

"<

else

cout<

天"<

if(date==0)

cout<<"查询的日期具体是星期几: 星期日"<

}

else

cout<<"查询的日期具体是星期几: 星期"<

cout<<"查询的日期是否是公历节日: ";

if(festival(month1,day1)==1)

cout<<"是"<

else

cout<<"不是"<

getchar();

void fishornet()

{

int year,month,day,time,i;

system("cls");

cout<<"某人自1990年1月1日开始,三天打鱼两天晒网,"<

cout<<"如果你想知道某年某月某日是在打鱼还是晒网。

"<

cout<<"请输入要查询的具体年月日: ";

cin>>year>>month>>day;

time=(alldays(year,month)+day)-((alldays(1990,1)+1));

i=time%5;

if(i>=0 && i<=2)

cout<

日正在打鱼"<

else

cout<

日正在晒网"<

}

getchar();

int list()

{

int choice;

system("cls");

cout<<"应用功能:"<

cout<<"1: 输入一个年份,输出是在屏幕上显示该年的日历。

"<

cout<<"2: 输入年月,输出该月的日历。"<

cout<<"3: 输入年月日,输出距今天还有多少天,星期几,是否是公历节

日。"<

cout<<"4: 某人自1990年1月1日开始,三天打鱼两天晒网,输入一个

1990年以后的日期,输出他这一天是打鱼还是晒网。"<

cout<<"0: 退出";

cout<

项: ";

}

void choose()

{

int sign=0;

system("cls");

switch(list())

{

case 1:oneyear();

break;

cin>>choice;

return choice;

case 2:onemonth();

}

break;

case 3: howlong();

break;

case 4:fishornet();

break;

exit(0); case 0:

}

void main()

{

int i;

cout<

cout<<"t"<<"t"<<"t"<<"t"<<"********************"<

cout<<"t"<<"t"<<"t"<<"t"<<"欢迎使用万年历查询器

"<

cout<<"t"<<"t"<<"t"<<"t"<<"********************"<

cout<<"t"<<"t"<<"t"<<"t"<<" "<<"请按回车键继续"<

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页

八、致谢

衷心感谢刘焕波同学对我的帮助。

课程设计成绩评定表

对课程设计工作过

程的简短介绍和自

我评价

学生签名:

2012年 月 日

(以下由评定小组教师填写)

质量评价指标(在相应栏目打√)

评 价 质 量

评 价 项 目

优秀

工作量和态度

实验、计算可靠性

文字和图表质量

总体评价

良好

中等

及格

不及格

评定成绩(百分制)

评定小组成员签名

2012年 月 日

制定人:王钲旋,单缅 审定人: 陈守孔


本文标签: 输出 输入 函数