日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《C++程序設(shè)計(jì)實(shí)踐例題》 > 第2章 第二章

第1節(jié) 第一部分

例4.1在主函數(shù)中調(diào)用其他函數(shù)。

#include <iostream>

usingnamespacestd;

voidprintstar(void)                     //定義printstar函數(shù)

{

 cout<<"****************************** "<<endl;    //輸出30個(gè)“*”

}

 

voidprint_message(void)                //定義print_message函數(shù)

{

 cout<<"      Welcome  to  C++!"<<endl;           //輸出一行文字

}

 

intmain(void)

{

printstar( );                       //調(diào)用printstar 函數(shù)

  print_message( );                   //調(diào)用print_message函數(shù)

printstar( );                       //調(diào)用printstar 函數(shù)

return0;

}

 

例4.10 有5個(gè)人坐在一起,問第5個(gè)人多少歲?他說比第4個(gè)人大兩歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大兩歲。問第3個(gè)人,又說比第2個(gè)人大兩歲。問第2個(gè)人,說比第1個(gè)人大兩歲。最后問第1個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人多大?

可以寫出以下C++程序,其中的age函數(shù)用來實(shí)現(xiàn)上述遞歸過程。

#include <iostream>

usingnamespacestd;

intage(int);                     //函數(shù)聲明

intmain( )                        //主函數(shù)

 { cout<<age(5)<<endl;

   return0;

 }

 

intage(intn)                     //求年齡的遞歸函數(shù)

{intc;                            //用c作為存放年齡的變量       

 if(n==1) c=10;                    //當(dāng)n=1時(shí),年齡為10

 elsec=age(n-1)+2;                //當(dāng)n>1時(shí),此人年齡是他前一個(gè)人的年齡加2

 returnc;                         //將年齡值帶回主函數(shù)

}

 

例4.11 用遞歸方法求n!。

有了例4.10的基礎(chǔ),很容易寫出本題的程序:

#include <iostream>

usingnamespacestd;

longfac(int);                           //函數(shù)聲明

intmain( )

 {intn;                                 //n為需要求階乘的整數(shù)

longy;                                //y為存放n!的變量

cout<<"please input an integer :";     //輸入的提示                 

cin>>n;                                //輸入n

  y=fac(n);                              //調(diào)用fac函數(shù)以求n!

  cout<<n<<"!="<<y<<endl;                //輸出n!的值

  return0;

 }

 

longfac(intn)                          //遞歸函數(shù)

{longf;

 if(n<0)

  {cout<<"n<0,data error!"<<endl;       //如果輸入負(fù)數(shù),報(bào)錯(cuò)并以-1作為返回值

   f=-1;}

 elseif(n==0||n==1) f=1;              //0!和1!的值為1

elsef=fac(n-1)*n;                     //n>1時(shí),進(jìn)行遞歸調(diào)用

 returnf;                              //將f的值作為函數(shù)值返回

}

 

例4.12 靜態(tài)局部變量的值。

#include <iostream>

usingnamespacestd;

intf(inta)                          //定義f函數(shù),a為形參

 {autoint  b=0;                      //定義b為自動(dòng)變量

  staticintc=3;                     //定義c為靜態(tài)局部變量

  b=b+1;

  c=c+1;

  returna+b+c;

 }

 

 intmain( )

 {inta=2,i;

  for(i=0;i<3;i++)

    cout<<f(a)<<" ";

  cout<<endl;

  return0;

 }

 

例4.13 輸出1~5的階乘值(即1!,2!,3!,4!,5!)。

#include <iostream>

usingnamespacestd;

intfac(int);                    //函數(shù)聲明

intmain( )

 {inti;

  for(i=1;i<=5;i++)

   cout<<i<<"!="<<fac(i)<<endl;

return0;

 }

 

intfac(intn)

 {staticintf=1;                    //f為靜態(tài)局部變量,函數(shù)結(jié)束時(shí)f的值不釋放

  f=f*n;                             //在f原值基礎(chǔ)上乘以n

  returnf;

 }

 

例4.14 用extern對(duì)外部變量作提前引用聲明,以擴(kuò)展程序文件中的作用域。

#include <iostream>

usingnamespacestd;

intmax(int,int);              //函數(shù)聲明

voidmain( )

 {externinta,b;               //對(duì)全局變量a,b作提前引用聲明

  cout<<max(a,b)<<endl;

 }

inta=15,b=-7;                  //定義全局變量a,b

intmax(intx,inty)

 {intz;

  z=x>y?x:y;

  returnz;

 }

 

例4.15 輸入兩個(gè)整數(shù),要求輸出其中的大者。用外部函數(shù)實(shí)現(xiàn)。

file1.cpp(文件1)

#include <iostream>

usingnamespacestd;

intmain( )

 {externintmax(int,int);  //聲明在本函數(shù)中將要調(diào)用在其他文件中定義的max函數(shù)

  inta,b;

  cin>>a>>b;

  cout<<max(a,b)<<endl;

  return0;

 }

file2.cpp(文件2)

intmax(intx,inty)

{intz;

 z=x>y?x:y;

 returnz;

 }

 

例4.16 在調(diào)試程序時(shí),常常希望輸出一些所需的信息,而在調(diào)試完成后不再輸出這些信息??梢栽谠闯绦蛑胁迦霔l件編譯段。下面是一個(gè)簡(jiǎn)單的示例。

#include <iostream>

usingnamespacestd;

#define RUN                                 //在調(diào)試程序時(shí)使之成為注釋行

intmain( )

{ intx=1,y=2,z=3;

#ifndef RUN                                //本行為條件編譯命令

cout<<"x="<<x<<",y="<<y<<",z="<<z;  //在調(diào)試程序時(shí)需要輸出這些信息

#endif                                     //本行為條件編譯命令

cout<< "x*y*z="*y*z<<endl;

}

 

例4.2 調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞。

#include <iostream>

usingnamespacestd;

intmax(intx,inty)              //定義有參函數(shù)max

{intz;

 z=x>y?x:y;

 return(z);

}

 

intmain( )

{inta,b,c;

 cout<<"please enter two integer numbers:";

 cin>>a>>b;

 c=max(a,b);            //調(diào)用max函數(shù),給定實(shí)參為a,b。函數(shù)值賦給c

 cout<<"max="<<c<<endl;

 return0;

}

 

例4.3 對(duì)被調(diào)用的函數(shù)作聲明。

#include <iostream>

usingnamespacestd;

intmain( )

{floatadd(floatx,floaty);              //對(duì)add函數(shù)作聲明

 floata,b,c;

cout<<"please enter a,b:";

 cin>>a>>b;

 c=add(a,b);

 cout<<"sum="<<c<<endl;

 return0;

}

 

floatadd(floatx,floaty)               //定義add函數(shù)

{floatz;

 z=x+y;

 return(z);

}

 

例4.4 函數(shù)指定為內(nèi)置函數(shù)。

#include <iostream>

usingnamespacestd;

inlineintmax(int,int, int);       //聲明函數(shù),注意左端有inline

intmain( )

{inti=10,j=20,k=30,m;

 m=max(i,j,k);

 cout<<"max="<<m<<endl;

 return0;

}

 

inlineintmax(inta,intb,intc)       //定義max為內(nèi)置函數(shù)

{if(b>a) a=b;                           //求a,b,c中的最大者

 if(c>a) a=c;

 returna;

}

 

例4.5 求3個(gè)數(shù)中最大的數(shù)(分別考慮整數(shù)、雙精度數(shù)、長整數(shù)的情況)。

#include <iostream>

usingnamespacestd;

intmain( )

{intmax(inta,intb,intc);                //函數(shù)聲明

doublemax(doublea,doubleb,doublec);    //函數(shù)聲明

longmax(longa,longb,longc);            //函數(shù)聲明

 inti1,i2,i3,i;                            

 cin>>i1>>i2>>i3;                         //輸入3個(gè)整數(shù)

 i=max(i1,i2,i3);                         //求3個(gè)整數(shù)中的最大者

 cout<<"i_max="<<i<<endl;

 doubled1,d2,d3,d;   

 cin>>d1>>d2>>d3;                         //輸入3個(gè)雙精度數(shù)

 d=max(d1,d2,d3);                         //求3個(gè)雙精度數(shù)中的最大者

 cout<<"d_max="<<d<<endl;

 longg1,g2,g3,g;

 cin>>g1>>g2>>g3;                         //輸入3個(gè)長整數(shù)

 g=max(g1,g2,g3);                         //求3個(gè)長整數(shù)中的最大者

 cout<<"g_max="<<g<<endl;

}

 

intmax(inta,intb,intc)                //定義求3個(gè)整數(shù)中的最大者的函數(shù)

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

doublemax(doublea,doubleb,doublec)   //定義求3個(gè)雙精度數(shù)中的最大者的函數(shù)

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

longmax(longa,longb,longc)           //定義求3個(gè)長整數(shù)中的最大者的函數(shù)

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

例4.6 編寫一個(gè)程序,用來求兩個(gè)整數(shù)或3個(gè)整數(shù)中的最大數(shù)。如果輸入兩個(gè)整數(shù),程序就輸出這兩個(gè)整數(shù)中的最大數(shù),如果輸入3個(gè)整數(shù),程序就輸出這3個(gè)整數(shù)中的最大數(shù)。

#include <iostream>

usingnamespacestd;

intmain( )

{intmax(inta,intb,intc);              //函數(shù)聲明

 intmax(inta,intb);                    //函數(shù)聲明

 inta=8,b=-12,c=27;

 cout<<"max(a,b,c)="<<max(a,b,c)<<endl;   //輸出3個(gè)整數(shù)中的最大者

 cout<<"max(a,b)="<<max(a,b)<<endl;       //輸出兩個(gè)整數(shù)中的最大者

}

 

intmax(inta,intb,intc)         //此max函數(shù)的作用是求3個(gè)整數(shù)中的最大者

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

intmax(inta,intb)               //此max函數(shù)的作用是求兩個(gè)整數(shù)中的最大者

{if(a>b) returna;

elsereturnb;

}

 

例4.7 將例4.6程序改為通過函數(shù)模板來實(shí)現(xiàn)。

#include <iostream>

usingnamespacestd;

template<typenameT>        //模板聲明,其中T為類型參數(shù)

T max(T a,T b,T c)          //定義一個(gè)通用函數(shù),用T作虛擬的類型名

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

intmain( )

{inti1=185,i2=-76,i3=567,i;

 doubled1=56.87,d2=90.23,d3=-3214.78,d;

 longg1=67854,g2=-912456,g3=673456,g;

i=max(i1,i2,i3);          //調(diào)用模板函數(shù),此時(shí)T被int取代

 d=max(d1,d2,d3);          //調(diào)用模板函數(shù),此時(shí)T被double取代

g=max(g1,g2,g3);          //調(diào)用模板函數(shù),此時(shí)T被long取代

 cout<<"i_max="<<i<<endl;

 cout<<"f_max="<<f<<endl;

 cout<<"g_max="<<g<<endl;

 return0;

}

 

例4.8 求2個(gè)或3個(gè)正整數(shù)中的最大數(shù),用帶有默認(rèn)參數(shù)的函數(shù)實(shí)現(xiàn)。

#include <iostream>

usingnamespacestd;

intmain( )

{intmax(inta, intb, intc=0);//函數(shù)聲明,形參c有默認(rèn)值

inta,b,c;

 cin>>a>>b>>c;

 cout<<"max(a,b,c)="<<max(a,b,c)<<endl;   //輸出3個(gè)數(shù)中的最大者

 cout<<"max(a,b)="<<max(a,b)<<endl;       //輸出2個(gè)數(shù)中的最大者

 return0;

}

 

intmax(inta,intb,intc)        //函數(shù)定義

{if(b>a) a=b;

 if(c>a) a=c;

 returna;

}

 

例4.9 用弦截法求方程f(x)=x3次方-5x2次方+16x-80=0的根。

#include <iostream>

#include <iomanip>

#include <cmath>

usingnamespacestd;

doublef(double);                 //函數(shù)聲明

doublexpoint(double, double);     //函數(shù)聲明

doubleroot(double, double);       //函數(shù)聲明

 

intmain( )

{ doublex1,x2,f1,f2,x;

 do

  {cout<<"input x1,x2:";

   cin>>x1>>x2;

   f1=f(x1);

   f2=f(x2);

  } while(f1*f2>=0);

 x=root(x1,x2);

 cout<<setiosflags(ios∷fixed)<<setprecision(7); 

//指定輸出7位小數(shù)

 cout<<"A root of equation is "<<x<<endl;

 return0;

}

 

doublef(doublex)              //定義f函數(shù),以實(shí)現(xiàn)f(x)

{doubley;

 y=x*x*x-5*x*x+16*x-80;

 returny;

}

 

doublexpoint(doublex1, doublex2)       //定義xpoint函數(shù),求出弦與x軸交點(diǎn)

{doubley;

 y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));    //在xpoint函數(shù)中調(diào)用f函數(shù)

 returny;

}

 

doubleroot(doublex1, double  x2)       //定義root函數(shù),求近似根

{doublex,y,y1;

 y1=f(x1);

 do

  {x=xpoint(x1,x2);             //在root函數(shù)中調(diào)用xpoint函數(shù)

   y=f(x);                      //在root函數(shù)中調(diào)用f函數(shù)

   if(y*y1>0)

    {y1=y;

     x1=x;

    }

   else

x2=x;

  }while(fabs(y)>=0.00001);

 returnx;

}

?
淅川县| 天气| 太白县| 滦平县| 达拉特旗| 桑植县| 望都县| 阿克| 雷山县| 阿瓦提县| 肃北| 布尔津县| 望江县| 合作市| 沙雅县| 洪泽县| 龙门县| 灯塔市| 科技| 横山县| 万盛区| 齐齐哈尔市| 衡南县| 平乐县| 大渡口区| 贞丰县| 汉源县| 垣曲县| 福清市| 来安县| 三台县| 林周县| 海城市| 赤城县| 吴旗县| 崇信县| 南川市| 客服| 长沙市| 淮安市| 盘山县|