C++程序设计实验报告_第1页
C++程序设计实验报告_第2页
C++程序设计实验报告_第3页
C++程序设计实验报告_第4页
C++程序设计实验报告_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序设计实践教材

第一章程序设计同步实验指导

实验一VisualC++集成开发环境(IDE)入门

一、实验目的

1.初步学会使用VisualC++集成开发环境:①进入和退出;②菜单、工具

栏的使用;③用户窗口区的划分:workspace,scourcefile,message»

2,初步了解调试程序方法。

二、实验内容

1.范例:VisualC++控制台应用程序设计步骤。

作为学习面向对象的C++的第一步,学习的重点是算法,必须避免用户图形

界面的干扰,这时可采用控制台应用程序进行练习。控制台应用程序创建一个窗

口模拟DOS进行输入输出。

下面是一个控制台应用程序实例,该程序要求用户从键盘输入3个整数,

然后按照从小到大的顺序在屏幕上输出.

[步骤一]进入和退出VisualC++集成开发环境

启动并进入VisualC++集成开发环境有至少有三种方法:

(1)在开始菜单上,选择程序,然后选择MicrosoftVisualStudio6.0组,再选

择MicrosoftVisualC++6.0,如图1.1。

(2)在桌面上创建MicrosoftVisualC++6.0的快捷方式,直接双击该图标;

(3)如果已经创建了VC的某种工程,双击该工程的dsw(DevelopStudio

Workshop)文件图标,也可进入集成开发环境,并打开该工程。

选择FilelExit菜单,退出集成开发环境。

图1.1进入VisualC++集成开发环境

[步骤二]创建一个控制台应用程序工程。

(1)入VC环境后,选择FilelNew菜单,弹出New对话框,在Projects页面

选择Win32ConsoleApplication工程类型,在Projectname编辑框输入工程名

Expl_l,在Location编辑框输入工程路径E:\projects\Expl_l,如图1.2所示,

按0K按钮。

片棚WKIVl»«

3划I®

。也10)•icrowttViml6

M比Ne,plw*r

电网黯瞰开如30tU«ikExprtix

□切如…QTinlmVa4itH.(r*r

二IW品逸O

grinu«$日记4:充*的

⑨关比计《机Q).

,二i说忸肘

¥

第一章控制台应用程序

图1.2NewProject页面,创建新的应用程序

图1.3Win32ConsoleApplicationStep1of1

2

C++程序设计实践教材

(2)随后的Win32ConsoleApplicationStep1of1中,参见图1.3,选择

anemptyproject,按Finish按钮。

(3)现ProjectInformation框,如图1.4。显示创建了一个空的控制台应用程

序,且没有任何文件被添加到新工程中,此时,工程创建完成。

图1.4NewProjectInformation窗口

[步骤三]程序的编辑、编译、建立、执行。

(1)选择FilelNew菜单项,在New对话框的Files页面选择C++SourceFile,

输入文件名Expl_l.cpp,选中AddtoProject复选框,如图1.5,按OK按钮,打

开了源文件编辑窗口。输入以下源代码。

#include<iostream>

usingnamespacestd;

3

intmain(){

inta,b,c;

intmax,min;

第一章控制台应用程序

coutvv”请输入三个不等整数:\n”;

cin»a»b»c;

if(a>b){UA行

max=a;min=b;

)

else{//B行

max=b;min=a;

1

if(c>max)cout«c«,\t'«max«\t,«minvv\n';

elseif(c<min)cout«max«V«min«V«c«\n';

elsecout«max«\t'«c«\t'«min«'\n';

return0;

4

*对于已经存在的源文件,选择ProjectlAddtoProject〕Files…菜单项,在随后

才研髀插贝煲怦娜话框中选择待添加文件,按0K添加进工程。

⑵选择BuildICompile菜单项,即可编译源文件Expl_l.cpp.系统会在Output

窗口给出Error(错误)信息以及Warning(警告)信息。当所有Error改正后,得至U目

标文件(Exp1」.obj)。

编译器在Output窗口给出语法错误和编译错误信息。

语法错误(Error)处理:鼠标双击错误信息可跳转到错误源代码处进行修改,

一个语法错误可能引发系统给出很多条Error信息,因此,发现一个错误并修改

后最好重新编译一次,以便提高工作效率;

警告信息(Warning)处理:一般是触发了C\C++的自动规则,如将一个浮点型

数据给整型变量赋值,需要系统将浮点型数据自动转换为整型,此时小数部分会

丢失,因而系统给出警告信息。警告信息不会影响程序执行,本例可以通过强制

类型转换去掉警告信息。

⑶选择BuildlBuild菜单项,链接并建立工程的EXE文件,得到可执行文件

Expl_l.exe。这时编译器可能会给出链接错误。

链接错误(LinkingError)处理:链接时可能产生错误,原因可能是所需要的

库文件或目标文件缺少,或程序中调用的Extern函数没有定义等,只要补充相

应文档再重新建立即可。

(4)选择BuildlExecute菜单项,执行工程文件,会出现一个类似DOS操作系

统的窗口,光标闪烁等待输入,按要求输入三个不等的整数后按Enter键,屏幕

上由大到小输出这三个整数如图1.6。

c:,C:\C++152ft\^R\Expl_l\Debug\Expll.exe,

359846

984635

Pressanykeytocontinuea

撇轴错华:______________________

Lil_________________I1]

[wwr-wiwwjmm-------

运行程序,可能会发现程序没有编译错误,也能执行,但执行的结果不对,

此时,除了仔细分析源程序,还可借助调试工具进行跟踪调试。

例如,在例1」程序中B行处出错,在else后多加一个分号:

...else;{max=b;min=a;)

用88,45,67这组数据测试,发现输出结果为674588,结果不对。下面介

绍调试过程。

首先在源程序中可能出现错误的行上设置断点,方法是将光标移至该行,然

后按F9键,或选择工具栏上的手形按钮(再按一次取消断点),此时该行左侧出

现一个红色圆点,断点设置成功,如图1.7在A行设置断点。

选择BuildIStartDebugIGo…菜单命令(也可选择Build工具栏上的Go图

标),程序执行到断点处停止,这时选择ViewlDebugWindows子菜单的Watch和

Variables两个菜单项,打开监视和变量窗口观察变量值(Watch和Variables窗口

的详细介绍见VisualC++6.0集成开发环境介绍中菜单的View菜单介绍),分析

查找出错原因。

在Watch窗口加入max和min两个变量,进行监视。Watch窗口的每一行

可显示一个变量,左栏显示变量名,双击它可进行编辑;右栏显示变量值。单步

执行按F10(不跟踪进函数)或F11(跟踪进函数内),尽管a>b,在执行了if后面的

{max=a;min=b;}后,仍然执行了{max=b;min=a;}。当程序执行到箭头所指

处时•,max=45,min=88,如图1.7,与预期结果不相符,说明程序的流程有问题。

此时再仔细分析源程序,发现问题出在else后多余的分号。

第一章控制台应用程序

图1.7VisualC++集成开发环境及程序的调试

调试过程中Variables窗口动态显示各变量值随程序执行而变化的结果。在

学习到面向对象程序设计后,若程序中有类的对象,Variables窗口的this页面可

显示当前this指针所指向对象的各个值。

修改源程序,再执行,反复调试,当程序中所有问题都得到改正后,得到正

确的执行结果。

实验二简单的C++程序设计

1.简单程序设计,掌握C++程序基本结构。

一、实验目的

2.掌握C++基本数据类型与运算符。

3,熟悉输入输出方法。

二、实验内容

1.范例:要求实现输入两个整数,将它们交换后输出。

[分析]交换两个整数,一般方法是用一个中间变量,经过几次赋值实现;

[过程]

6

C++程序设计实践教材

①首先在资源管理器中,在用户盘(硬盘)创建自己的文件夹,如可以自己

的学号为名建立文件夹。

②进入VC环境,选择FilelNew菜单,弹出New对话框,在Projects页面

选择Win32ConsoleApplication工程类型,在Projectname编辑框输入工程名

Exp2_l,路径选择自己的文件夹,按OK按钮。

③在随后的ApplicationWizard中选择anemptyproject,按Finish按钮。

④选择FilelNew菜单项,在New对话框的Files页面选择C++SourceFile,

输入文件名Exp2_l.cpp,选中AddtoProject复选框,按OK按钮,打开了源文

件编辑窗口,输入以下源代码。

#include<iostream>

usingnamespacestd;

intmain(){

inta=-3,b=7,temp;

cout«"a="«a«'\t'«",b="«b«endl;

tcmp=a;

a=b;

b=tcmp;

cout<<"a="«a«\t,«"b="«b«endl;

return0;

)

[分析二](可选)第二种方法采用按位异或,任一位与0异或保持不变,

而与1异或后翻转(0变1,1变0)。

丫1=2;丫2=1);〃原vl为a,v2为b

vl=vlAv2;//BPVI为aAb,V2保持不变

v2=vlAv2;〃即v2=aAbAb=a

W二v»v2;〃即丫1=@人1)八2=1),交换成功

#include<iostream>

usingnamespacestd;

intmain(){

inta=-3,b=7,temp;

cout«"a="«a«'\t'«",b="«b«endl;

a=aAb;

b=aAb;

a=aAb;

cout<<"a=',«a«'\t,«"b="«b«endl;

return0;

)

[实验要求]

①仔细阅读程序,掌握程序结构,找到程序的数据定义部分和操作部分,

辨识各部分功能,注意输入输出语句的使用;

②按照正确的步骤进入VC环境,在自己创建的工程中录入上述源程序,

注意书写格式,养成良好的编程习惯;消除语法错误,编译链接程序;

7

第一章控制台应用程序

③运行程序,输入数据观察结果,并进行测试。

④用位运算符重新运行程序并对比运行结果。(可选)

2.编写程序:输入球的半径,分别计算球的表面积、体积和质量,假设球

的密度为7.8,输出计算结果。

243

[提示]球表面积计算公式s=4a,球体积计算公式v=nr»

3

注意输入输出形式,要求输入前应有提示性输出,如"PleaseInputtheRadius

oftheBall...",注意变量名的定义,最好能望文生义,如Radius,Volume,Weight

等;

整数相除取整,注意在计算公式中使用正确的变量数据类型。

3.范例:要求用sizeof运算符计算C++中char,short,int,long,float,double等

基本数据类型所占字节数,并按以卜.格式输出。

sizeof(char)=1byte

sizeof(short)=2bytes

sizeof(int)=4bytes

再将计算结果以表格形式输出。

char1

short2

int4

最后将计算结果保存在数组中,再按表格形式输出。

#include<iostream>

usingnamespacestd;

intmain(){

intsize[6];

cout«,'sizeof(char)="«sizeof(char)«"Byte',«endl;

cout«,,sizeof(short)=M«sizeof(short)«,,Byte"«endl;

cout«*'sizeof(int)="«sizeof(int)«"Byte"«endl;

cout«,'sizeof(long)="«sizeof(k)ng)«"Byte"«endl;

cout«Hsizeof(float)=*'«sizeof(float)«"Byte"«endl;

cout«Hsizeof(double)="«sizeof(double)«"ByteH«endl;

cout«"char\t"«sizeof(char)«endl;〃表格方式输出

cout«"short\tn«sizeof(short)«endl;

cout«"int\tH«sizeof(int)«endl;

cout«"long\t"«sizeof(long)«endl;

cout«',float\t',«sizeof(float)«endl;

cout«,,double\t',«sizeof(double)«endl;

size[0]=sizeof(char);〃字节数存入整型数组

size[1]=sizeof(short);

size[2]=sizeof(int);

8

C++程序设计实践教材

size[3]=sizeof(long);

sizc[4]=sizeof(float);

size[5]=sizeof(double);

cout«"char\t"«size[OJ«endl;〃再用数组以表格方式输出

cout«"short\t"«size[1]«endl;

cout«"int\t"«size|2]«endl;

cout«"long\t"«size[3]«endl;

cout«"float\t"«size[4]«endl;

cout«"double\t"«size[5]«endl;

return0;

1

4.范例:演示C++输入输出易出错的几个地方:

①采用cin输入将会跳过空白字符(包括空格,制表,backspace和回车等)。

如果要求把从键盘上输入的所有字符,包括空白字符,都作为输入字符赋给字符

变量,必须使用函数:cin.get(字符变量),但这时如前面曾有输入,会读入不是

希望获取的数字输入结束的回车符。

②向一个字符数组中输入字符串时,应该使用函数:getline(字符数组,字符

数量)。这时如前面曾有输入,会读入输入结束的回车符,形成空串。

③当使用老的头文件<iostream.h>时,数字输入时如以0开头,计算机认为

是8进制数,以Ox开头是16进制。当使用不带上的头文件<iostream>时,0被

忽略,仍作为十进制,Ox开头只认0。要适当地指定数据的进制。非十进制只适

用于整型变量,不适用于实型变量。

#inciude<iostream>

usingnamespacestd;

intmain(){

chara[20];

inti;

coutv<”请输入以下包含空格的字符串:Ksabook.H«endl;

cin»a[0]»a[l]»a|2]»a|3]»a[4|»a[5|»a[6]»a[7]»a[8]»a[9];

a[10]=W;

coutvv”保存的是:"«a«endl;

coutvv"清重输一遍:"<<endl;

cin.get(a[0]);cin.get(a[l]);cin.get(a[2]);cin.get(a[3]);

cin.get(a[4]);cin.get(a[5]);cin.get(a[6]);cin.get(a[7]);

cin.get(a[8]);cin.get(a[9]);cin.get(a[10]);cin.get(a[11]);

cin.get(a|12]);cin.get(a|14]);

a[15]=W;

coutvv”保存的是:H«endl;

cout«a«endl;

coutvv”注意:a[0]放上次输入结束的回车符,a[14]放本次结束的回车符,

各自产生一个换行。"«endl;

coutvv”请输入8进制整数:0750"«endl;

cin»i;

9

第一章控制台应用程序

coutv<"输入的数用十进制表示是:M«endl;

cout«dec«i«endl;

cout«"请输入16进制整数:Oxff'«endl;

cin»i;

coutvv"输入的数用十进制表示是:”<vendl;

cout«dec«i«endl;

coutvv"用cin.getline。吸收0后的字符:"«endl;

cin.getline(a,18);

cout«a«endl;

coutvv"改用显式指定类型,输入8进制数750:"vvendl;

cin»oct»i;

cout<<”输入的数用十进制表示是:"vvendl;

cout«i«endl;

coutvv”输入的数用8进制表示是:"«endl;

cout«oct«i«endl;〃指明8进制输出以后一直有效

coutvc”请输入16进制整数:ff,«endl;

cin»hex»i;

cout«”输入的数用十进制表示是:n«endl;

cout«dec«i«endl;〃必须显式改为十进制

cout«"输入的数用16进制表示是:"vvendl;

cout«hex«i«endl;

coutvv”请输入字符串:Thisisacat."«endl;

cin.getline(a,18);

cout«a«endl;

coutvv”没有机会输入。读了上次输入数字时的回车,输出一个空串。

现在可输入了:n«endl;

cin.getline(a,18);

cout«a«endl;

coutv<”成功!,,«endl;

return0;

}

[实验要求]读懂程序,理解程序中演示的输入输出中易出错的情况。

实验三分支结构程序设计

一、实验目的

流程控制语句用于实现基本程序结构,是程序设计基础。要求掌握:

1.条件语句的使用。

2.开关语句的使用。

二、实验内容

1.范例:输入一个整数,判断数的奇偶性后输出结果。

[分析]判断一个数是否为偶数,只要判断它是否能被2整除,用除法取余。

n%2为0,则n为偶数,否则,为奇数。

10

C++程序设计实践教材

#include<iostream>

usingnamespacestd;

intmain(){

intinput;

cout«"Whichnumberdoyouwanttotest?\n";

cin»input;

if(input%2)cout«nnumber"vcinputccNvv"isodd.";〃如果能被2整除,是偶数

elsecout«nnumber"<vinput<vY'vv"iseven.";〃杏贝ij是基数

return0;

(

形式中,奇数的末位为1,偶数末位为0。可以用整数n与1进行按位与运算:

[分析二](可选)判断一个数的奇偶,只需判断最后一位,在二进制表示

n&l为非0(真),则是奇数,为0(假),则是偶数。

在上面程序中,将if判断的条件改为n&l即可,其它部分不用修改。

#include<iostrcam>

usingnamespacestd;

intmain(){

intinput;

溜妍Which既氏盅盘产它需阪odd.”;//如果能被2整除,是偶数

eise>>'nPUcout«,,number"<<input«V«"iseven.";〃否则是基数

return0;

)

[测试数据]

345680-34・23.5(有意用非整数测试)

分别用以上各数作为输入数据,测试程序,分析程序结果,并进行记录。

2.范例:编程求一元二次方程ax2+bx+c=0的根。包括以下判断和结果:若

输入a=0,给出提示;若△>(),输出两个不等实根;若△=(),输出两个相等实根;

若Av。,输出两个复数根。

[程序]根据以上要求,编写下列源程序,请与主教材例2.8作对比。

#includc<iostream>

#include<cmath>

usingnamespacestd;

intmain(){

doublea,b,c;

doubledelta,xl,x2;

intsign;

coutv<"一元二次方程a*x*x+b*x+c=0\n";

coutvv”输入三个系数a(a!=0),b,c:"«endl;

cin»a»b»c;

cout«',a='*«a«,\t'«"b=',«b«'\t'«"c="«c«endl;

if(a=0){

11

第一章控制台应用程序

coutvv”二次项系数为0,不是•元二次方程”vvendl;

exit(O);

delta=b*b-4*a*c;

)

if(delta==O){

coutvv”方程有两个相同实根:"vvendl;

cout«',xl=x2=',«-b/(2*a)«endl;

)if(dclta>0)sign=l;

else{.

elsesign=0;n

dclta=sqrt(fabs(delta));

xl=-b/(2*a);

x2=delta/(2*a);

if(sign){

coutvv"方程有两个不同实根:"vvendl;

cout«"x1=R«x1+x2«\t'«Hx2="«x1-x2«endl;

}

else{//dclta<0

coutvv”方程无实根!有两个不同复数根:“vvendl;

cout«',xl=',«xl«,,+i,'«x2«,\t'«,,x2=,'«xl«"-i"«x2«endl;

1

)

return0;

)

3.编写程序:输入一门课程的成绩,若高于90分,输出"AGrade”,若高于

80而低于90,输出“BGrade",高于70而低于80,输出"CGrade",高于60而低

于70,输出"DGrade",否则,输出"NotPassed"。用if-else嵌套和switch语句两

种方法实现。

[注意]if-else嵌套使用时,注意else子句总与其最近的if配对;对数据划

分区间时.,注意关系和逻辑表达式的正确书写。注意if-else与switch的区别与联

系,switch特适合某个整型或字符型表达式的值与一组常量匹配的情况。

4.编写程序:输入一个数,判断是否是3或7的倍数,可分四种情况输出:

1)是3的倍数,但不是7的倍数;

2)不是3的倍数,是7的倍数;

3)是3的倍数,也是7的倍数;

4)既不是3的倍数,也不是7的倍数;

实验四循环结构程序设计

1.循环控制语句用于实现循环程序结构,要求掌握三种循环结构while、

一、实验目的

do-while、for的区别与联系,如何相互转换,并能正确使用。

12

C++程序设计实践教材

2.掌握与循环语句相关的break和continue语句的使用。

二、实验内容

1.范例:输入正整数n,求n的阶乘。

[分析]n!=l-2.3••…n,因此可以从1开始,由1!乘以2得到2!,再乘以3得到

3!……,以此推出n!。

[程序]

#include<iostream>

usingnamespacestd;

intmain()

{

intn,i;

doubleresult=0;"result:是结果

coutcv”请输入正整数:"«endl;

cin»n;

if(n<i){

coutvv"输入错误!"vvcndl;

return1;

)

result=l;

for(i=2;i<=n;i++)result*=i;

cout«result«endl;

return0;

}

2.范例:输入若干字符,统计其中数字字符,白字符和其它字符的个数,输入

EOF结束。

[分析]要统计若干字符,需用循环反复输入,读入数据后用switch语句判断字

符的种类;要统计三种字符数,需定义三个用于计数的变量nDigit,nWhite,nOther

并首先置0;读入字符用cin.get。函数,在这里,用while循环比较合适。白字符

指空格键,tab键和回车键。EOF表示EndofFile,其值为-1,从键盘输入(ctrl+z)

即可。这里采用重载的intcin.get。函数,它返回的是整型数,所以能返回EOF。

[程序]

#includc<iostrcam>

usingnamespacestd;

intmain(){

chare;

intnWhite,nOther,nDigit;

nWhite=nOther=nDigit=0;

c=cin.get();

while(c!=EOF){

switch(c){

case'O':caseT:case2:case'31:case'4':

case5:case6:case'T:case'8':case'9':

13

第一章控制台应用程序

nDigit++;

break;

case'case\n':case'\t':

nWhite++;

break;

default:

nOthcr++;

break;

)

c=cin.get();〃读入下一字符

)

cout«"Digits="«,\t'«nDigit«\n';

cout«"Whitespacc="«^"«nWhite«'\n";

cout«"OtherChars="«,\t'«nOthcr«,\n,;

return0;

)

[思考]

①如果要分别统计数字0~9各数字出现的次数,怎样才能有效地实现?

②如果要统计输入的,段文字中出现的行数、单词数和字符数,又如何有效实

现?

③本例采用的是什么算法?

3.编写程序:约瑟夫(Josephus)问题:n个人围坐成一圈,从1开始顺序编

号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出圈外,

问最后留下的那个人原来的序号。

[分析]本题首先要定义一个数组,其元素个数为non定义为常变量,以便定义

数组。数组元素的值标识该人是否出局,1在圈内,0出局。值为0的元素不参

加报数。可用一个整型数k做计数器,采用倒计数,记录留下的人数。

[提示]数组是线性排列的,而人是围成圈的,用数组表示要有…种从数组尾部跳

到其头部的技巧,即下标加1除以n求余数。

4.范例:将输入的小写字母转换为大写字母。

[提示]由ASCII码表可以看出,大写英文字母的ASCII码值在65至90之间,小写英

文字母的ASCII码值在97至122之间,每一个英文字母的大写和小写的ASCII码相差32

(以上均为十进制)。

#include<iostream>

usingnamespacestd;

intmain(){

charstr[100];

inti=0;

cout«nPleaseinputastring..An";

cin.getline(strJOO);

do{

if(str[i]<'a'llstr[i]>,z")continue;〃条件可有多种写法,也可不用continue

14

C++程序设计实践教材

str[i]-=32;

JwhUe(str[++i]!=W);

cout«"\nTheresultstringis:"«str«endl;

return0;

[思考]但当用户输入一个空串,即用户开始输入时就以Enter键结束,

stringfO]中就是表征输入串结束的'\0'字符。由于是do_while循环,所以肯定

要进入循环,在循环结束前由i++使i的值修改为1,使得循环体完成后的判断

是对string[l]进行,从而跳过对string[0]中的串结束符'\0'判断,导致在这

种所谓“边界”的情况中,程序不能正确运行。怎样修改?考虑两种方法。

程序的质量指标和算法的质量指标一样,包括程序的正确性、可读性、健壮

性以及高的执行效率和低的存储空间要求。正确性是指对于各种合法的输入,即

使是苛刻的带有刁难性的输入数据也能够得到满足规格要求的结果,这其中就包

括应当能处理各种边界情况。

5.编程:设计一个程序,输入某天是几月儿日,要求算出这一天是本年的

第几天。

[分析]要算出某天是当年的第儿天,应该将当年中本月之前所有月的天数

相加,再加上本月的天数。但这里有一个闰年问题,二月是一个特殊月,如该年

是闰年,则二月有29天,否则,便是28天,所以,还必须给出年份。

[提示]判断某年是闰年的条件是:该年号能被4整除但不能被100整除,

或者能被400整除的是闰年。如,1996,2000是闰年,但1800不是闰年。

实验五常用算法:枚举法递推法迭代法

一、实验目的

掌握常用算法:枚举法,递推法、迭代法。

二、实验内容:个

1.编程求和:s=a+aa+aaa+...+aa...a,其中a是1〜9中的一个数字。

[提示]令各项为b0,bl,b2,...bn

则b0=a

bl=b0*10+a

b2=bl*10+a...

即每一项是为前一项乘以10加a,递推得到各项并求和。

2.编程求出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其

各位数字的立方和等于该数本身,例如153是一个“水仙花数。因为153=

135+3。采用枚举法。

3.范例:设函数f(x)定义在区间[a,b]上,f(x)连续且满足f(a)*F(b)<0,求f(x)

在[a,b]上的根。采用割线法,迭代公式为:

Xi+I=Xi+(Xi-j-xj)/(f(x>f(xQ)*f(xi)

其代换规律为:首先用两端点函数值的绝对值较大者的对应点作为-匕:猿才、「

作为xj,即如果lf(a)l<lf(b)L则xgxi一为用迭代公式得出xi+1,f(xi+1)o

15

第一章控制台应用程序

误差定义为:

/x=(XM-x)/(f(x>f(xQ)*f(Xi)

当/X<£或f(xi+1)==0则结束运算。否则用(Xi,f(xJ)代替(Xi"(x川),

(Xv,f(XQ)代替(X,,f(X,)),继续迭代。

求解方程:x*lg(x)=1的实根的近似值,误差不超过0.01。

[提示]令f(x)=x*lgx-1,则f⑵=0.398v0,而f(3)»0.431>0,根在2与

3之间。

#include<cmath>

#include<iostream>

usingnamespacestd;

constmax=30;

doublea=2,b=3,ep=0.001;

intmain(){

intmaxit,j;

doublex1,x2,temp,f1,f2,dx;

fl=a*log10(a)-1;

f2=b*logl0(b)-l;

if(fl*f2>=0){

coutvv"初值错!"«endl;

return0;

)

if(fabs(fl)<fabs(f2)){

xl=a;

x2=b;

)

else{

xl=b;

x2=a;

temp=f1;

fl=f2;

f2=temp;

)

fbr(j=l;j<=max;j++){

dx=(xl-x2)*f2/(f2-fl);

cout«dx;

temp=x2;

x2=x2+dx;

xl=temp;

fl=f2;

f2=x2*log10(x2)-1;

cout«,\t,«x2«endl;

if((fabs(dx)<cp)ll(f2==0))(

coutvv"方程的根为:"«x2«endl;

return0;

16

C++程序设计实践教材

)

)

cout«"迭代次数过多!"«endl;

return1;

)

4.范例:0到4五个数字,组成五位数,每个数字用一次,但十位和百位

不能为3(当然万位不能为0),输出所有可能的五位数。

#include<iostream>

usingnamespacestd;

intmain(){

intij,k,l,m,count=0;

for(i=l;i<=4;i++)(

for(j=0;j<=4;j++){

if(j==i)continue;

for(k=0;k<=4;k++)(

if(k==3llk==illk==j)continue;

for(l=0;l<=4;l++){

if(l==3III==illl==j||l==k)continue;

fdr(m=0;m<=4;m++){

if(m=illm==jllm==kllm=l)continue;

cout«i«j«k«l«m«'\t';

count++;

if(count%5==0)cout«endl;}}}}}

return0;

)

穷举法采用循环语句,对须剔除的情况,应在循环体内用条件语句实现,并

使用continue语句,不可用break。如果放在循环条件中,必然出错。

实验六文本文件简单应用

一、实验目的

1.学会将程序运行的结果存入文本文件。

2.学会从文本文件读取数据,进行运算。

二、实验内容

1.范例:修改实验五中的第二题,求出水仙花数后不是在屏幕上显示而是

存入文本文件。请在退出程序后,用记事本打开该文本文件,查看结果。

[格式]

(1)说明一个文件流对象(内部文件)•文件流类型ifstream支持从输入文件中提

取数据的操作。而文件流类型ofstream完成数据写入输出文件中的各种操作。

ifstreamifile;〃定义输入文件,ifile为文件名,可用任意标识符

ofstreamofile;/定义/输出文件,oflle为文件名,可用任意标识符

特别注意:输入文件用于读,输出文件用于写。

⑵打开文件。

ifile.open("d:\\my_in_file.txt");//引号中的"d:\\my_in_file.txt”为磁盘文件路径名

ofilc.open("d:\\my_out_file.txt");

在文件流对象和磁盘文件名之间建立联系。

17

第一章控制台应用程序

(3)对文件进行读写操作。可用C++的提取运算符(»)和插入运算符(«)进

行。也可以用读字符的get。和读字符串的getling()等函数。用输出文件(如ofile)

代替cout,输入文件(如ifile)代替cin»

⑷关闭文件。

ifile.close();

ofile.close();

关闭文件时,系统把与该文件相关联的文件缓冲区中的数据写到磁盘文件

中,保证文件的完整:同时把磁盘文件名与文件流对象之间的关联断开,可防止

误操作修改了磁盘文件。

#include<fstream>

usingnamespacestd;

intmain(){

intk=100J,m,n,count=0;

ofstreamofile;〃定义输出文件

ofile.open("myfile.txt");

水仙花数有:M«endl;

do{

l=k/100;〃百位

n=k%10;〃个位

m=(k-l*100-n)/10;

if(k==l*l*l+m*m*m+n*n*n){

ofilevvkvv't';

count++;

if(count%5=0)ofile«endl;

)

k++;

)while(k<999);

ofile«endl;

ofile.close();〃关闭文件

return0;

)

2.范例:编程从上题生成的文本文件读取水仙花数,并显示在屏幕上。

#include<fstream>

#include<iostream>

usingnamespacestd;

intmain(){

charch[256];

ifslreamifile;//定义输入文件

ifile.open("..\\Exp6_l\\myfile.txt");

coutvv”文件内容:H«endl;

do{

ifile.getline(ch,255);〃由文件读入数据

cout«ch«endl;〃屏幕显示

18

C++程序设计实践教材

}While(ifile.eof()=0);〃当读到文件结束时,ifile.eof。为真

ifile.close();〃关闭文件

return0:

)

注意:在读到文件结束符前,先读了一个空串,所以输出多了一空行。

3.编写程序求500以内的勾股弦数。即满足c=b多a的三个数,要求b>a«

将所有符合要求的组合存入文本文件。

4.编写程序从上题建立的文本文件中读取500以内的勾股弦数,并显示在

屏幕上。

实验七函数的基本概念

一、实验目的

函数是C++程序的基本组成模块,要求熟练掌握:

1.函数的定义及调用。

2.函数参数的传递(传值),形参、实参的关系,函数声明。

3.理解局部变量的意义。

二、实验内容

1.范例:将教材中【例2.12]改为用函数实现,编写一个用迭代法求平方

根的函数。

[分析]写一个通用的求平方根的函数,参数(形参)为待求根的数,返回值为

该数的平方根。由于平方数不可能为负,因此在主调函数中,设置一个判断输入

数正负的操作,为正则用该数(实参)调用求平方根函数,为负输出错误信息。

[程序]

#include<iostream>

#includc<cmath>

usingnamespacestd;

doublesroot(doublea);//求平方根函数原型声明

intmain(){

doublex,a;

cout«"Pleaseinputavalue:\n";

cin»a;

if(a<0)cout«"InputError!\n";

else(

x=sroot(a);〃调用求平方根函数

cout«"Thesquarerootof"«a«nis"«x«endl;

)

return0;

)

doublesroot(doublea){

doublex=a/2;

19

第一章控制台应用程序

while(fabs((x-a/x)/2)>le-7)x=(x+a/x)/2;

return(x);

)

2.范例:在按值传递中,被调函数执行时,形式参数得到了实在参数的一

个副本,这样调用函数可以向被调函数单方向传递数据。但在被调函数中不能对

实在参数本身操作。C++/C对数组参数传递拷贝的是数组的起始地址,而不是拷

贝数组本身,所以操作是在原数组上进行。下面是传递数组的一个简单例子

#include<iostream>

#include<string>

usingnamespacestd;

voidchange_it(charc|4]);

intmain(){

charname[4]="ABC";

cout«name«endl;//OutputABC

change_it(name);

cout«name«endl;//OutputXYZ

return0;

}

voidchange_it(charc[4]){

strcpy(c,"XYZ");

return;

1

3.设计一个简单的计算器程序,从键盘输入"+35"代表表达式"3+5”,程序

读入运算符和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论