实验报告模板2Word文件下载.docx
- 文档编号:17268289
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:51
- 大小:207.79KB
实验报告模板2Word文件下载.docx
《实验报告模板2Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验报告模板2Word文件下载.docx(51页珍藏版)》请在冰豆网上搜索。
本人设计的程序是一个小学算术运算测试,用来出题让学生回答。
1.2本程序涉及的知识点
循环、函数、选择、全局变量。
1.3功能要求
1)用随机函数rand()产生随机数;
2)用switch语句进行选择题型;
3)输入题数;
4)答题,统计分数。
2功能设计
2.1算法设计
1本程序需要实现的功能要求:
利用switch语句设计如图1所示的主菜单:
用随机数产生1~4,进行选择:
1——加法
2——减法
3——乘法
4——除法
2输入题数,由随机函数产生的数进行选择;
3选择了一个分支后,调用jianfa()
4回答完所有题后,进行统计,得出答对的题数。
2.2部分模块流程图
主函数
为零
Janfa函数
add函数
mil函数
divd函数
3程序代码设计
1..1)函数原形:
voidadd(void)
2)功能:
产生的随机数进行相加;
3)变量及类型:
intx,y;
整形变量,产生的随机数赋给x,y;
intz;
整形变量,用户输入的数;
4)说明:
执行该程序后,判断是否正确,正确则对score进行加1,错误则score不变;
2..1)函数原形:
voidjianfa(void)
2)功能:
产生的随机数进行相减;
执行该程序是,用x减去y,先判断x,y的大小,若x<
y,进行交换,判断是否正确,正确则对score进行加1,错误则score不变;
3..1)函数原形:
voidmil(void)
产生的随机数进行相乘;
4)说明:
4..1)函数原形:
voiddivd(void)
产生的随机数进行相除;
执行该程序是,首先判断y是否是0(分母不能为0),在进行两个整数相除是要进行强制转换,两个数相除是除不断时,有小数(保留两位小数)。
为了使两个数相近用了fabs函数,来比较两个数的差的绝对值是否小于0.01,正确则对score进行加1,错误则score不变;
4C程序设计总结
1.程序调试情况;
开始编程序时,将题目与题数固定起来,让学生输入1——4来选择加、减、乘、除法的题,发现与题意不符;
应用随机函数rand()来产生随机数,来产生随机的题;
还有就是减法得出的结果可能是负数,应先比
较两个数的大小,用大的减去小的,则不会出现负数;
同时会存在的问题就是除法,两个
整数相除结果是整数,应进行强制转换,为了使输入的结果与输出的结果接近,可以用fabs(z-(float)x/y)<
0.01,来进行判断,来得出正确的结果。
2.运行情况:
编译连接后,运行时屏幕上显示“请输入题数”,输入4,产生第一道题:
67+34=,输入101,输出正确;
接着产生第二道题:
24/78=,输入0.31,输出正确;
又产生一道题:
62*64=,输入2011,输出错误,同时把正确的结果也输出来:
62*64=3968;
最后把最后的一道题显示出来:
27+61=,输入88,输出正确,同时输出“最好的得分是3”。
运行正确。
3在程序设计中感想:
编一个程序不仅可以巩固已学过的知识,同时可以了解一些新的知识,来拓宽自己的视野;
而且编写程序应该尽量写注释,使读者能理解,同时程序应清晰,简洁。
,
附录:
程序清单
#include<
stdio.h>
stdlib.h>
math.h>
intscore=0;
/*全局变量来记录答对的题数(分数)*/
voidadd(void)/*两数相加*/
{
intx,y,z;
x=rand()%100;
/*产生随机数*/
y=rand()%100;
printf("
%d+%d=\n"
x,y);
请输入结果:
"
);
scanf("
%d"
&
z);
/*输入正确的结果*/
if(z==(x+y))/*判断输入的结果是否正确*/
{score++;
正确!
\n"
}
else
{printf("
错误!
\n%d+%d=%d\n"
x,y,x+y);
}
voidjianfa(void)/*两数相减*/
if(x<
y)
z=y;
y=x;
x=z;
/*交换两个数*/
%d-%d=\n"
if(z==(x-y))/*判断输入的结果是否正确*/
\n%d-%d=%d\n"
x,y,x-y);
voidmil(void)/*两数相乘*/
%d*%d=\n"
if(z==(x*y))/*判断输入的结果是否正确*/
else
\n%d*%d=%d\n"
x,y,x*y);
voiddivd(void)/*两数相除*/
intx,y;
floatz;
while(!
{
/*判断y是否为零*/
%d/%d=\n"
%f"
if(fabs(z-(float)x/y)<
0.01)/*判断输入的结果是否正确*/
\n%d/%d=%.2f\n"
x,y,(float)x/y);
voidmain()
{
intn,m;
请输入题数"
n);
while(n--)
do
m=(unsigned)rand()%5;
/*随机产生m,来随机产生题*/
}while(!
m);
/*判断m是否在1——4这个范围内*/
switch(m)
case1:
add();
break;
case2:
jianfa();
case3:
mil();
case4:
divd();
最后的得分是:
score);
二、通讯录管理系统
1.题目要求
主要功能:
制作一个通讯录程序,该程序具有查找、添加、修改、删除、显示、导入、保存等功能。
通讯录可以包括:
姓名,电话,地址,电子邮箱等信息,但不限于以上信息。
模块设计参考:
Ø
第一个模块——主函数main()的功能是:
根据选单的选项调用各函数,并完成相应的功能。
第二个模块——Menu()的功能是:
显示英文提示菜单。
第三个模块——Quit()的功能是:
退出选单。
第四个模块——Create()的功能是:
创建新的通讯录。
第五个模块——Add()的功能是:
在通讯录的末尾,写入新的信息,并返回选单。
第六个模块——Find()的功能是:
查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
第七个模块——Alter()的功能是:
修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
第八个模块——Delete()的功能是:
删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
第九个模块——List()的功能是:
显示通讯录中的所有记录。
第十个模块——Import()的功能是:
从磁盘文件上导入记录到通讯录。
第十一个模块——Save()的功能是:
保存通讯录中的所有记录到磁盘文件上。
1.1问题提出
本人设计的程序是通讯录管理系统,用来查找、添加、修改、删除、显示、导入、保存通讯录中的信息。
循环、函数、选择、全局变量、结构体数组、goto语句、对文件进行操作。
(1)调用主菜单函数,打印菜单;
(2)建立通讯录信息,每个信息包括:
姓名、电话号码、地址、邮箱;
(3)保存到文件中;
(4)查找结构体数组中的通讯录信息;
(5)向结构体中添加信息;
(6)删除结构体数组中的通讯录信息:
(7)修改结构体数组中的通讯录信息;
(8)显示结构体中的信息;
(9)向文件中导入磁盘文件中的信息;
请输入选项编号(1~9)
1——创建信息
2——添加信息
3——查找信息
4——修改信息
5——删除信息
6——显示信息
7——导入信息
8——保存信息
9——退出
2、第一个是输入1,创建通讯录信息;
3、根据所选菜单编执行相应功能;
intMenu(void)
函数Menu()把菜单的界面显示在显示器上,该函数有返回值,没有参数
3)说明:
执行该程序后,返回一个值,作为switch()语句中的表达式,选择相对应的语句;
voidCreate(void)
2)功能:
往结构体数组中输入信息,同时将信息存入文件中,该函数没有返回值,没有参数;
inti;
整形变量,作为循环用的;
FILE*fp;
用来指向文件的;
intn;
n作为全局变量,来控制人数的输入,同时统计结构体数组中的人数;
执行该程序后,结构体数组和文件中都有信息;
往结构体数组中添加信息,同时将信息存入文件中、输出到显示屏上,该函数没有返回值,没有参数;
执行该程序后,结构体数组和文件中都有新的信息;
voidFind(void)
在结构体数组中查找某元素中成员的名字是否与name相等?
若相等,
输出该人的所有信息;
若不相等,输出没有找到,该函数没有返回值,没有参数;
charname[20]输入字符串;
5..1)函数原形:
voidAlter(void)
修改结构体数组中的信息,该函数没有返回值,没有参数;
在结构体数组中查找名字为name的元素,并对该元素进行修改。
若没有,输出无此人;
6..1)函数原形:
voidDelete(void)
删除名字为name的记录,该函数没有返回值,没有参数;
inti,j;
执行该程序后,结构体数组没有信息,同时将删除的信息输出到显示屏上;
7..1)函数原形:
voidList(void)
将结构体数组中的信息输出到显示屏上,该函数没有返回值,没有参数;
8..1)函数原形:
voidImport(void)
将磁盘文件上的信息导入到文件中,该函数没有返回值,没有参数;
FILE*fp1,*fp2;
执行该程序后,通讯录文件中包含磁盘文件;
9..1)函数原形:
voidSave(void)
将结构体数组中的信息存入文件中,该函数没有返回值,没有参数;
10..1)函数原形:
voidQuit(void)
退出整个程序;
1程序调试情况:
本题是一个比较大的程序,进行了分工合作,为了使每个函数便于检测,把每个函数编成一个文件,容易查找错误以及改正;
但不会连接多个文件,查资料和请教老师,终于会把各个文件连接在一起。
于是用一个文件代表一个模块;
运行时发现后面的数据会覆盖前面的数据,为了解决这个问题,定义了一个全局变量,来统计结构体数组中的人数,用extern将其拓展到其他文件中,使数据之间不互相覆盖。
同时,导入文件是用“w+”打开文件会清除原有的信息,因此用“r”方式打开文件,而通讯录是以文件的形式存在的,再导入到文件中去时,应先保存,后倒入;
导入时用“a+”的方式。
2程序运行情况:
编译连接后,运行时屏幕上显示菜单选项,输入1,接着要输入人数,如3,输入3个人的信息:
如abcd,efgh,ijkl,接着选择其他功能,如2,添加信息,如qazw,输出qazw,接着再选择其他功能,如3,输入要查找的人的姓名,如a,输出他的信息;
接着再选择其他功能,如4,输入要修改的人的姓名,如e,输入要修改的信息,如qwe;
接着再选择其他功能,如5,输入要删除的人的姓名,如a,输出删除的人的信息;
接着再选择其他功能,如6,输出的结果为:
eqwe,ijkl,qazw;
接着选择8保存功能,输出保存成功,然后选择导入功能即7,输出导入成功,最后选择推出功能即9,结束本次循环。
对于多模块的程序,分工合作是比较有利的,可以最大限度的利用资源,提高效率,用文件来管理模块,易于检查错误和改正错误;
同时用文件来管理模块可以被其他程序利用且易于分工合作。
main.c(文件1)
intm,n;
voidmain()/*调用各函数*/
externvoidQuit();
/*对调用函数的声明*/
externvoidCreate();
externvoidAdd();
externintMenu();
externvoidFind();
externvoidAlter();
externvoidDelete();
externvoidList();
externvoidImport();
externvoidSave();
L:
m=Menu();
/*调用主菜单函数*/
if(m<
=0||m>
=10)printf("
Error.\n"
/*判断输入的数是否正确*/
Create();
Add();
Find();
Alter();
case5:
Delete();
case6:
List();
case7:
Import();
case8:
Save();
case9:
Quit();
if(m!
=9)gotoL;
/*继续执行*/
菜单.c(文件2)
externm;
intMenu()/*显示英文提示菜单*/
{printf("
★☆★Welcome!
★☆★\n"
******MAIN-MENU********\n"
***Create--->
1***\n"
***Add------>
2***\n"
***Find----->
3***\n"
***Alter---->
4***\n"
***Delete--->
5***\n"
***List----->
6***\n"
***Import--->
7***\n"
***Save----->
8***\n"
***Quit----->
9***\n"
******●●●●●*******\n"
Pleasechoosenumber:
returnm;
创建.c(文件3)
structxunlu/*定义一个结构体数组*/
{charname[20];
charphnum[20];
charaddress[50];
charemail[30];
}p[100];
voidCreate()/*创建通讯录*/
{externn;
FILE*fp;
inti;
if((fp=fopen("
通讯录.txt"
"
w+"
))==NULL)/*以读写的方式打开文件*/
can'
topenfile\n"
exit(0);
}
Inputpeople'
snumber"
for(i=0;
i<
n;
i++)
{printf("
namephnumaddressemail:
%s%s%s%s"
p[i].name,p[i].phnum,p[i].address,p[i].email);
fprintf(fp,"
%s%s%s%s\n"
/*将输入的信息出入文件中*/
fclose(fp);
添加.c(文件4)
charname[20];
voidAdd()/*写入信息*/
a+"
))==NULL)/*以追加的方式打开文件*/
Inputformat:
name,phnum,address,email\n"
p[n].name,p[n].phnum,p[n].address,p[n].email);
/*输入添加的信息*/
%s%s%s%s\n"
Addinformation:
/*输出添加的信息*/
n=n+1;
查找.c(文件5)
string.h>
voidFind()/*查找信息*/
externn;
Inputfindname:
%s"
name);
/*输入查找姓名*/
f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 模板