c语言任务书.docx
- 文档编号:28107725
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:14
- 大小:142.29KB
c语言任务书.docx
《c语言任务书.docx》由会员分享,可在线阅读,更多相关《c语言任务书.docx(14页珍藏版)》请在冰豆网上搜索。
c语言任务书
1)
C程序训练报告
题目:
C语言程序设计综合训练
院系:
计算机学院
专业班级:
信息安全10-2班
学号:
2010303231
学生姓名:
李时珍
指导教师:
管建军
2010年11月11日
安徽理工大学程序训练任务书
计算机学院院系信息安全教研室
学号
2010303231
学生姓名
李时珍
专业(班级)
信息安全
设计题目
(1)鸡兔同笼;
(2)日历问题;(3)完美立方;
(4)约瑟夫问题;(5)恺撒Caesar密码
设
计
技
术
参
数
(1)用C语言实现设计任务;
(2)所设计的程序可读性好,执行效率高;
(3)有良好的操作界面;
(4)设计说明书能很好地反映设计内容
设
计
要
求
(1)问题分析及解决方案框架确定
(2)详细设计和编码
(3)上机前编写程序与检查
(4)上机调试程序
(5)完成课程设计报告
工
作
量
要求设计说明书的字数在3000字以上。
工
作
计
划
2010.11.10-11.20根据课程设计大纲的要求,查找相关资料,完成需求分析;
2010.11.21-12.30进行系统的概要设计;
2010.12.01-12.10进行系统的详细设计和源代码的书写;
2010.12.11-12.25对系统进行调试分析,写出程序训练报告。
参
考
资
料
[1]何钦铭.C语言程序设计.北京:
高等教育出版社,2008
[2]颜晖.C语言程序设计实验指导.北京:
高等教育出版社,2008
[3]谭浩强编著.C程序设计(第二版).北京:
清华大学出版社,1999
指导教师签字
教研室主任签字
2010年11月10日
1.1鸡兔同笼-1-
1.1设计内容-1-
1.2解题思路-1-
1.3调试过程-1-
1.4程序清单-2-
1.5测试数据-2-
1.6小结-2-
2.2日历问题-3-
2.1设计内容-3-
2.2调试过程-3-
2.3程序清单-4-
2.4测试数据-5-
2.5小结-5-
3.4约瑟夫问题-5-
4.1设计内容-5-
4.2调试过程-6-
4.3程序清单-6-
4.4测试数据-7-
4.5小结-7-
4.5恺撒Caesar密码-8-
5.6身份证问题-8-
6.1设计内容-8-
6.2解题思路-8-
6.3调试过程-9-
6.4程序清单-9-
6.5测试数据-9-
6.6小结-9-
1鸡兔同笼
1.1设计内容
●问题描述
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。
已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
●输入数据
第1行是测试数据的组数n,后面跟着n行输入。
每组测试数据占1行,包括一个正整数a(a<32768)。
●输出要求
n行,每行输出对应一个输入。
输出是两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用空格分开。
如果没有满足要求的情况出现,则输出2个0。
●输入样例
2
3
20
●输出样例
00
510
1.2解题思路
这个问题可以描述成任给一个整数N,如果N是奇数,输出00,否则如果N是4的倍数,输出N/4N/2,如果N不是4的倍数,输出N/4+1N/2。
这是一个一般的计算题,只要实现相应的判断和输出代码就可以了。
题目中说明了输入整数在一个比较小的范围内,所以只需要考虑整数运算就可以了。
1.3调试过程
(1)因对问题分析不清楚,给出了错误的计算公式;
(2)用枚举方法求解该问题,造成超时;
(3)在每行末尾缺少分号;
(4)对输入输出语法不熟悉导致死循环。
1.4程序清单
#include
voidmain()
{
intnCases,i,nFeet;//nCases表示输入测试数据的组数,nFeet表示输入的脚数。
scanf("%d",&nCases);
for(i=0;i scanf("%d",&nFeet); if(nFeet%2! =0)//如果有奇数只脚,则输入不正确, //因为不论2只还是4只,都是偶数 printf("00\n"); elseif(nFeet%4! =0)//若要动物数目最少,使动物尽量有4只脚 //若要动物数目最多,使动物尽量有2只脚 printf("%d%d\n",nFeet/4+1,nFeet/2); elseprintf("%d%d\n",nFeet/4,nFeet/2); } } 1.5测试数据 1.6小结 通过该计算类的程序设计,使我掌握了C语言的基本语法,能从自然语言描述中抽象出一个计算问题,继而能通过程序实现,并将计算结果还原成对原问题的解答。 2日历问题 2.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“。 输入样例 1730 1740 1750 1751 -1 输出样例 2004-09-26Sunday 2004-10-06Wednesday 2004-10-16Saturday 2004-10-17Sunday 2.2调试过程 1)对输入输出语法不熟悉导致死循环。 2.3程序清单 #include intday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; charweek[7][12]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; intmain() { inty,m,d,t,w; while(scanf("%d",&t),t! =-1) { y=2000; m=1; d=1; w=5; while(t--) { d++; w++; if(w==7) w=0; if(d>day[m]+(m==2&&(y%4==0&&(y%100)||y%400==0))) //(m==2&&(y%4==0&&(y%100)||y%400==0) { m++; d=1; } if(m>12) { m=1; y++; } } printf("%d-%2.2d-%2.2d%s\n",y,m,d,week[w]); } } 2.4测试数据 2.5小结 通过该计算类的程序设计,使我掌握了C语言的基本语法,能从自然语言描述中抽象出一个计算问题,继而能通过程序实现,并将计算结果还原成对原问题的解答。 学会循环语句的嵌套。 4约瑟夫问题 4.1设计内容 约瑟夫问题: 有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号 开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。 就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。 4.2调试过程 4.3程序清单 #include #include typedefstructnode { intdata; structnode*next; }linklist; intmain() { inti,n,k,m,total; linklist*head,*p,*s,*q; printf("请输入猴子的个数: "); scanf("%d",&n); k=1; printf("请输入淘汰数字: "); scanf("%d",&m); head=(linklist*)malloc(sizeof(linklist)); p=head; p->data=1; p->next=p; for(i=2;i<=n;i++) { s=(linklist*)malloc(sizeof(linklist)); s->data=i; s->next=p->next; p->next=s; p=p->next; } p=head; for(i=1;i { p=p->next; } total=n; printf("\n淘汰标号: "); q=head; while(total! =1) { for(i=1;i { p=p->next; } printf("[%d]",p->data); while(q->next! =p) { q=q->next; } q->next=p->next; s=p; p=p->next; free(s); total--; } printf("\n\n猴子大王为第[%d]号\n\n",p->data); free(p); //system("pause"); return0; } 4.4测试数据 4.5小结 学会用链表编程了,只是期间错了很多,链表比数组好用。 5恺撒Caesar密码 6身份证问题 6.1设计内容 我国国标〖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查下表得到对应的校验码 Y 0 1 2 3 4 5 6 7 8 9 10 校验码 1 0 X 9 8 7 6 5 4 3 2 例如: 某身份证前17位为11010519491231002 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 1 0 1 0 5 1 9 4 9 1 2 3 1 0 0 2 积 7 9 0 5 0 20 2 9 24 27 7 18 30 5 0 0 4 得到和为: 167;则模为y=167%11=2 查(3)得校验码为x 请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。 6.2解题思路 先求出合积,再用判断语句来判断第十八位的字符是否相符,就可判断身份证号的真假了 6.3调试过程 先使用第十八位时定意成了整形数据,不是在字符 6.4程序清单 #include intmain() { inti,sum=0,a[17]; intw[17]={ 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; chars[18],b[11]={'1','0','X','9','8','7','6','5','4','3','2'}; printf("输入一个二代身份证号码: "); for(i=0;i<18;i++) s[i]=getchar(); for(i=0;i<17;i++) sum=sum+(s[i]-'0')*w[i]; if(b[sum%11]==s[17])printf("此身份证号码为真\n"); elseprintf("此身份证号码不存在\n"); return0; } 6.5测试数据 6.6小结 数组用起来很方便,要注意审题的仔细 不要将字符漏掉,要注意字符与数据的关系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 任务书