c语言课程设计论文.docx
《c语言课程设计论文.docx》由会员分享,可在线阅读,更多相关《c语言课程设计论文.docx(16页珍藏版)》请在冰豆网上搜索。
c语言课程设计论文
目录
前言1
正文1
2.1设计目的和意义1
2.2目标和总体方案1
2.3设计方案和内容2
2.4详细设计过程2
2.5设计创新与技术关键7
2.6结论7
致谢8
参考文献8
附录9
前言
C语言是一门长盛不衰的程序设计语言,深受广大软件爱好者的喜爱。
C语言功能丰富,表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好。
兼备高级语言与低级语言的优点,属于一种中间语言。
它是一种结构化程序设计语言,非常适合结构化程序设计。
有较丰富的数据类型、运算符以及函数供以选用。
直接与内存打交道,使修改、编辑其他程序与文档变得轻松、简单。
C语言是国际上广泛流行的计算机高级语言,它适合作为系统描述语言,即可以用来编写系统软件,也可以编写应用软件。
在早期的操作系统软件主要是汇编语言编写的,但汇编语言依赖于计算机硬件程序的可读性和可移植性级语言,而C语言兼具一般语言优点还能克服其他语言的缺点。
通过这个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固自己的知识。
在理论学习和基础实验的基础上,培养我们的实际操作能力,培养我们综合运用理论知识来分析和解决实际问题的能力、严谨的科学态度和良好的程序设计习惯,最终实现由知识向智能的初步转化。
经过此次设计,我熟练掌握了编程技巧,课程设计为我提供了一个动手又动脑,独立实践的机会,将课本上的理论知识和实践有机的结合起来,锻炼了我的分析解决实际问题的能力,提高了我适应实际、实践编程的能力。
此报告说明书主要介绍了经典算法集成系统的C语言编程,经典算法集成系统设计是一个较简单的编程,经过仔细的分析,总结出算法再进行编辑、编译、链接、运行及调试,从而得到需要的程序。
经过此次课程设计,学生更能对c语言有了新的理解。
学会用一些函数来解决现实中的实际问题。
正文
2.1设计目的和意义
此次课程设计的目的是为了让我们加深对C语言内容的理解,特别是一些语法规定,光靠课堂老师讲授的,既乏味又难以记住,但它们都很重要。
通过课程设计,就自然地、熟练地掌握了。
熟悉所用的计算机系统的操作方法,也就是熟悉了C语言程序开发的环境。
每一个计算机系统的功能和操作方法不完全相同,但只要熟练掌握一种两种计算机系统的使用,再遇到其它的系统时很快就能学会。
学会上机调试程序。
也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序正常运行。
经验丰富的人在编译链接过程中出现“错误信息”时,一般能很快地判断出错误所在,并改正之。
而缺乏经验的人即使在明确的“错误提示”下也往往找不出错误而求救于别人。
要真正掌握计算机应用技术,不仅要了解和熟悉有关的理论和方法,还要求自己动手实现。
为以后的学习打下坚实的基础。
2.2目标和总体方案
运用MicrosoftVisualC++6.0和所学C语言知识设计一个可以方便进行各种经典算法的集成系统。
系统程序设计一般由两部分组成:
算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。
在经典算法集成系统程序中,由于预计设计6种以上的算法,我觉得能够实现一个就能实现多个。
所以我设计了10个算法。
具体方案如下:
1.计算1+2+3+4+…+100的和.。
2.猜数游戏:
任意设置一个整数,请用户从键盘上输入数据猜想设值的数是什么,告诉用户是猜大了还是小了。
10次以内猜对,用户获胜。
否则,告诉用户设置的数据是什么。
3.输出菱形。
4.计算1+3+5+7+…+99的值.
5.计算1-1/3+1/5-1/7+…-1/99的值.
6.求斐波纳契数列的前30项之和.
7.求两个正整数的最大公因子.
8.打印所有水仙花数.
9.输入一个正整数x,编程计算x的每一位数字相加之和.
10.计算1*2*3+3*4*5+…+99*100*101的值.每个菜单都有其相对应的功能.
这10个题目在一个界面内。
通过设计把它们组和在一起,并且能够实现其中的各种算法,每个算法互不影响。
通过键盘进行选择相应的算法,然后按回车,会出现相应的提示,然后根据提示往下做。
输入相应的之后,按回车就可以得到了。
2.3设计方案和内容
我做的是循环系统经典算法集成系统,运用C语言中的循环,输入,查找,显示等函数功能,把多个函数放在一起,使主程序看起来很明了。
在主菜单界面里有10个相对应的小菜单,每个小菜单都能单独实现其功能。
运行的时候就可以在屏幕上看到这10个菜单。
程序基本能满足我们日常生活中各种算法的需要,就是我们教程上的各种算法,这也是比较实用的问题。
经典算法集成系统的功能还不是很完善,也不强大,程序还不够简洁、完善,我会继续努力学习,改正程序中存在的不足,在好的方面继续努力。
2.4详细设计过程
(1)程序代码的函数名:
在这个程序中有2个函数名
#include
#include
以下是他们在程序中的作用:
在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。
因为用到了数学函数,所以还需要用#include对程序进行数学函数调用。
(2)第一个程序中程序代码:
intMun;/*整数型定义*/
voidfun1()
{
inti=1,sum=0;/*sum的作用是存放求和的中间值*/
while(i<=100)
{
sum+=i;
i++;
}
printf("1+2+3+4+…+100=%d\n",sum);/*输出*/
}
首先定义整数型intMun;空格定义voidfun1(),然后经过i,sum进行定义,使程序能够进行运算。
While语句的用法。
While语句后的表达式的值一开始就为假,循环体将一次都不执行。
最后通过printf("1+2+3+4+…+100=%d\n",sum);这样就实现了1+2+3+4+…+100的和.
(3)第二个程序中程序代码:
voidfun2()
{
intnum=23,x,n;
printf("hint:
0for(n=1;n<=10;n++)
printf("guess:
");/*输出*/
{
scanf("%d",&x);
if(x==num){printf("Win!
\n");break;}/*若输入num,则说明用户获胜*/
if(x>num)printf("bigger!
\n");
if(x\n");
}
if(n==11)printf("Lost!
thenumberis%d\n",x);/*输出*/
}
首先进行变量的定义,程序内容用了for循环语句,并运用if语句对程序的输入进行选择。
当输入次数达到11时,循环结束。
此猜数游戏是说用户可以进行十次猜测,若在10次之内输入正确的数字,则说明用户获胜。
反之,亦然。
(4)第三个程序中程序代码:
voidfun3()
{
intn,i,j;/*定义变量的含义*/
scanf("%d",&n);/*输入n*/
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)putchar('');/*光标的定位*/
for(j=1;j<=i*2-1;j++)putchar('*');/*输出星号*/
printf("\n");/*输出换行*/
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=i;j++)putchar('');/*打印每行前面的空格*/
for(j=1;j<=2*(n-i)-1;j++)putchar('*');/*打印每行的“*”*/
printf("输出菱形\n");/*输出*/
}
}
首先进行变量的定义,用for循环打印*号。
菱形图形的实现需要三个方面:
光标的定位,星号输出个数;换行。
最后说明输出的是几行的菱形。
(5)第四个程序中的代码:
voidfun4()
{
inti,sum=0;/*定义变量的含义*/
i=1;
for(;i<=99;i+=2)/*for循环语句*/
sum+=i;
printf("1+3+5+7+…+99=%d\n",sum);/*输出*/
}
首先对变量进行定义,然后用for循环计算。
自变量i每次自增2,i从1循环到100.最后输出1+3+5+7+…+99的和.。
(6)第七个程序中的代码:
voidfun7()
{
intm,n,r;/*定义变量*/
scanf("%d%d",&m,&n);
while(n!
=0)/*while循环语句*/
{
r=m%n;/*求余数*/
m=n;
n=r;
}
printf("最大公因子:
%d\n",m);/*输出*/
}
此程序的功能是说明输入的两个整数中,求他们之中的最大公因子。
并运用while语句进行循环。
当n不等于0时,进入循环体,最后输出结果。
(7)第八个程序中的代码:
voidfun8()
{
intn,a,b,c;
for(n=100;n<=999;n++)
{
a=n/100;/*输出百位*/
b=n/10%10;/*输出十位*/
c=n%10;/*输出个位*/
if(n==a*a*a+b*b*b+c*c*c)
printf("水仙花数%d",n);/*输出*/
}
}
此程序的功能是表示a表示百位上的数字,b表示十位上的数字,c表示个位上的数字,水仙花数的条件是输入一个三位数的整数,若各位上的数字的立方和等于该本身,则说明此数是水仙花数。
判断表达式为n==a*a*a+b*b*b+c*c*c。
是否成立。
最后输出所有的水仙花数。
(8)第九个程序中的代码:
voidfun9()
{
inti1,i2,i3,i4,k,n;/*变量定义*/
scanf("%d",&n);
k=abs(n);/*求绝对值*/
i1=k/1000;/*输出千位*/
i2=(k-i1*1000)/100;/*输出百位*/
i3=(k-i1*1000-i2*100)/10;/*输出十位*/
i4=k%10;/*输出个位*/
printf("thesumofthetoalbitis%d\n",i1+i2+i3+i4);/*输出*/
}
从键盘上任意输入一个正整数n,编程计算n的每一位数字相加之和。
例如,输入n为1234,则由1234分离出1、2、3、4四个数字,然后计算1+2+3+4=10,并输出10。
最后输出结果。
(9)其它的算法就是利用voidfun()加上算法。
利用
switch(Mun)
{
case1:
fun1();gotoloop;break;
case2:
fun2();gotoloop;break;
case:
3
fun3();gotoloop;break;
case:
4
fun4();gotoloop;break;
......
}
等等共10个类似的算法。
最后在调用它们就可以了。
(10)设计的流程图:
直接利用输出函数printf输出字符串,在屏幕上显示一个菜单,并显示选项,请选择算法的提示。
输入1-10之间的数字,将此数字作为菜单函数的返回值返回主函数这个数字调用相应的功能函数。
制作简便,操作简单。
根据提示输入相应的内容,经过处理和判断,输出相应的答案。
输入一个算法完成之后,可以接着进行选择,再输入另一个算法,然后输出,可以循环的输入输出。
如下图所示:
图2-1流程图
(11)功能测试:
本系统共有10个功能。
想要实现哪一种功能就选择相应的序号,根据提示完成想要的算法。
进入经典算法集成系统后,及运行之后,就可以看到10个算法。
界面如下图3-2所示:
图2-2界面的显示
功能一的测试,进入经典算法集成系统之后根据屏幕所显示的内容进行操作,它会显示请选择算法,输入1,然后按回车,就可以判断输入的数是否计算正确。
例如输入1,然后按回车,屏幕显示1+2+3+4+…+100=5050。
如图3-3所示:
图2-31+2+3+4+…+100的和显示
经过程序的运行可以看出,经典算法集成系统可以成功编译。
2.5设计创新与技术关键
循环系统的经典算法集成设计的主要难点在于实现各功能的主函数的运用,包括其中用到的for循环函数while循环函数,goto循环函数,输入函数,显示函数等等。
基本函数的运用和主函数的调用是编制此系统各关键技术所在。
当时开始做的时候,不懂怎样才能把那么多的程序集中在一起,并且还能够实现各种题目的算法功能。
这是一大难点。
经过仔细的看书和查资料,把这个问题解决了。
其实也很简单,只是一时间没有想到。
就是先定义,后调用就可以了。
先把这10个程序定义好,每个程序在使用前,先检验一下是否能够单独运行,然后再把它写如大的程序中。
个个小算法不能出错,不然会影响整个程序系统。
最后对整个程序进行调试和运行。
可以发现程序运行成功。
在程序里面可以进行各种算法的演示。
2.6结论
从以上内容可以知道程序时可以顺利运行的。
此经典算法集成系统可以基本满足我们的需要。
可以为我们省下不少时间去进行编写和调试,在这里直接运行就可以了。
只不过我所设计的这个程序只能实现10个固定的算法,不一定能够满足其所需要的。
不过别担心,只要你看懂了我的程序,就会自己编的。
这次试验是我学了一学期c语言课程的实习和总结,其中避免不了产生一些错误和漏洞。
我所做的程序自知非常简陋,但是有了第一次的成功,我相信以后的类似课题试验也能成功。
我会努力改进自身的不足,希望大家给予鼓励和支持。
致谢
在本次课程设计中,首先我要感谢张老师。
是他至始至终的教导让我能够在编程方面迅速的入门。
在我们对程序语言的学习过程中,是他不断的给我们讲解语句内容并且纠正我们存在的错误。
不断的给我们提供帮助并且给我们分析遇到的问题。
老师认真负责的工作态度,严谨治学的精神和深厚的理论水平都使我受益匪浅。
他们无论在理论上还是实践中都给了我很大的帮助,使我整体水平得到了提高,对于我以后的学习和工作都有一定的帮助,感谢张学东老师的耐心辅导!
参考文献
[1]王敬华林萍陈静著c语言程序设计教程清华大学出版社,2005
[2]谭浩强著.C程序设计(第二版).北京:
清华大学出版社,1999
[3]谭浩强编著.C++程序设计.北京:
清华大学出版社,2004
[4]谭浩强,张基温,唐永炎编著.C语言程序设计教程.北京:
高等教育出版社,1992
[5]谭浩强编著.C程序设计题解与上机指导(第二版).北京:
清华大学出版社,1999
附录
#include
#include
intMun;
voidfun1()
{
inti=1,sum=0;
while(i<=100)
{
sum+=i;
i++;
}
printf("1+2+3+4+…+100=%d\n",sum);
}
voidfun2()
{intnum=23,x,n;
printf("hint:
0for(n=1;n<=10;n++)
{printf("guess:
");
scanf("%d",&x);
if(x==num){printf("Win!
\n");break;}
if(x>num)printf("bigger!
\n");
if(x\n");
}
if(n==11)printf("Lost!
thenumberis%d\n",x);
}
voidfun3()
{
intn,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)putchar('');
for(j=1;j<=i*2-1;j++)putchar('*');
printf("\n");
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=i;j++)putchar('');
for(j=1;j<=2*(n-i)-1;j++)putchar('*');
printf("输出菱形\n");
}
}
voidfun4()
{
inti,sum=0;
i=1;
for(;i<=99;i+=2)
sum+=i;
printf("1+3+5+7+…+99=%d\n",sum);
}
voidfun5()
{floati,sum=0;intsign=1;
i=1;
for(;i<100;i+=2)
{sum=sum+(1/i)*(sign);
sign=sign*(-1);
}
printf("1-1/3+1/5-1/7+…-1/99=%f",sum);
}
voidfun6()
{intf1=1,f2=1,i;
longs=0;
for(i=1;i<=15;i++)
{printf("%10d%10d",f1,f2);
s=s+f1+f2;
f1=f1+f2;
f2=f1+f2;
}
printf("\n%ld",s);
}
voidfun7()
{
intm,n,r;
scanf("%d%d",&m,&n);
while(n!
=0)
{
r=m%n;
m=n;
n=r;
}
printf("最大公因子:
%d\n",m);
}
voidfun8()
{intn,a,b,c;
for(n=100;n<=999;n++)
{
a=n/100;
b=n/10%10;
c=n%10;
if(n==a*a*a+b*b*b+c*c*c)
printf("水仙花数%d",n);
}
}
voidfun9()
{inti1,i2,i3,i4,k,n;
scanf("%d",&n);
k=abs(n);
i1=k/1000;
i2=(k-i1*1000)/100;
i3=(k-i1*1000-i2*100)/10;
i4=k%10;
printf("thesumofthetoalbitis%d\n",i1+i2+i3+i4);
}
voidfun10()
{
inti;
longterm,sum=0;
for(i=1;i<=99;i+=2)
{
term=i*(i+1)*(i+2);
sum+=term;
}
printf("%ld\n",sum);
}
intmain()
{
printf("1.计算1+2+3+4+…+100的和.\n");
printf("2.猜数游戏,任意设置一个整数,10次以内猜对,用户获胜.\n");
printf("3.输出菱形.\n");
printf("4.计算1+3+5+7+…+99的值.\n");
printf("5.计算1-1/3+1/5-1/7+…-1/99的值.\n");
printf("6.求斐波纳契数列的前30项之和.\n");
printf("7.求两个正整数的最大公因子.\n");
printf("8.打印所有水仙花数.\n");
printf("9.输入一个正整数x,编程计算x的每一位数字相加之和.\n");
printf("10.计算1*2*3+3*4*5+…+99*100*101的值.\n");
loop:
printf("\n请选择算法:
");
scanf("%d",&Mun);
switch(Mun)
{
case1:
fun1();gotoloop;break;
case2:
fun2();gotoloop;break;
case3:
fun3();gotoloop;break;
case4:
fun4();gotoloop;break;
case5:
fun5();gotoloop;break;
case6:
fun6();gotoloop;break;
case7:
fun7();gotoloop;break;
case8:
fun8();gotoloop;break;
case9:
fun9();gotoloop;break;
case10:
fun10();gotoloop;break;
}
return0;
}