}
root(floata,floatb,floatc)
{
floatt;
t=b*b-4*a*c;
if(t>=0&&a)
{
t=sqrt(t);
x1=(-b+t)/(2*a);x2=(-b-t)/(2*a);
return1;
}
return0;
}
3.编写一个函数,分别求出一维整型数组a[n]中所有值为奇数的元素个数和所有值为偶数的元素个数。
程序设计如下:
#include
intGetcount(char*p)
{
intcount=0;//记录大写字母字符个数的变量,设初值为0
while(*p!
=NULL)//如为大写字母,则总数加1
{
if(*p>='A'&&*p<='z')
count++;
p++;
}
returncount;
}
voidFunc(inta[],intn,int'&ox,int&ex)
{
inti=0;
ox=0;//参数引用,返回数组中值为奇数的元素个数
ex=0;//参数引用,返回数组中值为偶数的元素个数
while(i{
if(a[i]%2==0)
ex++;
else
ox++;
i++;
}
}
4.编写一个函数,求输入的两个自然数的最大公约数。
程序设计如下:
intFunc(intMax,intMin)
{
intTemp,Num;
if(Max{
Temp=Max;
Max=Min;
Min=Temp;
}
do{
Num=Max%Min;
Max=Min;
Min=Num;
}while(Num!
=0);
returnMax;
}
注释:
本题采用“辗转相除法”。
具体如下:
(1)Max变量存放较大的数作为被除数,Min变量存放较小的数作为除数。
(2)用Max除以Min后的余数存放在Num中。
(3)若Num!
=0,则Max←Min,Min←Num,继续相除得到的新的Num。
(4)重复步骤(3),最后的Max就是最大公约数。
5.有4个人,其中第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人又比第1个人大2岁,如果第1个人30岁,那么第4个人多少岁?
用递归调用实现。
程序设计如下:
#include"iostream.h"
intyear(int);
voidmain()
{
intn;
cout<<"请输入:
第一个人的年龄(30):
";cinn;
cout<<"第四个人的年龄是:
"<}
intyear(intn)
{
staticinty=n,m=0;
if(m==3)
returny;
else
{
m++;y=year(y)+2;
}
}
6.求一元二次方程的实根程序。
程序设计如下:
#include"iostream.h"
intfun(int,int);
voidmain()
{
intn1,n2;
cout<<"输入两个正整数且前者要小于后者:
";cinn1n2;
cout<<"从"<"<}
intfun(intm,intn)
{
if(m=n)
returnn;
else
returnn+fun(m,n-1);
}
习题7参考答案
二、编程题
1.利用math.h头文件,编写一个C++程序,输入3个数,输出其中绝对值最大的数。
程序设计如下:
#include"iostream.h"
#include"math.h"
#definemax(x,y)x>y?
x:
y;
voidmain()
{
intx,y,z,absmax;
cinxyz;
absmax=max(abs(x),abs(y));
absmax=max(abs(absmax),abs(z));
cout<<"Theabsolutevalueofmaximalnumberis:
";
cout<}
2.编写一个程序,利用宏定义一个常量N,然后生成、输出一个4*4({0123},{1234},{2345},{3456})的数据阵列。
程序设计如下:
#include
#defineN4
intmain()
{
int[N][N];
for(inti=0;ifor(intj=0;j*(*(a+i)+j)=i+j;
for(i=0;i{
for(intj=0;jcout<<*(*(a+i)+j)<<"";
cout<}
return0;
}
程序运行的结果:
0123
1234
2345
3456
3.定义一个带参数的宏MIN,用于计算在两个参数中找出较小的一个。
程序设计如下:
#include"stdio.h"
#defineMIN(m,n)mm:
n//定义宏名MIN替换运算mm:
n
voidmain()
{
floatt=36.712,u=18.645;//定义实型变量t,u
floatmin;
min=MIN(t,u);//调用带参数的宏MIN,求t和u的最小值
cout<}
运算结果是:
18.645
习题8参考答案
三、编程题
1.定义枚举类型months,用枚举常量代表一年的12个月份。
程序设计如下:
enummanths{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
2.利用结构体类型编制一程序,实现输入输出一个学生的学号、姓名和出生日期。
程序设计如下:
#include
structdate
{
intyear;
intmonth;
intday;
};
structstudent
{
intnumber;
charname[10];
datebirth;
};
voidmain()
{
structstudentstu1;
cinstu1.numberstu1.name;
cinstu1.birth.yearstu1.birth.monthStu1.birth.day;
cout<cout<<"年"<}
3.利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。
程序设计如下:
#include
#include
voidmain()
{
structstudy
{
intmid;
intend;
intaverage;
}math;
cinmath.midmath.end;
math.average=(math.mid+math.end)/2;
cout<(2)<