计算机能力强化实训C实训报告.docx
《计算机能力强化实训C实训报告.docx》由会员分享,可在线阅读,更多相关《计算机能力强化实训C实训报告.docx(29页珍藏版)》请在冰豆网上搜索。
计算机能力强化实训C实训报告
实训报告
课程名称:
计算机能力强化实训(C)
姓名:
申志军
班级学号:
BG100122
指导教师:
陶恂
完成日期:
2012.9.7
1实训目的与要求
1.1实训目的
C语言程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。
实训是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。
并为参加计算机等级考试作准备。
1.2综合实验的基本内容和要求
参加实训的学生,应当认真完成实训的全部内容。
最终提交实训成果来证明其独立完成各种实际任务的能力。
从而反映出理解和运用本课程知识的水平和能力。
具体如下:
1.代码编写规范,形成良好的编程习惯。
2.程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。
3.提交实训报告电子稿、装订的打印稿。
实训报告内容包括以下几个方面:
●程序的总体设计和算法分析。
●程序流程图、函数说明
●源程序代码清单
●测试数据和测试过程记录
●遇到的问题及解决方法分析
●实训小结
4.程序运行方式
构建一个简易菜单,形如:
用户通过输入数值选择所需运行的子程序,当一个子程序运行结束后回到菜单界面,直至用户输入0后退出程序。
2问题描述
2.1系统概要
该系统为可选择功能系统,通过系统提示,输入相应数字,选择相应的功能,从而完成各种功能。
分析:
2.2成绩处理功能
1)输入n和n个成绩(成绩为浮点数类型,数组名记为a,假设1≤n≤50);
2)计算并输出成绩的累加和(记为sum)与平均成绩(记为ave),将≥ave的成绩归为A档,将<ave的成绩归为B档;
3)分别统计A、B两档的人数,计算在总人数中的比率;
4)求出A档学生的最低分和B档学生的最高分,它们与平均成绩的差值;
分析:
2.3删除指定字符串
删除字符串中指定下标开始的n个字符。
其中,a中放字符串,k中存放指定的下标。
例如,字符串内容为:
HellolloWorld!
,k中值为:
5,n中的值为:
3,则调用该函数的结果为:
HelloWorld!
。
分析:
2.4求Sn的值
求
的值,其中a是一个数字,如2+22+222+2222(此时a=2,n=5),a和n均由键盘输入。
分析:
2.5抓住肇事者
一辆卡车违反交通规则,撞人后逃跑。
现场共有三个目击者,但都没有记住车号,只记下车号的一些特征。
甲说:
牌照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;丙是个数学家,他说,四位车号刚好是一个整数的平方。
请根据以上线索帮助警方找到车号。
分析:
2.6求矩阵乘积
已知矩阵
求矩阵C,C=A*B。
分析:
2.7求ddd的值
函数fun求sum=d+dd+ddd+……+dd...d(n个d),其中d为1-9的数字。
从主函数中输入d和n,调用fun函数,并以sum=XXXXXXX的形式输出结果。
分析:
3系统使用的主要函数
序号
菜单名
文件名
函数名
函数功能说明
1
成绩处理
成绩处理.h
chuli()
按要求处理学生成绩
2
删除指定字符串
删除指定字符串.h
shanchuzifu()
按要求删除原有字符串中指定字符串
3
求Sn
求Sn.h
twentyone()
求Sn值
4
抓住肇事者
抓住肇事者.h
zhuangren()
按证词寻找肇事车牌号
5
求矩阵乘积
求矩阵乘积.h
jvzhen()
求矩阵乘积
6
求Sum
求Sum.h
hanshu()
求Sum值
4详细设计
4.1程序总体结构图
根据设计出如下“C语言实验演示系统”的主控模块。
在主控模块中,只要在主函数main()前加入包含各子系统文件组成的头文件,我们就能方便的调用各子系统的函数了。
图4.1程序总体结构图
子模块1:
图4.2成绩处理层次图
子模块2:
图4.3删除指定字符串系统的层次图
子模块3:
图4.4求Sn系统的层次图
子模块4:
图4.5抓住肇事者系统的层次表
子模块5:
图4.6求矩阵乘积系统的层次表
子模块6:
图4.7求ddd相加的层次表
4.2程序流程图
图4.9模块2流程图
图4.10模块3流程图
图4.11模块4流程图
图4.12模块5流程图
图4.13模块6流程图
5功能测试
5.1系统主界面
1.操作运行说明
根据选择菜单号可运行选中的子程序,输入后会进入子程序。
2.运行主界面
系统以菜单形式构成,有一个主控程序控制并选择其余六个子程序的运行如下图所示:
图5.1主菜单界面图
5.2成绩处理
1.操作运行说明
运行程序,输入‘1’,进入成绩处理功能,输入n,score就可以得出所要的结果。
2.运行界面
图5.2成绩处理系统功能测试
5.3删除指定字符串功能
1.操作运行说明
运行程序,输入‘2’,进入删除指定字符串功能,输入k,n就可以得出所要的结果。
2.运行界面
图5.3删除指定字符串功能测试
5.4求Sn功能测试
1.操作运行说明
运行程序,输入‘3’,进入统计单词个数功能,输入带有逗号的字符串,回车后输出单词个数。
2.运行界面
图5.4求Sn功能测试
5.5抓住肇事者
1.操作运行说明
运行程序,输入‘3’,进入统计单词个数功能,输入带有逗号的字符串,回车后输出单词个数。
2.运行界面
图5.5抓住肇事者系统功能测试
5.6求矩阵功能
1.操作运行说明
运行程序,输入‘5’,进入求矩阵乘积功能,自动输出9个元素,可以做出三行三列的矩阵。
2.运行界面
图5.6求矩阵功能测试
5.7求矩阵功能
1.操作运行说明
运行程序,输入‘6’,进入求ddd的功能测试界面,输入d的个数和d的值,即可自动求出sum的值。
2.运行界面
图8.2求ddd的功能测试
6程序设计调试情况分析
由于对于c语言程序设计还不是相当熟悉,在程序设计过程中,存在一定的问题。
通过从教材和网上查找相关资料,使问题得以解决。
在程序运行的时候,由于功能较多,可能产生界面较为繁琐。
我通过网上查找相关资料,使用system("cls")语句是界面能够得以清频。
但清频语句在文章的位置又是相当关键,通过对该语句位置不断地尝试和对程序不断研究,使语句得以发挥适当作用。
由于清频语句的存在,在输入指令后,界面会迅速清频,这样使操作者不是很适应。
所以我又从网上查找相关资料,查到#includeSleep()语句可使程序延迟时间。
通过使用该语句使程序又具有延时功能。
这样就使程序顺利完成。
7实训小结
在这个星期里,我们在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
个人认为课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:
1、加深对课堂讲授内容的理解
课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。
但是在程序设计领域里这是一定要克服的传统的、错误的想法。
因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。
2、熟悉程序开发环境、学习计算机系统的操作方法
一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3、学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。
有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,这我们将来到社会工作将会有莫大的帮助。
同时它让我知道,只要你努力,任何东西都不会太难。
参考文献
谭浩强著《C程序设计》(第四版)清华大学出版社
夏耘吉顺如主编《大学程序设计(C)实践手册》复旦大学出版社
附录系统源程序
主界面程序:
#include
#include
#include
#include
#include
#include"字符排序.h"
#include"字符统计.h"
#include"奇数计数.h"
#include"求sin.h"
#include"求ddd.h"
#include"文件.h"
voidmain()
{
intchoice;
charch;
system("colorf0");
printf("是否要进入系统:
");
scanf("%c",&ch);
while(ch=='y'||ch=='Y')
{
printf("\n");
printf("\n\t\tC实训课题演示系统");
printf("\n\t\t主菜单");
printf("\n\t\t╔═════════════════╗");
printf("\n\t\t║1-----字符排序║");
printf("\n\t\t║2-----字符串统计║");
printf("\n\t\t║3-----奇数计数║");
printf("\n\t\t║4-----求sin║");
printf("\n\t\t║5-----求ddd║");
printf("\n\t\t║6-----奇偶文件║");
printf("\n\t\t║0-----退出║");
printf("\n\t\t╠═════════════════╝");
printf("\n\t\t╚请选择所需要的操作:
(0--6):
");
scanf("%d",&choice);
getchar();
printf("正在进入请等待<2秒>.....");
Sleep(2000);//暂停2秒
system("cls");//清屏
switch(choice)
{
case1:
zifupaixu();break;//字符排序
case2:
zifutongji();break;//字符统计
case3:
jishujishu();break;//奇数计数
case4:
qiusin();break;//求正弦
case5:
qiuddd();break;//求ddd的和
case6:
wenjian();break;//奇偶数文件
case0:
ch='n';break;
default:
printf("您输入的选择有误!
请重新输入:
");
}
}
}
字符排序程序:
#include
#include
zifupaixu()
{
chars1[80],s2[80];
inti,j=0,t;
printf("请输入一个字符串:
\n");
gets(s1);
t=strlen(s1);
for(i=0,j=0;is2[j++]=s1[i];//循环将奇数位的字符传给s2
for(i=1;is2[j++]=s1[i];//循环将偶数位的字符传给s2
s2[j]='\0';
printf("新排序后的字符串:
\n");
puts(s2);
printf("\n");
}
字符串统计程序:
#include
zifutongji()
{
chara;
inth,k,l,m,t;
h=0;
t=0;
k=0;
l=0;
m=0;
printf("请输入一个字符串:
\n");
while(a!
='\n')
{
scanf("%c",&a);
if(a>='A'&&a<='Z')h++;//统计大写字母
elseif(a>='a'&&a<='z')t++;//统计小写字母
elseif(a>='0'&&a<='9')k++;//统计数字
elseif(a=='')l++;//统计空格
elsem++;
}
printf("大写字母的个数:
%d\n小写字母的个数:
%d\n数字的个数:
%d\n空格的个数:
%d\n其他字符的个数:
%d\n",h,t,k,l,m);
}
奇数计数程序:
#include
jishujishu()
{
intNum[10]={0},i;
charstr[80];
printf("请输入一串数字:
\n");
gets(str);//输入一串数字
for(i=0;str[i]!
='\0';i++)
{
switch(str[i])//计算每个数字出现的个数
{
case'0':
Num[0]++;break;
case'1':
Num[1]++;break;
case'2':
Num[2]++;break;
case'3':
Num[3]++;break;
case'4':
Num[4]++;break;
case'5':
Num[5]++;break;
case'6':
Num[6]++;break;
case'7':
Num[7]++;break;
case'8':
Num[8]++;break;
case'9':
Num[9]++;break;
default:
;
}
}
for(i=1;i<10;i+=2)
printf("%d的个数:
%d\n",i,Num[i]);//输出每个奇数的个数
return0;
}
求正弦程序:
#include
#include
doubleextra(intb)//求阶乘
{
intm;
doubleg=1.0;
for(m=1;m<=b;m++)
g=g*m;
return(g);
}
qiusin()
{
doublesum,x,q;
intcounter,t,k;
t=0;counter=0;k=0;
printf("请输入x:
\n");
scanf("%lf",&x);
sum=0;
do
{
k=2*t+1;
q=extra(k);
sum+=(pow(-1,t)*pow(x,k)*1.0)/q;
counter++;
t++;
}while((pow(x,k)*1.0)/q>=pow(10,-5));
printf("sin(%lf)=%lf\n累加次数为%d\n",x,sum,counter);//输出结果
return0;
}
求ddd的和程序:
#include
longfun(intx,inti,intm)
{
longsum=0;
for(;i>0;i--)
{sum+=x;
x=x*10+m;
}
returnsum;
}
qiuddd()
{
longn,d,sum=0;
printf("请输入d的个数和d的值:
\n");
scanf("%ld%ld",&n,&d);
sum=fun(d,n,d);
printf("sum=%ld\n",sum);
}
奇偶数文件程序:
#include
#include
#defineN5
wenjian()
{
intnum[80],i,k;
FILE*f1,*f2;
f1=fopen("text1","wb");
if(f1==NULL)
{
printf("Failtoopen!
\n");
exit(0);
}
printf("Pleaseinput%dnumbers\n",N);
for(i=0;i{
scanf("%d",&num[i]);
fwrite(&num[i],sizeof(int),1,f1);
}
fclose(f1);
f1=fopen("text1","rb");
if(f1==NULL)
{
printf("Failtoopen!
\n");
exit(0);
}
printf("Thefirstdata:
\n");
fread(&num[i],sizeof(int),1,f1);
while(!
feof(f1))
{printf("%5d",num[i]);
if(num[i]%2==1)num[i]=num[i]+1;
elsenum[i]=num[i]-1;
i++;
fread(&num[i],sizeof(int),1,f1);
}
printf("\n");
fclose(f1);
f2=fopen("text2","wb");
for(k=N;k
fwrite(&num[k],sizeof(int),1,f2);
fclose(f2);
printf("\nThelatterdata:
\n");
f2=fopen("text2","rb");
fread(&k,sizeof(int),1,f2);
while(!
feof(f2))
{
printf("%5d",k);
fread(&k,sizeof(int),1,f2);
}
printf("\n");
fclose(f2);
}Editor'snote:
JudsonJonesisameteorologist,journalistandphotographer.HehasfreelancedwithCNNforfouryears,coveringsevereweatherfromtornadoestotyphoons.FollowhimonTwitter:
@jnjonesjr
(CNN)--Iwillalwayswonderwhatitwasliketohuddlearoundashortwaveradioandthroughthecracklingstaticfromspacehearthefaintbeepsoftheworld'sfirstsatellite--Sputnik.IalsomissedwatchingNeilArmstrongstepfootonthemoonandthefirstspaceshuttletakeoffforthestars.Thoseeventswerewaybeforemytime.
Asakid,Iwasfascinatedwithwhatgoesoninthesky,andwhenNASApulledtheplugontheshuttleprogramIwasheartbroken.Yettheprivatizedspaceracehasrenewedmychildhooddreamstoreachforthestars.
Asameteorologist,I'vestillseenmanyimportantweatherandspaceevents,butrightnow,ifyouweresittingnexttome,you'dhearmyfoottappingrapidlyundermydesk.I'manxiousforthenextone:
aspacecapsulehangingfromacraneintheNewMexicodesert.
It