湖南工程学院15级C语言课程设计报告文库.docx
《湖南工程学院15级C语言课程设计报告文库.docx》由会员分享,可在线阅读,更多相关《湖南工程学院15级C语言课程设计报告文库.docx(36页珍藏版)》请在冰豆网上搜索。
![湖南工程学院15级C语言课程设计报告文库.docx](https://file1.bdocx.com/fileroot1/2023-2/4/6037832a-5cd7-4cd4-9643-1403bc81b709/6037832a-5cd7-4cd4-9643-1403bc81b7091.gif)
湖南工程学院15级C语言课程设计报告文库
课程设计报告
课程名称C语言课程设计
课题名称通讯录
专业电气工程
班级1561
学号201517060105
姓名卢靖
指导教师李杰君杨子华陈多
2016年1月10日
湖南工程学院
课程设计任务书
课程名称C语言课程设计
课题通讯录管理系统
专业班级电气工程
学生姓名卢靖
学号201517060105
指导老师李杰君杨子华陈多
审批
任务书下达日期2015年12月28日
任务完成日期2016年1月10日
一、设计内容与设计要求
1.设计内容:
第一部分综合练习
(1)一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数,并输出它们的因子。
(2)求100(不包括100)以内能被3或7整除,但不能同时被3和7整除的自然数的倒数之和。
(3)求如下表达式:
s=1+1/(1+2)+1/(1+2+3)+......+1/(1+2+3+...+n)
要求用以下方法计算:
1)计算前n项2)直至最后一项的值小于eps
(4)以“*”为字符,打印一个倒三角形。
倒三角形的行数由键盘输入。
(5)使用数组,编写一个任意进制数转化为十进制正整数的转换工具。
(6)函数intadd(inta[N][N],intb[N])的功能是将a数组中每行的最小元素放入b数组中,编写该函数实现之。
(7)编写一函数:
intsubstring(char*str,char*sub),判断字符串sub是否是字符串str的子串,若是子串,则返回子串的位置,否则返回-1。
第二部分猜数字游戏的设计
一、问题描述
本系统可以用来进行单独的加、减、乘、除心算练习。
二、功能描述
1)计算机自动出题,用户进入每项练习时,屏幕上会显示用户所做的相应的题数,如果不想继续可以随时退出。
2)设计的系统完全适合用户,比如除法时考虑到小学生的水平问题,只允许出现整除情况。
3)用户输入的答案不对时,提示错误,用户输入的结果如果连
2续两次不对,计算机会自动给出正确答案,供用户参考。
4)执行一个具体的功能之后,程序将重新显示菜单。
2.设计要求:
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)上机演示。
3.设计报告要求:
课程设计报告格式如下:
1)正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。
2)正文的内容:
第一部分综合练习,要求写出正确的程序,设计输入数据及程序调试结果
第二部分按照课题要求,介绍课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。
课程设计报告需5000字左右(不含附件及源程序代码)。
3)课程设计报告装订顺序:
封面、任务书、目录、正文、评分、程序清单附件。
二、进度安排
星期
时间
班级
内容
地点
第17周星期二
1-2节
电气工程1561/62
任务布置
E410
第18周星期一
1-4节
电气工程1561/62
第一次上机
E410
第18周星期二
1-4节
电气工程1561/62
第二次上机
E410
第17周星期四
5-8节
电气工程1561/62
第三次上机
E410
湖南工程学院国际教育学院
2015年12月28日
第一部分综合练习1
第二部分小学生CIA的设计10
1设计目的10
2概要设计10
3详细设计11
3.1数据结构11
3.2四则运算模块功能设计12
3.3使用说明12
4系统测试13
4.1戏初始画面测试13
4.2加法运算测试13
4.3减法运算测试14
4.4乘法运算测试14
4.5除法运算测试15
4.6答错提示测试15
5课程设计总结16
6附录17
第一部分综合练习
(1)一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数,并输出它们的因子。
#include
voidshuchu(intn)
{
inti;
printf("%d=1+",n);
for(i=2;i<=n/2;i++)
if(n%i==0)printf("%d+",i);
printf("\b");
}
voidmain()
{
intn,i,sum;
for(n=6;n<1000;n++)
{sum=1;
for(i=2;i<=n/2;i++)
if(n%i==0)
sum=sum+i;
if(sum==n)shuchu(n);
}
}
(2)求100(不包括100)以内能被3或7整除,但不能同时被3和7整除的自然数的倒数之和。
#include
intmain()
{
inti=0;
doublesum=0.0,m;
while(i<=100)
{
if(i%3==0&&i%7==0)
i++;
elseif(i%3==0||i%7==0)
{
m=1.0/i;
sum=sum+m;
}
i++;
}
printf("100以内能被3或7整除,但不能被3和7同时整除的自然数的的倒数之和为%f\n",sum);
return0;
}
(3)求如下表达式:
s=1+1/(1+2)+1/(1+2+3)+......+1/(1+2+3+...+n)
要求用以下方法计算:
1)计算前n项2)直至最后一项的值小于eps
#include
void main()
{
int n,i;
float s=0;
double esp;
printf("Inputep:
");
scanf("%d",&n);
printf("Inputep:
");
scanf("%lf",&esp);
for(i=1;i<=n;i++)
{
n+=i;
s+=1.0/n;
}
printf("%lf\n",s);
}
(4)以“*”为字符,打印一个倒三角形。
倒三角形的行数由键盘输入。
#include"stdio.h"
voidprintMap(intn)
{
inti,j,k;
for(i=n;i>0;i--)
{
for(j=i;j{
printf("");
}
for(k=0;k<2*i-1;k++)
{
printf("*");
}
printf("\n");
}
}
voidmain()
{
intn;
scanf("%d",&n);
printMap(n);
}
(5)使用数组,编写一个任意进制数转化为十进制正整数的转换工具。
#include
#include
#include
voidmain()
{intx,r,n,i,j=0,t;
chara[10];
printf("请输入一个数:
");
scanf("%s",a);
printf("进制数:
");
scanf("%d",&r);
n=strlen(a);
for(i=0;i{t=a[i]-'0';
if(a[i]>'9')
t=a[i]-'A'+10;
j+=t*pow(r,(n-i-1));
}printf("%d",j);
}
(6)函数intadd(inta[N][N],intb[N])的功能是将a数组中每行的最小元素放入b数组中,编写该函数实现之。
#include
#defineN4
voidadd(inta[N][N],intb[N])
{
inti,j;
intmin;
for(i=0;i{
min=a[i][0];
for(j=1;j{
if(min>a[i][j])
{
min=a[i][j];
}
}
b[i]=min;
}
printf("b数组的元素:
\n");
for(i=0;i{
printf("%d\n",b[i]);
}
}
voidmain()
{
inti,j;
intc[N][N];
intd[N];
printf("请输入%d行%d列的二维数组:
\n",N,N);
for(i=0;i{
for(j=0;j{
scanf("%d",&c[i][j]);
}
}
add(c,d);
}
(7)编写一函数:
intsubstring(char*str,char*sub),判断字符串sub是否是字符串str的子串,若是子串,则返回子串的位置,否则返回-1。
#include
#include
#include
#include
intcomp(char*str1,char*str2)
{
if(!
strcmp(str1,str2))
return1;
elsereturn0;
}
voidfind(char*s,char*t)
{
inti=0,j=0,len=0,len1=0;
intvec[10];
memset(vec,0,sizeof(vec));
len=strlen(s);
len1=strlen(t);
char*tmp=newchar(len+1);
for(i=0,j=0;i{
strncpy(tmp,t+i,len);
*(tmp+len)='\0';
if(comp(s,tmp))
{
vec[j]=i+1;
i+=(len-1);
j++;
}
}
for(i=0;i<10;i++)
printf("%d",vec[i]);
}
intmain()
{
charstr1[10],str2[100];
gets(str1);
gets(str2);
find(str1,str2);
system("PAUSE");
}
第二部分小学生CAI
1设计目的
1、用户可以通过两种方法来选择功能,既可以按相应的数字键进入相应的心算练习,也可以按光标键来选择功能项。
2、计算机自动出题,用户进入每项练习时,屏幕上会显示用户所做的相应的题数,如果不想继续可以随时退出。
3、设计的系统完全适合用户,比如除法时考虑到小学生的水平问题,只允许出现整除情况。
4、用户输入的答案不对时,提示错误,用户输入的结果如果连续两次不对,计算机会自动给出正确答案,供用户参考。
2概要设计
系统功能模块图:
3详细设计
3.1数据结构
1、主要函数
(1)、主控模块main.c
voidDoCommand()//根据输入命令进行相应的处理
voidCalculate()//执行计算功能
voidReSet()//重设系统环境
(2)、程序界面模块IntFace.c
voidInitiInterface();//界面初始化
voidGoToCmdxy();//将光标定位到命令选项提示之后
voidGoToPrompt();//将光标定位到命令选项提示行首
voidShowMainPrompt();//显示命令选项提示
voidClearScreen();//以清除整个屏幕,并设置为黑底白字模式
voidClearPromptLine();//清除提示行的显示
voidClearWorkSpace();//清除工作区的显示
voidInputNumberBox(intOneOrTwo);//指定两个输入数的输入窗口,如果超过这个范围文字将自动流动
voidResultBox();//指定计算结果的显示窗口,如果超过这个范围文字将自动流动
(3)、长整型数输入输出模块见二小节2分节
(4)、长整型数四则运算处理模块见二小节2分节
(5)、长整型数存储模块—双向循环链表模块见二小节1分节
将数字定义为整型
3.2四则运算模块功能设计
加/减/乘/除/法运算
请输入题目数目
答题
是否继续
退出
是
否
3.3使用说明:
1)、打开程序:
2)、进入选择页面:
3)、进行游戏
4)、退出
4系统测试
(1)戏初始画面测试
(2)加法运算测试
(3)减法运算测试
(4)乘法运算测试
(5)除法运算测试
(5)答错提示测试
5课程设计总结
总结
小学生CIA的课程设计看似简单,却需要能对C语言知识进行应用。
尤其是循环语句和数组要进行大量的应用,这是对我的C语言基础的一次考验。
首先,C语言课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识,再次,我在课程设计中碰到了很多的问题,我通过查阅相关书籍,资料,通过自己钻研,当然,通过这次课程设计,我也发现了自身的很多不足之处。
想起这次课程设计的这些日子,至今我仍感慨颇多。
以前上课时学的都是一些最基本的东西,觉得很枯燥无味。
但当自己能把所学的知识转换为有用的东西时,心中却不知何时有了一种莫名的动力,在电脑前面一坐就是好几个小时。
或许这就是有压力才有动力吧!
在大约5天的日子里,面对一件新事物,从理论到实践,可以说是苦多于甜。
这5天的课程设计,不仅使我巩固了以前所学过的知识,更使我获得了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正掌握好所学知识,才能够实现理论到使用的升华!
毕竟这是我进行的第一次课程设计,所以在该过程中遇到问题,可以说是数不胜数。
此外,在设计的过程中发现了自己对以前所学过的知识理解得不够透彻、掌握得不够牢固的不足之处。
好的学习方法在学习中很多时候都起着至关重要的作用!
尤其是在这次课程设计过程中,深深地体会到,善于总结是学习过程中不可缺少的重要的一个环节。
每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的调试和运行状况,随时总结,找到自己的错误与不足之处,这样所编写的程序才能逐步提高。
就如生活那样,汗水预示着结果也见证着收获。
直到实际动手做,我才真正领略到“一份耕耘,一份收获。
”这一句话的真正含义。
这次的c语言设计,对我们而言,知识上的收获重要,但是在一个团队间的团结合作的幕幕更让我们记忆终生。
挫折是一份财富,经历是一份拥有。
虽然这些日子很短暂但我相信这次实际操作必会成为我人生路上的一段美好的回忆!
最后我想对给过我帮助的所有同学和各位指导老师表示忠心的感谢。
附录:
源程序代码:
#include
#include
#include
voidmenu()
{
printf("********************************************************************************");
printf("^_^_^_^_^_^_^_^_^_^_^_^小朋友,欢迎你们来学习小学算术_^_^_^_^_^_^_^_^_^_^_^_^_^_");
printf("");
printf("1.加法");
printf("2.减法");
printf("3.乘法");
printf("4.除法");
printf("0.退出");
printf("");
printf("快选择你要学习的内容吧!
");
printf("");
printf("^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_");
printf("********************************************************************************");
}
voidplus1()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第一关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countprintf("%d",m=rand()%10);
printf("+");
printf("%d",n=rand()%10);
printf("=");
total=m+n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第一关!
\n");
}
}
voidplus2()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第二关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countdo{
m=rand()%10;
n=rand()%100;
}while(n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第二关!
\n");
}
}
voidplus3()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第三关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countdo{
m=rand()%100;
n=rand()%100;
}while(m<10&&n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第三关!
\n");
}
}
voidsub1()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第一关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countdo{
m=rand()%10;
n=rand()%10;
}while(m<=n);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第一关!
\n");
}
}
voidsub2()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第二关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countdo{
m=rand()%100;
n=rand()%10;
}while(m<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第二关!
\n");
}
}
voidsub3()
{
intcount=0,m,n,s,total,k;
printf("欢迎进入第三关!
\n");
printf("请设定题目数量:
");
scanf("%d",&k);
while(countdo{
m=rand()%100;
n=rand()%100;
}while(m<=n||m<10||n<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:
scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!
\n");count++;}
else
{printf("回答错误,请重新回答!
\n");gotoloopa;}
printf("恭喜你通过了第三关!
\n");
}
}
voidplus()
{
inti;
plus1();
printf("是否继续挑战?
Y
(1)/N(0):
");
scanf("%d",&i);
if(i==1)
plus2();
else
ret