程序设计实训专题讲座Word格式文档下载.docx

上传人:b****1 文档编号:3684549 上传时间:2023-05-02 格式:DOCX 页数:9 大小:24.67KB
下载 相关 举报
程序设计实训专题讲座Word格式文档下载.docx_第1页
第1页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第2页
第2页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第3页
第3页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第4页
第4页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第5页
第5页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第6页
第6页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第7页
第7页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第8页
第8页 / 共9页
程序设计实训专题讲座Word格式文档下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

程序设计实训专题讲座Word格式文档下载.docx

《程序设计实训专题讲座Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《程序设计实训专题讲座Word格式文档下载.docx(9页珍藏版)》请在冰点文库上搜索。

程序设计实训专题讲座Word格式文档下载.docx

a)程序设计的基本方法b)程序代码的规范(最佳实践法)c)工程方法论d)项目实践2、训练辅导(2周,20学时)(8月24号~下学期开学现场辅导:

以2个自然班为教学班,每天2课时现场辅导,每教学班一名教师配一名助教。

3、测试(1周,4学时)学生从3类(见训练内容)题中,各选择一道,提前写好设计训练报告,现场编写(断网、断U盘)程序,独立完成,根据完成情况予以评分。

五、考核方式与评分办法通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。

成绩分优、良、中、及格和不及格五等。

考核标准包括:

1.程序设计的正确性,程序结构是否合理、编程风格(50%)。

2.学生的工作态度、动手能力、创新精神及出勤率(30%)。

3.总结报告(20%)。

六、程序设计报告的封面程序设计基础课程实训题目:

院系:

专业班级:

姓名:

学号:

指导老师:

七、训练报告的格式一、目的和要求二、设计内容三、运行环境四、设计步骤五、流程图六、源代码七、运行结果八、总结部分训练题目算法分析八、

1、日历问题问题描述在我们现在使用的日历中,闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。

例如:

1700,1800,1900和2100不是闰年,而1600,2000和2400是闰年。

给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。

输入数据输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。

输入最后一行是−1,不必处理。

可以假设结果的年份不会超过9999。

输出要求对每个测试样例,输出一行,该行包含对应的日期和星期几。

格式为“YYYY-MM-DDDayOfWeek”,其中“DayOfWeek”必须是下面中的一个:

"

Sunday"

"

Monday"

Tuesday"

Wednesday"

Thursday"

Friday"

and"

Saturday“。

(1)确定某年的第一天是星期几?

intday(intyear)//求某年的第一天是星期几{longa,b;

if(year<

=2000){a=2000-year;

b=6-(a+a/4-a/100+a/400)%7;

returnb;

}else{a=year-2000;

b=(a+1+(a-1)/4-(a-1)/100+(a-1)/400)%7+6;

returnb%7;

}}

(2)求出2000年1月1日是星期几Y=day(2000)(3)求从2000年1月1日开始逝去的天数days除以7的余数Z=days%7(4)求days是星期几x=(y+z)%7(5)利用字符数组输出下标x所对应的星期英文名(6)求days的年月日Year=2000month=1day=1利用循环while(days){days--;

day++„}如果day达到某月的最后一天,day=1,month++如果month=12,day=31,则year++,month=1,day=1但要考虑闰年问题生理周期2、问题描述人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。

每一个周期中有一天是高峰。

在高峰这天,人会在相应的方面表现出色。

例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。

因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。

对于每个人,我们想知道何时三个高峰落在同一天。

对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。

你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。

给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。

输入数据输入四个整数:

p,e,i和d。

p,e,i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。

d是给定的时间,可能小于p,e,或i。

所有给定时间是非负的并且小于365,所求的时间小于等于21252。

输出要求从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

解题思路:

假设从当年的第一天开始数,第x天三个高峰值同时出现,符合要求的x必须在[d+1,21252]之间,并且同时满足三个条件

(1)(x-p)%23==0

(2)(x-e)%28==0(3)(x-i)%33==0于是可以用三种方法解决问题。

方法一slzq.c:

(1)设置数组m表示三个周期的长度intm[3]={23,28,33}

(2)设置数组a表示体力、情感和智力高峰出现的时间从键盘输入a

(3)计算出三者高峰同时出现的时间ans=0;

for(j=0;

j<

3;

j++){intt=M/m[j];

ext_gcd(t,m[j]);

ans=(ans+t*x*a[j])%M;

}其中:

M=m[0]*m[1]*m[2]t=M/m[i],i=0,1,2x由下面函数求出(4)设置全局变量x,yintx,y;

voidext_gcd(inta,intb){intt;

if(b==0){x=1;

y=0;

}else{ext_gcd(b,a%b);

t=x;

x=y;

y=t-a/b*y;

}}(5)调用ext_gcd(t,m[i]),求出x(6)ans<

d执行下面循环while(ans<

=d){ans+=M;

}(7)ans-d为所求的结果(d为给定的时间,从键盘输入)

方法二slzq1.c:

a[0],a[1],a[2]分别代表p,e,i,表示体力、情感、智力出现最大值的时间m[0],m[1],m[2]分别表示三个的周长M=1;

j++)M*=m[j];

for(j=d+1;

=M;

j++)if((j-a[0])%m[0]==0)break;

for(;

j=j+m[0])if((j-a[1])%m[1]==0)break;

j=j+m[0]*m[1])if((j-a[2])%m[2]==0)方法三slzq2.cM=m[0]*m[1]*m[2];

j++){x=(j-a[0])%m[0]==0;

y=(j-a[1])%m[1]==0;

z=(j-a[2])%m[2]==0;

if(x&

&

y&

z)printf(“%d\n”,j-d);

3、约瑟夫问题问题描述

约瑟夫问题:

有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再从出圈的下一个开始报数。

就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入数据每行是用空格分开的两个整数,第一个是n,第二个是m(0<

m,n<

300)。

最后一行是:

00输出要求对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号

(1)选用所用的解决问题的方法可以使用数组、循环链表、结构数组

(2)用数组解决问题建立一个一维数组a,a[1]~a[n]存放n个人的编号,对n个人按1,2,„,m的顺序报数,报数为m的人保存到a[0]中,后面的人往前移动一个位置,报数的人数减1,再重复下去,最后a[1]中的值就是所求的值。

s1=1;

for(i=n;

i>

=2;

i--){s1=(s1+m-1)%i;

if(s1==0)s1=i;

w=a[s1];

for(j=s1;

i;

j++)

a[j]=a[j+1];

a[i]=w;

(3)用循环链表解决问题将n个人的编号建立一个循环链表,通过报数,删除要离开的结点,当链表中剩下一个结点时,即为所求的值。

(4)用结构数组解决问题structmonkey{intno;

//猴子编号intnext;

//下一个猴子编号};

structmonkeylink[N];

//n个猴子信息count=0;

//出圈人数h=n;

while(count<

n-1){i=0;

while(i!

=m){h=link[h].next;

if(link[h].no)i++;

}link[h].no=0;

count++;

//离开的猴子值为0,数目加1}最后结构中值不为0的即为所求的值。

4、恺撒Caesar密码题目描述JuliusCaesar生活在充满危险和阴谋的年代。

为了生存,他首次发明了密码,用于军队的消息传递。

假设你是Caesar军团中的一名军官,需要把Caesar发送的消息破译出来、并提供给你的将军。

消息加密的办法是:

对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:

消息原文中的每个字母A都分别替换成字母F),其他字符不变,并且消息原文的所有字母都是大写的。

密码字母:

ABCDEFGHIJKLMNOPQRSTUVWXYZ原文字母:

VWXYZABCDEFGHIJKLMNOPQRSTU输入数据最多不超过100个数据集组成。

每个数据集由3部分组成:

起始行:

START密码消息:

由1到200个字符组成一行,表示Caesar发出的一条消息结束行:

END在最后一个数据集之后,是另一行:

ENDOFINPUT输出要求每个数据集对应一行,是Caesar的原始消息。

(1)输入字符串密码

(2)解密是字母,则key值减5,减5后若不是字母,加26#defineisletter(c)(((c)>

='

a'

(c)<

z'

)||((c)>

A'

Z'

))

voidDenc(constchar*str,char*out,intkey){inti=0;

while(str[i]){if(isletter(str[i])){out[i]=str[i]-key;

if(!

isletter(out[i]))out[i]+=26;

}elseout[i]=str[i];

i++;

}out[i]=0;

}5、身份证校验题目描述我国国标〖GB11643-1999〗中规定:

公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。

排列顺序从左至右依次为:

六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

其校验码(最后一位)计算方法和步骤为:

(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和其中Ai:

表示第i位置上的身份证号码数字值Wi:

表示第i位置上的加权因子,前17位加权因子从左到右分别为

Wi:

7910584216379105842

(2)计算模Y=mod(S,11)(3)通过模Y查下表得到对应的校验码Y01234567891010X98765432校验码例如:

某身份证前17位为11010519491231002i123456789101112131415161784216379105842wi79105051949123100211010049057020292427718305积得到和为:

167;

则模为y=167%11=2查(3)得校验码为x请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。

(1)将输入的十八位身份证保存到一个一维数组b中

(2)设定十七位权值保存到数组d中(题目中给定)(3)利用s=b[1]*d[1]+b[2]*d[2]+„+b[17]*d[17]求权值和但注意字符b要转换成整型(4)n=s%11求出数组y的下标(5)利用数组y保存校验码(6)Y[n]=b[18]身份证正确,否则身份证不正确6、学生成绩管理学生信息包括:

学号、姓名、年龄、性别、出生年月。

主要功能:

(1)能按学期、按班级完成对学生成绩的录入、修改。

(2能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序。

(3)能查询学生成绩。

(4)能按班级输出学生的成绩单。

用键盘菜单程序的实现

(1)将各功能写成菜单形式printf("

\n欢迎使用学生成绩管理系统系统\n"

);

1.printf("

1.录入\n"

2.printf("

2.修改\n"

3.printf("

3.统计\n"

4.printf("

4.查询\n"

5.printf("

5.打印\n"

6.printf("

6.退出\n"

(2)利用switch执行相应的自定义函数scanf("

%d"

&

op);

switch(op){case1:

a1();

ch='

Y'

;

break;

//录入case2:

a2();

//修改

case3:

a3();

//统计case4:

a4();

//查询case5:

a5();

//打印成绩单default:

N'

}利用循环重复1、2、两步(3)main(){intop;

charch;

do{system("

cls"

printf("

scanf("

case2:

case3:

case4:

case5:

default:

}}while(ch=='

(4)各自定义函数单独完成//录入学生成绩voida1(){system("

录入学生成绩\n"

„„getch();

}//修改学生成绩voida2(){system("

修改学生成绩\n"

}//统计学生成绩voida3(){system("

统计学生成绩\n"

}//查询学生成绩

voida4(){system("

查询学生成绩\n"

}//打印成绩单voida5(){system("

打印成绩单\n"

}(5)确定所使用的存储结构可以使用数组,也可以使用链表(6)假设采用数组作存储结构#defineN100//一个班的人数structstudent{longxq;

//学期charbj[20];

//班级charxh[20];

//学号charxm[20];

//姓名charxb[8];

//性别longcsny;

//出生年月floatcj[6];

//6门成绩floattotal;

//总分floataver;

//平均分

};

structstudentx[N];

//N个学生longxueqi;

//学期charbanji[20];

//班级intn;

//一个班的实际人数7、学生成绩管理文件结构

(1)先用记事本编辑文件stu1.dat存储一个班学习成绩。

然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。

(2)利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。

接着用冒泡法利用平均分的高低排出名次。

最后用fprintf将每个学生的信息写入到stu2.dat文件。

(1)定义结构表示学生信息structstudent{longxq;

//出生年月floatcj[3];

//3门成绩floattotal;

//平均分};

(2)用记事本建立文件stu1.dat包含一个班学生成绩(3)打开文件并读出数据,计算总分和平均分fp=fopen("

f:

\\stu1.dat"

"

r"

while

(1){fscanf(fp,"

%ld%s%s%s%s%ld"

x[n].xq,x[n].bj,x[n].xh,x[n].xm,x[n].xb,&

x[n].csny);

s=0;

j++){fscanf(fp,"

%f"

x[n].cj[j]);

s=s+x[n].cj[j];

}x[n].total=s;

x[n].aver=s/3.0;

if(feof(fp))break;

n++;

}fclose(fp);

(4)用冒泡法按平均分从高到低排序for(i=0;

i<

n-1;

i++)//排序for(j=n-1;

j>

=i+1;

j--)if(x[j].aver>

x[j-1].aver){t=x[j];

x[j]=x[j-1];

x[j-1]=t;

}(5)输出成绩等信息printf("

学期班级学号姓名性别出生年月三门成绩总成绩平均分\n"

for(i=0;

n;

i++){printf("

%6ld%8s%12s%8s%s%8ld"

x[i].xq,x[i].bj,x[i].xh,x[i].xm,x[i].xb,x[i].csny);

j++)printf("

%3.0f"

x[i].cj[j]);

%6.1f%6.1f\n\n"

x[i].total,x[i].aver);

}(6)将成绩等信息写入文件stu2.dat中fq=fopen("

\\stu2.dat"

w"

i++){fprintf(fq,"

%ld%s%s%s%s%ld"

j++)fprintf(fq,"

%f"

fprintf(fq,"

%f%f\n"

}fclose(fq);

}8、校园卡消费记录学生信息包括:

学号或工号、学院、姓名、消费地点、日期、时间、金额。

(1)能按消费地点完成对消费的录入、修改。

(2能按学号或工号统计消费,求消费者的本月的总消费及日均消费余额,并能根据学生的月消费进行排序。

(3)能查询消费记录清单。

(4)能按工号或学号排序以后输出消费清单。

(1)确定所需的结构类型structstudent{charno[20];

//学号或工号charxy[30];

//学院charxm[20];

//姓名chardd[30];

//消费地点charrq[15];

//日期charsj[12];

//时间floatje;

//金额};

(2)建立菜单结构(类似学生成绩管理)main(){intop;

\n欢迎使用校园卡消费管理系统系统\n"

1.消费录入\n"

2.消费修改\n"

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2