计算机基础综合实验报告.docx
《计算机基础综合实验报告.docx》由会员分享,可在线阅读,更多相关《计算机基础综合实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
计算机基础综合实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
综合实验报告
课程名称:
计算机基础综合实验
(2)
课程代码:
033027Q2
班级:
BJ1011
学号:
姓名:
汪涛
指导教师:
宋晓勇
完成日期:
2012.10.28
电子信息学院
ElectronicInformationSchool
2012年10月
目录
1综合实验任务与要求3
1.1综合实验任务3
1.2综合实验的基本内容和要求3
2问题描述及详细设计............................................................................................................5
2.1系统主界面5
2.1.1主控程序结构图及程序框图.................................................................5
2.1.2操作运行说明..........................................................................................6
2.1.3主菜单调试情况分析..............................................................................6
2.1.4主程序......................................................................................................7
2.2成绩处理8
2.2.1程序结构图及程序框图..........................................................................8
2.2.2操作运行说明........................................................................................10
2.2.3调试情况分析........................................................................................10
2.2.4主程序....................................................................................................11
2.3求灯塔12
2.3.1程序结构图及程序框图........................................................................12
2.3.2操作运行说明........................................................................................13
2.3.3调试情况分析........................................................................................13
2.3.4主程序....................................................................................................13
2.4求Sn14
2.4.1程序结构图及程序框图........................................................................14
2.4.2操作运行说明........................................................................................16
2.4.3主菜单调试情况分析............................................................................16
2.4.4主程序....................................................................................................16
2.5泰勒级数17
2.5.1程序结构图及程序框图........................................................................17
2.5.2操作运行说明........................................................................................19
2.5.3主菜单调试情况分析............................................................................19
2.5.4主程序....................................................................................................19
2.6约瑟夫环问题20
2.6.1程序结构图及程序框图........................................................................20
2.6.2操作运行说明........................................................................................22
2.6.3主菜单调试情况分析............................................................................22
2.6.4主程序....................................................................................................22
2.7编写一个函数23
2.7.1程序结构图及程序框图........................................................................23
2.7.2操作运行说明........................................................................................25
2.7.3主菜单调试情况分析............................................................................25
2.7.4主程序....................................................................................................25
3系统使用的主要函数.......................................................................................26
4综合试验小结....................................................................................................27
参考文献...............................................................................................................28
1综合实验任务与要求
1.1综合实验任务
C语言程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。
计算机基础综合实验
(2)是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。
并为参加计算机等级考试作准备。
1.2综合实验的基本内容和要求
参加综合实验的学生,应当认真完成综合实验的全部内容。
最终提交综合实验成果来证明其独立完成各种实际任务的能力。
从而反映出理解和运用本课程知识的水平和能力。
具体如下:
1.代码编写规范,形成良好的编程习惯;
2.程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。
3.提交系统程序源代码、综合实验报告(电子稿和装订的打印稿)。
综合实验报告内容包括以下几个方面:
●程序的总体设计和算法分析。
●程序流程图、函数说明
●源程序代码清单
●测试数据和测试过程记录
●遇到的问题及解决方法分析
●综合实验小结
4.程序运行方式,构建一个简易菜单,形如:
用户通过输入数值选择所需运行的子程序,当一个子程序运行结束后回到菜单界面,直至用户输入0后退出程序。
2问题描述及详细设计
2.1系统主界面
2.1.1主控程序结构图及程序框图:
2.1.2操作运行说明
按屏幕提示输入0-6进行菜单选择。
1.
2.1.3主菜单调试情况分析
调试主控模块时,发现程序有错误,在仔细的分析了程序以后,发现问题出在了头文件的名字上。
头文件的文件名没有与主控模块中的名字一样,导致程序无法识别头文件。
同时在调试主控模块时,还发现必须把头文件中的main改掉,因为一个程序必须且只能存在一个main函数。
最后,在完成了头文件和主控程序的程序检查后还必须将他们放在一个文件夹中否则也无法运行程序。
这些都是在调试文件时我出现的问题和最后解决的方法。
程序的控制变量范围的选择要注意范围,否则容易导致无限循环,解决办法编辑时须保持严谨的状态,思维要严谨。
在定义函数的时候,在函数前面加了类型,比如没有返回值的时候定义成int类型的,在主控函数调试的时候就会出现错误。
解决办法:
将函数类型改成void类型,即不返回任何值。
2.1.4主程序:
#include{intc;
charch;ch='y';
while(ch=='y'||ch=='Y')
{
printf("\n\t\t★*****************★*****************★");
printf("\n\t\t*======C实训课题演示系统=============*");
printf("\n\t\t*===========主菜单=================*");
printf("\n\t\t*=======================================*");
printf("\n\t\t*========1、成绩处理===================*");
printf("\n\t\t*========2、求灯塔======================*");
printf("\n\t\t★=======3、求Sn=======================★");
printf("\n\t\t*========4、泰勒级数====================*");
printf("\n\t\t*========5、约瑟夫环问题================*");
printf("\n\t\t*========6、编写一个函数===============*");
printf("\n\t\t*========0、退出========================*");
printf("\n\t\t★******************★*****************★");
printf("\n\t\t请选择菜单号(0--6):
");
scanf("%d",&c);
getchar();
switch(c)
{
case1:
fun1();break;
case2:
fun2();break;
case3:
fun3();break;
case4:
fun4();break;
case5:
fun5();break;
case6:
fun6();break;
case0:
ch='n';break;
default:
printf("菜单选择错误!
请重新输入!
");
}
}
}
2.2成绩处理
编写程序,实现以下成绩处理功能(输出格式参见示例):
1)输入n和n个成绩(成绩为浮点数类型,数组名记为a,假设1≤n≤50);
2)计算并输出成绩的累加和(记为sum)与平均成绩(记为ave),将≥ave的成绩归为A档,将<ave的成绩归为B档;
3)分别统计A、B两档的人数,计算在总人数中的比率;
4)求出A档学生的最低分和B档学生的最高分,它们与平均成绩的差值。
分析:
根据题意,输入学生数n及n个成绩,通过循环求累加和(记为sum),平均成绩(记为ave),通过比较,分为A,B档,并求出比率,以及A档学生的最低分和B档学生的最高分,它们与平均成绩的差值。
2.2.1程序结构图及程序框图:
2.2.2操作运行说明
输入1进入,弹出“输入学生数”,输入10个,根据提示,任意输入10个学生的成绩,按回车键,得出结果,如下运行界面:
2.2.3调试情况分析
在调试此程序时,由于程序过长,在大小写的输入上出现了应该有的错误,比如再输到“MinA”是,由于没有及时切换,输成了“MINA”,后导致调试时出现一个错误,不过,我还是及时的发现了问题并纠正过来。
另一个出现的问题就是强制装换,如perA=(float)numAn*100,由于当时没有意识到numA定义的是整型,所以在运行时,输出的结果显示比率全为“0.0%”,通过查找上学期学的《C程序设计教程与实验》,在P91例5-7,找到一个类似的程序,发现需要强制转换,所以通过改正,调试运行,得到了正确的结果。
2.2.4程序
#include{
intn,i,numA=0,numB=0;
floata[80],ave,sum=0,perA,perB,MinA,MaxB,lessA,lessB;
printf("输入学生数:
\n");
scanf("%d",&n);
printf("输入%d个成绩:
\n",n);
for(i=0;iscanf("%f",&a[i]);
for(i=0;isum+=a[i];
ave=sumn;
printf("sum=%.1f,ave=%.1f\n",sum,ave);
MinA=100;
MaxB=0;
for(i=0;i{
if(a[i]>=ave)
{
MinA=a[i];
numA++;
if(a[i]MinA=a[i];
}
else
{
numB++;
if(a[i]>MaxB)
MaxB=a[i];
}
}
perA=(float)numAn*100;
perB=(float)numBn*100;
lessA=MinA-ave;
lessB=MaxB-ave;
printf("A:
%d,%.1f%%B:
%d,%.1f%%\n",numA,perA,numB,perB);
printf("MinA:
%.1f,%.1fMaxB:
%.1f,%.1f\n",
MinA,lessA,MaxB,lessB);
}
2.3求灯塔
有一个八层高的灯塔,每层所点灯数都等于上一层的两倍,一共有765盏灯,求塔底灯数。
分析:
已知每层所点灯数都等于上一层的两倍,并且告诉我们一共有765盏灯,根据题意,我们可以设x为塔底灯数,y为塔顶灯数,列出关系式,765=(2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7+2^8)*y,x=2^7*y;然后构建程序,输出结果。
2.3.1程序结构图及程序框图:
2.3.2操作运行说明
输入2进入,直接弹出如下运行界面:
2.3.3调试情况分析
在调试这个程序时,由于设计时,未完全考虑到该程序用到了函数,所以遗漏了“#include{
inty,x;
y=765(2*2*2*2*2*2*2*2-1);
x=2*2*2*2*2*2*2*y;
printf("塔底灯数是:
%d\n",x);
}
2.4求Sn
求
的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。
分析:
根据题意,首先对a,n取值,从a到n个a的累加和,可以看做每一项a=a*10的变化,然后每一项累加,输出Sn的值。
2.4.1程序结构图及程序框图:
NN
Y
Y
2.4.2操作运行说明
输入3进入,弹出“请输入a和n的值”,输入2和5,得到如下运行界面:
2.4.3调试情况分析
在调试这个程序时,弹出“请输入a和n的值:
”时,我出入了“2,5”,然后就显示
,后检查了程序,发现“scanf("%d%d",&a,&n)”,2和5之间是不能出现逗号的,应该为空格。
修正之后,就正确了。
2.4.4程序
#include{
inta,n,k=1,s1=0,s2=0;*定义变量类型为整型*
printf("请输入a和n的值:
");
scanf("%d%d",&a,&n);*输入a和n*
while(k<=n)
{
s2+=a;*将a及其扩大后的数累加*
s1+=s2;
a=a*10;
++k;*循环累加n次*
}
printf("a+aa+aaa+...=%d\n",s1);
}
2.5泰勒级数
利用泰勒级数sin(x)≈计算sin(x)的值。
要求最后一项的绝对值小于10-5,并统计出此时累加了多少项(x由键盘输入)。
分析:
根据题意,利用泰勒级数求sin(x)的公式中实际为有规律的项进行相
加。
其规律为分母奇数阶乘递增,分子为x的该奇数次方,然后对最后一项的绝
对值和10-5比较,输出最后的结果,程序中构建循环。
2.5.1程序结构图及程序框图:
Y
N
Y
2.5.2操作运行说明
输入4进入,弹出“Inputx”,输入45,得到如下运行界面:
2.5.3调试情况分析
在调试这个程序时,主要问题出现在“while(fabs(term)>=1e-5)”,在之前,我的程序是“while(term>=1e-5)”,主要区别就是“fabs”,由于审题不够清晰,题目中明明显示的是“要求最后一项的绝对值小于10-5”,导致出现的结果为
通过验算这显然是不对的,与同学比较了之后,原来是忘了绝对值,改正之后,输出正确运行界面,如下:
。
2.5.4程序
#include{
intn=1,count=1;
floatx;
doublesum,term;
printf("Inputx:
");
scanf("%f",&x);
sum=x;
term=x;
while(fabs(term)>=1e-5)
{
term=-term*x*x((n+1)*(n+2));
sum=sum+term;
n=n+2;
count++;
}
printf("sin(x)=%.1f,count=%d\n",sum,count);
}
2.6约瑟夫问题
约瑟夫环问题:
编号为1,2,3,...,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。
一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计程序求出出列顺序。
分析:
先对n个人赋值,值为每人持有的正整数。
接着,用for语句判断是否达到报数上限m,另一条for语句来改变m的值并记录出列顺序。
2.6.1程序结构图及程序框图:
N
Y
N
Y
2.6.2操作运行说明
输入5,弹出“Entern&m”,输入1535,回车,弹出“Entercodearray:
”,输入任意15个正整数,得到如下运行界面:
2.6.3调试情况分析
调试这个程序还比较顺利,主要是由于在设计这个函数时,由于难度有点大,我向同学和老师请教之后,并参考其他同学的设计方案设计出这个程序。
因此,在吸取了其他同学的经验之后,正确设计了这个个程序,并且调试中没有出现大的问题。
2.6.4程序
#include{inta[100];
inti,j,m,n,k=0;
printf("Entern&m:
");
scanf("%d%d",&n,&m);
printf("Entercodearray:
");
for(i=0;iscanf("%d",&a[i]);
printf("\nOutput:
\n");
for(i=0;i{j=1;
while(j{while(a[k]==0)*跳过已出列的人*
k=(k+1)%n;
j++;
k=(k+1)%n;
}
while(a[k]==0)*跳过已出列的人*
k=(k+1)%n;
printf("%d",k);
m=a[k];a[k]=0;
}
}
2.7编写一个函数
编写一个函数,将一个长整型的数中所包含的偶数数字依次取出,构成一个新数返回。
要求在主函数中输入长整型的数,调用函数进行转换,在主函数中输出新的数。
例如,当输入的数为