C语言课程设计报告类型1.docx
《C语言课程设计报告类型1.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告类型1.docx(56页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告类型1
C语言课程设计报告
ExperimentDesigningreporter
课程名称:
C语言课程设计
英文名称:
CProgramExperimentDesigning
专业:
学号:
姓名:
指导教师:
日期:
2010年7月12日 至2010年7月23日
学院
《C语言课程设计》报告
CProgramExperimentDesigning
课程编号:
01200308005学时:
40学时
适用专业:
软件工程专业授课单位:
软件学院
一、C语言课程设计目的及要求
目的:
根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。
要求:
1.熟悉TurboC的编程环境、主要菜单功能。
2.通过上机验证运算符、表达式、运算规则、函数使用。
3.熟练使用C语言的典型语句编写简单程序。
4.调试典型例题或习题。
5.提高上机编程能力
二、实验类型
设计类型
三、实验学时
40学时
四、实验设备
微型计算机、WINDOWSXP以上版本的操作系统、TurboC2.0软件一套
五、C语言课程参考教材:
[1]黄明等.C语言程序设计辅导教材.大连理工大学出版社,2006
[2]李瑞等.C程序设计基础,清华大学出版社,2008
[3]谭浩强.C语言程序设计(第二版).北京:
高等教育出版社,2002
课程设计(报告)任务书
任务及要求:
1.设计(研究)内容和要求
研究内容:
1、输入实型数a、b、c,要求按由大到小的顺序输出(函数参数要用指针)。
2、编写一个通用的子函数,将一个一维数组进行逆序存储(第一个元素与最后一个元素值互换,依次类推.....)。
3、编写一个通用的求n×n阶矩阵的对角线元素之和。
4、编写程序,输入10个员工的编号、姓名、基本工资、职务工资,求出“基本工资+职务工资”最少的职工(要求用子函数完成),并输出该职工记录。
5、有5个学生4门课,编写程序算出4门课的总成绩,并按总成绩进行排序,然后打印出成绩表。
6、用户由键盘输入一个文件名,然后输出一串字符(用#结束输入),存放到此文件并将字符的个数写到文件尾部。
7、有5个学生,每个学生有三门课的成绩。
从键盘输入以上数据(包括学生号、姓名号、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存在磁盘文件stud中。
8、学生成绩管理系统。
任务和要求:
(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
2010年7月12日
[说明:
学生打印稿不能出现,字体要求等说明文字]
1按大小排序输出
1.1系统分析
输入实型数a、b、c,要求按由大到小的顺序输出(函数参数要用指针)。
1.2设计说明
1、子函数,交换两个地址的数值
函数名:
swap()
返回值:
无
参数:
float*x、float*y,含义:
指针(指向数值)
处理流程:
Step1:
定义变量z,作为交换时的暂存变量。
Step2:
将数值*x赋给z
Step3:
将数值*y赋给*x
Step4:
将数值z赋给*y
2、主函数main():
从键盘上输入a、b、c三个数,然后进行判断三个变量中数值的大小关系。
调用子函数swap()交换,使最终结果为a>b>c。
最后输出a、b、c。
1.3程序运行截图
1.4源程序代码
#include"stdio.h"
voidswap(float*x,float*y)
{
floatz;
z=*x;
*x=*y;
*y=z;
}
voidmain()
{
floata,b,c;
scanf("%f%f%f",&a,&b,&c);
if(a
swap(&a,&b);
if(aswap(&a,&c);
if(bswap(&b,&c);
printf("Afterswap:
a=%f,b=%f,c=%f\n",a,b,c);
}
2逆序存储
2.1功能说明
编写一个通用的子函数,将一个一维数组进行逆序存储(第一个元素与最后一个元素值互换,依次类推.....)。
2.2设计说明
1、子函数:
(1)子函数1,交换x[i]与x[n-i-1]的数值
函数名:
afterward()
返回值:
无
参数:
float*x,,含义:
数组首地址;intn,含义:
数组元素个数。
处理流程:
Step1:
定义变量z,作为交换时的暂存变量;定义变量i,循环时使用。
Step2:
在for循环时交换x[i]与x[n-i-1]的数值。
(2)子函数2,输出数值
函数名:
printarray()
返回值:
无
参数:
float*x,,含义:
数组首地址;intn,含义:
数组元素个数
处理流程:
Step1:
定义变量i,循环时使用。
Step2:
在循环时输出数值。
2、主函数main()
从键盘上输入10个数,给一维数组x[n]赋初值。
调用afterward()交换x[i]与x[n-i-1]的数值。
再调用printarray(),输出交换后数值。
2.3程序运行截图
2.4源程序代码
#include"stdio.h"
voidafterward(float*x,intn)
{
floatz;
inti;
for(i=0;i{
z=*(x+i);
*(x+i)=*(x+n-1-i);
*(x+n-1-i)=z;
}
}
voidprintarray(float*x,intn)
{
inti;
for(i=0;i{
printf("%f",x[i]);
}
printf("\n");
}
main()
{
floata[10]={1.,2.,3.,4.,5.,6.,7.,8.,9.,10.};
afterward(a,10);
printarray(a,10);
}
3n×n阶矩阵的对角线元素之和
3.1功能说明
编写一个通用的求n×n阶矩阵的对角线元素之和。
3.2设计说明
1、N的定义:
#defineN4
2、子函数,将对角线上的数值相加。
函数名:
corner()
返回值:
sum,对角线上数值之和。
参数:
int*x,含义:
数组首地址;intn,含义:
数组行列数。
处理流程:
Step1:
定义变量sun,存放对角线上数值之和的数值;定义变量i,循环时使用。
Step2:
在for循环时将行列数相等的数组数值加到变量sun中。
Step3:
判断另一条对角线上的数是否加重复,即是否为奇数矩阵的对角线中心。
Step4:
若为奇数矩阵的对角线中心数,则不加入sun,若不是奇数矩阵的对角线中心数,则加入sun中。
3、主函数main()
定义二维数组a[N],给二维数组a[N]赋初值1~16(如下图)。
定义sum,再调用corner()计算对角线上的数值,将值赋给sum,输出数值sum。
3.3程序运行截图
3.4源程序代码
#defineN4
#include"stdio.h"
intcorner(int*x,intn)
{
inti,sum=0;
for(i=0;i{
sum=sum+*(x+i);
if(x+i!
=x+n-1-i)
{
sum+=*(x+n-i-1);
}
x=x+n;
}
returnsum;
}
voidmain()
{
inta[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
intsum;
sum=corner(*a,4);
printf("%d\n",sum);
}
4职工信息管理
4.1系统分析
编写程序,输入10个员工的编号、姓名、基本工资、职务工资,求出“基本工资+职务工资”最少的职工(要求用子函数完成),并输出该职工记录。
4.2设计说明
1、结构体employee的定义:
intnum,员工编号
charname[20],员工姓名
floatjbgz,员工基本工资
floatzwgz,员工职务工资
floatsum,工资总和=基本工资+职务工资
2、子函数:
子函数
(1):
函数名:
sum()
返回值:
无
参数:
structemployee*p,含义:
员工信息;intn,含义:
数组元素个数。
处理流程:
Step1:
定义i,循环时使用。
Step2:
在for循环的同时,将jbgz与zwgz的和赋值给sum。
子函数
(2):
函数名:
find()
返回值:
无
参数:
structemployee*p,含义:
员工信息;intn,含义:
数组元素个数。
处理流程:
Step1:
定义i,循环时使用。
Step2:
在for循环的同时,判断选出sum最小的员工。
Step3:
输出员工的基本信息。
3、主函数main()
首先进行函数的声明,定义员工的基本信息(举例为五个员工,信息如下图),调用函数sum()和find(),输出结果。
4.3程序运行截图
4.4源程序代码
#include"stdio.h"
structemployee
{
intnum;
charname[20];
floatjbgz;
floatzwgz;
floatsum;
};
voidmain()
{
voidsum(structemployee*,int);
voidfind(structemployee*,int);
structemployeea[10]={11,"wangLi",660.,760.,0.,
13,"wangLin",690.,740.,0.,
16,"LiuHua",860.,760.,0.,
14,"ZhangJun",660.,660.,0.,
22,"XuXia",650.,760.,0.};
sum(a,5);
find(a,5);
}
voidsum(structemployee*p,intn)
{
inti;
for(i=0;i{
p->sum=p->jbgz+p->zwgz;
p++;
}
}
voidfind(structemployee*p,intn)
{
structemployee*pmax=p;
inti;
for(i=1;iif((p+i)->sum>pmax->sum)pmax=p+i;
printf("Theperson'sinformation:
\nnumber=%d,\nname=%s,\nbasicsalary=%.2f,\njobsalary=%.2f,\ntotal=%.2f\n",pmax->num,pmax->name,pmax->jbgz,pmax->zwgz,pmax->sum);
}
5学生成绩处理
5.1系统分析
有5个学生4门课,编写程序算出4门课的总成绩,并按总成绩进行排序,然后打印出成绩表。
5.2设计说明
1、结构体student的定义:
intnum,学生学号
charname[20],学生姓名
charsex,学生性别
floats[4],学生四门课的成绩
floatsum,学生成绩总和
2、子函数:
子函数
(1):
函数名:
sum()
返回值:
无
参数:
structstudent*p,含义:
学生信息;intn,含义:
结构体个数。
处理流程:
Step1:
定义i、j,循环时使用。
定义变量d。
Step2:
在for循环的同时,将各成绩之和的和赋值给d,在将d的数值赋给sum。
子函数
(2):
函数名:
sort()
返回值:
无
参数:
structstudent*p,含义:
学生信息;intn,含义:
结构体个数。
处理流程:
Step1:
定义i、j,循环时使用。
定义变量k。
Step2:
在for循环的同时,按sum数值由小到大排列学生信息。
子函数(3):
函数名:
print()
返回值:
无
参数:
structstudent*p,含义:
学生信息;intn,含义:
结构体个数。
处理流程:
Step1:
定义i,循环时使用。
Step2:
在for循环的同时,将排列好的学生信息输出。
3、主函数main()
首先进行函数的声明,定义学生的基本信息(举例为五个学生,信息如下图),调用函数sum()、sort()和print(),输出结果。
5.3程序运行截图
5.4源程序代码
#include"stdio.h"
structstudent
{
intnum;
charname[20];
charsex;
floats[4];
floatsum;
};
voidmain()
{
voidsum(structstudent*,int);
voidsort(structstudent*,int);
voidprint(structstudent*,int);
structstudenta[5]={11,"wangli",'f',66.,76.,83.,61.,0.,13,"wanglin",'m',69.,74.,63.,91.,0.,16,"liuhua",'m',86.,76.,93.,61.,0.,14,"zhangjun",'m',66.,66.,83.,61.,0.,22,"xuxia",'f',65.,76.,93.,68.,0.,};
sum(a,5);
sort(a,5);
print(a,5);
}
voidsum(structstudent*p,intn)
{
inti,j;
floatd;
for(i=0;i{
d=0.0;
for(j=0;j<4;j++)
d+=p->s[j];
p->sum=d;
p++;
}
}
voidsort(structstudent*p,intn)
{
structstudentt;
inti,j,k;
for(i=0;i{
k=i;
for(j=i+1;jif((p+k)->sum<(p+j)->sum)k=j;
if(k!
=i)
{t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}
}
}
voidprint(structstudent*p,intn)
{
inti;
for(i=0;i{printf("%-10d%-10s%5c%10.1f%5.1f%5.1f%5.1f%10.1f\n",p->num,p->name,p->sex,p->s[0],p->s[1],p->s[2],p->s[3],p->sum);
p++;
}
}
6文件处理
6.1系统分析
用户由键盘输入一个文件名,然后输出一串字符(用#结束输入),存放到此文件并将字符的个数写到文件尾部。
6.2设计说明
1、主函数main()
定义文件fp,字符(串)变量ch,fname[32],定义整型变量count。
输入文件名(若不存在,则退出程序),输入字符串(以‘#’结束)。
程序将文件中的字符数统计后写入文件尾部。
6.3程序运行截图
6.4源程序代码
#include"stdio.h"
main()
{
FILE*fp;
charch,fname[32];
intcount=0;
printf("Inputthefilename:
");
scanf("%s",fname);
if((fp=fopen(fname,"w+"))==NULL)
{
printf("Can'topenfile:
%s\n",fname);
exit(0);
}
printf("Enterdata:
\n");
while((ch=getchar())!
='#')
{
fputc(ch,fp);
count++;
}
fprintf(fp,"\n%d\n",count);
fclose(fp);
}
7成绩存储
7.1系统分析
有5个学生,每个学生有三门课的成绩。
从键盘输入以上数据(包括学生号、姓名号、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存在磁盘文件stud中。
7.2设计说明
1、结构体student的定义:
charname[10];学生姓名
ints[3];三门课的成绩
floatave;各科平均分
2、主函数main()
定义文件fp,结构体studentst[5],变量i,打开文件stud(若不存在,则退出程序),输入学生信息,并计算平均分。
然后将原有数据和计算出的平均分数存在磁盘文件stud中。
7.3程序运行截图
7.4源程序代码
#include"stdio.h"
structstudent
{
charname[10];
ints[3];
floatave;
};
main()
{
FILE*fp;
inti;
structstudentst[5];
if((fp=fopen("stud","w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;i<5;i++)
{
printf("number%dinputnameand3scores:
\n",i+1);
scanf("%s%d%d%d",&st[i].name,&st[i].s[0],&st[i].s[1],&st[i].s[2]);
st[i].ave=(st[i].s[0]+st[i].s[1]+st[i].s[2])/3.0;
fprintf(fp,"%s%d%d%d\n",
st[i].name,st[i].s[0],st[i].s[1],st[i].s[2]);
}
fclose(fp);
}
8图书馆借阅管理系统
8.1系统分析
建立图书馆借阅管理系统,采用计算机对图书馆进行图书管理、会员管理、工作人员信息查询和图书馆反馈信息的查询。
8.2设计说明
1.进入系统(如图1)
2.功能说明:
1)图书管理功能
(1)增加图书:
将新进的图书添加到图书库中,便于管理!
通过bookadd函数实现;用户需按ALT+B组合键,选择Book功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Add选项,按回车键进入图书添加功能,窗口中会显示Pleaseinputthebooknum的提示话语,用户输入书号即可;(如图2、图3)
(2)删除图书:
删除丢失或废弃的图书。
通过bookdel函数实现;用户需按ALT+B组合键,选择Book功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Del选项,按回车键进入图书删除功能,窗口中会显示Pleaseinputthebookname的提示话语,输入书名,点击回车,所要删除的图书即可删除;(如图4)
(3)查询图书:
对已经加入到图书库中的图书进行查询(书号,书名,书的价钱等),
通过bookconsult函数实现;用户需按ALT+B组合键,选择Book功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Consult选项,按回车键进入图书查询功能,窗口中会显示Pleaseinputthebookname的提示话语,用户输入书名,系统会显示图书的编号,书名,价钱及借阅情况等;(如图4)
(4)图书的借阅:
对于借阅的图书进行记录,便于管理,通过bookborrow函数实现;用户需按ALT+B组合键,选择Book功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Borrow选项,按回车键进入图书借阅功能,窗口中会显示Pleaseinputthemembername的提示话语,输入会员名即可,若是非会员,窗口则显示Youarenotmember,pleaseregister!
的提示话语;(如图5)
(5)图书的归还:
对于借出图书后的归还进行记录,并将图书返回书库。
通过Bookreturn函数实现;用户需按ALT+B组合键,选择Book功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Return选项,按回车键进入图书归还功能,窗口中会显示Pleaseinputthebookname的提示话语,输入书名即可,若是非书库中的书,窗口会显示ReturnFail!
的提示话语。
(如图6)
2)会员管理功能
(1)添加会员:
添加已经办理好会员手续的人资料,便于管理!
通过memberadd函数实现;用户需按ALT+M组合键,选择Member功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Add选项,按回车键进入会员添加功能,窗口中会显示Pleaseinputnewmembername的提示话语,输入姓名即可,然后用户输入会员的性别和年龄,按回车键添加成功;(如图7)
(2)删除会员:
对退出会员的人进行删除。
通过memberdel函数实现;用户需按ALT+M组合键,选择Member功能菜单,待下拉菜单弹出之后,用户调整方向键,选择Del选项,按回车键进入会员删除功能,窗口中会显示P