




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE2-《C语言程序设计》课程设计报告(2011—2012学年第1学期)专业:计算机科学与技术班级:姓名学号:指导教师:成绩:计算机科学与技术系2011年12月31日
目录一、课程设计的目的与要求………………3二、方案实现与调试……………………32.1掷骰子游戏…………32.2汽车加油……………62.3大优惠………………82.4金币…………………92.5小型通讯录设计…………………12三、课程设计分析与总结…………………14附录程序清单…………14-PAGE10-一、课程设计的目的与要求(含设计指标)(1)实验目的C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的:在课程结束之前,让学生进一步了解C程序设计语言的编程功能;让学生扎实掌握C程序设计语言的相关知识;通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。(2)设计要求根据实验内容的要求自由选定题目。编写程序要求遵循如下基本要求:模块化程序设计锯齿型书写格式必须上机调试通过二、方案实现与调试2.1掷骰子游戏•2.1.1题目内容的描述两人玩骰子,游戏规则如下:1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。2) 将每人每次的分值累加计分3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。最后显示双方分数并判定优胜者。•2.1.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:srand(time(0));输入数=rand()%6+1;内容限制:产生最多十次随机数输出数据说明:掷骰子的获胜者•2.1.3主要模块的算法描述2.1.4调试过程及实验结果出现的问题:每次循环产生的随机数相同。解决方法:把随机函数移到for循环前。执行结果截图:2.2汽车加油•2.2.1题目内容的描述一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。输入:第一行有2个正整数N和K(1<=N<=100,1<=K<=100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。接下来的1行中,有K+1个整数,表示第K个加油站与第K-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第K+1个整数表示第K个加油站与目的地的距离。输出:将编程计算出的最少加油次数输出。如果无法到达目的地,则输出NoSolution。(注意:No和Solution之间有一个空格)。例如:输入:88323654272输出:5•2.2.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:sacnf(“格式控制字符串”,地址列表);内容限制:1<=N<=100,1<=K<=100输出数据说明:最少加油次数•2.2.3主要模块的算法描述•2.2.4调试过程及实验结果出现的问题:会重复出现NoSolution.解决方法:添加break语句。执行结果截图:2.3大优惠•2.3.1题目内容的描述中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?输入的测试数据为一行,实例包括2个整数M,K(2<=K<=M<=1000)。输出一个整数,表示M元可以用的天数。•2.3.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:sacnf(“格式控制字符串”,地址列表);内容限制:2<=K<=M<=1000输出数据说明:M元可以用的天数•2.3.3主要模块的算法描述•2.3.4调试过程及实验结果出现的问题:当输入不符合条件的数时会停止程序无法再次输入。解决方法:在输入时添加do-while循环。执行结果截图:2.4金币•2.4.1题目内容的描述国王用金币奖励他忠诚的侍从。第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。•2.4.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:sacnf(“格式控制字符串”,地址列表);输出数据说明:共奖励了侍从多少金币数•2.4.3主要模块的算法描述•2.4.4调试过程及实验结果出现的问题:天数不刚好,金币数变多结果出错。解决方法:在程序末尾加个减去多算金币的算法。执行结果截图:2.5小型通讯录设计•2.5.1题目内容的描述功能:实现简单的通讯录信息管理,基本信息包括编号、姓名、电话、手机、邮编、地址和关系(如朋友、亲友、同事、同学等)基本要求:1设计简单的菜单,能够进行系统功能选择。2实现信息的录入功能。3在已有信息的基础上添加新的记录。4删除指定编号的记录。5修改指定编号的记录6实现信息的浏览功能7按编号查询功能8按手机号排序功能•2.5.2系统功能说明此程序有输入、显示、查找、删除、修改、按序号排序的功能。•2.5.3输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:sacnf(“格式控制字符串”,地址列表);•2.5.4系统主要模块的算法描述•2.5.5调试过程及实验结果出现的问题:执行程序时运行速度过快。解决方法:在每个函数末尾加getchaar();执行结果截图:三、课程设计分析与总结附录:源程序清单掷骰子游戏.c#include<stdio.h>#include<stdlib.h>#include<time.h>voidmain(){ inta,e=0,f=0,g,h,l,m; intpoint1(intx,inty); intpoint2(inti,intj); srand(time(0)); for(a=0;a<10;a++) { if(a==5) { if(e==f*2||f==e*2)break; } g=rand()%6+1;/*产生1~6的随机数*/ h=rand()%6+1; l=rand()%6+1; m=rand()%6+1; e=e+point1(g,h);/*计算总分数*/ f=f+point2(l,m); } printf("甲的总分:%d\n乙的总分:%d\n",e,f); if(e>f)printf("甲获胜\n"); elseif(e==f)printf("甲乙平手\n"); elseprintf("乙获胜\n");}intpoint1(intx,inty){ intn=0; printf("甲:%d%d\n",x,y); /*判断每次得分*/if(x==y) { if(x==6)n=8; elsen=7; } elseif(x>y)n=y; elsen=x; returnn;}intpoint2(inti,intj){ intz=0; printf("乙:%d%d\n",i,j); if(i==j) { if(i==6)z=8; elsez=7; } elseif(i>j)z=j; elsez=i; returnz;}汽车加油.c#include<stdio.h>#include<math.h>#defineM1000voidmain(){ intN,K,a[M],i,e; inttimes(intb,intc,intd[M]); do{ printf("请输入加满油后可行驶公里数和加油站数:"); scanf("%d%d",&N,&K); if(K>100||K<1||N>100||N<1) printf("输入有误请重新输入\n"); }while(K>100||K<1||N>100||N<1); { printf("请输入各加油站间的距离:"); for(i=0;i<=K;i++) scanf("%d",&a[i]); e=times(N,K,a); if(e!=0) printf("最少加油次数为:%d\n",e); } }inttimes(intb,intc,intd[M]){ inti,s=0,j=0; for(i=0;i<=c;i++) { if(d[i]>b) { printf("NoSolution\n");break; } else { for(i=0;i<=c;i++) { s=s+d[i]; if(s>b) { j++;/*计算加油次数*/ s=d[i]; } } } } returnj; }大优惠.c#include<stdio.h>voidmain(){ intday(inta,intb); intK,M,D; do{ printf("请输入K和M:"); scanf("%d%d",&K,&M); if(K>M||K>1000||K<2||M>1000||M<2) printf("输入有误,请重新输入\n"); }while(K>M||K>1000||K<2||M>1000||M<2); { D=day(K,M); printf("可用天数:%d\n",D); }}intday(inta,intb){ inti=0; for(;b>0;b--) { i=i+1; if(i%a==0)b++; } returni;}金币.c#include<stdio.h>voidmain(){ inta,b; intsum(intd); printf("请输入工作天数:"); scanf("%d",&a); b=sum(a); printf("共奖励金币:%d\n",b);}intsum(intd){ ints=0,t; for(t=1;d>=0;t++) { s=s+t*t; d=d-t; } s=s+d*(t-1); returns;}小型通讯录.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#defineM50typedefstruct{ charnum[7];/*序号*/ charname[10];/*姓名*/ chartele[10];/*电话*/ charmobile[10];/*手机号*/ charpost[10];/*邮编*/ charaddress[15];/*地址*/ charrelation[15];/*关系*/}ADD;intenter(ADDt[]);/*输入记录*/voidlist(ADDt[],intn);/*显示记录*/voidsearch(ADDt[],intn);/*查找记录*/intdelete(ADDt[],intn);/*删除记录*/intadd(ADDt[],intn);/*添加记录*/voidmodify(ADDt[],intn);/*修改记录*/voidsort(ADDt[],intn);/*按手机号排序*/voidprint(ADDtemp);/*显示单条记录*/intfind(ADDt[],intn,char*s);/*查找函数*/intmenu_select();/*主菜单函数*/main(){ ADDadr[M];/*定义结构体数组*/ intlength;/*保存记录长度*/ system("cls");/*清屏*/for(;;)/*无限循环*/{ switch(menu_select()) { case0:length=enter(adr);break;/*输入记录*/ case1:list(adr,length);break;/*显示全部记录*/ case2:search(adr,length);break;/*查找记录*/ case3:length=delete(adr,length);break;/*删除记录*/ case4:length=add(adr,length);break;/*添加记录*/ case5:modify(adr,length);break;/*修改记录*/ case6:sort(adr,length);break;/*按手机号排序*/ case7:exit(0);/*如返回值为7则程序结束*/ } }}menu_select(){ chars[80]; intc; printf("按任意键进入菜单\n"); getchar(); system("cls"); printf("********************菜单*********************\n"); printf("0.输入记录\n"); printf("1.显示全部记录\n"); printf("2.查找记录\n"); printf("3.删除记录\n"); printf("4.插入记录\n"); printf("5.修改记录\n"); printf("6.按手机号排序\n"); printf("7.退出\n"); printf("**********************************************\n"); do { printf("\n输入你的选择(0~7):"); scanf("%s",s); c=atoi(s); }while(c<0||c>7); returnc;}intenter(ADDt[]){ inti,n; system("cls");printf("\n请输入序号\n"); scanf("%d",&n); printf("请输入记录\n"); printf("序号姓名电话手机号邮编地址关系\n"); printf("\n"); for(i=0;i<n;i++) { scanf("%s%s%s%s%s%s%s",t[i].num,t[i].name,t[i].tele,t[i].mobile,t[i].post,t[i].address,t[i].relation); printf("\n"); } getchar(); returnn;}voidlist(ADDt[],intn){ inti; system("cls");printf("\n\n************************************插入**********************************\n"); printf("序号姓名电话手机号邮编地址关系\n"); printf("\n"); for(i=0;i<n;i++) printf("%-7s%-10s%-10s%-10s%-10s%-15s%-15s\n",t[i].num,t[i].name,t[i].tele,t[i].mobile,t[i].post,t[i].address,t[i].relation); if((i+1)%10==0) { printf("按任意键继续...\n"); getchar(); } printf("***********************************结束***********************************\n"); getchar();}voidsearch(ADDt[],intn){ chars[20]; inti; system("cls");printf("请输入查找序号\n"); scanf("%s",s); i=find(t,n,s); if(i>n-1) { getchar(); printf("没找到\n"); } else { getchar(); print(t[i]); }}voidprint(ADDtemp){ system("cls");printf("\n\n**********************************************************************\n"); printf("序号姓名电话手机号邮编地址关系\n"); printf("\n"); printf("%-7s%-10s%-10s%-10s%-10s%-15s%-15s\n",temp.num,,temp.tele,temp.mobile,temp.post,temp.address,temp.relation); printf("***********************************结束********************************\n");}intfind(ADDt[],intn,char*s){ inti; for(i=0;i<n;i++) { if(strcmp(s,t[i].num)==0) returni; } getchar(); returni;}intdelete(ADDt[],intn){ chars[20]; intch=0; inti,j; printf("请输入删除序号\n"); scanf("%s",s); i=find(t,n,s); if(i>n-1) printf("没找到无法删除\n"); else { print(t[i]); printf("你确定要删除这个记录吗(1/0)\n"); scanf("%d",&ch); if(ch==1) { for(j=i+1;j<n;j++) { strcpy(t[j-1].num,t[j].num); strcpy(t[j-1].name,t[j].name); strcpy(t[j-1].tele,t[j].tele); strcpy(t[j-1].mobile,t[j].mobile); strcpy(t[j-1].post,t[j].post); strcpy(t[j-1].address,t[j].address); strcpy(t[j-1].relation,t[j].relation); } n--; } } getchar(); returnn;}intadd(ADDt[],intn){ ADDtemp; inti,j; chars[20]; printf("请输入记录\n"); printf("**********************************************************************\n"); printf("序号姓名电话手机号邮编地址关系\n"); printf("\n"); scanf("%s%s%s%s%s%s%s",temp.num,,temp.tele,temp.mobile,temp.post,temp.address,temp.relation); printf("\n"); printf("请输入插入位置的序号\n"); scanf("%s",s); i=find(t,n,s); for(j=n-1;j>=i;j--) { strcpy(t[j+1].num,t[j].num); strcpy(t[j+1].name,t[j].name); strcpy(t[j+1].tele,t[j].tele); strcpy(t[j+1].mobile,t[j].mobile); strcpy(t[j+1].post,t[j].post); strcpy(t[j+1].address,t[j].address); strcpy(t[j+1].relation,t[j].relation); } strcpy(t[i].num,temp.num); strcpy(t[i].name,); strcpy(t[i].tele,temp.tele); strcpy(t[i].mobile,temp.mobile); strcpy(t[i].post,temp.post); strcpy(t[i].address,temp.address); strcpy(t[i].relation,temp.relation); n++; getchar(); returnn;}voidmodify(ADDt[],intn){ chars[20]; inti; printf("请输入想要修改的序号:"); scanf("%s",s); i=find(t,n,s); if(i>n-1) printf("没找到"); else { printf("请输入新的资料\n"); printf("numnametel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学办公室装修协议书
- 租用办学协议书
- 职工劳动协议书
- 负债归属协议书
- 手机店入股合同协议书
- 自考保过协议书
- 夫妻按揭房约定协议书
- 股票账户协议书
- 签订工资协议书
- 赔偿修车协议书
- 2025届福建省漳州市高三第三次教学质量检测生物试卷(解析版)
- 2025年茶叶加工工职业技能竞赛参考试题库500题(含答案)
- 2025甘肃陕煤集团韩城煤矿招聘250人笔试参考题库附带答案详解
- 2025年社区工作的理论与实务考试题及答案
- 《设计课件:构建高效数据集教程》
- 2025江苏中考:历史高频考点
- 普通测量学试题及答案
- 国家开放大学2025年《创业基础》形考任务3答案
- 医疗器械网络销售质量管理规范宣贯培训课件2025年
- 语文课程资源的开发与利用
- 2024年09月四川天府新区人民医院招聘6人笔试历年专业考点(难、易错点)附带答案详解
评论
0/150
提交评论