c语言程序设计报告
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
15
积分
还剩页未读,继续阅读
关 键 词:语言程序设计
报告
资源描述:
课 程 设 计 报 告
课程设计名称: C程序设计
系 别:
学 生 姓 名 :
班 级 :
学 号 :
成 绩 :
指 导 教 师 :
开 课 时 间 :2011-2012学年二学期
第一章菜单设计
1.1设计题目及要求1
1.2设计思路3
1. 3流程图4
1. 4具体实现4
1.5程序运行截图7
第二章使用数组合指针统计成绩8
2.1设计题目及要求8
2.2设计思路8
2.3流程图9
2.4具体实现9
2.5程序运行截图11
第三章学生成绩管理系统12
3.1设计题目及要求12
3.2设计思路13
3.3流程图14
3.4具体实现14
3.5程序运行截图20
小结……………………………………………………………………………………..23
参考文献24
第一章 菜单设计
1. 1设计题目及要求
一.菜单内容:
程序运行后,给出5个菜单项的内容和输入提示:
1. FindNum
2. FindRoot
3. Bear
4. Diamond
5. Goodbye
二、设计要求
使用数字1-5来选择菜单项,其它输入则不起作用:
三、增加菜单项的处理功能
l FindNum功能:一只老鼠咬坏了账本,公式中符号()代表是被老鼠咬掉的地方。要想恢复下面的等式,应在()中填上哪个相同的数字
l FindRoot这里要求编制一个求方程ax^2+bx+c=0的根程序
l Bear本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊。以后每天都吃前一天的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米
l Diamond
l Goodbye!
1. 2设计思路
菜单是应用程序的界面,本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。
具体方法:
首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试结构可知,当选择相应选择项时候,其输出信息为:FindNum、FindRoot、Bear、Diamond、Goodbye!
(1)使用switch语句实现功能选择
(2)应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供给switch语句使用
1. 3流程图
开始
输入1~5的数字
处理输入给switch语句调用相应函数
Goodbye
Diamond
Bear
FindRoot
FindNum
结束
1. 4具体实现
程序的源代码如下:
#include #include #include #include void FindNum ();
void FindRoot();
void Bear();
void Diamond();
int main ()
{int a;
printf("菜单内容:\n");
printf("1.FindNum \n");
printf("2.FindRoot \n");
printf("3.Bear \n");
printf("4.Diamond \n");
printf("5.Goodbye \n");
printf("\n");
printf("***********************\n" ); // 打印的界面
printf("请输入相应选择项:\n");
while(1)
{scanf("%d",&a);
switch(a)
{
case 1:FindNum();break;
case 2:FindRoot();break;
case 3:Bear();break;
case 4:Diamond();break;
case 5:printf("Goodbye\n");exit(0);
default:printf("您输入有误,请重新输入\n"); break;}
}
return 0;
}
void FindNum () // FindNum函数
{int i,j;
printf("一只老鼠咬坏了账本\n");
printf("公式中符号()代表是被老鼠咬掉的地方\n");
printf(" 即表示为 3()*6237=()3*3564\n");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if((3*10+i)*6237==(j*10+3)*3564)
printf("被老鼠咬掉的地方分别是数字 %2d,%2d\n\n",i,j);
}
void FindRoot() //FindRoot函数
{
float x1,x2;
float a,b,c,delta;
printf("请输入三个数字\n");
printf("求方程ax^2+bx+c=0的根\n");
scanf("%f%f%f",&a,&b,&c);
delta=b*b-4*a*c;
if(delta>0)
{x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("方程的根为x1=%4f,x2=%4f\n\n",x1,x2);}
else
if(delta==0)
{ x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("方程的根为x1=x2=%4f\n\n",x1,x2);}
else
printf("方程无根\n\n");
}
void Bear() // Bear 函数
{int day, x1;
printf("狗熊到玉米地吃了玉米");
printf("第一天吃了一半又拿走一个回去喂小狗熊。\n");
printf("第二天又去吃了剩下的一半,走是任然带一个回去。\n");
printf("以后每天都吃前一天剩下的一半,拿走一个。\n");
printf("到了第十天时,地里只剩下一个玉米。求地里一共有多少玉米?\n");
day=10;
x1=1;
while (day>0)
{
x1=(x1+1)*2;
day--;
}
printf("玉米总数=%d\n\n",x1);
}
void Diamond() // Diamond函数
{
int m,i,j,t,n;
printf("请输入您要打印的钻石列数(奇数)\n");
scanf("%d",&m);
n=(m+1)/2;
for (i=1;i<=n;i++)
{for(j=1;j<=n-i;j++)
printf(" ");
for (t=1;t<=2*i-1;t++)
printf("*");
printf("\n");}
for(i=1;i<=(m-1)/2;i++)
{for(t=1;t<=i;t++)
printf(" ");
t=1;
for(j=1;j<=(m-1)-2*i+1;j++)
printf("*");
printf("\n");}
}
1. 5程序运行截图
第二章 使用数组合指针统计成绩
2. 1设计题目及要求
设计题目:假设给定班级各科考试平均成绩的原始资料如下:
数学:75
物理:80
外语:83
政治:85
体育:86
人数:30
要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩。要求的输出结果如下:
原始信息如下:
数学:75
物理:80
外语:83
政治:85
体育:86
人数:30
平均成绩:0
最低分数科目的成绩:0
最低分数的科目:
全班各科平均成绩如下:
数学:75
物理:80
外语:83
政治:85
体育:86
人数:30
统计结果如下:
人数:30
平均成绩:81
最低分数科目的成绩:75
最低分数的科目:数学
2. 2设计思路
将数组a的内容存入到分配的内存中,使用指针实现对内存内容的存取和计算。为字
符分配内存,并将字符数组的内容也存入所分配的内存中,使用这些指针实现设计要求。
实现本设计功能的方法很多,对存放原始数据的要求如下:
l 使用整形数组a存放数学、物理、外语、政治、体育、人数、平均成绩、最低分科目的成绩
l 使用字符串数组name存放数学、物理、外语、政治、体育、最低分数的科目
l 使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目。
l 使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途。)
2. 3流程图
结束
开始
统计班级平均成绩
最低科目成绩
输入班级人数和各科平均成绩
最低科目
2. 4具体实现
程序源代码如下:
int subject(int *c,int n);
int lowest(int *b);
int average( int *b);
#include void main ()
{int i,b;
int a[9]={75,80,83,85,86,30} ;
char *name[5]={"数学","物理","外语","政治","体育"};
char *meanlow[4]={"人数","平均成绩","最低分数科目成绩","最低分科目"};
printf("原始信息如下:\n");
for(i=0;i<5;i++)
printf("%s:%d\n",name[i],a[i]);
printf("%s:%d\n",meanlow[i],a[i+5]);
printf("全班各科平均成绩如下:\n");
for(i=0;i<5;i++)
printf("%s:%d\n",name[i],a[i]);
printf("统计结果如下:\n");
printf("%s:%d\n",meanlow[0],a[5]);
printf("%s:%d\n",meanlow[1],average(a));
printf("%s:%d\n",meanlow[2],lowest(a));
b=subject(a,5);
printf("%s:%s\n",meanlow[3],name[b]);
}
int average( int *b)//求平均成绩
{int sum=0 ,i,aver;
for(i=0;i<5;i++)
sum=sum+b[i];
aver=sum/5;
return aver;
}
int lowest(int *b)//求最低成绩
{int t=b[0],i;
for(i=0;i<5;i++)
{if(t>b[i]) t=b[i];}
return t;
}
int subject(int *c,int n)//求最低成绩的科目
{int i, t=c[0],m=0;
for(i=1;ic[i]) {t=c[i];m++;}
}
return m;}
2. 5程序运行截图
第三章 学生成绩管理系统
3. 1设计题目及要求
1.设计要求实现的功能较多,所以将它们分为几个部分叙述。
建立文件
l 可以使用默认文件名或指定文件名将记录存储到文件;
l 文件保存成功返回0,失败返回-1;
l 设置保存标志savedTag作为是否对记录进行存储操作的信息;
l 写同名文件将覆盖原来文件的内容;
增加学生记录
l 可在已有记录后面追加新的记录
l 可以随时用它增加新的记录,它们仅保存在结构数组中;
l 可以将一个文件读入,追加在已有记录之后;
l 如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;
l 如果没有记录存在,给出提示信息。
显示记录
l 如果没有记录可供显示,给出提示信息;
l 可以随时显示内存中的记录
文件存储
l 可以按默认名字或指定名字存储记录文件;
l 存储成功返回0.,否则返回-1;
l 更新存储标志;
读取文件
l 可以按照默认名字或指定名字将记录文件读入内存;
l 读取成功返回0,否则返回-1;
l 可以将指定或默认文件追加到现有记录并更新记录的尾部;
l 可以将文件连续追加到现有记录并更新记录的名词;
l 更新存储标志;
删除记录
l 可以按“学好”、“姓名”、“名词”方式删除记录;
l 给出将删除记录的信息,经确认后在删除;
l 如果已经是空表,删除时给出提示信息并返回菜单;
l 如果没有要删除的信息,输出没有找到的信息;
l 应该更新其他记录的名词;
l 删除操作权限于内存,只有执行存记录时,才能覆盖原记录;
修改记录
l 可以按“学号”、“姓名”、“名次”方式修改记录内容;
l 给出将修改记录的信息,经确认后进行修改;
l 如果已经是空表,应给出提示信息并返回主菜单;
l 如果没有找到需要要改的信息,输出提示信息;
l 应该同时更新其他记录的名词;
l 修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;
l 更新存储标志;
查询记录
l 可以按“学号”、“姓名”、“名次”方式修改记录内容;
l 能给出查询记录的信息;
l 如果查询的信息不存在,输出提示信息;
对记录进行排序
l 可以按学好进行升序或降序排序;
l 可以按名称进行升序和降序排序;
l 可以按名词进行升序或降序排序;
l 如果属于选择错误,可以立即退出排序;
l 更新存储标志;
头文件
l 使用条件编译定义头文件;
l 函数原型声明;
l 数据结构及包含文件;
测试程序
l 应列出测试大纲对程序进行测试;
l 应保证测试用例测试到程序的各种边缘情况;
2. 总体设计
最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。完成整体规划后,可以按照流程描述各个模块之间的接口功能。
本课程设计对模块设计的要求如下:
l 要求使用对文件方式实现设计;
l 要求在各个文件内实现结构化设计;
l 每个模块作为一个单独的C文件,每个文件内的函数如表12—1所示,表中给出了各个函数的功能说明;
宏和数据结构等放在头文件中,并使用条件编译
3. 2设计思路
(1) 主函数: 主函数 main,功能: 通过调用 creat, search, del, add, print, ststistics, save, taxis 等函数,实现学生成绩查询
(2) 菜单界面函数:int menu(int k)/*函数 menu,功能:菜单选择
(3)用switch语句可以实现这些选择。可以用简洁的伪码对它们进行描述
(4)程序包含文件的存、取过程。它的功能就是按输入顺序建立记录。如果原来没有记录文件,可以重新建立一个文件;如果已经有记录,可以先把文件内容读入,然后把新记录追加到原来记录的尾部;也可以单独建立新文件,以后再使用读取文件的方法拼装。
3. 3流程图
开始
结束
录入学生成绩
通过switch对数据进行处理
保存学生成绩
3. 4具体实现
#include#include#include#include#define N 30
#define M 3
typedef struct student
{char number[10];
char name[20];
float score[M];
float aver;
}STU;
STU stu[N];
int n;
void inputscore(void);
void savescore(void);
void avergescore(void);
void modifyscore(void);
void lookscore(void);
void searchscore(void);
void statistic(void);
void add(void);
void modify(void);
void delscore(void);
void menu(void);
void main()
{short int flag=0;
menu();
do
{flag=1;
switch(getch())
{case 1 : inputscore();break; /*输入成绩*/
case 2 : lookscore();break;/*查看成绩*/
case 3 : searchscore();break;/*查找成绩*/
case 4 : statistic();break;/*成绩统计*/
case 5 : modify();break;/*修改成绩*/
case 6 : add();break;/*添加成绩*/
case 7 : delscore();break;/*删除成绩*/
case 8 : savescore();break;/*保存成绩*/
case 9 :exit(0);/*退出程序*/
default : printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
}while (flag==1);}
void menu(void)
{ system("cls");
printf("\n");
printf("*********欢迎进入学生成绩管理系统**************\n");
printf(" 菜单 \n");
printf("输入成绩-------------------------------------1\n");
printf("查看成绩及成绩排序---------------------------2\n");
printf("查询学生成绩---------------------------------3\n");
printf("成绩统计-------------------------------------4\n");
printf("修改成绩-------------------------------------5\n");
printf("添加成绩-------------------------------------6\n");
printf("删除成绩-------------------------------------7\n");
printf("保存成绩-------------------------------------8\n");
printf("退出系统-------------------------------------9\n");
printf("**********************************************\n");
printf("请输入您的选择\n");}
/***************输入各个同学的学生信息******************************/
void inputscore(void)
{int i,j;
system("cls");
printf("请输入学生总数:\n");
scanf("%d",&n);
printf("提示:*输入学号时请输入位数为8位的数字*\n");/*因二维表上下需对正故有此要求*/
for(i=0;istu[k].aver)
k=j;
if(k!=j)
{t=stu[k];
stu[k]=stu[i];
stu[i]=t;}}
printf("名次\t学号\t\t姓名\t数学\t英语\t计算机\t平均分\n");
for(i=0;iaver;}
printf("该班级平均分为%4.2f\n",sum/n);/*平均分计算*/
for(i=0;iaver>=60)
count++;}
printf("该班级及格率为%4.2f%%\n",count/n*100);/*及格率计算*/
count=0.0;
for(i=0;iaver>=90)
count++;}
printf("该班级优秀率为%4.2f%%\n",count/n*100);/*优秀率计算*/
for(i=0;iscore[j]-(p+i)->aver)*((p+i)->score[j]-(p+i)->aver);}
sum=sum/n;
printf("学生%s的成绩方差为%4.2f\n",(p+i)->name,sum);}
printf("平均分低于60的学生名单\n");
for(i=0;i