第一篇:C语言课程设计报告(参考)
C语言课程设计报告
专 业:网络工程 学 号:11102101 姓 名:步乾豪 提交日期:2012-6-21
C语言课程设计报告
【设计目的】 1.教学目的
本课程设计是学生学习完《C语言程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用C语言进行程序设计的方法,加深对C语言特点和使用C语言进行程序设计开发过程的理解,加强动手能力。其主要目的是:
(1)进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;
(2)针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
(3)掌握C语言的编程技巧和上机调试程序的方法。(4)掌握程序设计的常用算法。2.教学要求
(1)要求从所给题目中任选若干个,每个学生必须独立完成课程设计,不能互相抄袭。(2)设计完成后,对所完成的工作进行答辩。(3)要求写出一份详细的课程设计报告。
(4)程序设计题目,须提交相应的程序,并需提供加注释的源程序,能正常运行。……………………………………..【设计内容】
学生信息管理系统 程序说明:
本程序属于非数值计算型算法设计,学生需要设计出学生管理系统所需要的基本功能,并设计简单的界面(无需图形化)。本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组(链表)的相关操作,包括数组(链表)的输入、输出、查找、插入、删除等操作,需要对数组(链表)有比较深入的掌握。
设计要求:
(1)通过提示菜单选择可以进行的操作。
(2)将学生的信息存入文件中,并命名为StudentInfo.txt。(3)在本系统中可以进行管理系统包含的基本操作,其中包括
a)查看所有学生的信息
b)输入一个学生的学号,从当前学生中进行查找,如果找到则显示该学生的相关信息,如果没有找到则给出提示信息
c)添加一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则提示重新输入,否则将该学生按照顺序插入到相应位置
d)删除一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则将该学生删除,否则给出提示信息,提示该学生不存在
(4)学生基本信息包括学号、姓名、性别和专业这些简单信息
C语言课程设计报告
(5)学生信息文件中每一行存放一个学生的信息 ………………………………….【实验环境】 1.硬件环境
开发硬件:Thinkpad E520计算机
因特尔酷睿I5处理器,8GB运存,1GB独立显卡,500G硬盘存储,2.软件环境
开发环境:Windows 7旗舰版操作系统
开发软件:Microsoft Visual 6.0 C++软件
【设计中使用函数说明】
定义并使用的文件: void scanproduct()
【测试结果】
1)创建链表、插入新信息、删除信息、显示信息、修改信息。
2)测试数据
【设计总结】
一.对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价
完成了课程设计的基本要求,同时在此基础上进行了一些创新,使用了多文件,使程序看起来更清晰更有条理。但由于能力有限,以及对C++的认识不深,其中还有不够完善合理的地方。
2、对课题提出更完善的方案
增加按照成绩对链表进行排序的功能,使学生信息能够按照成绩的高低进行显示,能够更清晰地显示学生的学习情况。二.收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高
加深了对利用C++语言进行程序设计的理解,提高了对函数的运用能力,提高了软件系统分析能力和使用多文件、归纳总结的能力。
2、收获和心得体会
通过自己对单项链表的学习,熟悉了链表的建立、插入、删除等操作方法。通过这次课程设计使我明白了自学的重要性,有了一些自学的学习方法和技巧,并且要积极的与其他同学共同讨论,在讨论中才能找到自己认识的不足,改正自己的错误。【参考文献】 书籍:
1.《C语言程序设计第四版(谭浩强)》 2.《C语言程序设计课程上机指导》 3.《C语言程序设计第三版》
C语言课程设计报告
网站推荐:
http://(TC所有函数功能及使用查询)http://www.feisuxs/(编程爱好者:里面有各种编程资料)
【源程序清单】 系统设计与分析
2.1.1第一模块界面及实现代码 其对应的函数如下: int main(){
int i;wenbenload();do { system(“cls”);printf(“nnnnnn”);printf(“***************************欢迎使用商品订购系统*******************************n”);printf(“ 作者: 网络11102101 步乾豪n”);
printf(“ ┏━━━━━━━━━━━━━━━━━━━┓n”);printf(“ ┃ 1.浏览商品信息 ┃n”);printf(“ ┃ 2.订购商品 ┃n”);printf(“ ┃ 3.订单查询 ┃n”);printf(“ ┃ 4.搜索商品 ┃n”);printf(“ ┃ 5.管理菜单 ┃n”);printf(“ ┃ 0.退出系统 ┃n”);printf(“ ┗━━━━━━━━━━━━━━━━━━━┛n”);printf(“********************************************************************************n”);
printf(“nntt请输入你的操作(0~5): ”);
scanf(“%d”,&i);switch(i){ case 1: system(“cls”);scanproduct();3
C语言课程设计报告
n“);
break;case 2:
system(”cls“);dinggou();break;
case 3: system(”cls“);
lookdinggou();break;searchproduct();break;case 4: case 5: secondmain();break;
case 0: //退出系统的界面
system(”cls“);printf(”nnnnnnnn“);printf(”nnttt欢迎使用本系统nnnnnttt欢迎再次使用
exit(0);//exit用于随时结束程序
}while(1);return 0;
} } 其中的wenbenload()用于从文本中导入商品信息
2.1.2 第二模块的界面及实现代码
如果选择的操作是主界面的1时,而产品文件为建立时会显示下图:
图2.3第二模块界面图
该程序的实现是通过以下代码实现的: void scanproduct(){
int i;system(“cls”);printf(“ttttt商品信息列表n”);for(i = 0;i < inumber;i++)4
C语言课程设计报告
} {
} printf(“nnnnnnttt”);printf(“返回主菜单n”);printf(“ttt”);system(“pause”);return;printf(“名称 : %sn”,a[i].name);printf(“货号 : %dn”,a[i].number);printf(“厂家 : %sn”,a[i].vender);printf(“产地 : %sn”,a[i].filed);printf(“存量 : %dn”,a[i].stock);printf(“单价 : %.2lfnnn”,a[i].unvalent);2.1.3 第三模块的实现及代码 该程序实现代码如下: void dinggou(){ char ch;int i, j, t, c = 1;int n = 1;int m = 0;
do {
switch(n){ case 1: system(“cls”);
printf(“tttt商品信息列表n”);//显示商品的名称、货号信息,以便于订购 printf(“名称t 货号t 库存n”);for(i = 0;i < inumber;i++){
printf(“%st %dt %dnnn”,a[i].name,a[i].number,a[i].stock);
C语言课程设计报告
} printf(“nnn”);printf(“tttt商品订单n”);printf(“nttt请输入你的第%d个订单信息:n”,m + 1);
printf(“nttt货号:”);
fflush(stdin);
scanf(“%d”,&b[ibuy].bgname);
//检测是否含有此商品
j = 1;
for(i = 0;i < inumber;i++)
{
if(a[i].number == b[ibuy].bgname)
{
j = 0;
t = i;
}
}
//若有商品继续购买项目
if(j == 0)
{
printf(“nttt订购量:”);
fflush(stdin);
scanf(“%d”,&b[ibuy].bmany);
if(a[t].stock >= b[ibuy].bmany){
a[t].stock = a[t].stock-b[ibuy].bmany;//买后商品的库存计算
printf(“nttt日期时间:”);
fflush(stdin);
scanf(“%d”,&b[ibuy].btime);
printf(“nttt客户名:”);
fflush(stdin);
gets(b[ibuy].bname);
printf(“nttt客户地址:”);
fflush(stdin);
gets(b[ibuy].baddress);
printf(“nttt客户号:”);
b[ibuy].bnumber = bgnumber;
printf(“%dn”,b[ibuy].bnumber);
bgnumber++;
ibuy++;
m++;6
顾客购C语言课程设计报告
printf(“nnntttt”);
system(“pause”);} else { printf(“nnttt订购数目超出库存n”);
printf(“ttt”);
system(“pause”);
} } //若没有商品的提示及操作
else {
printf(“nnttt查无此货n”);
printf(“ttt”);
system(“pause”);}
case 2: printf(“是否继续输入订购?(Y/N)”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'N' || ch == 'n'){
c = 0;
break;} else if(ch == 'Y' || ch == 'y'){
c = 0;
n = 1;
break;} else if(ch!= 'n' || ch!= 'N' || ch!= 'Y' || ch!= 'y'){
n = 0;
c = 1;
break;} case 0:
C语言课程设计报告
} if(c == 1){ } n = 2;
}while(ch!= 'n' && ch!= 'N');system(“cls”);
return;} 2.1.4 第四模块的实现及代码 该程序实现代码如下: void lookdinggou(){ int i;system(“cls”);printf(“ttttt订单列表n”);for(i = 0;i < ibuy;i++){
printf(“货号 : %dn”,b[i].bgname);printf(“订购量 : %dn”,b[i].bmany);printf(“日期时间 : %dn”,b[i].btime);printf(“客户名 : %sn”,b[i].bname);printf(“客户地址 : %sn”,b[i].baddress);printf(“客户号 : %dnnn”,b[i].bnumber);
} printf(“nnnnnnttt”);printf(“返回主菜单n”);printf(“ttt”);system(“pause”);return;} 该代码中用到了指针,并用到了链表的建立和删除,当然也涉及到了结构体。2.1.5 第五模块的实现及代码 通过以下代码实现: void searchproduct(){
int i;int j;char ch;int n = 1;do
C语言课程设计报告
{
switch(n){ case 1: system(“cls”);
printf(“tttt商品列表n”);//显示商品的名称、货号信息,以便于下部的删除 for(i = 0;i < inumber;i++){
} //商品的搜索
printf(“nnntttt请输入你要搜索商品的ID:”);scanf(“%d”,&j);if(0<=j&&j<=inumber)printf(“名称 : %sn”,a[i].name);printf(“ID : %dn”,i);printf(“库存 : %dnnn”,a[i].stock);
{ printf(“名称 : %sn”,a[j].name);printf(“货号 : %dn”,a[j].number);printf(“厂家 : %sn”,a[j].vender);printf(“产地 : %sn”,a[j].filed);printf(“存量 : %dn”,a[j].stock);printf(“单价 : %.2lfnnn”,a[j].unvalent);}
case 2:
} printf(“是否继续搜索商品?(Y/N)”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'N'|| ch == 'n'){ } if(ch ==' Y'|| ch == 'y'){
} n = 1;break;break;9
C语言课程设计报告
} }while(ch!= 'n' && ch!= 'N');
printf(“nnnnnnttt”);printf(“返回主菜单!n”);printf(“ttt”);system(“pause”);return;2.1.6 第六模块的实现及代码 该代码如下: void secondmain(){
int i;
do {
system(“cls”);printf(“nnnnnnn”);
管
理
维
护
子
菜
单printf(“******************************************************************nn”);n“);n”);n“);n”);n“);
printf(” ┏━━━━━━━━━━━━━━━━━━━┓printf(“ ┃ 1.输入全部商品 ┃printf(” ┃ 2.增加商品 ┃printf(“ ┃ 3.删除商品 ┃printf(” ┃ 4.储存商品 ┃printf(“ ┃ 5.储存订单 ┃
C语言课程设计报告
n”);n“);printf(” ┗━━━━━━━━━━━━━━━━━━━┛printf(“ ┃ 0.返回上一级 ┃nnn”);printf(“********************************************************************************nnnnn”);
printf(“nntt请输入你所要选择的功能(0~5): ”);
scanf(“%d”,&i);
switch(i){
case 1:
system(“cls”);jianpanload();break;
case 2:
system(“cls”);addproduct();break;case 3:
system(“cls”);deleteproduct();break;
case 4:
system(“cls”);
C语言课程设计报告
saveproduct();break;case 5:
system(“cls”);savedinggou();break;
} case 0:
system(“cls”);
return;
}while(1);
printf(“tttt”);system(“pause”);system(“cls”);return;}该代码用于商品信息文件的建立生成,存储商品信息和订单。
2.2 软件的数据(结构)设计
先定义全局变量用于控制商品数量和订单数量如下: #include
int bgnumber = 023;//客户号
int inumber = 0;//商品量的统计 int ibuy = 0;//订单的统计
C语言课程设计报告
void secondmain();
//管理维护子菜单 void jianpanload();//输入商品 void scanproduct();//浏览商品 void searchproduct();//搜索商品 void dinggou();//订购商品 void lookdinggou();//查询订单 void addproduct();//增加商品 void deleteproduct();//删除商品 void saveproduct();//保存商品 void savedinggou();//保存订单 void wenbenload();//从文本导入商品
struct product {
char name[30];int number;char vender[30];char filed[100];int stock;
double unvalent;
//商品名 //货号 //厂家 //产地 //存量 //单价
};struct product a[100];
struct dinggou {
int bgname;//货号 int bmany;
int btime;
char bname[100];
//订购量 //日期时间 //客户名
char baddress[100];//客户地址 int bnumber;//客户号
};struct dinggou b[100];
第二篇:C语言课程设计报告
目录
1前言..............................................................1 2正文..............................................................1 2.1设计目的........................................................1 2.2设计意义........................................................1 2.3设计方案与内容..................................................2 2.3.1设计内容......................................................2 2.3.2程序调试......................................................4 3致谢..............................................................7 4参考文献..........................................................7 5附录..............................................................8
塔里木大学信息工程学院课程设计
前言
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具. 1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了
塔里木大学信息工程学院课程设计
其自身的优势,仍然是一种重要的语言,而且它还是通往c++的必由之路。它是融合了控制特性的的现代语言,其设计使得用户可以自然的采用自顶向下的规划、结构化的编程,以及模块化的设计。这种做法使得编写出的程序更可靠、更易懂。它是一种高级语言,在设计上它充分利用了当前计算机在能力上的优点。C程序往往很紧凑且运行速度快,其还表现出通常只有汇编语言才具有的精细控制能力,可以用于电脑cpu的编程控制语言,如果愿意,可以细调程序以获得最大速度或最大内存使用率。其可移植性的特点,可以使其在不经过太大的修改,便可在其它系统上运行,同时,它也是很多大型系统的编程语言,(比如说UNIX的操作系统就是建立在c之上的)。
2.3设计方案与内容
我此次设计的是一个计算器,主要是利用我们所学的知识,做到进一步掌握c语言的奥秘,使这种功能强大的高级语言走近我们的生活。本计算系统主要是作加减乘除运算。
该计算系统程序包括:main()函数、加函数、减函数、乘函数、除函数和显示函数。2.3.1设计内容
1、加运算:
int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);}
2、减运算:
int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);}
3、乘运算:
int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);}
4、除运算:
int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}
5、显示函数程序:
塔里木大学信息工程学院课程设计
void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*选择提示*/ printf(“***************************n”);/*分隔号*/ printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/ printf(“1:apply is additionn”);/*选择加号*/ printf(“2:apply is subtractionn”);/*选择减号*/ printf(“3: apply is multiplicationn”);/*选择乘号*/ printf(“4:apply is pisionn”);/*选择除号*/ } 显示界面程序图如图2-1所示
图2-1显示界面
程序分析:
1)printf(“please choose lower level operation sign n”);/*选择提示*/这句可以根据需要写成时间,一句鼓励自己的话,或者别的什么,都将不影响改程序的正常运行,只要在规定的“n”里,用户可以根据自己的需要把它用一句英文表达出来。
2)printf(“***************************n”);/*分隔号*/此句无关紧要,可以去掉也可以保留,看个人心情,不过个人建议,还是保留的比较好,它能保持计算器界面的美观特点,还能作为分隔运算程序的作用,让使用者能最快的对运算区进行划区。3)printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/此句在运算界面里出现,当用户使用时,不小心输入了一个字符,非1~4以内,则会提示错误,按‘enter’结束该片段,然后根据提示,选择自己所希望使用的运算符号进行运算。
4)printf(“1:apply is additionn”);/*选择加号*/此句是加法运算提示,当输入‘1’后按‘enter’会得到可以使用加法的提示,然后就可以使用加法运算了,使用空格将数字与要加的数字分开,按‘enter’将得到你要的答案。5)printf(“2:apply is subtractionn”);/*选择减号*/这是加法运算提示。它的使用方法和
塔里木大学信息工程学院课程设计
相同。
2.3.2程序调试
1、加法运算
加法运算运行结果如图2-2所示。
图2-2加法运算运行结果
2、减法运算
减法运算结果如图2-3所示。
图2-3减法运算
3、乘法运算
乘法运算如图2-4所示。
塔里木大学信息工程学院课程设计
图2-4乘法运算
4、除法运算
除法运算如图2-5所示
图2-5除法运算
6、主函数程序: int main(){ int a, b;
塔里木大学信息工程学院课程设计
for(;;){ xian();switch(getchar()){ case '0':printf(“ tui chu: ”);getchar();return 0;case '1': printf(“ apply is '+': n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jia(a,b);break;case '2':printf(“ apply is '-':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jian(a,b);break;case '3':printf(“apply is '*':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();cheng(a,b);break;case '4':printf(“ apply is '/':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();chu(a,b);break;default:printf(“wrong!please push down'enter' go on with ”);/*提示错误*/ getchar();break;
塔里木大学信息工程学院课程设计
} } return 0;/*一轮运算结束后返回符号选择功能选项*/ } 该主函数程序中使用了xian()函数、switch(getchar())语句、getchar()、for、break、return。xian()函数的功能是在程序运行中,具有显示界面的功能。switch(getchar())语句具有多分支选择功能。getchar()是库函数。for循环语句。是break语句是实现跳出循环的功能的语句。Return语句是返回语句,是程序最后一个语句,在int main(void)中int表示main()函数的返回值应该是一个整数。该程序具备的选择功能:
(1)选择提示:该计算器编辑界面有5个提示,它们分别是‘0’、‘1’,‘2’、‘3’、‘4’,当使用者在该界面上输入它们其中一个数字,会得到相对应的提示,其中1~4分别表示加、减、乘、除运算。‘0’表示结束工作框结束。
(2)使用方法:进入选择界面后,要选择加法运算,请输入‘1’,然后按下‘enter’键。会得到提示;然后输入两个数字用空格分开,按回车‘enter’结束,得出答案。结束此轮运算后,该程序又进入到选择提示界面,用户再根据需要选择相应的运算符号。以后的运算方法和前面一样。
致谢
在本次课程设计中,首先我要感谢张老师。是他至始至终的教导让我能够在编程方面迅速的入门。在我们对程序语言的学习过程中,是他不断的给我们讲解语句内容并且纠正我们存在的错误。不断的给我们提供帮助并且给我们分析遇到的问题。老师认真负责的工作态度,严谨治学的精神和深厚的理论水平都使我受益匪浅。他们无论在理论上还是实践中都给了我很大的帮助,使我整体水平得到了提高,对于我以后的学习和工作都有一定的帮助,感谢张兵老师的耐心辅导!
参考文献
[1]孙雄勇.Visual C++ 6.0 实用教程.北京:中国铁道出版社,2004.[2]新电脑课堂编委会.Visual C++ 编程篇.北京:电子工业出版社,2004.[3]陈清华.Visual C++课程设计案例精选与编程指导.北京:北京大学出版社,2005.[4]李东玉.Visual C++.NET实用编程100例.北京:中国铁道出版社,2003.[6]张志清.管理信息系统.南京:东南大学出版社,2003.
塔里木大学信息工程学院课程设计
附录
#include
int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}
void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*选择提示*/ printf(“***************************n”);/*分隔号*/ printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/ printf(“1:apply is additionn”);/*选择加号*/ printf(“2:apply is subtractionn”);/*选择减号*/ printf(“3: apply is multiplicationn”);/*选择乘号*/ printf(“4:apply is pisionn”);/*选择除号*/ }
int main(){
塔里木大学信息工程学院课程设计
int a, b;
for(;;){ xian();
switch(getchar())
{
case '0':printf(“ tui chu: ”);
getchar();
return 0;
case '1': printf(“ apply is '+': n ”);
scanf(“%d”,&a);
getchar();
scanf(“%d”,&b);
getchar();
jia(a,b);
break;
case '2':printf(“ apply is '-':n ”);
scanf(“%d”,&a);
getchar();
scanf(“%d”,&b);
getchar();
jian(a,b);
break;
case '3':printf(“apply is '*':n ”);
scanf(“%d”,&a);
getchar();
scanf(“%d”,&b);
getchar();
cheng(a,b);
break;
case '4':printf(“ apply is '/':n ”);
scanf(“%d”,&a);
getchar();
scanf(“%d”,&b);
getchar();
chu(a,b);
break;
塔里木大学信息工程学院课程设计
default:printf(“wrong!please push down'enter' go on with ”);/*提示错误*/
getchar();
break;
}
}
return 0;/*一轮运算结束后返回符号选择功能选项*/ }
第三篇:C语言课程设计报告
C语言课程设计报告
班
级:
10电子本1
学
号:
10303033122
姓
名:
指导老师:
方文森
完成日期:
温州大学城市学院课程设计
目 录
1、课程设计目的和要求.....................................................................................................2
2、课程设计任务内容.........................................................................................................2
3、详细设计说明.................................................................................................................3
3.1分析.........................................................................................................................3 3.2软件设计.................................................................................................................3 3.3软件调试(对编程中的错误进行记录,并给出你的解决办法).....................3
4、软件使用说明.................................................................................................................4
5、课程设计心得与体会.....................................................................................................4 附录1:参考文献................................................................................................................5 附录2:部分程序清单(带有较详细的注释)................................................................5
温州大学城市学院课程设计
C语言课程设计报告
1、课程设计目的和要求
目的:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握(2)掌握C语言编程和程序调试的基本技能(3)利用C语言进行基本的软件设计(4)掌握书写程序设计说明文档的能力(5)提高运用C语言解决实际问题的能力 要求:(1)分析课程设计题目的要求(2)写出详细设计说明
(3)编写程序代码,调试程序使其能正确运行(4)设计完成的软件要便于操作和使用(5)设计完成后提交课程设计报告
2、课程设计任务内容
1)一个班级有4个学生,共学习5门课程(大学英语、高等数学、C语言程序设计、VB程序设计、大学语文)。要求编写程序完成相应功能。2)
输入并保存]5门课程名称;
3)
输入并保存]4个学生的学号及其[个人相关信息]; 4)
输入并保存]每个学生对应的每门课程成绩; 5)求出每门功课的平均分;
6)找出有两门以上功课不及格的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
7)找出平均成绩在90分以上或者全部课程成绩在85分以上的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
8)计算每位学生的总分,并按总分进行排名,按由高到低输出他们的学号及总成绩; 9)对前面问题进行优化,即在一维数驵的基础上,考虑采用二维数组、函数及其参数传递的方式来解决相关问题;
10)对前面问题进行优化,在学号的基础上,增加学生的其它个人信息,包括:学号、姓名、年龄、性别,并采用结构体形式加以表示; 11)利用文件实现对输入及分析输出数据的存取操作。
12)参照教材P27页,3-11题引入选择功能,输入功能编号可以实现以上功能(考虑清屏函数,自查)。
温州大学城市学院课程设计
3、详细设计说明
3.1分析
3.2软件设计
开始菜单(功能选择)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10写入课程名读取课程名输入学生信息读取学生信息建立了学生信息及课程名称?退出程序读取课程、学生、成绩读取课程成绩输出功课的平均分两门以上功课不及格的学生输出高分的学生总分由高到低排序No保存保存Yes输入课程成绩(提示)必须输入课程名称、学生信息才能建立成绩保存清屏
3.3软件调试(对编程中的错误进行记录,并给出你的解决办法)
取地址。
温州大学城市学院课程设计
4、软件使用说明
1.2.3.4.5.6.7.8.9.10.11.12.[99]读取课程、学生、成绩 [1]输入课程名称.[2]读取课程名称.[3]输入学生信息.[4]读取学生信息.[5]输入课程成绩.[6]读取课程成绩.[7]功课的平均分.[8]两门以上功课不及格的学生 [9]-高分的学生-.[10]学生总分排序.[0]退出应用程序.5、课程设计心得与体会
在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。为了解决此类问题,最好就是多向同学,老师请教,查找资料。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认
温州大学城市学院课程设计
识。
附录1:参考文献
《C语言程序设计与实践教程》
附录2:部分程序清单(带有较详细的注释)
#include
#define N 4 #define M 5 #define Debug 1
typedef struct { char SNo[5];char SName[10];}Student;
void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i 温州大学城市学院课程设计 void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]='';i++;j=0;6 温州大学城市学院课程设计 } else { Cname[i][j]=ch;j++;} } #if(Debug==1)for(i=0;i void CoureseWrite(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} for(i=0;i void StuInfoWrite(Student S[],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL)7 温州大学城市学院课程设计 { printf(“Errorn”);exit(0);} else { for(i=0;i void StuInfoRead(Student S[],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i 温州大学城市学院课程设计 Student Stu[N];char Cname[M][20]; while(1){ system(“cls”);printf(“ttt=======学生成绩管理应用程序=======n”);printf(“tttt[99]读取课程、学生、成绩.nn”);printf(“tttt[1]输入课程名称.nn”);printf(“tttt[2]读取课程名称.nn”);printf(“tttt[3]输入学生信息.nn”);printf(“tttt[4]读取学生信息.nn”);printf(“tttt[5]输入课程成绩.nn”);printf(“tttt[6]读取课程成绩.nn”);printf(“tttt[7]功课的平均分.nn”);printf(“tttt[8]两门以上功课不及格的学生.nn”);printf(“tttt[9]-高分的学生-.nn”);printf(“tttt[10]学生总分排序.nn”);printf(“tttt[0]t退出应用程序.nn”);printf(“请选择功能:”);scanf(“%d”,&Key);getchar();printf(“n”);if(Key==99){ CoureseRead(Cname,“D:cname.txt”,“r”);StuInfoRead(Stu,“D:stuinfo.db”,“rb”);ScoreRead(CJ,“d:score.db”,“rb”);} else if(Key==1){ for(i=0;i //输入学生信息 //读取课程名称 //输入课程名称 温州大学城市学院课程设计 { scanf(“%stt%s”,Stu[i].SNo,Stu[i].SName);} getchar();StuInfoWrite(Stu,“D:stuinfo.db”,“wb”);} else if(Key==4){ StuInfoRead(Stu,“D:stuinfo.db”,“rb”);} else if(Key==5){ char Qu;scanf(“%c”,&Qu);getchar();if(Qu=='Y' || Qu=='y')printf(“您已经建立了学生信息及课程名称了吗?(Y/N)n”); //输入课程成绩 //读取学生信息 { CoureseRead(Cname,“D:cname.txt”,“r”);StuInfoRead(Stu,“D:stuinfo.db”,“rb”);for(i=0;i else { printf(“请输入Y/N!n”); //读取课程成绩 } }//else if(Key==5)else if(Key==6){ ScoreRead(CJ,“d:score.db”,“rb”);10 温州大学城市学院课程设计 } else if(Key==7){ ScoreRead(CJ,“d:score.db”,“rb”);CoureseRead(Cname,“D:cname.txt”,“r”);for(j=0;j for(i=0;i } } } } 11 温州大学城市学院课程设计 } else if(Key==9){ int x,k;float c,s;printf(“平均成绩在90分以上或全部课程成绩在85分以上n”);for(i=0;i } } } else if(Key==10){ float x[i];12 温州大学城市学院课程设计 char XH[N][3];char temp[3];int num;int imax,k;float t;for(i=0;i else if(Key==0){ break;} getchar();} } 13 C语言课程设计报告 Experiment Designing reporter 课程名称 : C语言课程设计 英文名称 : C Program Experiment Designing 专 业 : 学 号 : 姓 名 : 指导教师 : 日 期: 2011年7月18日 至2011年7月22日 《C语言课程设计》报告 C Program Experiment Designing 课程编号:01200308005 学时: 40学时 适用专业:软件工程专业 授课单位:软件学院 一、C语言课程设计目的及要求 目的: 根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。 要求: 1. 熟悉Turbo C 的编程环境、主要菜单功能。 2. 通过上机验证运算符、表达式、运算规则、函数使用。3. 熟练使用C语言的典型语句编写简单程序。4. 调试典型例题或习题。5. 提高上机编程能力 二、实验类型 设计类型 三、实验学时 40学时 四、实验设备 微型计算机、WINDOWS98以上版本的操作系统、Turbo C2.0 软件一套 五、C语言课程参考教材: 1.李瑞 C语言程序基础(第二版)清华大学出版社 2.梁旭 C语言课程设计.电子工业出版社 课程设计(报告)任务书 任务及要求: 1.设计(研究)内容和要求 研究内容:C语言课程设计题目相关内容 任务和要求: (1).学习C语言基础知识,掌握C语言编程和程序调试的基本技能。(2).对指导教师下达的题目进行系统分析。(3).根据分析结果完成系统设计。 (4).编程:在计算机上实现题目的代码实现。(5).完成对该系统的测试和调试。(6).提交课程设计报告。(7).指标: 要求完成课程设计报告3千字以上(约二、三十页).完成若干综合性程序设计题目,每个综合设计题目的语句行数的和在300行语句以上.2.原始依据 了解C语言的基础知识,有一定的语言编程基础,能够熟练运用C语言进行程序设计。通过用C语言完成的题目,提高用C语言解决实际问题的能力。3.参考文献 [1] 黄明等.C语言程序设计辅导教材.大连理工大学出版社,2006 [2] 马靖善等.C语言程序设计.清华大学出版社,2005 [3] 谭浩强.C语言程序设计(第二版).北京:高等教育出版社,2002 目录 C语言课程设计报告................................................................................错误!未定义书签。 1. 输出杨辉三角.............................................................................................................1 1.1 系统分析..............................................................................................................1 1.2 设计说明..............................................................................................................1 1.3 程序运行截图......................................................................................................2 1.4 源程序代码..........................................................................................................2 2 汉诺塔求解方法.............................................................................................................3 2.1 系统分析..............................................................................................................3 2.2 设计说明..............................................................................................................3 2.3 程序运行截图......................................................................................................4 2.4 源程序代码..........................................................................................................4 3 输出200以内的素数.....................................................................................................5 3.1功能说明...............................................................................................................5 3.2 设计说明..............................................................................................................5 3.3 程序运行截图......................................................................................................5 3.4 源程序代码..........................................................................................................6 4 进制转换计算器.............................................................................................................6 4.1功能说明...............................................................................................................6 4.2 设计说明..............................................................................................................6 4.3程序运行截图.......................................................................................................7 4.4 源程序代码..........................................................................................................7 5 一元稀疏多项式.............................................................................................................8 5.1 功能说明..............................................................................................................8 5.2 设计说明..............................................................................................................8 5.3 程序运行截图....................................................................................................10 5.4 源程序代码........................................................................................................11 1. 输出杨辉三角 1.1 系统分析 以等腰直角三角形输出杨辉三角 1.2 设计说明 1、包含头文件 #include #include 其中,头文件 2、子函数 函数名:int num(i,j) 函数功能:以递归的方式进行计算,用函数代替二维数组 函数参数:int i;int j; 含义:相当于二维数组的a[i][j] 函数流程 Step1:输出最外行,即三角形两直角边的结果都为 1 ; Step2:讨论其余情况,相当于数组中的 a[i][j] = a[i-1][j-1] + a[i-1][j]。 3、main()函数 1为保证结果完整输出,先进行清屏; ○2输入要打印的行数,由于一行只能显示80个字符,建议不要超过13行; ○3用循环调用函数int num(int i , int j)○ 其中循环为三重循环:i 循环控制行打印 j 循环控制列打印 k 循环控制空格打印 每执行一次i 循环输出一个换行符,直角三角形定点放在第36个字符的位置上。 每个数字占6个字符的格。 1.3 程序运行截图 1.4 源程序代码 #include int num(i,j){ int i,j; if(I == j ||j == 0)return(1); else return(num(i-1 , j-1)+num(i-1 , j));} int main(void){ int n,k,i,j; clrscr(); puts(“input row n:”); scanf(“%d”,&n); for(i = 0;i < n;i++) { { for(k = 0;k < 36-3*i;k++) putchar(' '); } { for(j = 0;j <= i;j++) printf(“%6d”,num(i , j)); } puts(“"); } getch(); return 0; } 汉诺塔求解方法 2.1 系统分析 汉诺塔求解方法 2.2 设计说明 1、包含头文件: #include 其中,#include 2、子函数 函数名:void move(int n , char a , char b) 函数功能:打印移动的主子编号 函数参数:int n , char a , char b; 含义:n为移动的序数,a为源柱号,b目的柱号 函数流程 Step1:输出盘子移动情况; Step2:打印换行。 函数名:void hanoi(int n,char a,char b,char c) 函数功能:以游戏规则求解移动盘子的方法 函数参数:int n,char a,char b,char c; 含义:n移动的序数,a为源柱号,b为目的柱号,c为中间柱号 函数流程 Step1:递归调用函数 hanoi(n-1,a,c,b); Step2:调用函数move(n-1,a,b); Step3:继续递归调用函数hanoi(n-1,c,b,a); 3、主函数main()1为了使程序可以重复运行,定义了变量ch,当ch == N 时,退出游戏; ○2使用while()循环使游戏重复运行; ○3输入盘子的数目以调整游戏的难度; ○3调用函数hanoi()○ 2.3 程序运行截图 2.4 源程序代码 #include ”stdio.h“ #include ”ctype.h“ //应用函数toupper void move(int n,char a,char b) //n为移动的序数,a为源柱号,b目的柱号*/ { printf(”Disc%d move from %c to %c;“,(n+1),a,b); printf(”n“);} void hanoi(int n,char a,char b,char c){ //n移动的序数,a为源柱号,b为目的柱号,c为中间柱号 if(n>0) { hanoi(n-1,a,c,b); //递归调用 move(n-1,a,b); hanoi(n-1,c,b,a); } } main(){ int n; char ch ='Y'; printf(”Now let us play the game of hanoitowern“); while(ch == 'Y') //通用性设计 { printf(”n Input the number of disc[2-15]:“); scanf(”%d“,&n);getchar(); printf(”n The orders of moving %d discs from A to B are:n“,n); hanoi(n,'A','B','C'); //调用函数 printf(”n Continue(Y/N):“); ch=getchar(); getchar(); ch=toupper(ch);} return 0;} 3 输出200以内的素数 3.1功能说明 输出200以内的素数 3.2 设计说明 1、宏定义 #define M 200 //范围,表示输出200以内的素数 #define N((M+1)/2) //奇数的个数 处理流程: Step1:第一步筛选掉所有的偶数,将剩余的奇数存放在a[N]中; Step2:第二部筛选掉多有可以被整除的数 Step3:将得到的素数10个一行打印。 3.3 程序运行截图 3.4 源程序代码 #include ”stdio.h“ #define M 200 //范围 #define N((M+1)/2) //奇数的个数 main(){ int i,j,a[N]; a[0]=2; for(i=1;i //初始数组实现第一步筛选 a[i]=2*i+1; for(i=1;i<(N-1);i++) //第二步筛选 if(a[i]!=0) for(j=i+1;j if((a[j]%a[i]==0)) //倍数时置零筛去 a[j]=0; printf(”n The primer are[2-%d]:n“,M); for(i=0,j=0;i //显示得到素数 { if(a[i]!=0) { printf(”%5d“,a[i]); if((++j)%10==0) //十个数换行 printf(”n“); } } return 0;} 进制转换计算器 4.1功能说明 进行进制转换。 4.2 设计说明 1、处理流程: Step1:输入原始数值xa,原始权a,已经希望转换的进制b;Step2:逐位取值,将原始数值转换成10进制 Step3:逐位取值,将原始数值转换成b 进制 4.3程序运行截图 4.4 源程序代码 void main()#include ”stdio.h“ main() { int a=0,/*原始进制*/ b=8,/*转换进制,默认为八*/ k=1; /*位权*/ long xa=0,/*原始数值*/ xb=0,/*转换数值*/ x1=0,x2=0; /*十进制数值*/ printf(”n Input the number and weight a->b:“); scanf(”%ld%d%d“,&xa,&a,&b); x1=xa; while(x1!=0) /*转换为十进制数*/ { x2+=(x1%10)*k; /*逐位取值*/ x1/=10;k*=a; } k=1; x1=x2; while(x1!=0) /*转换为b进制数*/ { xb+=(x1%b)*k;x1/=b;k*=10; } printf(”n %ld(%d)=%ld(%d)=%ld(%d)“,xa,a,x2,10,xb,b); return;} 一元稀疏多项式 5.1 功能说明 求一元稀疏多项式的运算: 1、求两多项式加法; 2、求两多项式减法; 3、求两多项式乘法; 4、求两多项式导数; 5、求两多项式在x=m处的值。 5.2 设计说明 1、链表结点的定义: typedef struct polyn { float coef; //多项式系数 int expn; //多项式指数 struct polyn * prior,* next;} polyn, *linkpolyn; 2、子函数,多项式的基本运算。函数名:linkpolyn CREATEPOLYN()函数功能:创建多项式链表,在输入的时候进行升序排列 返回值:return head,即建立的多项式头结点 参数:linkpolyn head,含义:链表头结点 处理流程: Step1:输入第一个结点,且第一个结点自然有序; Step2:循环输入其余结点,当输入0 0是表示输入结束; Step3:输入过程中进行升幂排序,用二分法,找到新结点插入点; Step4:插入新结点;继续循环,直到输入0 0,循环结束,链表建立成功。Step5:返回建立链表头结点,函数结束。 函数名:linkpolyn DERIVATIONPOLYN(linkpolyn L)函数功能:多项式求导 返回值:return(head),即求导多项式的链表头结点 参数:linkpolyn L,含义:把建立好的链表A和B传递给L 处理流程: Step1:分别用指针指向L的头结点和求导多项式的头结点head; Step2:用循环逐个对L链表中的结点求导,一次存放在求导多项式中的新结点中; Step3:循环中考虑,当L链表中的结点仅存放一个常数,则跳过该结点,继续遍历下一结点; Step4:当循环结束,即L中的各项以被求导,返回求导多项式头结点head。 函数名:linkpolyn INITPOLYN()函数功能:链表初始化 返回值:return(head),即求导多项式生成的链表头结点 参数:无参数 处理流程: Step1:生成一个新的空间作为新结点; Step2:将新节点的coef域赋0,expn域赋-1,以区分其他节点; Step3:将头结点的前去指针和后即指针置空,并返回头结点。 函数名:void PRINTLIST(linkpolyn head)函数功能:以类数学表达式的形式打印 返回值:无返回值 参数:linkpolyn head,含义:处理过的链表头结点 处理流程: Step1:讨论是否链表为空,若为空,则输出0; Step2:若链表不为空,则输出第一个值,第一个值不用输出符号; Step3:用循环依次输出其余各项,附加符号输出; 函数名:linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B)函数功能:加法运算 返回值:return ptr,即和多项式的头结点 参数:linkpolyn A , linkpolyn B,含义:创建的链表A和B 处理流程: Step1:分别以两个指针pa和pb遍历链表A和B; Step2:当A和B两链表都为遍历完毕时,进行加法运算,分配新的空间存放和多项式,并用二分法进行升幂排序; Step3:当A遍历完毕而B未遍历完毕,将B其余各项拷贝到 和多项式链表中; Step4:当B遍历完毕而A未遍历完毕,将A其余各项拷贝到 和多项式链表中; 函数名:linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B)函数功能:计算A-B的值 返回值:return ptr,即差多项式的头结点 参数:linkpolyn A , linkpolyn B,含义:创建的链表A和B 处理流程: Step1:分别以两个指针pa和pb遍历链表A和B; Step2:当A和B两链表都为遍历完毕时,进行减法运算,分配新的空间存放和多项式,并用二分法进行升幂排序; Step3:当A遍历完毕而B未遍历完毕,将B其余各项拷贝到 和多项式链表中; Step4:当B遍历完毕而A未遍历完毕,将A其余各项拷贝到 差多项式链表中; Step5:返回多项式头结点 函数名:float WORK(float x,int e)函数功能:求x的幂 返回值:return t,即计算幂结果 参数:float x,int e,含义:x为输入的x的值,e为x的指数 处理流程: Step1:分别讨论正指数与负指数的的情况; Step2:若e>0,则累乘e次x; Step3:若e<0,则累除e次x;; Step4:将所求结果返回; 3、主函数main()Step1:依次调用函数进行运算操作; Step2:调用函数创建链表; Step3:调用函数进行运算; 5.3 程序运行截图 5.4 源程序代码 #include ”stdio.h“ #include typedef struct polyn { float coef;//多项式系数 int expn;//多项式指数 struct polyn * prior,* next;} polyn, *linkpolyn; void DESTROYPOLYN(linkpolyn head){ //销毁链表 linkpolyn s,p;p=head; while(p->next!= NULL){ s = p; p = p->next; free(s);} } //DESTROYPOLYN linkpolyn INITPOLYN(){ //链表初始化 struct polyn * head;head=(linkpolyn)malloc(sizeof(polyn));head->coef=0.0;//假设头结点系数为0 head->expn=-1;//假设头结点指数为-1 head->next=NULL;head->prior=NULL;return head;} //INITPOLYN void INSERTPOLYN(linkpolyn p,linkpolyn s){ //将结点s插入到p之后 if(NULL!= p->next){ s->next = p->next; s->next->prior = s;} s->prior = p;p->next = s; } //INSERPOLYN linkpolyn CREATEPOLYN(){ //创建多项式链表,在输入的时候进行升序排列 linkpolyn head,s,p,m,r; int num = 1;//计数器 head = INITPOLYN();//初始化链表 head r = head;//设置为指针 s=(linkpolyn)malloc(sizeof(polyn)); /******************************************/ printf(”请输入第%d项系数和指数:“,num);/**输入第一个结点,并且第一个结点自然有序**/ scanf(”%f%d“,&s->coef,&s->expn);/******************************************/ r->next = s;s->prior = r;r = r->next;//r指向尾结点 r->next = NULL;p = r;//p为s的插入点前一个结点 m = r;//m为拍完结点中间的节点,二分法排序 while(++num)//while # 当将 s->coef 与 s->expn 都赋值为0的时候,认为输入结束 { s =(linkpolyn)malloc(sizeof(polyn));printf(”请输入第%d项系数和指数:“,num);scanf(”%f%d“,&s->coef,&s->expn); if((fabs(s->coef)<= FZ)&&(s->expn == 0))//if @ { free(s); break; } //else @ else //else @ { if(s->expn <= p->expn)//if # { while(p->prior!= NULL && p->expn > s->expn) p = p->prior;//p向前遍历链表,找到插入点 if(s->expn == p->expn) { p->coef += s->coef; free(s); r=r; } else { INSERTPOLYN(p,s);//在p后面插入结点s m = m->prior; p = m; } } // if # else //else # { while(p->next!= NULL && p->next->expn < s->expn) p = p->next;//p向后遍历链表,找到插入点 if(s->expn == p->expn) { p->coef += s->coef; free(s); } else { INSERTPOLYN(p,s); if(s->expn > r->expn) { r = r->next; r->next = NULL; } } } //else # } //else @ } //while # return head;} //CREATEPOLYN void PRINTPOLYN(linkpolyn head){ //以类数学表达式的形式打印 linkpolyn p; p = head->next;if(p == NULL)//链表为空 puts(”0“);else //else @ { //链表不为空,输出第一个结点的值 if(p->expn == 0)printf(”%f“,p->coef);//指数为0时不输出x else { if(p->coef==1)printf(”x^%d“,p->expn);/**************************/ else if(p->coef ==-1)printf(”-x^%d“,p->expn);/**第一项前不需要输出符号**/ else printf(”%gx^%d“,p->coef,p->expn);/**************************/ } p = p->next;while(p!= NULL) { //依次输出以后各节点 if(p->coef>0) { //当系数为正时,讨论输出符号问题 if(p->expn == 0)printf(”+%g“,p->coef);else if(p->coef == 1)printf(”+x^%d“,p->expn);else printf(”+%gx^%d“,p->coef,p->expn); } else { //当系数为负时,讨论输出符号问题 if(p->expn == 0)printf(”%g“,p->coef);else if(p->coef ==-1)printf(”-x^%d“,p->expn);else printf(”%gx^%d“,p->coef,p->expn); } p = p->next; } } //else @ } //PRINTPOLYN linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B){ //加法 linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多项式头结点初始化 ptr = q;//ptr指向和多项式头结点 while((qa!= NULL)&&(qb!= NULL)){ //升幂求和 if(qa->expn == qb->expn)//指数相同的项 { x = qa->coef + qb->coef;//系数相加 if(x!= 0)//求得系数非0 { q->next =(linkpolyn)malloc(sizeof(polyn));// q = q->next; q->coef = x; q->expn = qa->expn; } 生成和多项式的节结点 qa = qa->next; qb = qb->next; } else //指数不同 { q->next =(linkpolyn)malloc(sizeof(polyn)); q = q->next; if(qa->expn > qb->expn)//A多项式当前指数大于B { q->coef = qb->coef;//B多项式当前的值复制到和多项式中 q->expn = qb->expn; qb = qb->next; } else //B多项式当前指数大于A { q->coef = qa->coef;//A多项式当前的值复制到和多项式中 q->expn = qa->expn; qa = qa->next; } } } //A或B中有一个多项式已经处理完毕 while(qa!= NULL)//A未处理完毕,将其余各项复制到和多项式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qa->coef; q->expn = qa->expn; qa = qa->next;} while(qb!= NULL)//B未处理完毕,将其余各项复制到和多项式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qb->coef; q->expn = qb->expn; qb = qb->next;} q->next = NULL;//令和多项式最末的节点指向头结点 return ptr;//返回多项式头指针 } //LINKPOLYN linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B){ //减法 linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多项式头结点初始化 ptr = q;//ptr指向和多项式头结点 while((qa!= NULL)&&(qb!= NULL)){ //升幂求差 if(qa->expn == qb->expn)//指数相同的项 { x = qa->coef-qb->coef;//多项式A的系数减去B的系数 if(x!= 0)//求得系数非0 { q->next =(linkpolyn)malloc(sizeof(polyn));//生成和多项式的节结点 q = q->next; q->coef = x; q->expn = qa->expn; } qa = qa->next; qb = qb->next; } else //指数不同 { q->next =(linkpolyn)malloc(sizeof(polyn)); q=q->next; if(qa->expn > qb->expn)//A多项式当前指数大于B { q->coef =-(qb->coef);//B多项式当前的值复制到和多项式中 q->expn = qb->expn; qb = qb->next; } else //B多项式当前指数大于A { q->coef = qa->coef;//A多项式当前的值复制到和多项式中 q->expn = qa->expn; qa = qa->next; } } } //A或B中有一个多项式已经处理完毕 while(qa!= NULL)//A未处理完毕,将其余各项复制到和多项式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef = qa->coef; q->expn = qa->expn; qa = qa->next;} while(qb!= NULL)//B未处理完毕,将其余各项复制到和多项式中 { q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next; q->coef =-(qb->coef); q->expn = qb->expn; qb = qb->next;} q->next = NULL;//令和多项式最末的节点指向头结点 return ptr;//返回多项式头指针 } //SUBTRACTPOLYN linkpolyn MULTIPLYPOLYN(linkpolyn A,linkpolyn B){ //乘法 linkpolyn pa,pb,s,head,m,r,p;pa = A->next;pb = B->next;head = INITPOLYN();r = head; s=(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;//计算第一个结点,并且第一个结点自然有序 s->expn = pa->expn + pb->expn;r->next = s;s->prior = r;r =r->next;r->next = NULL;p=r;//p为插入点前一结点 m=r;//m指向排完结点中间节点 pb=pb->next;// 第一个乘积处理完毕 for(pa= A->next;pa!= NULL;pa=pa->next)//for pa 处理其余乘积 { //用A的第一个结点分别与B的其余结点相乘 if(pa == A->next) pb = B->next->next; else pb = B->next; for(;pb!= NULL;pb = pb->next)//for pb { s =(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef; s->expn = pa->expn + pb->expn;if(s->expn <= p->expn)//if # { while(p->prior!=NULL && p->expn > s->expn)p=p->prior;//p向前遍历链表,找到插入点 if(s->expn==p->expn) { p->coef+=s->coef; free(s); } else { INSERTPOLYN(p,s);//在p后面插入结点s m=m->prior; p=m; } } // if # else //else # { while(p->next!=NULL && p->next->expn < s->expn) p=p->next;//p向前遍历链表,找到插入点 if(s->expn==p->expn) { p->coef+=s->coef; free(s); } else { INSERTPOLYN(p,s); if(s->expn > r->expn) { r=r->next; r->next=NULL; } } } //else # } //for pb } //for pa return head;} //MULTIPLYPOLYN linkpolyn DERIVATIONPOLYN(linkpolyn L){ //多项式求导 linkpolyn head,p,s,r;head = INITPOLYN();//head为求导多项式头结点 r = head;p = L->next;while(p!= NULL){ if(p->expn == 0) { p = p->next;continue;} s =(linkpolyn)malloc(sizeof(polyn));s->coef = p->coef * p->expn;s->expn = p->expn-1;s->prior = r; r->next = s; r = r->next; r->next = NULL; p = p->next;} return(head);} //DERIVATIONPOLYN float WORK(float x,int e){ //求x的幂 float t = 1;if(e>0){ while(e) { t *= x;e--;} } if(e<0){ while(e) { t *= 1/x;e++;} } return(t);} //WORK float CALCULATEPOLYN(linkpolyn head,float x){ //计算多项式在x处的值 float t = 0;linkpolyn p;p = head->next;while(p){ t = t +((p->coef)*(WORK(x,p->expn)));p = p->next;} return(t);} //CALCULATEPOLYN int main(void){ linkpolyn A, B,addp,decp,mulp,derp1,derp2;int i;float x;start: system(”cls“);printf(”一元稀疏多项式计算nn“);printf(”1.建立多项式n“);printf(”2.多项式加法n“);printf(”3.多项式减法n“);printf(”4.多项式乘法n“);printf(”5.计算多项式在x处的值n“);printf(”6.对多项式求导n“);printf(”7.清空数据n“);printf(”8.关闭计算器n“);printf(”请输入选项(1~7):“);scanf(”%d“,&i);switch(i){ case(1): system(”cls“);printf(”建立多项式nn“);printf(”建立多项式A,当输入0 0 时表示出入完毕n“);A = CREATEPOLYN();printf(”建立多项式成功n“);printf(”建立多项式B,当输入0 0 时表示出入完毕n“);B = CREATEPOLYN();printf(”建立多项式成功n“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B); printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(2): system(”cls“);printf(”多项式加法nn“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);addp = ADDPOLYN(A,B);printf(”多项式A+B:“);PRINTPOLYN(addp);printf(”n“);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(3): system(”cls“);printf(”多项式减法nn“);printf(”多项式B:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);decp = SUBTRACTPOLYN(A,B);printf(”多项式A-B:“);PRINTPOLYN(decp);printf(”n“);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(4): system(”cls“);printf(”多项式乘法nn“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);mulp = MULTIPLYPOLYN(A,B);printf(”多项式AB:“);PRINTPOLYN(mulp);printf(”n“);printf(”nn输入回车返回上一级“); getchar();getchar();goto start;case(5): system(”cls“);printf(”计算多项式在x处的值n“);printf(”请输入x的值:“);scanf(”%f“,&x);printf(”n多项式A:“);PRINTPOLYN(A);printf(”n值为:%f“,CALCULATEPOLYN(A,x));printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n值为:%f“,CALCULATEPOLYN(B,x));printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(6): system(”cls“);printf(”多项式求导n“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);derp1 = DERIVATIONPOLYN(A);printf(”求导后A':“);PRINTPOLYN(derp1);printf(”n“);derp2 = DERIVATIONPOLYN(B);puts(”求导后B':“);PRINTPOLYN(derp2);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(7): system(”cls“);DESTROYPOLYN(A);DESTROYPOLYN(B);DESTROYPOLYN(addp);DESTROYPOLYN(decp);DESTROYPOLYN(mulp);DESTROYPOLYN(derp1);DESTROYPOLYN(derp2);printf(”已清空所有数据n“);printf(”nn输入回车返回上一级“);getchar();getchar(); goto start;case(8): printf(”退出");} return(0);} C语言课程设计报告 1.实验题目:职员信息管理系统 2.数据结构:整型int,字符型char,长整型long,结构体及结构体数组 3.源代码 : #include“stdio.h” #include“string.h” #define N 20 /*符号常量的定义*/ struct employee /*定义结构体类型employee*/ { char name[15];char sex;long num; /*职工工号可能较长,定义为长整型*/ char debt[15];int salary;char office[15];char tel[15];}emp[N]; /*定义结构体数组,并将其作为全局变量*/ void menu(){ int i;printf(“请选择您的操作:n”);printf(“tt1.增加职工信息n”);printf(“tt2.查找职工信息n”);printf(“tt3.显示所有职工信息n”);printf(“tt4.删除职工信息n”);printf(“tt0.退出n”);printf(“请选择按键!(0-4):n”);scanf(“%d”,&i); /*从键盘输入数据并将其值赋给i*/ void input();void search(); void show();void omit(); /*被调函数定义出现在主调函数之后,应对其进行原型说明*/ switch(i) /*使用switch语句,根据i的数值,进入相应的操作环境*/ { case 1:input();break; case 2:search();break; /*在switch语句中掌握对break的使用*/ case 3:show();break;case 4:omit();break; /*实现函数的调用*/ case 0: { printf(“tt-----n”);printf(“tt谢谢您对本公司职工信息管理程序的使用n”); printf(“tt-----n”);}break; default:printf(“您输入的数据有误,请确认后重新输入!n”);menu();} } void fun(int i) /*search()函数和omit()函数都对此函数进行调用,输出相应职工信息*/ { printf(“职工信息找到!!信息如下:n”);printf(“姓名t工号t性别t部门t工资t职位t电话n”);printf(“%st%ldt%ct%st%dt%st%sn”,emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,emp[i].salary,emp[i].office,emp[i].tel);} void input() /*定义input()函数,实现职工信息的录入功能*/ { int i,j,k,a;for(i=0;i /*使用条件语句,防止原有的职工信息被覆盖*/ { printf(“增加职工信息时:n”);printf(“请输入职工姓名:”);fflush(stdin); /*刷新缓冲区,下同*/ gets(emp[i].name); /*使用gets()函数实现字符串的输入,下同*/ do { printf(“请输入职工号:”);scanf(“%d”,&a);for(k=0;k if(k /*判断所输入工号是否已存在*/ printf(“该工号已存在,请重新输入!n”);}while(k /*do-while语句控制本层循环*/ emp[i].num=a;printf(“请输入职工性别,男(M)女(F):”);fflush(stdin);emp[i].sex=getchar(); /*使用getchar()函数实现字符的输入*/ printf(“请输入职工部门:”);fflush(stdin);gets(emp[i].debt);printf(“请输入职工工资:”);scanf(“%d”,&emp[i].salary);printf(“请输入职工职位:”);fflush(stdin);gets(emp[i].office);printf(“请输入职工联系电话:”);fflush(stdin); gets(emp[i].tel);printf(“职工添加成功!!n”);printf(“还继续增加吗?继续请输入1否则输入0:n”);scanf(“%d”,&j);if(j==0)break; /*使用break语句,在条件成立时跳出for循环*/ } menu(); /*不再添加职工信息时,返回到目录函数menu()*/ } void search() /*定义search()函数,实现职工信息的查找功能*/ { int i,j,number;printf(“请输入要查找的职工号:”); scanf(“%d”,&number);for(i=0;number!=emp[i].num&&i /*i /*函数的递归调用*/ else menu(); /*不再查找职工信息时,返回到目录函数menu()*/ } void show() /*定义show()函数,实现职工信息的显示功能*/ { printf(“%st%ldt%ct%st%dt%st%sn”,emp[i].name,emp[i].num,emp[i].sex,emp[i].debt,emp[i].salary,emp[i].office,emp[i].tel);menu(); /*输出所有信息后,返回到目录函数menu()*/ } void omit() /*定义omit()函数,实现职工信息的删除功能*/ { int i;printf(“所有职工信息如下:n”);printf(“姓名t工号t性别t部门t工资t职位t电话n”);for(i=0;i /*利用for循环输出所有职工信息*/ int i,j,a,number;printf(“请输入要删除的职员号:”);scanf(“%d”,&number);for(i=0;number!=emp[i].num&&i /*i scanf(“%d”,&a);if(a==1){ strcpy(emp[i].name,“"); /*确定删除后,还原结构体成员*/ } emp[i].num=0;emp[i].sex=' ';strcpy(emp[i].debt,”“);emp[i].salary=0;strcpy(emp[i].office,”“);strcpy(emp[i].tel,”“);printf(”删除成功!!n“);} else printf(”无对应信息,请重新查找!!n“);printf(”还继续删除吗?继续请输入1否则输入0:n“);scanf(”%d“,&j);if(j==1)omit(); /*函数的递归调用*/ else { printf(”删除成功后“);show(); /*调用show()函数,输出删除成功后所有职工信息*/ } } void main() /*程序由主函数开始运行*/ { int i;for(i=0;i /*利用for循环语句对结构体数组赋初值*/ emp[i].num=0;emp[i].sex=' ';strcpy(emp[i].debt,”“);emp[i].salary=0;strcpy(emp[i].office,”“);strcpy(emp[i].tel,”“);} printf(”tt----------------------------n“);printf(”tt欢迎进入公司职工信息管理程序n“); printf(”tt----------------------------n"); menu();} 4.每种情况下的运行结果截图 1.判断输入数据是否有误的运行结果截图 2.增加职工信息并确保工号不重复时的运行结果截图 3.查找职工信息时的运行结果截图 4.显示所有职工信息时的运行结果截图 5.删除职工信息,并通过显示所有职工信息验证该信息是否确实被删除时的运行结果截图 6.继续添加职工信息时的运行结果截图 7.显示最后的所有职工信息时的运行结果截图 8.退出该系统时的运行结果截图 5.学习心得体会: 学习C语言程序设计这门课一个学期了,这是我所学的第一门计算机课程,作文一名当代的大学生,我认为这十分重要。记得宇文老师在第一节课就说过,C语言是计算机的基础,通过一个学期的学习,使我掌握了关于这门课的基本知识。这次的课程设计是对我们一个学期来所学的知识的综合考察,里面涉及到了我们大多数所学知识。记得刚开始学这门课的时候,自己很有信心学好这门课,但是经过一段时间的学习之后。才发现程序设计并不好学,它既要我们有很强的领悟能力,还需要课后的努力。之后,随着时间的推移,我慢慢掌握了这门课学习的一些窍门,学习起来也比刚开始的时候好了很多,虽然编程有时还会有错误,但比以前少了很多。这次的课程设计要求我们编一个简单的公司职工信息管理系统,在编程过程中我走了很多弯路,也犯过了很多错误。最终在其他同学的帮助和宇文老师的指导下我完成了这次课程设计,因此对C语言也有了更多的理解和体会。今后我会通过课外学习了解更多的C语言知识!第四篇:C语言课程设计报告
第五篇:C语言课程设计报告