C语言实训报告Word文档格式.docx
- 文档编号:18263458
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:23
- 大小:306.41KB
C语言实训报告Word文档格式.docx
《C语言实训报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言实训报告Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
实训是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。
并为参加计算机等级考试作准备。
1.2实训的基本内容和要求
参加实训的学生,应当认真完成实训的全部内容。
最终提交实训成果来证明其独立完成各种实际任务的能力。
从而反映出理解和运用本课程知识的水平和能力。
具体如下:
1.代码编写规范,形成良好的编程习惯;
2.程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。
3.提交实训报告电子稿、装订的打印稿。
实训报告内容包括以下几个方面:
程序的总体设计和算法分析。
l程序流程图、函数说明
源程序代码清单
测试数据和测试过程记录
遇到的问题及解决方法分析
实训小结
第2章C语言实训课题演示系统的设计
2.1需求分析
功能:
包括选择结构、循环结构、顺序结构程序、数组、函数、指针等,要求可以实现字母表加密系统,6174规律的验证,生成职工信息单链表,实现ASCII码文件信息复制,实现前n项数列求和运算,实现优秀学生成绩的筛选。
2.2概要设计
2.2.1演示系统主控模块
根据表1的子系统与函数名的对照表,设计出如下“C语言实验演示系统”的主控模块。
在主控模块中,只要在主函数main()前加入包含各子系统文件组成的头文件,我们就能方便的调用各子系统的函数了。
主控模块(图示):
图2.1
图2.2
子模块(图示):
图2.3
图2.4
图2.5
图2.6
主程序包含所有子程序中要用到的自定义头文件。
2.2.2各子系统的函数名对照表
表2.1各子系统函数名对照表
序号
菜单名
文件名
函数名
1
6174规律验证
yanzheng.h
yanzheng
2
单链表建立与输出
lianbiao.h
lianbiao
3
数列求和
shulieqiuhe.h
shulieqiuhe
程序执行过程:
当程序编译连接成功后,就可以生成可执行程序了。
程序主菜单如图xx:
此时等待用户输入,系统对输入的数会自动进行判断,如果不合理则会提示用户重新输入,如果合理则会进入相应的子模块。
并进行相应的运算。
例如输入4时,则系统运行结束后会生成一个新的文件,并将源文件的内容复制到新文件里。
第3章6174的验证系统的设计
3.1需求分析
编写程序验证以下说法:
输入一个4位数,该数个、十、百、千位上的数互不相等,由个、十、百、千位上的数组成一个最大数和一个最小数,最大数-最小数,构成一个新的4位数。
反复以上运算,使其最终结果为:
6174。
3.2概要设计
3.2.16174的验证系统的基本算法
S1:
输入num
S2:
判断num是否是四位数,如果不是则返回S1,如果是则转至S3
S3:
判断num的个十百千位上数是否互异,互异则转至S4,否则输出出错信息后结束
S4:
令ans=num
S5:
令t=ans,分解ans的各个数位,将其存入一个数组里
对该数组进行升序排列
S6:
有排列后的数得到最大数max和最小数min
S7:
令ans=max-min
S8:
判断ans是否与t相等,如果不相等则返回至S5,否则输出ans
3.36174的验证系统主流程图
图3.1
3.4模块测试
6174的验证系统主菜单
图3.2
输入菜单号1,进入6174的验证系统,并输入一个4位数,输入完毕后,其结果将会在屏幕显示出来。
图3.3
图3.4
图3.5
第4章职工信息单链表系统的设计
4.1需求分析
编写一个程序实现如下功能:
建立一个单链表,每个结点数据要有职工号、工资。
用一个creat函数来建立链表,用list函数输出数据
4.2概要设计
4.2.1职工信息单链表系统的基本算法
令n=0,head=NULL
系统分配sizeof(structstaff)字节的空间给p1,p2
输入p1->
num,p1->
wage的值
判断p1->
num是否为0,如果不为0,n=n+1,转至S7
判断n==1,如果成立,则head=p1,否则移动链表指针p2
为p1分配sizeof(structstaff)字节空间,并返回S3
返回链表头指针head
令p=head,判断head是否为NULL,如果不为NULL,转至S9,否则结束
S9:
输出p->
num,p->
wage,移动指针p,使p=p->
next
S10:
判断p是否为NULL,如果p不为NULL,返回S9,否则结束
4.3职工信息单链表系统流程图
图4.1
4.3模块测试
职工信息单链表系统主菜单
图4.2
输入菜单号2,进入职工信息单链表系统,输入职工号和职工工资,其结果如图所示。
图4.3
图4.4
第5章前n项数列求和运算系统的设计
5.1需求分析
功能:
输入一个n的值,求出数列前n项的和。
该数列满足以下规律:
1+12+123+1234+……
5.2概要设计
5.2.1数列前n项和的基本算法
输入
令t=0,i=1,sum=0
判断i≤n,如果成立成立转至S4,否则转至S5
t=t*10+i,sum=sum+t,i=i+1转至S3
输出sum的值
5.3前n项数列求和运算系统流程图
图5.1
5.4模块测试
前n项数列求和运算系统主菜单
图5.2
输入菜单号3,进入前n项数列求和运算系统,并输入n的值,数列前n项和的值如图所示。
图5.3
图5.4
第6章实训小结
一个星期的C语言实训十分匆忙,还来不及回味,就已经结束了。
这次实训不仅让我重温了从课本上学到的知识,C语言的三种基本结构运用更娴熟还对函数定义,函数调用有了较深入的了解,同时也初步掌握了C语言中比较重要的结构体,链表,文件操作等。
通过这次实训,让我明白,学习C语言不能停留在学习它的语法规则,而是应该利用自己学到的知识编写C语言程序,解决实际问题。
只有通过实践才能检验自己是否掌握C语言,检验自己编写的程序是否能够正确地解题。
因为在
自己编好程序上机调试运行时,可能有很多意想不到的情况发生,也许你认为正确的答案却是错的。
而通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
这次实训让同学们从25道题中选择自己喜欢题进行编写,在一定程度上给人以很大的自由选择空间,同时也极大的考验了大家的动手能力和思考能力。
这次实训确实让我获益匪浅!
实训,让我学会了耐心对待每一件事。
有时候,我认为自己编写的程序绝对是没有问题的,但每次就是运行不出来,这让人很着急。
但是我还是一遍又一遍的检查,看看自己是否把程序的源代码输错;
然后反复斟酌,看看自己自己的思路是不是有问题。
通过不断地检验,我终于检查出了程序的错误,在修改后,程序得到了正确的运行。
而当时那份喜悦的心情,真是无以言表!
实训,激发了我学习的浓厚兴趣。
由于自己以前学习C语言不够全面,这让我在实训中面对结构体,文件函数等题型时感到十分的无助。
于是,我便又拿起了自己许久不见的课本,静静地在图书馆自学,当遇到不懂的地方时,我会向老师和同学询问或者到网上查询资料。
在不断的学习过程中,我对C语言有了更深的认识和体会。
实训,提高了我解决问题的能力。
在这次实训过程中,像给字母加密,对学生成绩进行筛选等题型是我以前从未遇到过的。
当我面对困难时,我没有像以前那样一味的逃避,而是勇敢的去面对。
我会通过自己的学习或者是和同学的交流后,试着编写程序,遇到错误后,积极思考,及时的改正。
在解决问题的过程中,我了解到同一个程序可能许多种解决方法,而不同编写方法有不同的特点。
我认为最简单最直接的方法便是最有效的方法。
实训,让我学会了严谨。
这次实训让我养成了良好的编写风格。
由于一点小失误,就会使整个程序出错。
因此,在编程时,要注意相同内容的缩进和对齐。
这样做,可以使程序代码出错的情况下,可以快速并且便捷的查找到错误的行,利于很好的修改。
在实训的一个星期的时间里,我学到很多很多的东西,这次实训使我懂得了理论与实际相结合的重要性。
只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在实训的过程中可以说是困难重重,但我却没有放弃,而是迎难而上。
同时在实训的过程中我也发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,文件等。
这次实训,我并不满足于对C语言的学习,我更长远的目标便是考出计算机等级二(c)的证书,在不久后,我即将面临等级考试,但我并不害怕,因为这次实训让我信心倍增!
参考文献
谭浩强编著,《C程序设计》(第三版),清华大学出版社
夏耘,吉顺如编著,《大学程序设计(C)实践手册》,,复旦大学出版社
鲁沐浴编著,《C语言最新编程技巧200例》,电子工业出版社
梁翎等编著,《C语言程序设计实用技巧与程序实例》,上海科普出版社
各模块源代码
/*主控模块代码*/
#include<
stdio.h>
windows.h>
stdlib.h>
#include"
help.h"
yanzheng.h"
lianbiao.h"
shulieqiuhe.h"
print.h"
main()
{
voidprint(void);
voidxz(int);
intchoice=100;
while(choice!
=0)
{
print();
scanf("
%d"
&
choice);
getchar();
while(choice<
0||choice>
7)
{printf("
\t\tpleaseinputanumberbeween0-7\n"
);
system("
pause"
print();
scanf("
}
xz(choice);
}
/***********************************************/
/*主控显示代码*/
voidxz(inta)
cls"
switch(a)
case1:
yanzheng();
break;
case2:
lianbiao();
case3:
shulieqiuhe();
case4:
hlpfun();
case5:
exit(0);
voidprint(void)
printf("
\n"
\t\tCLanguageTrainingDemonstrationSystem\n"
\t\t═════════════════════════\n"
\t\t═MENU═\n"
\t\t═1.验证6174═\n"
\t\t═2.建立单链表═\n"
\t\t═3.计算1+12+123+1234+…═\n"
\t\t═4.帮助═\n"
\t\t═5.退出系统═\n"
\t\tinputyourchoice(1-5):
"
/*验证6174系统代码*/
voidyanzheng(void)/*对一个各位不重复的四位数,计算后结果为6174*/
intIsNumberEqual(int);
voidntos(intnum,intc[]);
voidsort(inta[]);
intgetmax(inta[]);
intgetmin(inta[]);
intnum,c[4],max,min,ans=1,t=0;
thisprogrameneedsanumberbetween1000to9999andits"
everydigits\nshouldbedifferent"
Icancalculatethenumberlikeamagicto\nmaketheresultis6174\n"
inputanumber(1000<
number<
9999):
num);
while(num<
1000||num>
9999)
dataerror,inputagain:
if(IsNumberEqual(num))
ans=num;
do
{
t=ans;
ntos(ans,c);
/*把输入数的各位存入c数组*/
sort(c);
/*对各数排序*/
max=getmax(c);
min=getmin(c);
ans=max-min;
}while(ans!
=t);
printf("
result=%d\n"
ans);
elseprintf("
pleaseinputasuitednumber!
intIsNumberEqual(intnum)/*判断num的各位是否互异,互异返回1,否则返回0*/
inta[4],flag=1;
a[0]=num%10;
a[1]=num%100/10;
a[2]=num%1000/100;
a[3]=num/1000;
if(a[0]==a[1]||a[0]==a[2]||a[0]==a[3]
||a[1]==a[2]||a[1]==a[3]||a[2]==a[3])
flag=0;
returnflag;
voidntos(intnum,intc[4])/*把num的各位存入数组c*/
c[0]=num%10;
/*c[0]表示num的个位*/
c[1]=num%100/10;
/*c[0]表示num的十位*/
c[2]=num%1000/100;
/*c[0]表示num的百位*/
c[3]=num/1000;
/*c[0]表示num的千位*/
}
voidsort(inta[4])/*从小到大排序—升序*/
inti,j,t;
for(i=0;
i<
4-1;
i++)
for(j=0;
j<
4-1-i;
j++)
if(a[j]>
a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
intgetmax(inta[])/*返回最大值*/
intans;
ans=a[0]+a[1]*10+a[2]*100+a[3]*1000;
returnans;
intgetmin(inta[])/*返回最小值*/
ans=a[0]*1000+a[1]*100+a[2]*10+a[3];
/*职工信息单链表模块代码*/
malloc.h>
#defineLENsizeof(structstaff)
structstaff
longnum;
floatscore;
structstaff*next;
};
voidlianbiao(void)/*建立单链表并输出*/
structstaff*creat(void);
voidlist(structstaff*head);
structstaff*head;
inputsomestaffs'
informationincludeIDandwage,thenumberofstaffis\nnotfixed"
becauseweusealistwithoutlimited.youcaninputsomestaffs'
\ninformation"
ifyouwanttoendsinputplesepress0,ablank,0,now.\nyoucantry.\nIDwage\n"
head=creat();
list(head);
structstaff*creat(void)/*建立单链表*/
structstaff*head,*p1,*p2;
intn=0;
p1=p2=(structstaff*)malloc(LEN);
%ld%f"
p1->
num,&
score);
head=NULL;
while(p1->
num!
n=n+1;
if(n==1)head=p1;
elsep2->
next=p1;
p2=p1;
p1=(structstaff*)malloc(LEN);
p2->
next=NULL;
return(head);
voidlist(structstaff*head)/*输出链表内数据*/
structstaff*p;
\nthestaffinformationyoucreatjustnoware:
p=head;
if(head!
=NULL)
printf("
%-5d\t%.2f\n"
p->
p=p->
next;
}while(p!
=NULL);
voidshulieqiuhe(void)/*calculate1+12+123+1234+……*/
longfun(int);
voidpt_result(longsum,intn);
intn;
thisprogramecancalculate1+12+123+1234+……\n"
forexampleifyouinput3,itcancalulate1+12+123\n"
inputn:
n);
pt_result(fun(n),n);
longfun(intn)
longsum=0,t=0;
inti=1;
while(i<
=n)
t=t*10+i;
sum+=t;
i++;
returnsum;
voidpt_result(longsum,intn)
longt=0;
%d+"
t);
i++;
\b=%d\n"
sum);
/*帮助源代码*/
voidhlpfun12(void)
thisprogramisdesignedfortestafamouslawnamed6714\n"
letuslookhowtocalculateanumberandlettheresultis6174\n"
ifanumberbetween1000to9999meetstheconditionthatits\n"
everydigitisdifferent,withthefourdigits,wecangetamaximu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告