C++习题函数.docx
《C++习题函数.docx》由会员分享,可在线阅读,更多相关《C++习题函数.docx(16页珍藏版)》请在冰豆网上搜索。
![C++习题函数.docx](https://file1.bdocx.com/fileroot1/2022-11/24/3beecb45-c444-455e-99cb-46044524cbd1/3beecb45-c444-455e-99cb-46044524cbd11.gif)
C++习题函数
第1题:
编写两个函数,函数功能分别是:
求两个整数的最大公约数和最小公倍数,要求输入输出均在主函数中完成。
样例输入:
1525
样例输出:
575
程序如下
#include
intmain()
{
intm,n;
intgys(int,int);//声明函数
intgbs(int,int);//声明函数
cin>>m>>n;
cout<}
intgys(inta,intb)
{
intr;
r=a%b;
while(r!
=0)
{
a=b;b=r;r=a%b;
}
returnb;
}
intgbs(inta,intb)
{
intgys(int,int);//声明函数
return(a*b)/gys(a,b);
}
第2题:
编写函数digit(num,k),函数功能是:
求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。
要求输入输出均在主函数中完成。
样例输入:
46473
样例输出:
6
样例输入:
235237
样例输出:
0
程序如下:
方法一:
#include
intmain()
{
intnum,k;
intdigit(int,int);//声明函数
cin>>num>>k;
cout<}
intdigit(intnum,intk)
{
inti,f;
i=1;
f=0;//f=0,num不足k位,否则f=1
while(num!
=0)
{
if(i==k)
{
f=1;
break;
}
else
{
num=num/10;
i++;
}
}
if(f==1)
returnnum%10;
else
return0;
}
程序如下:
方法二:
#include
intmain()
{
intnum,k;
intdigit(int,int);//声明函数
cin>>num>>k;
cout<}
intdigit(intnum,intk)
{
inti,n,a[100];
/*将num中的各位数字从个位开始依次取出置于数组元素a[0]至a[i-1]中
循环结束后,i变量中存储了num的数据位数*/
i=0;
while(num!
=0)
{
a[i]=num%10;
num=num/10;
i++;
}
if(i>=k)
returna[k-1];
else
return0;
}
第3题:
哥德巴赫猜想指出:
任何一个不小于6的偶数都可以表示为两个素数之和。
例如:
6=3+38=3+5…50=3+47。
从键盘输入n(n>=6且为偶数),输出对应的表达式,要求编写函数判断一个数是否为素数。
样例输入:
8
样例输出:
8=3+5
程序如下:
#include
intmain()
{
intn,n1,n2,hs=0;
intprime(int);
cin>>n;
for(n1=3;n1<=n/2;n1+=2)
{
if(prime(n1)==1)
{
n2=n-n1;
if(prime(n2)==1)
{
cout<break;
}
}
}
}
//判断n是否是素数,若是,返回1,否返回0
intprime(intn)
{
intgs=0,i;
for(i=1;i<=n;i++)
if(n%i==0)
gs++;
if(gs==2)
return1;
else
return0;
}
第4题:
编写函数,将字符串中的大写字母变成对应的小写字母,小写字母变成对应的大写字母,其它字符不变。
在主函数中调用该函数,完成任意字符串的转换,并输出结果。
输入字符串(允许包含空格),输出处理后的结果。
样例输入:
HowAreYou?
样例输出:
hOWaREyOU?
程序如下:
#include
intmain()
{chara[30];
voidzh(char[]);//函数声明
gets(a);//字串允许包含空格,所以用gets输入
zh(a);
puts(a);
}
voidzh(chart[])
{inti;
for(i=0;t[i]!
=0;i++)
if(t[i]>='a'&&t[i]<='z')
t[i]-=32;
elseif(t[i]>='A'&&t[i]<='Z')
t[i]+=32;
}
第5题:
编写函数,求一个字符串的长度。
在主函数中调用该函数,输出结果。
输入字符串(允许包含空格),输出字符串的长度。
样例输入:
HowAreYou?
样例输出:
12
程序如下:
#include
intmain()
{chara[50];
intcd(char[]);//函数声明
gets(a);//字串允许包含空格,所以用gets输入
printf("%d",cd(a));
}
intcd(chart[])
{inti;
for(i=0;t[i]!
=0;i++)
;
returni;
}
第6题:
编写函数,求两个整数的最大公约数和最小公倍数。
在主函数中调用该函数,输出分2行,第一行为最大公倍数,第二行为最小公倍数。
样例输入:
1525
样例输出:
5
75
程序如下:
(用指针)
#include
intmain()
{
intm,n,gy,gb;
voidgygb(int,int,int*,int*);//声明函数
cin>>m>>n;
gygb(m,n,&gy,&gb);
cout<}
voidgygb(inta,intb,int*pgy,int*pgb)
{
intr,a1,b1;
a1=a;b1=b;
r=a%b;
while(r!
=0)
{
a=b;b=r;r=a%b;
}
*pgy=b;
*pgb=(a1*b1)/b;
}
程序如下:
(用全局变量)
#include
intgy,gb;
intmain()
{
intm,n;
voidgygb(int,int);//声明函数
cin>>m>>n;
gygb(m,n);
cout<}
voidgygb(inta,intb)
{
intr,a1,b1;
a1=a;b1=b;
r=a%b;
while(r!
=0)
{
a=b;b=r;r=a%b;
}
gy=b;
gb=(a1*b1)/b;
}
第7题:
[95]编写函数,函数功能是:
计算n的阶乘,要求输入输出均在主函数中完成。
样例输入:
10
样例输出:
3.6288e+06
程序如下:
#include
intmain()
{
intn;
floatjc(int);//声明函数
cin>>n;
cout<}
//函数定义成实型
floatjc(intn)
{
inti;
floatt;//存放阶乘的变量定义成实型
t=1;
for(i=1;i<=n;i++)
t*=i;
returnt;
}
第8题:
[99]有一分段函数如下,编写函数进行计算,在主函数中输入x值,输出y值。
样例输入:
-1.5
样例输出:
0.00250501
样例输入:
5.6
样例输出:
31.8957
样例输入:
12.5
样例输出:
4.06202
程序如下:
#include
#include
intmain()
{
floatx,y;
floatjs(float);//声明函数
cin>>x;
y=js(x);
cout<}
floatjs(floatx)
{
floaty;
if(x<=0)
y=sin(x)+1;
elseif(x<10)
y=x*x+3/x;
else
y=sqrt(x+4);
returny;
}
第9题:
编写函数,函数功能是:
统计整数n的各位上出现数字1、2、3的次数。
要求输入输出均在主函数中完成。
样例输入:
123114350
样例输出:
312
程序如下:
#include
intmain()
{
intcount[3]={0},n,i;
voidtj(int[],int);//声明函数
cin>>n;
tj(count,n);
for(i=0;i<3;i++)
cout<}
voidtj(intjs[],intx)
{
while(x!
=0)
{
switch(x%10)
{
case1:
js[0]++;break;
case2:
js[1]++;break;
case3:
js[2]++;break;
}
x=x/10;
}
}
第10题:
编写函数fun(num),其中num是一个n位数,函数功能是:
求整数num的后n-1位,如果num是一位数则返回0,要求输入输出均在主函数中完成。
样例输入:
9
样例输出:
0
样例输入:
6734
样例输出:
734
样例输入:
1000
样例输出:
0
样例输入:
10101
样例输出:
101
程序如下:
#include
#include
intfun(intw)
{intn,k;
n=0;k=w;
if(w<10)return0;
//下面循环测试w的位数。
循环结束,n中为w的位数-1
while(w>10)
{n++;w=w/10;}
//pow的函数值为实型,所以此处须强制转换成整型
returnk%(int)pow(10,n);
}
intmain()
{
intnum;
cin>>num;
cout<}
第11题:
编写函数,函数功能是:
将两个两位数的正整数a、b合并成一个整数c,合并规则是将a的十位和个位分别放在c的千位和个位,将b的十位和个位分别放在c的百位和十位。
a、b由键盘输入,输入输出均在主函数中完成。
样例输入:
4512
样例输出:
4125
程序如下:
#include
inthb(inta,intb)
{intc,a_s,a_g,b_s,b_g;
a_s=a/10;a_g=a%10;
b_s=b/10;b_g=b%10;
c=a_s*1000+b_s*100+b_g*10+a_g;
returnc;
}
intmain()
{
inta,b,c;
cin>>a>>b;
c=hb(a,b);
cout<}
第12题:
求数列的前n项和
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
10
样例输出:
0.382179
程序如下:
#include
#include
floatjs(inti)
{
floatc;
c=1.0/(i*(i+1))*pow(-1,i+1);//注意表达式类型
returnc;
}
intmain()
{floatjf(int);
intn,i;
floats=0;
cin>>n;
for(i=1;i<=n;i++)
s+=js(i);
cout<
}
第13题:
求数列
其中分母为n以内(包括n)的素数。
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
50
样例输出:
1.66165
程序如下:
#include
floatpd(intn)
{intp=1,i;
for(i=2;i<=n/2;i++)
if(n%i==0)
{p=0;
break;
}
if(p==1)
return1.0/n;
else
return0;
}
intmain()
{
intn,i;
floatpd(int),s;
cin>>n;
s=0;
for(i=2;i<=n;i++)
s+=pd(i);
cout<
}
第14题:
编写程序求给定整数n的“亲密对数”。
“亲密对数”是指:
若整数a的因子(包括1但不包括自身,下同)之和为b,而整数b的因子之和为a,则称a和b为一对“亲密对数”。
要求使用函数,函数功能是:
计算某一个数的因子(包括1但不包括自身)之和。
n由键盘输入,如果存在“亲密对数”则输出该数,否则输出NO。
要求输入输出均在主函数中完成。
样例输入:
220
样例输出:
284
样例输入:
8
样例输出:
NO
程序如下:
#include
intyzh(intn)
{ints=0,i;
for(i=1;i<=n/2;i++)
if(n%i==0)
s+=i;
returns;
}
intmain()
{
intn1,n2;
intyzh(int);
cin>>n1;
n2=yzh(n1);
if(n1==yzh(n2))
cout<else
cout<<"NO";
}
第15题:
编写函数,功能是交换数组中的最大数和最小数的位置,并计算所有数之和。
例如数组a有5个元素3、4、1、5、2,将最大数5和最小数1的位置交换后得到3、4、5、1、2,总和为15。
程序中用到的主函数为:
程序如下:
#include
intfun(inta[],intn)
{
intmax,min,s,i,t;
max=min=s=0;
for(i=0;i{
s+=a[i];
if(a[max]max=i;
elseif(a[min]>a[i])
min=i;
}
t=a[max];a[max]=a[min];a[min]=t;
returns;
}
intmain()
{
inta[50],n,i,sum;
cin>>n;
for(i=0;icin>>a[i];
sum=fun(a,n);
for(i=0;icout<cout<return0;
}