高级语言程序.docx
- 文档编号:23902912
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:22
- 大小:50.58KB
高级语言程序.docx
《高级语言程序.docx》由会员分享,可在线阅读,更多相关《高级语言程序.docx(22页珍藏版)》请在冰豆网上搜索。
高级语言程序
《高级语言程序设计》
课程实训报告
题目:
多功能菜单选择程序设计与实现
设计者:
专业班级:
学号:
指导教师:
2011年01月17日
计算机工程系
1题目与要求
1.1问题提出
本人计划编写一个多功能菜单选择程序设计与实现,主要用来实现解一元二次方程、解决Josephus问题、学生信息管理。
1.2本系统涉及的知识点。
结构、数组、循环、函数、分支、指针、结构体,结构体数组、文件的操作等知识。
1.3功能要求:
一、建立一元二次方程的运算:
输入方程的系数a,b,c,求解该方程的根。
二、建立一个程序,解决Josephus问题。
三、建立一个程序,实现通讯录管理。
1.输入学生的信息:
包括姓名、电话号码、类别、电子邮件等;
2.从键盘输入通讯录的信息
3.从指定的文件中读入学生的信息;
4.按姓名查询通讯录的信息.;
5.按分类查询通讯录的信息;
6.删除指定姓名的通讯录的信息
7将通讯录信息保存在指定的文件中
2功能设计(左对齐,宋体粗四号)
2.1算法设计(左对齐,宋体粗小四号)
首先编写一个菜单驱动程序,输入1~4之间的任意一个数字,即可进入相应选择项。
当选择相应选项时,其输出信息分别为:
解一元二次方程、出圈游戏、功能3和退出程序。
(1)实现循环和功能选择
假设输入选择用变量cn存储,它作为menu_select()函数的返回值提供给switch语句。
使用for循环实现重复选择,并在函数handle_menu()中实现。
/***************************************************
菜单处理函数
***************************************************/
voidhandle_menu()
{
for(;;)
{
switch(menu_select())
{
case1:
printf("\t解一元二次方程\n");
break;
case2:
printf("\t出圈游戏\n");
break;
case3:
printf("\t功能3\n");
break;
case4:
printf("\t再见!
\n");
return;
}
}
}
实际使用时,只有选择4,程序才能结束运行,这就要使用循环控制。
这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用“return”语句即可,也可以使用“exit(0);”语句。
(2)得到cn的合理值
如前所述,应该设计一个函数用来输出信息和处理输入,这个函数应该返回一个数值cn,以便供给switch语句使用。
假设函数名为menu_select,设计的参考程序如下:
/***************************************************
菜单选择函数
***************************************************/
intmenu_select()
{
chars[2];
intcn;
printf("\t1.解一元二次方程\n");
printf("\t2.出圈游戏\n");
printf("\t3.功能3\n");
printf("\t4.退出程序\n");
printf("\t选择1-4:
");
for(;;)
{
gets(s);
cn=atoi(s);
if(cn<1||cn>4)
printf("\n\t输入错误,重选1-4:
");
else
break;
}
returncn;
}
语句“cn=atoi(s);”是为了使输入的字符串转变为数字,以便使switch中的case语句对应数字1~4。
对于不符合要求的输入,将被要求重新输入。
(3)设计头文件
将函数原型声明在头文件中,假设头文件为c.h。
/***************************************************
c.h
***************************************************/
#if!
defined(c_H)
#definec_H
#include
voidhandle_menu();
intmenu_select();
#endif
(4)设计主程序
主程序非常简单,只有一条语句。
假设使用文件select.c,其内容如下:
/***************************************************
select.c:
主程序文件
***************************************************/
#include"c.h"
voidmain()
{
handle_menu();
}
编译运行,即可检查并验证菜单选择是否正确。
本系统需要实现的功能要求:
利用switch语句设计如图1所示的主菜单(图中的文字宋体5号):
请输入选项编号(1~6)
1.解一元二次方程
2.出圈游戏
3.通讯录管理
4.退出
图1多功能菜单选择程序系统主菜单
(所有的图统一编号,宋体5号,置于图下的中间,)
2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中分为6个小模块:
1.从键盘输入通讯录的信息
2.从指定的文件中读入学生的信息
3能按名字查询通讯录信息
4.删除指定姓名的通讯录的信息
5.将通讯录信息保存在指定的文件中
6.返回主菜单
图2排序子菜单
3、根据所选菜单编写相应代码:
1)输入函数input:
利用循环输入的方式,将有关信息存入结构数组,结构数组根据实际的人数,采用动态方式建立。
2)求开根函数sqrt():
利用数学公式X1.2=
3)
图3系统模块图2.2部分模块流程图
流程图的画法参阅第二章。
3程序代码设计(左对齐,宋体粗四号)
内容:
分模块(函数)简述其功能;模块中使用的各变量的类型及作用,包括声明数据类型(如结构体);设计过程;并列出该模块(函数)的代码。
(宋体小四号)。
例如:
输入模块(模块名宋体粗小四号,其余宋体小四号)
一.
1)voidmenu_select();函数
2)功能:
显示子菜单;
二.
1).input()函数;
2)功能:
利用for循环语句和scanf、gets、getchar函数完成对结构数组的输入,存放n个学生的信息(学号、姓名、性别、4门成绩)。
3)变量及类型:
inta[5][4]:
整型形参数组,接收main函数传过来的二维数组的首地址。
inti,j:
循环控制变量。
intn:
整型形参变量,接收main()传过来的数组人数。
structstudentstu[]:
接收主函数传过来的数组首地址。
4)说明:
执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。
(若不需说明部分可省略)
4C程序设计总结(左对齐,宋体粗四号)
1.在程序调试的过程中,有很多细节错误,比如:
忘记了在语句后加分号,忘记加&,搞错变量的定义类型,内循环和外循环没有弄清,循环的次数控制不合理,函数的调用问题没有更深层次地去理解,调试出错但是不知道错在哪里,也不知道怎么去处理该错误等。
2.经过这次实训,我学到了很多,程序的设计和代码的输入都要非常细心和有耐心,很多问题都是在细节上出错。
还有就是通过实训巩固了自己所学的知识,在实训中还懂的了一些以前不懂的知识,明白了只有在实训中才能提高能力!
(小四,宋体)
5结束语(可省略)
这次实训有不小的收获,发现实践是学习必不可少的而且是非常重要的过程,同时也体会到软件的应用是一定要与实际问题相结合的,很感谢同学、老师帮助和指导。
(小四,宋体)
6程序如下:
(1.h)
#if!
defined(c_H)
#definec_H
#include
voidhandle_menu();
intmenu_select();
#include
voida();
voidb();
voidc();
#include
#endif
(0.c)
#include"1.h"
voidmain()
{
handle_menu();
}
(1.c)
#include"1.h"
voida()
{
floata,b,c;
doublex1,x2;
printf("a*x*x+b*x+c=0\n");
printf("a,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
printf("\n");
x1=(-b+sqrt(b*b-4*a*c))/2*a;
printf("x1=%d\n",x1);
x2=(-b-sqrt(b*b-4*a*c))/2*a;
printf("x2=%d\n",x2);
}
(2.c)
#include"1.h"
voidb()
{
voidA(intar[],intsize);
intn,a[1000];
charb;
do{printf("\n请输入你要参加游戏的人数(1000人以内):
");
scanf("%d",&n);
A(a,n);
printf("\n\n是否重新进行游戏(yorn):
");
getchar();
b=getchar();
}while(b=='y');
return0;
}
voidA(intar[],intsize)
{
intx,y=0,i,m;
printf("m=");
scanf("%d",&m);
x=1;
for(i=0;i<=size-1;i++)
{ar[i]=i+1;}
while(y!
=size-1)
{
y=0;
for(i=0;i<=size-1;i++)
{
if(ar[i]!
=0)
{
ar[i]=x;
x=x+1;
if(x==m)
{
printf("%d",i+2);
x=0;
}
}
if(ar[i]==0)
++y;
}
}
for(i=0;i<=size-1;i++)
{
if(ar[i]!
=0)
printf("游戏结束\n剩下的是第%d号位子上的人",i+1);
}
}
(3.c)
#include"1.h"
#include
voidhandle_menu();
structperson
{
charname[8];
chartel[15];
charemail[50];
};
charfilename[20];
FILE*fp;
voidjianli();
voidtianjia();
voidchazhao();
voidxiugai();
voidshanchu();
voidshuchu();
voidc()
{
intm;
jianli();
while
(1)
{
printf("\n\n添加,请按1");
printf("\n查找,请按2");
printf("\n修改,请按3");
printf("\n删除,请按4");
printf("\n输出,请按5");
printf("\n返回主菜单,请按6");
printf("\n退出,请按0\n");
scanf("%d",&m);
if(m>=0&&m<=6)
{
switch(m)
{
case1:
tianjia();
break;
case2:
chazhao();
break;
case3:
xiugai();
break;
case4:
shanchu();
break;
case5:
shuchu();
break;
case6:
handle_menu();
break;
case0:
exit(0);
}
printf("\n\n操作完毕,请再次选择!
");
}
else
printf("\n\n选择错误,请再次选择!
");
}
}
voidjianli()
{
structpersonone;
printf("\n请输入通讯簿名:
");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立通讯簿!
");
exit(0);
}
fprintf(fp,"%-10s%-15s%-25s\n","姓名","电话号码","电子邮件");
printf("\n请输入姓名、电话号码及电子邮件(以0结束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.email);
fprintf(fp,"%-10s%-15s%-25s\n",one.name,one.tel,one.email);
scanf("%s",one.name);
}
fclose(fp);
}
voidshuchu()
{
structpersonone;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit(0);
}
printf("\n\n%20s\n","通讯簿");
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.email);
printf("%-10s%-15s%-25s",one.name,one.tel,one.email);
}
fclose(fp);
}
voidtianjia()
{
structpersonone;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit(0);
}
printf("\n请输入添加的姓名、电话号码及电子邮件\n");
scanf("%s%s%s",one.name,one.tel,one.email);
fprintf(fp,"%-10s%-15s%-25s\n",one.name,one.tel,one.email);
fclose(fp);
}
voidchazhao()
{
intk=0;
charnamekey[8];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.email);
if(!
strcmp(namekey,one.name))
{
printf("\n\n已查到,记录为:
");
printf("\n%-10s%-15s%-25s",one.name,one.tel,one.email);
k=1;
}
}
if(!
k)
printf("\n\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
voidxiugai()
{
intk=0;
longoffset;
charnamekey[8];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.email);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:
");
printf("\n%-10s%-15s%-25s",one.name,one.tel,one.email);
printf("\n请输入新姓名、电话号码及电子邮件:
");
scanf("%s%s%s",one.name,one.tel,one.email);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-15s%-25s\n",one.name,one.tel,one.email);
}
else
printf("\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
voidshanchu()
{
intm,k=0;
longoffset1;
charnamekey[8];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.email);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为");
printf("\n%-10s%-15s%-25s",one.name,one.tel,one.email);
printf("\n确实要删除,按1;不删除,按0:
");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-15s%-25s\n","","","");
}
}
else
printf("\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
(4.c)
#include"1.h"
intmenu_select()
{
chars[2];
intcn;
printf("\t1.解一元二次方程\n");
printf("\t2.出圈游戏\n");
printf("\t3.功能3\n");
printf("\t4.退出程序\n");
printf("\t选择1-4:
");
for(;;)
{
gets(s);
cn=atoi(s);
if(cn<1||cn>4)
printf("\n\t输入错误,重选1-4:
");
else
break;
}
returncn;
}
voidhandle_menu()
{
for(;;)
{
switch(menu_select())
{
case1:
printf("\t解一元二次方程\n");
a();
break;
case2:
printf("\t出圈游戏\n");
b();
break;
case3:
printf("\t功能3\n");
c();
break;
case4:
printf("\t再见!
\n");
return;
}
}
}
高级语言程序设计实训成绩评定表
对课程实训工作过程的简短介绍和自我评价
学生签名:
2010年月日
(以下由评定小组教师填写)
质量评价指标(在相应栏目打√)
评价项目
评价质量
优秀
良好
一般
及格
不及格
工作量和态度
实验、计算可靠性
文字和图表质量
总体评价
评定成绩(百分制)
评定小组成员签名
2010年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言 程序