C语言实训报告.docx
- 文档编号:10866789
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:27
- 大小:341.56KB
C语言实训报告.docx
《C语言实训报告.docx》由会员分享,可在线阅读,更多相关《C语言实训报告.docx(27页珍藏版)》请在冰豆网上搜索。
C语言实训报告
实训报告
课程名称:
计算机能力强化实训(C)
姓名:
郑小华
班级学号:
BG0901、37
指导教师:
吉顺如
完成日期:
2011-9-8
目录
1实训目的与要求3
1.1实训目的3
1.2实训的基本内容和要求3
2问题描述4
2.1基本功能需求分析4
2.2系统概要4
3系统使用的主要函数7
4详细设计8
4.1程序总体结构图8
4.2程序流程图9
5功能测试12
5.1、系统主界面12
5.2、求和S的界面12
5.3、最值交换的界面13
5.4、打印杨辉三角形的界面14
5.5、求“百钱百鸡”问题的界面15
5.6、歌手大赛评分的界面16
5.7、对文件加密的界面17
5.8、系统退出的界面18
6程序设计调试情况分析19
7实训小结20
参考文献21
附录系统源程序22
附录一C实训课题演示系统主控模块:
22
附录二1求S-21:
24
附录三2最值交换-24:
24
附录四3杨辉三角形-33:
26
附录五4百钱百鸡-26:
27
附录六5歌手大赛评分-19:
28
附录七6文件加密-2929
1实训目的与要求
1.1实训目的
C语言程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。
实训是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。
并为参加计算机等级考试作准备。
1.2实训的基本内容和要求
参加实训的学生,应当认真完成实训的全部内容。
最终提交实训成果来证明其独立完成各种实际任务的能力。
从而反映出理解和运用本课程知识的水平和能力。
具体如下:
1.代码编写规范,形成良好的编程习惯;
2.程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。
3.提交实训报告电子稿、装订的打印稿。
实训报告内容包括以下几个方面:
●程序的总体设计和算法分析。
●程序流程图、函数说明
●源程序代码清单
●测试数据和测试过程记录
●遇到的问题及解决方法分析
●实训小结
2问题描述
2.1基本功能需求分析
功能:
包括选择结构、循环结构、顺序结构程序、数组、函数、指针等,要求可以求
的值、找出数组的最大值、最小值并且按照要求排序、利用数组打印杨辉三角形、利用循环结构求解实际问题百钱百鸡、实现输入的数据放入数组对数组数据进行删除求平均值、实现对文件加密等。
2.2系统概要
2.2.1演示系统主控模块
设计如下“C语言实验演示系统”的主控模块。
在主控模块中,只要在主函数main()前加入包含各子系统文件组成的头文件,我们就能方便的调用各子系统的函数了。
主控模块(图示):
图2.1主控模块
2.2.2演示系统子模块
图2.2求S=a+aa+..模块
图2.3文件加密模块
图2.4歌手大赛评分模块
图2.5最值交换模块
3系统使用的主要函数
在本系统主控模块中,只要在主函数main()前加入包含各子系统文件组成的头文件,我们就能方便的调用各子系统的函数了,因此完成每个功能都需要一个函数来实现,在本系统中总共需要完成六个功能,因此有六个比较重要的函数来完成这些功能,函数及其注释见表3.1。
表3.1各子系统函数名对照表
序号
菜单名
文件名
函数名
注释
1
求S-21
1求S-21.h
qius()
求s=a+aa+aaa+......的函数
2
最值交换-24
2最值交换-24.h
zzjh()
最值交换的函数
3
杨辉三角形-33
3杨辉三角形-33.h
yhsjx()
打印杨辉三角形的函数
4
百钱百鸡-26
4百钱百鸡-26.h
bqbj()
求百钱百鸡的函数
5
歌手大赛评分-19
5歌手大赛评分-19.h
gsdspf()
歌手大赛评分的函数
6
文件加密-29
6文件加密-29.h
wjjm()
对文件加密的函数
4详细设计
4.1程序总体结构图
层次图:
图4.1主控模块
4.2程序流程图
图4.2求s=a+aa+aaa+.....的流程图
图4.3百钱百鸡流程图
图4.4杨辉三角形的流程图
5功能测试
5.1、系统主界面
图5.1系统主界面
5.2、求和S的界面
求
的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。
图5.2求和S的界面
5.3、最值交换的界面
输入一个正整数n(1 输入一个正整数n(1 图5.3最值交换的界面 5.4、打印杨辉三角形的界面 编写程序输出以下杨辉三角形(要求输出10行)。 1 11 121 1331 14641 15101051 ……………… 图5.4打印杨辉三角形的界面 5.5、求“百钱百鸡”问题的界面 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡”问题: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 百钱买百鸡,问翁、母、雏各几何。 图5.5求“百钱百鸡”问题的界面 5.6、歌手大赛评分的界面 某歌手大赛,共有十个评委给选手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的最后成绩。 图5.6歌手大赛评分的界面 5.7、对文件加密的界面 某公司在传输数据过程中为了安全要对数据进行加密,若传递的是四位的整数,对其进行加密的规则为: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 如: 输入数字7659,则加密后的数字为4012 图5.7对文件加密的界面 5.8、系统退出的界面 图5.8系统退出的界面 6程序设计调试情况分析 在主控程序调试中,出现了较多的细节问题: (1)每两两个.h文件之间的变量符号相同就会出现错误; 解决办法: 尽量把变量符号改成不相同的。 (2).h文件的文件名与当文件定义的主函数名相同,在主控函数调试中就会出现错误; 解决办法: 把文件名和当文件定义的主函数名改成不一样。 (3)在定义函数的时候,在函数前面加了类型,比如没有返回值的时候定义成int类型的,在主控函数调试的时候就会出现错误。 解决办法: 将函数类型改成void类型,即不返回任何值。 7实训小结 路漫漫其修远矣,吾将上下而求索。 为期一个星期的C语言强化实训已接近尾声,但这次实训无论在理论上还是实践上都是一次巨大的飞跃,是我们学到的知识与日常上遇到的实际问题联系起来,让我知道了C语言在日常应用中的巨大作用,使我更深入的去了解C语言的强大和作用。 但是在一个星期的上机训练中,也暴露出了自己在C语言的学习出现的问题和不足,下面就我自己在做题中出现的问题和在对问题解决中自己的一些收获做简要介绍。 1.加深对课堂讲授内容的理解 课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。 然而要使用C语言这个工具解决实际问题,又必须掌握它。 通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。 对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。 学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。 即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。 只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。 自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。 2.熟悉程序开发环境、学习计算机系统的操作方法 一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。 所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。 通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。 同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 3.学习上机调试程序 完成程序的编写,决不意味着万事大吉。 你认为万无一失的程序,实际上机运行时可能不断出现麻烦。 如编译程序检测出一大堆错误。 有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。 开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。 通过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于C语言的知识,理解巩固了我们C语言的理论知识。 C语言这门课程对于自动化专业的同学也相当重要,我们会再将来继续学习并熟悉这门课程。 参考文献 [1]谭浩强.《C程序设计》(第四版).清华大学出版社 [2]夏耘,吉顺如.《大学程序设计(C)实践手册》.复旦大学出版社 附录系统源程序 附录一C实训课题演示系统主控模块: #include #include #include #include #include"1求S-21.h" #include"2最值交换-24.h" #include"3杨辉三角形-33.h" #include"4百钱百鸡-26.h" #include"5歌手大赛评分-19.h" #include"6文件加密-29.h" main() { inttihao; charch; ch='y'; system("colorf0");//将系统屏幕背景改成白色的 while(ch=='y'||ch=='Y') { printf("\n"); printf("\n\t\tC实训课题演示系统"); printf("\n\t\t主菜单"); printf("\n\t\t╔═══════════╗"); printf("\n\t\t║____________________║"); printf("\n\t\t║I1、求S-21I║"); printf("\n\t\t║I2、最值交换-24I║"); printf("\n\t\t║I3、杨辉三角形-33I║"); printf("\n\t\t║I4、百钱百鸡-26I║"); printf("\n\t\t║I5、歌手大赛评分-19I║"); printf("\n\t\t║I6、文件加密-29I║"); printf("\n\t\t║I0、退出I║"); printf("\n\t\t║I__________________I║"); printf("\n\t\t╚═══════════╝"); printf("\n\t\t║____________║"); printf("\n\t\t║____________║"); printf("\n\t\t╔══════════════╗"); printf("\n\t\t║: : : ____║"); printf("\n\t\t║~~~~[CD-ROM]║"); printf("\n\t\t║║"); printf("\n\t\t╠══════════════╝"); printf("\n\t\t╚请选择菜单号(0--6): "); scanf("%d",&tihao); getchar(); switch(tihao)//从键盘输入一个0——6的数据选择操作菜单 { case1: qius();break; case2: zzjh();break; case3: yhsjx();break; case4: bqbj();break; case5: gsdspf();break; case6: wjjm();break; case0: ch='n';break; default: printf("菜单选择错误! 请重新输入! "); } } } 附录二1求S-21: //求s=a+aa+aaa+......的值,其中a是一个数字, //如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。 #include qius()//求s=a+aa+aaa+......的函数 { inta,n,i;//定义变量 longs=0,f=0;//定义常变量 printf("请输入a,n: "); scanf("%d%d",&a,&n);//从键盘输入变量a,n的值 for(i=1;i<=n;i++)//利用循环求S的结果 { f=f*10+a; s+=f; } printf("s=%d\n",s);//输出结果S } 附录三2最值交换-24: //最大值、最小值及其交换 //输入一个正整数n(1 //输入一个正整数n(1 //最大值与最后一个数交换,然后输出交换后的n个数。 #include zzjh() { intn,i,q[10],max,min,t,r,p;//定义变量 printf("输入一个正整数n(1 "); scanf("%d",&n); printf("输入%d正整数: ",n); for(i=0;i scanf("%d",&q[i]); min=q[0];//假设数组第一元素为最小值 max=q[0];//假设数组第一元素为最大值 for(i=0;i { if(q[i]>=max) { max=q[i];//求最大值 r=i;//求最大值的下标 } if(q[i]<=min) { min=q[i];//求最小值 p=i; } } printf("最大值: %d下标: %d\n最小值: %d\n",max,r,min);//输出最大值及其下标、最小值 if(q[0]>min) {t=q[0];q[0]=q[p];q[p]=t;}//最小值与第一个元素交换 if(q[n-1] {t=q[n-1];q[n-1]=q[r];q[r]=t;}//最大值与最后一个元素交换 printf("交换后的%d个数: ",n); for(i=0;i printf("%d",q[i]);//输出交换后的数组 printf("\n"); } 附录四3杨辉三角形-33: //编写程序输出以下杨辉三角形(要求输出10行)。 //1 //11 //121 //1331 //14641 //15101051 //……………… #include #defineN10 yhsjx()//打印杨辉三角形 { inti=0,j=0,b[N][N]; for(i=0;i { for(j=0;j<=i;j++)//打印j<=i时的数据,不打印j>i的数据 { if(i==j||j==0) b[i][j]=1; elseif(i>j) b[i][j]=b[i-1][j-1]+b[i-1][j];//求出每个数据 printf("%d\t",b[i][j]); } printf("\n"); } } 附录五4百钱百鸡-26: //中国古代数学家张丘建在他的《算经》中提出了一个著名的"百钱百鸡"问题: //鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 //百钱买百鸡,问翁、母、雏各几何。 #include bqbj()//求百钱百鸡问题 { intx,y,z; for(x=1;x<=20;x++)//鸡翁的判断循环条件 { for(y=1;y<=35;y++)//鸡母的判断循环条件 { for(z=1;z<=100;z++)//鸡雏的判断循环条件 { if(5*x+3*y+1.0/3*z==100&&x+y+z==100)//三者满足的条件 printf("鸡翁、母、雏分别是: %d,%d,%d\n",x,y,z); } } } } 附录六5歌手大赛评分-19: //歌手大赛评分 //某歌手大赛,共有十个评委给选手打分,分数采用百分制, //去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的最后成绩。 #include #definef10 gsdspf()//歌手大赛评分问题 { intscore,s[f],i,max,min,sum=0; floataverage; for(i=0;i { printf("请输入%d号选手分数: ",i+1); scanf("%d",&score); if(score<=100&&score>0) s[i]=score; else { printf("出错了! "); i--; continue; } } printf("十位选手的分数分别为: \n"); for(i=0;i printf("%d",s[i]); printf("\n"); max=s[0]; min=s[0]; for(i=0;i { sum+=s[i]; if(s[i]>max) max=s[i]; if(s[i] min=s[i]; } average=(float)(sum-max-min)/(f-2);//去掉两个最值分数并求平均值 printf("最大分数: %d\n最小分数: %d\n",max,min); printf("除最高分和最低分外的平均分是: %5.2f\n",average); } 附录七6文件加密-29 //某公司在传输数据过程中为了安全要对数据进行加密, //若传递的是四位的整数,对其进行加密的规则为: //每位数字都加上5,然后用和除以10的余数代替该数字, //再将第一位和第四位交换,第二位和第三位交换。 //如: 输入数字7659,则加密后的数字为4012 #include #definen4 wjjm()//文件加密问题 { intp[n],i,a,t; printf("请输入原数据: "); scanf("%d",&a); for(i=n-1;i>=0;i--)//将原数据的每位数输入数组 { p[i]=(a%10+5)%10; a=a/10; } t=p[0];p[0]=p[3];p[3]=t;//按要求将数据每位数进行交换 t=p[1];p[1]=p[2];p[2]=t; printf("加密后的数据: "); for(i=0;i printf("%d",p[i]); printf("\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告