C函数编程20道习题汇总含其详细程序解答.docx
《C函数编程20道习题汇总含其详细程序解答.docx》由会员分享,可在线阅读,更多相关《C函数编程20道习题汇总含其详细程序解答.docx(26页珍藏版)》请在冰豆网上搜索。
C函数编程20道习题汇总含其详细程序解答
第1题:
编写两个函数,函数功能分别是:
求两个整数的最大公约数和最小公倍数,要求输入输出均在主函数中完成。
样例输入:
1525
样例输出:
575
#include
intgys(inta,intb)
{inti;
for(i=a;i>0;i--)
if(a%i==0&&b%i==0)
{returni;
break;}
}
intgbs(inta,intb)
{inti;
for(i=a;;i++)
if(i%a==0&&i%b==0)
{returni;
break;}
}
intmain()
{inta,b,c,d;
cin>>a>>b;
c=gys(a,b);
d=gbs(a,b);
cout<return0;}
第2题:
编写函数factors(num,k),函数功能是:
求整数num中包含因子k的个数,如果没有该因子则返回0,例如:
32=2×2×2×2×2,则factors(32,2)=5。
要求输入输出均在主函数中完成。
样例输入:
4 2样例输出:
2样例输入:
8 3样例输出:
0
#include
intfactors(intnum,intk)
{intn=0,a;
a=num%k;
while(a==0)
{n++;
num=num/k;
a=num%k;
}
returnn;}
intmain()
{intnum,k,b;
cin>>num>>k;
b=factors(num,k);
cout<
return0;
}
第3题:
编写函数,函数功能是:
计算n的阶乘,要求输入输出均在主函数中完成。
样例输入:
5样例输出:
120、
#include
intjc(intn)
{inta,b=1;
for(a=1;a<=n;a++)
b=a*b;
returnb;}
intmain()
{intn,s;
cin>>n;
s=jc(n);
cout<
return0;
}
第4题:
编写函数,函数功能是:
计算k以内(包括k)最大的10个(不足10个则是所有的)能被13或17整除的自然数之和。
要求输入输出均在主函数中完成。
样例输入:
500样例输出:
4622
#include
intsum(intk)
{intn,c=0,s=0;
for(n=k;n>0;n--)
{if(n%13==0||n%17==0)
{c++;
s+=n;}
if(c>=10)
break;}
returns;}
intmain()
{intk,s;
cin>>k;
s=sum(k);
cout<
return0;
}
第5题:
编写函数,函数功能是:
根据下列公式求π的值(直到某一项的值小于给定精度e为止),精度e由键盘输入,要求输入输出均在主函数中完成。
样例输入:
0.0005
样例输出:
3.14058
#include
doublepai(doublee)
{doubles,a,k,p;
s=1;
a=1/3.0;
for(k=2;;k++)
{s+=a;
a=a*(k/(k*2+1));
if(ap=s*2;
returnp;}
intmain()
{doublee,p;
cin>>e;
p=pai(e);
cout<
return0;}
第6题:
编写程序求
要求使用函数,函数功能是:
求某个数的阶乘。
n由键盘输入,输入输出均在主函数中完成。
注意:
0!
=1。
样例输入:
3
样例输出:
10
#include
intjc(inta)
{ints=1,i;
if(a==0)
s=1;
else
{for(i=1;i<=a;i++)
s=s*i;}
returns;}
intmain()
{intn,k,s;
doublesum=0;
cin>>n;
for(k=0;k<=n;k++)
{s=jc(k);
sum+=s;}
cout<return0;}
第7题:
求数列
要求使用函数计算该序列的前N项和SN,直到SN大于q为止,q由键盘输入,输入输出均在主函数中完成。
样例输入:
50
样例输出:
50.4167、
#include
floatsum(floatq)
{floats=0,a,n;
for(n=1;s<=q;n++)
{a=(n+1.0)/n;
s+=a;}
returns;}
intmain()
{
floatq,s;
cin>>q;
s=sum(q);
cout<
return0;}
第8题:
求数列的前n项和
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
50
样例输出:
1.96079
#include
floatmyx(intn)
{floata;
inti,s=0;
for(i=1;i<=n;i++)
s+=i;
a=1.0/s;
returna;}
intmain()
{intn,i;
floats=0;
cin>>n;
for(i=1;i<=n;i++)
s+=myx(i);
cout<
return0;}
第9题:
编写函数fun(num),其中num是一个n位数,函数功能是:
求整数num的后n-1位,如果num是一位数则返回0,要求输入输出均在主函数中完成。
样例输入:
9样例输出:
0样例输入:
6734样例输出:
734
样例输入:
1000样例输出:
0样例输入:
10101样例输出:
101
#include
#include
intjw(intx)
{inta,n,m;
if(x<10)
a=0;
else
{n=int(log10(x))+1;
m=x%int(pow(10,n-1));
a=m;}
returna;}
intmain()
{intx,c;
cin>>x;
c=jw(x);
cout<return0;}
第10题:
编写函数,函数功能是:
判断输入的字符是否为数字字符。
如果是,则输出YES,否则输出NO,要求输入输出均在主函数中完成。
样例输入:
5
样例输出:
YES
样例输入:
B
样例输出:
NO
#include
usingnamespacestd;
intpdsz(charn)
{intflag;
if(n>='0'&&n<='9')
flag=1;
else
flag=0;
returnflag;}
intmain()
{charn;
n=getchar();
if(pdsz(n)==1)
cout<<"yes";
else
cout<<"no";
return0;}
第11题:
编写函数,函数功能是:
将两个两位数的正整数a、b合并成一个整数c,合并规则是将a的十位和个位分别放在c的千位和个位,将b的十位和个位分别放在c的百位和十位。
a、b由键盘输入,输入输出均在主函数中完成。
样例输入:
4512
样例输出:
4125
#include
#include
inthb(inta,intb)
{intq,g,m,c;
q=a/10;
g=a%10;
m=b*10;
c=q*1000+m+g;
returnc;}
intmain()
{inta,b,c;
cin>>a>>b;
c=hb(a,b);
cout<return0;}
第12题:
求数列的前n项和
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
10
样例输出:
0.382179
#include
#include
doubledx(doublen)
{doublea,b,c;
a=pow(-1,n+1);
b=n*(n+1);
c=a/b;
returnc;}
intmain()
{doublen,s=0,i,a;
cin>>n;
for(i=1;i<=n;i++)
{a=dx(i);
s+=a;}
cout<
return0;}
第13题:
求数列的前n项和
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
3
样例输出:
123
#include
#include
intan(intn)
{ints=0,m,a,i;
for(i=1;i<=n;i++)
{m=int(pow(10,i-1));
a=m;
s+=a;}
returns;}
intmain()
{intn,i,a,sum=0;
cin>>n;
for(i=1;i<=n;i++)
{a=an(i);
sum+=a;}
cout<return0;}
第14题:
求满足
的n的最大值,要求使用函数,函数功能是:
计算n的立方,k由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
10000
样例输出:
13
#include
#include
intlf(intx)
{inta;
a=x*x*x;
returna;}
intmain()
{intk,s=0,i,n=0,a;
cin>>k;
for(i=1;s{a=lf(i);
s+=a;}
n=i-2;
cout<return0;}
第15题:
求数列
直到相邻两项之差的绝对值小于1E-6为止。
要求使用函数,函数功能是:
计算数列的每一项,x由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
0.21
样例输出:
1.1
#include
#include
floatsn(floatx,floatn)
{floats=1,i,a=1,b=1,m;
for(i=1;i<=n;i++)
{a=a*(0.5-(i-1));
b=b*i;
m=1/b;
s+=a*m*pow(x,i);}
returns;}
intmain()
{floatx,k,n=0,p,q;
cin>>x;
for(k=1;;k++)
{n++;
p=sn(x,n);
q=sn(x,n+1);
if(fabs(q-p)<1E-6)
break;}
cout<
return0;}
第16题:
利用级数展开式计算cosx
直到某一项的绝对值小于0.00001为止。
要求使用函数,函数功能是:
计算数列的每一项,x由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
0样例输出:
1样例输入:
3样例输出:
-0.989992
#include
#include
doublean(doublex,doublen)
{doublea,b,k,c=1,d,e;
a=pow(-1,n);
b=pow(x,2*n);
for(k=1;k<=2*n;k++)
c*=k;
d=1/c;
e=a*b*d;
returne;}
intmain()
{doublex,s=1,i,p;
cin>>x;
for(i=1;;i++)
{p=an(x,i);
s+=p;
if(fabs(p)<0.00001)
break;}
cout<
return0;}
第17题:
利用级数展开式计算sinx
直到某一项的绝对值小于0.00001为止。
要求使用函数,函数功能是:
计算数列的每一项,x由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
0
样例输出:
0
样例输入:
3
样例输出:
0.14112
#include
#include
doublean(doublex,doublen)
{doublef,a,b,i,c=1,d;
a=pow(-1,n+1);
b=pow(x,2*n-1);
for(i=1;i<=(2*n-1);i++)
c=c*i;
d=1/c;
f=a*b*d;
returnf;}
intmain()
{doublex,s=0,i,p;
cin>>x;
for(i=1;;i++)
{p=an(x,i);
s=s+p;
if(fabs(p)<0.00001)
break;}
cout<
return0;}
第18题:
编写程序求Fibonacci数列的前n项阶乘之和,即
。
要求使用函数,函数功能是:
求某个数的阶乘。
n由键盘输入,输入输出均在主函数中完成。
注意:
#include
#include
intjc(intx)
{inta=1,k;
for(k=1;k<=x;k++)
a*=k;
returna;}
intmain()
{intn,i,a,b,s,j,k;
cin>>n;
a=1;
b=1;
s=2;
for(i=3;i<=n;i++)
{j=a+b;
k=jc(j);
s+=k;
a=b;b=j;}
cout<
return0;}
样例输入:
6
样例输出:
40450
第19题:
求数列
其中分母为n以内(包括n)的素数。
要求使用函数,函数功能是:
计算数列的每一项,n由键盘输入。
累加过程和输入输出均在主函数中完成。
样例输入:
50
样例输出:
1.66165
#include
#include
floatan(intn)
{
floata,b=0,c,d;
inti;
a=0;
for(i=1;iif(n%i==0)
a++;
if(a==1)
d=1.0/n;
elsed=0;
returnd;
}
intmain()
{
floats=0,n,a;
inti;
cin>>n;
for(i=1;i<=n;i++)
{
a=an(i);
s+=a;
}
cout<
return0;
}
第20题:
编写程序求m和n之间(包括m和n,m<=n)所有素数的平方根之和。
要求使用函数,函数功能是:
判断某一个数是否为素数。
m和n由键盘输入,要求输入输出均在主函数中完成。
样例输入:
100999
样例输出:
3157.48
#include
#include
intpd(intn)
{inti,m=0,flag=0;
for(i=1;i<=n;i++)
if(n%i==0)
m++;
if(m==2)
flag=1;
return(flag);}
intmain()
{doublem,n,s=0,b,k;
cin>>m>>n;
for(k=m;k<=n;k++)
{b=pd(k);
if(b)
s=s+sqrt(k);}
cout<
return0;}
第21题:
编写函数digit(num,k),函数功能是:
求整数num从左边开始的第k位数字的值,如果num位数不足k位则返回0。
要求输入输出均在主函数中完成。
样例输入:
46473样例输出:
4样例输入:
235237样例输出:
0
#include
#include
intdigit(intx,intk)
{intn,s,a,b;
n=int(log10(x))+1;
if(ns=0;
else
{a=x/int(pow(10,n-k));
b=a%10;}
returnb;}
intmain()
{intnum,k,t;
cin>>num>>k;
t=digit(num,k);
cout<return0;}
第1题:
编写函数,将字符串中的大写字母变成对应的小写字母,小写字母变成对应的大写字母,其它字符不变。
在主函数中调用该函数,完成任意字符串的转换,并输出结果。
输入字符串(允许包含空格),输出处理后的结果。
样例输入:
HowAreYou?
样例输出:
hOWaREyOU?
#include
usingnamespacestd;
#include
voidexc(chara[],intl)
{inti;
for(i=0;i{if(a[i]>='A'&&a[i]<='Z')
a[i]=a[i]+32;
elseif(a[i]>='a'&&a[i]<='z')
a[i]=a[i]-32;
else
a[i]=a[i];}}
intmain()
{chara[50];
intl;
gets(a);
l=strlen(a);
exc(a,l);
puts(a);
return0;}
第2题:
编写函数,形成n阶杨辉三角形。
在主函数中调用该函数,形成杨辉三角形,并输出结果。
输入阶数n,输出处理后的结果。
样例输入:
5
样例输出:
1
11
121
1331
14641
#include
#include
voidyh(inta[][50],intl)
{inti,j,k;
for(k=0;k{a[k][0]=1;
a[k][k]=1;}
for(i=2;i{for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];}}
intmain()
{inta[50][50],n,i,j;
cin>>n;
yh(a,n);
for(j=0;j{for(i=0;i<=j;i++)
cout<cout<return0;}
第3题:
编写函数,求一个字符串的长度。
在主函数中调用该函数,输出结果。
输入字符串(允许包含空格),输出字符串的长度。
样例输入:
HowAreYou?
样例输出:
12
#include
usingnamespacestd;
#include
intlen(chara[])
{intl;
l=strlen(a);
returnl;}
intmain()
{chara[50];
intl;
gets(a);
l=len(a);
cout<return0;}
第4题:
编写函数,将字符数组s2中的前n个字符复制到字符数组s1中,不允许使用strcpy函数。
在主函数中调用该函数,完成任意字符串的复制,并输出结果。
输入分2行,第一行为字符串(不包含空格),第二行为n的值,输出处理后的结果。
样例输入:
Hello,world!
8
样例输出:
Hello,wo
#include
voidcp(chara[],charb[],intn)
{inti;
for(i=0;ib[i]=a[i];
b[n]='\0';}
intmain()
{chara[50],b[50];
intn;
cin>>a>>n;
cp(a,b,n);
cout<
return0;}
第5题:
编写函数,函数功能是:
统计整数n的各位上出现数字1、2、3的次数。
要求输入输出均在主函数中完成。
样例输入:
0
样例输出:
312
#include
usingnamespacestd;
#include
voidcs(chara[],intb[],intl)
{inti;
b[0]=0;b[1]=0;b[2]=0;
for(i=0;i{if(a[i]=='1')
b[0]++;
elseif(a[i]=='2')
b[1]++;
elseif(a[i]=='3')
b[2]++;
elsecontinue;}}
intmain()
{chara[50];
intb[50],l;
gets(a);
l=strlen(a);
cs(a,b,l);
cout<
return0;}
第6题:
编写程序完成进制转换,要求使用函数,函数功能是:
十进制转换为二进制,输入输出均在主函数中完成。
样例输入:
125
样例输出:
1111101
#include
intzh(inta[],intx)
{inti=-1;
while(x!
=0)
{i++;
a[i]=x%2;
x=x/2;}
returni;}
intmain()
{inta[32],m,n,k;
cin>>m;
n=zh(a,m);
for(k=n;k>=0;k--)
{cout<return0;}
第7题:
编写两个函数,将n个正整数中的素数按升序排序。
函数功能分别是:
判断一个数是否为素数,以及对数组进行排序。
输入分2行:
第一行为n的值,第二行为n个整数。
要求输入输出均在主函数中完成。
样例输入:
9987654321
样例输出:
2357
#include
intorder(inta[],intb[],in