《C语言程序设计》
课程设计报告
(2011— 2012学年 第 1 学期)
专 业: 计算机科学与技术
班 级:
姓名学号:
指导教师:
成 绩:
计算机科学与技术系
2011 年12月31日
一、课程设计的目的与要求………………………………………………3
二、方案实现与调试 ……………………………………………………3
2.1 掷骰子游戏…………………………………………………………3
2.2 汽车加油……………………………………………………………6
2.3 大优惠………………………………………………………………8
2.4 金币…………………………………………………………………9
2.5小型通讯录设计…………………………………………………12
三、课程设计分析与总结…………………………………………………14
附录 程序清单…………………………………………………………14
一、课程设计的目的与要求(含设计指标)
(1)实验目的
C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的:
1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;
2.让学生扎实掌握C程序设计语言的相关知识;
3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知
识有效地结合,更全面系统地了解行业知识。
(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个加油站与目的地的距离。输出:将编程计算出的最少加油次数输出。如果无法到达目的地,则输出 No Solution。(注意:No和Solution之间有一个空格)。
例如:输入:8 8
3 2 3 6 5 4 2 7 2
输出:5
•2.2.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型:整型数
格式:sacnf(“格式控制字符串”,地址列表);
内容限制:1 <= N <= 100,1 <= K< = 100
输出数据说明:最少加油次数
•2.2.3主要模块的算法描述
•2.2.4调试过程及实验结果
出现的问题:会重复出现No Solution.解决方法:添加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();
执行结果截图:
三、课程设计分析与总结
附录:源程序清单
1.掷骰子游戏.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a,e=0,f=0,g,h,l,m;
int point1(int x,int y);
int point2(int i, int j);
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");
else if(e==f)printf("甲乙平手\n");
else printf("乙获胜\n");
}
int point1(int x,int y)
{
int n=0;
printf("甲:%d %d\n",x,y);
/*判断每次得分*/
if(x==y)
{
if(x==6) n=8;
else n=7;
}
else if(x>y) n=y;
else n=x;
return n;
}
int point2(int i, int j)
{
int z=0;
printf("乙:%d %d\n",i,j);
if (i==j)
{
if(i==6) z=8;
else z=7;
}
else if(i>j) z=j;
else z=i;
return z;
}
2.汽车加油.c
#include<stdio.h>
#include<math.h>
#define M 1000
void main()
{
int N,K,a[M],i,e;
int times(int b,int c,int d[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);
}
}
int times(int b,int c,int d[M])
{
int i,s=0,j=0;
for(i=0;i<=c;i++)
{
if(d[i]>b)
{
printf("No Solution\n");
break;
}
else
{
for(i=0;i<=c;i++)
{
s=s+d[i];
if(s>b)
{
j++;/*计算加油次数*/
s=d[i];
}
}
}
}
return j;
}
3.大优惠.c
#include<stdio.h>
void main()
{
int day(int a,int b);
int K,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);
}
}
int day(int a,int b)
{
int i=0;
for(;b>0;b--)
{
i=i+1;
if(i%a==0) b++;
}
return i;
}
4.金币.c
#include<stdio.h>
void main()
{
int a,b;
int sum(int d);
printf("请输入工作天数:");
scanf("%d",&a);
b=sum(a);
printf("共奖励金币:%d\n",b);
}
int sum(int d)
{
int s=0,t;
for(t=1;d>=0;t++)
{
s=s+t*t;
d=d-t;
}
s=s+d*(t-1);
return s;
}
5.小型通讯录.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define M 50
typedef struct
{
char num[7]; /*序号*/
char name[10]; /*姓名*/
char tele[10]; /*电话*/
char mobile[10]; /*手机号*/
char post[10]; /*邮编*/
char address[15]; /*地址*/
char relation[15]; /*关系*/
}ADD;
int enter(ADD t[]);/*输入记录*/
void list(ADD t[],int n); /*显示记录*/
void search(ADD t[],int n); /*查找记录*/
int delete(ADD t[],int n); /*删除记录*/
int add(ADD t[],int n); /*添加记录*/
void modify(ADD t[],int n); /*修改记录*/
void sort(ADD t[],int n); /*按手机号排序*/
void print(ADD temp); /*显示单条记录*/
int find(ADD t[],int n,char *s) ; /*查找函数*/
int menu_select();/*主菜单函数*/
main()
{
ADD adr[M]; /*定义结构体数组*/
int length; /*保存记录长度*/
system("cls"); /*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())
{
case 0:length=enter(adr);break; /*输入记录*/
case 1:list(adr,length);break; /*显示全部记录*/
case 2:search(adr,length);break; /*查找记录*/
case 3:length=delete(adr,length);break; /*删除记录*/
case 4:length=add(adr,length); break; /*添加记录*/
case 5:modify(adr,length);break; /*修改记录*/
case 6:sort(adr,length);break; /*按手机号排序*/
case 7:exit(0); /*如返回值为7则程序结束*/
}
}
}
menu_select()
{
char s[80];
int c;
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);
return c;
}
int enter(ADD t[])
{
int i,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();
return n;
}
void list(ADD t[],int n)
{
int i;
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();
}
void search(ADD t[],int n)
{
char s[20];
int i;
system("cls");
printf("请输入查找序号\n");
scanf("%s",s);
i=find(t,n,s);
if(i>n-1)
{
getchar();
printf("没找到\n");
}
else
{
getchar();
print(t[i]);
}
}
void print(ADD temp)
{
system("cls");
printf("\n\n**********************************************************************\n");
printf("序号 姓名 电话 手机号 邮编 地址 关系\n");
printf("-----------------------------------------------------------------------\n");
printf("%-7s%-10s%-10s%-10s%-10s%-15s%-15s\n",temp.num,temp.name,temp.tele,temp.mobile,temp.post,temp.address,temp.relation);
printf("***********************************结束********************************\n");
}
int find(ADD t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].num)==0)
return i;
}
getchar();
return i;
}
int delete(ADD t[],int n)
{
char s[20];
int ch=0;
int i,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();
return n;
}
int add(ADD t[],int n)
{
ADD temp;
int i,j;
char s[20];
printf("请输入记录\n");
printf("**********************************************************************\n");
printf("序号 姓名 电话 手机号 邮编 地址 关系\n");
printf("------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s%s%s",temp.num,temp.name,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,temp.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();
return n;
}
void modify(ADD t[],int n)
{
char s[20];
int i;
printf ("请输入想要修改的序号:");
scanf("%s",s);
i=find(t,n,s);
if(i>n-1)
printf("没找到");
else
{
printf ("请输入新的资料\n");
printf(" num name tele mobile post address relation\n\n");
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);
}
}
void sort(ADD t[],int n)
{
int i,j,flag;
ADD temp;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if((strcmp(t[j].mobile,t[j+1].mobile))>0)
{
flag=1;
strcpy(temp.num,t[j].num);
strcpy(temp.name,t[j].name);
strcpy(temp.tele,t[j].tele);
strcpy(temp.mobile,t[j].mobile);
strcpy(temp.post,t[j].post);
strcpy(temp.address,t[j].address);
strcpy(temp.relation,t[j].relation);
strcpy(t[j].num,t[j+1].num);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].tele,t[j+1].tele);
strcpy(t[j].mobile,t[j+1].mobile);
strcpy(t[j].post,t[j+1].post);
strcpy(t[j].address,t[j+1].address);
strcpy(t[j].relation,t[j+1].relation);
strcpy(t[j+1].num,temp.num);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].tele,temp.tele);
strcpy(t[j+1].mobile,temp.mobile);
strcpy(t[j+1].post,temp.post);
strcpy(t[j+1].address,temp.address);
strcpy(t[j+1].relation,temp.relation);
}
if(flag==0)break;
}
getchar();
printf("排序成功\n");
}
【C语言程序设计课程设计报告 c语言程序课程设计的总结】相关文章:
个人自查报告范文 纪检监察教育整顿个人自查报告范文08-21
2023年个人自查报告范文 2023年个人自查自纠报告08-21
个人自查报告范文 医务个人自查报告范文08-21
学生成绩管理系统c语言课程设计报告 学生成绩管理系统c语言课程设计报告一只学废狗08-21
C语言程序设计课程设计报告 c语言程序课程设计的总结08-21
C语言课程设计报告——贪吃蛇源程序 c语言课程设计贪吃蛇报告书08-21
C语言课程设计报告 C语言课程设计报告书08-21