return0;
}
例3.2输出单个字符。
#include//或者包含头文件stdio.h:
#include
usingnamespacestd;
intmain()
{chara,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);putchar('\n');
putchar(66);putchar(79);putchar(89);putchar(10);
return0;
}
例3.3输入单个字符。
#include
usingnamespacestd;
intmain()
{charc;
c=getchar();putchar(c+32);putchar('\n');
return0;
}
例3.4用scanf和printf函数进行输入和输出。
#include
usingnamespacestd;
intmain()
{inta;floatb;charc;
scanf("%d%c%f",&a,&c,&b);//注意在变量名前要加地址运算符&
printf("a=%d,b=%f,c=%c\n",a,b,c);
return0;
}
例3.5求一元二次方程式ax2+bx+c=0的根。
a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac≥0。
根据求x1,x2的算法。
它可以编写出以下C++程序:
#include
#include//由于程序要用到数学函数sqrt,故应包含头文件cmath
usingnamespacestd;
intmain()
{floata,b,c,x1,x2;
cin>>a>>b>>c;
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<cout<<"x2="<return0;
}
例3.6求三角形的面积。
#include
#include//使用数学函数时要包含头文件cmath
#include//使用I/O流控制符要包含头文件iomanip
usingnamespacestd;
intmain()
{
doublea,b,c;
cout<<"pleaseentera,b,c:
";
cin>>a>>b>>c;
if(a+b>c&&b+c>a&&c+a>b)
{//复合语句开始
doubles,area;//在复合语句内定义变量
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
cout<cout<<"area="<
}//复合语句结束
elsecout<<"itisnotatrilateral!
"<return0;
}
例3.7输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。
然后输出最后得到的字符。
#include
usingnamespacestd;
intmain()
{
charch;
cin>>ch;
ch=(ch>='A'&&ch<='Z')?
(ch+32):
ch;//判别ch是否大写字母,是则转换
cout<return0;
}
例3.8编写程序,判断某一年是否为闰年。
#include
usingnamespacestd;
intmain()
{intyear;
boolleap;
cout<<"pleaseenteryear:
";//输出提示
cin>>year;//输入年份
if(year%4==0)//年份能被4整除
{if(year%100==0)//年份能被4整除又能被100整除
{if(year%400==0)//年份能被4整除又能被400整除
leap=true;//闰年,令leap=true(真)
elseleap=false;}//非闰年,令leap=false(假)
else//年份能被4整除但不能被100整除肯定是闰年
leap=true;}//是闰年,令leap=true
else//年份不能被4整除肯定不是闰年
leap=false;//若为非闰年,令leap=false
if(leap)
cout<else
cout<cout<<"aleapyear."<return0;
}
例3.9运输公司对用户计算运费。
路程(s)越远,每公里运费越低。
标准如下:
s<250km没有折扣
250≤s<5002%折扣
500≤s<10005%折扣
1000≤s<20008%折扣
2000≤s<300010%折扣
3000≤s15%折扣
设每公里每吨货物的基本运费为p(price的缩写),货物重为w(wright的缩写),距离为s,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为
f=p*w*s*(1-d)
图3.8
据此写出程序如下:
#include
usingnamespacestd;
intmain()
{intc,s;
floatp,w,d,f;
cout<<"pleaseenterp,w,s:
";
cin>>p>>w>>s;
if(s>=3000)c=12;
elsec=s/250;
switch(c)
{case0:
d=0;break;
case1:
d=2;break;
case2:
case3:
d=5;break;
case4:
case5:
case6:
case7:
d=8;break;
case8:
case9:
case10:
case11:
d=10;break;
case12:
d=15;break;
}
f=p*w*s*(1-d/100.0);
cout<<"freight="<return0;
}
第四章
例4.1在主函数中调用其他函数。
#include
usingnamespacestd;
voidprintstar(void)//定义printstar函数
{
cout<<"******************************"<}
voidprint_message(void)//定义print_message函数
{
cout<<"WelcometoC++!
"<}
intmain(void)
{
printstar();//调用printstar函数
print_message();//调用print_message函数
printstar();//调用printstar函数
return0;
}
例4.10有5个人坐在一起,问第5个人多少岁?
他说比第4个人大两岁。
问第4个人岁数,他说比第3个人大两岁。
问第3个人,又说比第2个人大两岁。
问第2个人,说比第1个人大两岁。
最后问第1个人,他说是10岁。
请问第5个人多大?
可以写出以下C++程序,其中的age函数用来实现上述递归过程。
#include
usingnamespacestd;
intage(int);//函数声明
intmain()//主函数
{cout<return0;
}
intage(intn)//求年龄的递归函数
{intc;//用c作为存放年龄的变量
if(n==1)c=10;//当n=1时,年龄为10
elsec=age(n-1)+2;//当n>1时,此人年龄是他前一个人的年龄加2
returnc;//将年龄值带回主函数
}
例4.11用递归方法求n!
。
有了例4.10的基础,很容易写出本题的程序:
#include
usingnamespacestd;
longfac(int);//函数声明
intmain()
{intn;//n为需要求阶乘的整数
longy;//y为存放n!
的变量
cout<<"pleaseinputaninteger:
";//输入的提示
cin>>n;//输入n
y=fac(n);//调用fac函数以求n!
cout<="<的值
return0;
}
longfac(intn)//递归函数
{longf;
if(n<0)
{cout<<"n<0,dataerror!
"<f=-1;}
elseif(n==0||n==1)f=1;//0!
和1!
的值为1
elsef=fac(n-1)*n;//n>1时,进行递归调用
returnf;//将f的值作为函数值返回
}
例4.12静态局部变量的值。
#include
usingnamespacestd;
intf(inta)//定义f函数,a为形参
{autointb=0;//定义b为自动变量
staticintc=3;//定义c为静态局部变量
b=b+1;
c=c+1;
returna+b+c;
}
intmain()
{inta=2,i;
for(i=0;i<3;i++)
cout<cout<return0;
}
例4.13输出1~5的阶乘值(即1!
2!
3!
4!
5!
)。
#include
usingnamespacestd;
intfac(int);//函数声明
intmain()
{inti;
for(i=1;i<=5;i++)
cout<
="<return0;
}
intfac(intn)
{staticintf=1;//f为静态局部变量,函数结束时f的值不释放
f=f*n;//在f原值基础上乘以n
ret