报告大全 > 社会报告 > 实践报告
栏目

c++实践报告书五篇

发布时间:2024-11-19 热度:51

c++实践报告书

第一篇 c++实践报告书3300字

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

学生学号 学生姓名

指导教师 学 院 专业班级 mfc课程设计

计算机基础教学实验中心

2024年 06月 14 日

一、引言

mfc(microsoft foundation class library, 微软基础类库)是微软基

windows平台下的c++类库集合。mfc包含了所有与系统相关的类,其中封装了大多数的api(application program interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握c++应用系统的开发方法和技巧。在系统学习完《c++程序设计》这门课程后,通过实践对几个小型c++应用程序实例设计与实现过程分析,帮助学生利用c++开发应用系统的一般方法和步骤,掌握mfc的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《c++语言课程设计任务书》为要求和目的,运用课堂上学习的c++基础知识,采用visual c++ mfc编程系统,以全新的角度和感知去认识c++语言在编程方面的优越性。在实践过程中,基于对话框的mfc应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解windows应用程序采用“消息传递、事件驱动”的运行机制。

本次实践的任务主要分为两个部分:

(一) 使用visual c++ mfc编程实现以下功能:

1. 输入一元二次方程a_2+b_+c=0 的系数a、b、c,计算并输出两个根_1、_2.

2. 编写一个能对列表框进行项目添加、修改和删除操作的应用程序。

3. 编写一个程序,绘制-2π~2π之间的sin曲线。

4. 用定时器控制蝴蝶在窗口中飞舞。等共10道。

(二) 将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调

用各部分的功能。

二、总体设计

本次实践的主要目的就是了解和掌握运用mfc编程的一般思想和具体的操作步骤。实践主要是基于mfc的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。

第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。

三、详细设计

实践前首先要认识appwizard的工作环境。其项目工作区一共有三个选项卡分别为“resourceview”“classview”“fileview”,中间是对话框设计界面,右边是控件工具栏。

实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《c++程序设计实践教程》了

解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的mfc应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的mfc程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:id和标题。id便是该控件的标识,某些函数需要通过id对控件进行操作。

了解一定相关知识后,对课程实践有了很大的'帮助。其中“输入一元二次方程a_2+b_+c=0 的系数a、b、c,计算并输出两个根_1、_2”这个题目比较复杂,而且与c++连续很紧密。其中的有这样的语句m__1=(-b+sqrt(b_b-4_a_c))/(2_a); m__2=(-b-sqrt(b_b-4_a_c))/(2_a),这就是我们在课堂上学习的c++基本语句,在实践过程中考验学生的灵活运用能力。完成这个题目的关键是把每个编辑框(控件)连接好变量和选的数据类型,接下来的就是编写消息处理函数。这道题很全面地体现了mfc的“消息传递、事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

mfc编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如windows自带的notepad程序。在本次实践的第一大部分的后5个小题就是基于单文档的。那么首先要对其有一定的了解:文档/视图结构的思想是将数据的管理与显示分离,其中文档用于管理应用程序的数据,而视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互。sdi具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是onnewdocument,用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是ondraw,通过在该函数中添加代码实现窗口内容的输出。

本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

? 利用定时器控件制作动画程序。

? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把gif格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。

在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。

关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,mfc application(e_e),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静

态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在dialog上右击选择插入dig,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点ok创建类,并对其命名(假如命名为mymenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击ok,在顶端添加#include”mymenu.h”,并onbutton1下添加以下代码cstring c_user,c_password;

m_user.getwindowte_t(c_user);

m_password.getwindowte_t(c_password);

if(c_user.isempty||c_password.isempty)

{

messagebo_('用户名或密码不能为空','用户登录信息');

return;

}

if(c_user==''&&c_password=='')

{

cmymenu dlg;

dlg.domodal;//这两段代码是用于调用菜单对话框

}

else

{

messagebo_('用户名或密码不正确','提示',mb_iconinformation); return;

(6)对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;

(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点ok,在代码页的顶端加入如图代码,并在onbutton1下加入以下代码 ct1 dlg; dlg.domodal;其他的按相同操作。

四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用mfc编写可视化界面的应用程序,加强了对c++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对microsoft visual c++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。

第二篇 c++计算器实践报告2300字

c++计算器实践报告

题 目

科学计算器应用程序系统

学生姓名

指导教师

学 院

专业班级 学生学号 吴金星 严晖 材料科学与工程学院 1206 0607120610

计算机基础教学实验中心

2024年 7 月 3 日

科学计算器管理信息系统

摘要:本设计是简单计算器,日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

关键词:程序设计;计算器;mfc;按钮控件

1. 计算器系统开发设计思想

⑴实验目的

①通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

②通过实践进一步领会程序设计的特点和应用,提高运用c++ 以及面向对象知识解决实际问题的能力。

③通过实践掌握用c++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用c++程序设计语言编写出一些短小、可靠的windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。

⑵实验要求

①二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

②科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

③以角度、弧度两种方式实现上述部分函数

④具备历史计算的记忆功能

⑤对不正确的表达式能指出其错误原因

⑥整理上机步骤,完成实验报告、提交可运行的程序,给出实验数据和实验结果

2、计算器系统功能及系统设计介绍

⑴功能说明

它的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作。即可单机按钮进行操作,也可直接通过键盘直接输入。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

①包含的功能有:加、减、乘、除运算,开方、求倒数等功能。②计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。③给对话框添加菜单。④计算功能基本上是用系统内部函数。⑤程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。⑥“c”按钮可以清除所有已输入的数据从头计算。

⑵设计思路

①算法基本流程,数值计算及功能:②主要部分为按键后的接受处理

③键入为数字则检查和增长操作数,有前算符则增长操作数1,否则增长操作数

2。计算器基本按:键入操作数1,键入运算符(若为单目算符即直接运算),键入操作数2,再键入算符即运算前算符,若为当前键入为单目算符即再运算,结果保留在操作数1中,并返回在界面显示。

④在每次运算前将操作数进行进制转为十进制,在运算结束后操作数还原进制。 ⑤其中键入特殊算符和功能键作特殊处理,如:退格,进制选键和”=”,”ce”,”c”等。显示键入的相关信息,如果键入不合法即提示错误。 ⑶算法流程图

⑷关键功能实现

①操作数的.输入,编辑框所关联的变量为m_num,程序开始时为零。每按下一个数字键按钮,就把它累加到m_num里并刷新显示。bool型变量ele来判断是否有小数点和一个整型数dint来表示小数点后的数据的位数。当ele=true时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行ele=true。当按下一个数字键时,首先根据ele判断是否按下小数点,若有则把小数点后数的位数加1,dint则为此次键入的数所处的位数,将键入的数除以dint个10然后累加到编辑框所关联的变量m_num上,若没有则把m_num乘以10,然后累加到编辑框所关联的变量m_num上。

②单目运算符功能的实现,由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_num=sqrt(m_num).按下按钮即可实现其功能。为实现连续运算,程序有所改动。

③双目运算符功能的实现,双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_num中的值保存到变量num2中,然后把m_num清零。这样即可保存第一个操作数。另外先定义了一个整形变量addt,在不同的双目运算符中给addt赋不同的值,然后在等号中用switch语句来匹配addt值来判断需要执行何种双目运算。为实现连续运算,程序有所改动。 ④退格键功能的实现,当按下一次退格按钮时,若m_num为整数,只需对其中数据除以10再取整即可,若按下一次退格按钮为小数,则根据小数点后数据的位数dint进行操作,先对m_num执行(dint-1)次乘以10运算,然后取整,接着执行(dint-1)次除以10的运算即可。完成后需要把dint将减小1。

⑤正负号功能的实现,在头文件中定义一个bool型变量ele2来判断m_num的正负。ele2=true时表示为正。在键入操作数时需要用到ele2。在正负号按钮的消息响应函数内容为m_num=-m_num;ele2=!ele2。

3.计算器系统开发的体会

实践是获取知识的一个极其重要的途径,无论是过去还是现在抑或是将来,我都坚信这一点。在这个实验中,我坚持以实践为导向,虽然,我没有对clr与.net的系统的学习,理论理解并不多,但是在实际摸索应用的过程中,我还是学到很多东西,特别是理解了一个功能的使用方法之后,这种快乐的心情是无法描述的。现在可以灵活运用一些常用的属性,进行一些基本操作,以实现预期目标。

实现该计算器,当时的想法是尽量向windows计算器靠拢。可以看到,这个计算器有很多windows计算器的影子。虽然这个计算器还有很多不足,比如表达式的处理。 这个计算器的代码都是自己思考过后写出来的,特别是错误排除部分,经历了很多bug的时期。由于时间限制,可视化计算器的基本实现告一段落,在时间允许的以后再进一步完善计算器功能。

第三篇 c++工程实践报告1050字

通过c语言实训,让我加深了对c语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过几天的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。

这次实训有很大的收获,让我对c语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对c语言有了浓厚的兴趣和更深层的认识。

c语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实训我也知道了自己的不足,存在的很多问题。

比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。

还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,c语言还是很有意思的课程。

自己亲自动手编写程序让我增加了对c语言程序开发环境的了解,在上课的时候老师就讲,学习c语言最重要的是学习c语言的逻辑思维,不管以后从事什么行业,学习c语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用c语言,但是拥有扎实的c语言基础是对工作很有用的。

当初在初步接触c语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!

感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的相互探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础。

第四篇 c++课程实践报告1100字

为期一个星期的c++实训已经基本结束,但是给了我很大的影响。通过这次实训,使我明白c++语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。

通过上机训练,才能够明白自己知识的不足,才能够有的放矢,更加深刻的理解c语言中的知识点。 通过实训,我找到了许多知识漏点,学到了很多以前不懂的知识,以前认为自己已经懂了的知识点也理解更加深刻了。

尤其是遇到了自己当时不知道如何编写的c++语言题目如何编写,通过自己的学习和同同学的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成就感。并增加了我们对c++语言的兴趣和学好c++语言的信心。

与同学们交流的过程中,了解了程序的多种解决方法,知道了不同编写方法有不同的特点。总结c++语言实训的几个重要作用:

1.加深对课堂讲授内容的理解

课堂上要讲授许多关于c++语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c++语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c++语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。

学习c++语言不能停留在学习它的语法规则,而是利用学到的知识编写c++语言程序,解决实际问题。即把c++语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c++语言、自己编写的程序是否能够正确地解题。

自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c++语言的理解和程序开发能力。

2.熟悉程序开发环境、学习计算机系统的操作方法

一个c++语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓'环境'就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c++语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。

3.学习上机调试程序

完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。

通过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于c++语言的知识,理解巩固了我们c++语言的理论知识。 c++语言这门课程对于我们应用电子专业的同学也相当重要,我们会再将来继续学习并熟悉这门课程。

第五篇 c++课程设计实践报告1700字

c++课程设计实践报告

班级:83121

姓名:张弛

学号:20121000491

题目一、 题目描述: 已知银行整存整取存款不同期限的月息利率(采用复利 方式,即利滚利)分别为 0.63% 期限一年 0.66% 期限二年 月息利率= 0.69% 期限三年

0.75% 期限五年 0.85% 期限八年 要求输入存钱的本金和期限(以整数年为单位) ,求到期时能从银行 得到的利息与本金的合计。 提示:可以用嵌套的 if-else 结构或 switch 结构实现,核心函数 pow(1+月利率,月份)。 请思考年份是四、六、七或八年以上的情况。

设计思路: (一)使用 switch 选择语句 对应年份

(二)明确核心函数 pow 是计算复利的(例如:_ 的 n 次方 ) ;由于 是以年为计算期限的,而所给的利率是月利率,所以计算时 应该在年的基础上乘以 12; (三)复利计算就是一种幂运算,i=p_(1+i)^n,本金和利率都是变

动的 (四)在除了 1、2、3、5 和 8 年之外的其他年份中,要注意“就低 不就高”的原则,尤其是在 8 年之后,也是套用期限八年的利率。

附源程序如下: #include #include void main { int years; float capital,sum;

scanf('%f %d',&capital,&years); switch(years) { case 1:sum=capital_pow(1+0.63_0.01,12);break; case 2:sum=capital_pow(1+0.66_0.01,24);break; case 3:sum=capital_pow(1+0.69_0.01,36);break;

case 4:sum=capital_pow(1+0.69_0.01,48);break;

case 5:sum=capital_pow(1+0.75_0.01,60);break; case 6:sum=capital_pow(1+0.75_0.01,72);break; case 7:sum=capital_pow(1+0.75_0.01,84);break; case 8:sum=capital_pow(1+0.85_0.01,96);break; default:sum=capital_pow(1+0.85_0.01,12_years); } printf('%f',sum); }

题目二、 题目描述: 简单计算器。用 switch 语句编写一个程序计算表达式: data1 op data2 的值。其中 op 为运算符+、-、_、/。

设计思路: (一)明确计算器是怎样进行计算的; (二) 细节, 比如很多地方需要分号, 在遇到字符时, 我们应该用 ‘’ , 而不是“” ; (三 switch 语句主要用于多分支选择,此题有+、-、_、/,这就是 选择。使用 switch 每个 case 对应+ - _ /符号 程序涉及到至

少三个量,运算符 op 和两个数字;先让用户输入两个数字和运算符, 两个数字的计算在后面的程序中用 swith 结构运行。 运 行 效 果 截 图 :

附源程序如下:#include int main { float data1,data2,c;

char op; printf('请输入表达式中两个数字 data1 和 data2 '); //打印 scanf('%f%c%f',&data1,&op,&data2); //输入

printf('请输入运算符+、-、_、/ ');// 打印 switch(op) //switch {case stick:break;} 这个是个选择结构

如果 op = stick 则执行这一句 如果没有 则执行 default 后面 的语句 { case '+':c=data1+data2;break; case '-':c=data1-data2;break; case '_':c=data1_data2;break; case '/':c=data1/data2;break; default:printf('输入错误');break; } printf('%f',c); return 0; } 题目三 题目描述:编写程序,用二分法求方程 2_3-4_2+3_-6=0 在(-10,10) 之间的根。 提示: ① 用 do-while 语句实现。

② 二分法的计算步骤: (1) 准备 计算 f(_)在有根区间[a,b]端点处的值 f(a),f(b) (2) 二分 计算 f(_)在区间中点(a+b)/2 处的值 f[(a+b)/2] (3) 判断若 f[(a+b)/2]=0,则即是根,计算过程结束。 否则,检测: a. 若 f[(a+b)/2]与 f(a)异号, 则根位于区间[a,(a+b)/2]内, 这时以(a+b)/2 代替 b; b. 若 f[(a+b)/2]与 f(a)同号, 则根位于区间[(a+b)/2,b]内, 这时以(a+b)/2 代替 a; 反复执行步骤 2 和 3,直到区间[a,b]长度缩小到允许的误差范围之 内,此时中点(a+b)/2 即为所求的根 设计思路: (一)二分法是指在整个算法中,让计算值无限趋近于根的值,利用 数学知识可知,当了两个点的结果异号时,函数的根就在这两个数之 间,利用二分法可以无限的把根的范围缩小,直到可以确定为止; (二)do-while 是循环语句,先执行一次指定的循环体语句,然后 判别表达式, 当表达式的值为非零 (真) 时, 返回重新执行循环语句, 如此反复,直到表达式的值等于 0(假)为止才结束。 (三)void main是声明函数,并且是对主函数的声明。题目所 给的范围是(-10,10) ,因此在声明函数中定义一个 a 和 b 来代替区 间的范围,而用 c 来代指中间指也是最后的结果,在这个程序中 a、 b、c 都是随着范围不断变化的变量。如果(-10,10)的范围过大,

就需要循环语句来缩小区间范围, 即 a=c 或 b=c。 当函数值在 (-10,10) 中任意一点取得 0 时,就正是我们所要的结果。循环条件是当区间 a 和 b 的函数值小于精度 0.01。 运行效果截图:

附源程序如下: #include 'stdio.h' float f(float _) { float y; y=2______-4____+3__-6; return y; } void main { float a=-10,b=10,c;

do{c=f((a+b)/2); if(c==0) break; if(c_f(a)>;0) a=c; else b=c; } while(f(b)_f(a)<0.01); /_解的精度为 0.01_/ printf('方程的解是:%f',c); }

题目四 题目描述:编写程序,给定一个整数 i,请求出另一个整数 j,使 i 和 j 在用 8 位二进制表示时互为逆序。例如:给定 i=3 时,应得到 j=192(3 的二进制为:00000011,192 的二进制为 11000000) 。 提示: ① 十进制整数转换为二进制整数用“除 2 求余”法。 ② 二进制整数转换为十进制整数用“按权相加”法。

设计思路: (一)二进制整数转化为十进制整数用“按权相加”法 (二)二十进制整数转化为二进制整数用“除 2 求余” ,用&转化。

(三)运算符:<<是指左移一位,>;>;是指右移一位,<<=结合时从右 到左运算, 其中 a;a 是指 b 向右移 a 位, 左移一位相当于乘 2 右移 1 位相当于除 2 (四)在交换时,用的是中间法

运行效果截图: 附源程序如下:#include 'stdio.h' void main { int i,j,s=1,a[8]; printf('请输入一个整数 i: '); scanf('%d',&i); for(j=0;j<8;j++,s<<=1) { a[j]=i & s; } printf('所得到的 j 为: ');

printf('%d ',(a[0]<<7) | (a<<5) | (a<<3) | (a[3]<<1) | (a[4]>;>;1) | (a[5]>;>;3) | (a[6]>;>;5) | (a[7]>;>;7)); }

题目五 题目描述:编写程序,抓交通肇事犯。 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没 有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相 同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位 数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求 出车号。 提示: ① 按照题目的要求,造出一个前两位数相同、后两位数相同且相互 间又不同的整数,然后判断该整数是否是另一个整数的平方。 ② 用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法, 它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷 举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的 范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而 产生错误。

设计思路:

(一)11 11

到 11

99

99 11 这样 穷举

判断是否一个

数的平方 则是 将这个数开方

取整 再取平方 是否还是原来的数

(二)此题需要满足三个条件:①前两个数相同,后两个数相同;② 前后两数分别不相同;③这个数是一个整数的平方。需要每个条件都 满足,if 才为真。 (三)主要思路是穷举。穷举是指在适当的范围内举出一个数。 运 行 效 果 截 图 :

附源程序如下: #include void main { int a,b; for(a=32;a<=99;a++)

{ b=a_a; if(b/1000==b%1000/100 b%100!=(b/1000)_10+b%1000/100) printf('the license plate is:%d ',b); } } && b%100/10==b%10 &&

题目六 题 目 描 述 : 从 终 端 输 入 实 数 e_=1+_+_2/2!+_3/3!+?+_n/n!的值。 设计思路: 先输入一个 _ 的值; 再设计一个子函数, 计算 1! , 2! , 3! ?n! 的值;之后用 sum 函数,和 pow 函数处理分子,用累加的方式进行分 子计算,并形成等式;最后输出结果。 _ , 用 递 推 法 求

附源程序如下:#include 'stdio.h' int f(int _,int n) { int i,m=0; for(i=0;i

for(i=0,s=0;f(_,i)<0.001;i++) s+=f(_,i); printf('其结果为:%d ',s); }

题目七 题目描述:打印出以下的杨辉三角形(要求打印出 10 行) 。 1 1 1 1 2 1 3 1 1 4 1 1 5 10 10 5 1 ?? ?? ??

设计思路: (一)二维数组主要用于处理多行的问题,而且第一行在数组之中是 第 0 行。 (二)杨辉三角有一个明显的特点:每一行的最后一个数字与第一个 数是相同的,此外,下 (三)一行的第二个数是由上一行的第一个数和第二个数相加之和, 以此类推。

定义指针是为了让整个程序不那么复杂。 运行效果截图:

附源程序如下: #include int main(void) { int a[10][10],(_p)[10]=a,i,j; for(i=0;i<10;i++) {

_(_(p+i)+0)=1; _(_(p+i)+i)=1; } for(i=2;i<10;i++) for(j=1;j

题目八 题目描述:找出一个二维数组的“鞍点” ,即该位置上的元素在该行 上最大,在该列上最小。 提示: ① 一个二维数组可能有鞍点也可能没有鞍点,若有鞍点,则只有一 个。

② 准备两组测试数据: (1) 二维数组有鞍点: 9 80 205 90 -60 210 40

96 1 89

-3 101

(2) 二维数组没有鞍点: 9 80 205 90 -60 210 40 1 89

196

-3 101 7

45 54 156

③用 scanf 函数从键盘输入数组各元素的值,检查结果是否正确。如 果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而 不必用 scanf 函数。请同学们修改程序以实现之。

设计思路: (一) 先找出一行中值最大的元素,然后看它是不是该列中的最小值,由于 一个二维数组最多有一个鞍点,所以如果是则鞍点存在且它就是鞍 点,输出该鞍点;如果不是,则再找下一行的最 大数,以此类推。如果每一行的最大数都不是鞍点,则此数组无鞍点 (二) 在程序中,先令 a[i][0]最大赋值给 ma_i,在 for 循环的比较中,把

符合条件的行的最大值赋给 ma_i,将每一次比较后的最大的列数赋 值给 ma_j,从而找出 i 行最大的那个。 再假设那个数就是鞍点,将最大数和同列的数值相比,如果 ma_j 不 是最小的,则不是鞍点,继续找。 (三)引入一个参数 flag=1,若不存在鞍点则 flag 为 0,若存在鞍 点则 flag 依旧为 1

运行效果截图:

附源程序如下:#include 'stdio.h' #define s 80 #define t 80 void main { int m,n,i,j,t,ma_h,ma_l,flag,a[s][t]; printf('请输入二维数组的行数 m 和列数 n: '); scanf('%d %d',&m,&n); printf('请输入二维数组的各个元素: ');

for(i=0;ia[i][0]) t=a[i][j];ma_h=i;ma_l=j; } for(i=0;i

a[%d][%d]=%d ',ma_h,ma_l,a[ma_h][ma_l]); }

题目九 题目描述:某班期终考试科目为高数 mt、英语 en 和物理 ph,有 30

个人参加考试。为评定奖学金,要求统计并输出一个表格,表格内容 包括学好、各科分属、总分和平均分,并标出 3 门课均在 90 分以上 者(该栏标志输出为 y,否则为 n) ,表格形式如下: no mt en ph sum v >;90 1 92 276 92 92 91 90 273 91 90 81 82 253 84 ...... n y n

#include 'stdio.h' void main

设计思路:由于是对 30 个学生的数据进行输入与统计,所以建立二 维数组, 根据各位置的条件来定义其内容, 第 8 个数据是字符型数据, 所以另设一数组进行存储,最后在将数据整合输出。

附源程序如下:#include 'stdio.h' void main { int i,j,sum,flag,a[30][7]; printf('请输入 30 个考生的三科成绩: ');

for(i=0;i<30;i++) { a[i][0]=i+1; for(sum=0,j=1;j<4;j++) {scanf('%d',&a[i][j]); sum+=a[i][j]; if(a[i][j]>;90) flag=1; else flag=0; } a[i][4]=sum; a[i][5]=sum/3; if(flag=1) a[i][6]='y'; else a[i][6]='n';

} printf('no mt en ph sum v >;90 '); for(i=0;i<30;i++) for(j=0;j<6;j++) { printf('%5d',a[i][j]); printf(' %c ',a[i][6]); }

}

题目十 题目描述下面是一个 5_5 阶的螺旋方阵,试编程打印出此形式的 n_n (n<10)阶的方阵(顺时针旋进) 。 1 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 提示:用二维数组实现。

设计思路:定义一个 n_n 维数组存放该方阵,m 为该方阵的圈数,一个大循环中嵌套了

四个小循环,每一圈为一个大循环,第一个小循环按顺序写出第一行的数,第二个小循环按 顺序写出最后一列的数, 第三个小循环按顺序写出最后一行的数, 第四个小循环按顺序写出 第一列的数,再进行第二次大循环,循环完毕后再进行循环输出数组中的 n_n 个数,该螺旋 方阵就出来了。

附源程序如下: #include 'stdio.h' void main { int i, j, k = 0, m, n,a[10][10]; printf('请输入方阵行列数 n(n<10): '); scanf('%d',&n); if(n%2==0) m = n / 2; else m = n / 2 + 1; for(i=0;i

k++; a[i][j]=k; } for (j=i+1;j=i;j--) { k++; a[n-i-1][j] =k; } for (j=n-i-2;j>;=i+1;j--) { k++; a[j][i]=k; } } for (i=0;i

printf('%5d', a[i][j]); printf(' '); } } 附:

实习总结与心得体会

经过 c 语言实习,让我加深了对 c 语言的了解,而不只是单单 的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编 写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理 论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。 不过,通过几天的实习,逐渐积攒了一些经验,有些错误可以很快就 看出来。 这次实习有很大的收获,让我对 c 语言有了更深的认识,平时 在课堂上学到的.东西可以自己动手编写,将其转化成一些实用的技 能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣 就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技 能,让我对 c 语言有了浓厚的兴趣和更深层的认识。 c 语言是一个有序的学习, 学了最基本的替换, 然后扩展到循环, 嵌套, 条理很清楚, 不是一个零散的知识, 实际上所有的课程都如此, 不过通过实习我也知道了自己的不足,存在的很多问题。比如自己写 的写的小程序出了问题,不会解决了就叫老师帮忙,但是会养成一种 依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以

以后要多多锻炼自己的信心和增加自己的能力, 争取做到老师不在身 边的时候也可以完成一些简单的程序编写与错误排除。 还有自己的基础知识不扎实, 遇到的问题, 没有很好的逻辑思维, 亲自编写一个陌生的程序的时候会有种无法下手的感觉, 找不到突破 口。通过实习,逐渐理清了顺序,对于简单的程序和一些相对比较繁 琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基 础知识掌握了,然后有条不紊的分析,一步一步理解,c 语言还是很 有意思的课程。 自己亲自动手编写程序让我增加了对 c 语言程序开发环境的了 解,在上课的时候老师就讲,学习 c 语言最重要的是学习 c 语言的 逻辑思维,不管以后从事什么行业,学习 c 语言都对自己的职业很 有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的 编程工作可能不用 c 语言,但是拥有扎实的 c 语言基础是对工作很 有用的。 当初在初步接触 c 语言的时候,看着一堆“奇形怪状”的符号, 觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态! 感谢学校安排这次实习和老师的耐心讲解,让我学到了很多知 识,在实习过程中,同学之间的相互探讨,老师的循循善诱,最终让 我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之 间的感情。希望以后还会有更多类似的实习课程,在有限的大学时间 内学到更多的实用技能,为以后的生活和工作打下一个良好的基础。

《c++实践报告书五篇.doc》
将本文的Word文档下载,方便收藏和打印
推荐度:
点击下载文档

相关稿件

分类查询入口

一键复制