C语言程序设计练习题含程序及参考答案Word文档下载推荐.docx
《C语言程序设计练习题含程序及参考答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题含程序及参考答案Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
%d%d\n"
a,b);
fun(&
a,b);
3.从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中.
例如,输入的数为:
551234,
输出成果应该是:
.
voidfun(float*p,float*q,float*s)
floatk;
if(*p<
*q)
{k=*p;
*p=*q;
*q=k;
if(*q<
*s){k=*s;
*s=*p;
*p=k;
if(*p<
{k=*p;
{floata,b,c;
Inputabc:
scanf("
%f%f%f"
a=%4.1f,b=%4.1f,c=%4.1f\n\n"
4.编写函数fun(intn),它的功效是:
盘算正整数n的所有因子(1和n除外)之和作为函数值返回.例如:
n=120时,函数值为239.
stdlib.h>
intfun(intn)
inti,s=0;
for(i=2;
i<
n;
i++)
if(n%i==0)s=s+i;
returns;
voidmain()/*主函数*/
voidNONO();
printf("
%d\n"
fun(120));
NONO();
voidNONO()
{/*请在此函数内打开文件,输入测试数据,挪用fun函数,
输出数据,封闭文件.*/
FILE*wf;
wf=fopen("
a30.out"
"
w"
);
fprintf(wf,"
fclose(wf);
5.盘算s,并输出
111
S=1+──+───+……+──────
1+21+2+31+2+3+…+n
n经由过程键盘输入,例如:
若n的值为11时,则函数值为:
floatfun(intn)
inti;
floats=1.0,h=1;
for(i=2;
=n;
{
h=h+i;
s=s+1.0/h;
returns;
intn;
floats;
\nPleaseenterN:
"
%d"
n);
s=fun(n);
theresultis:
%f"
s);
6.将一个整数中的每一位上为奇数的数依次掏出,组成一个新数放在t中.高位仍在高位,低位仍在低位.例如,当s中的数为:
87653142时,t中的数为:
7531.
voidfun(longs,long*t)
intd;
longs1=1;
*t=0;
while(s>
0)
d=s%10;
if(d%2!
=0)
*t=d*s1+*t;
s1=s1*10;
s/=10;
main()
longs,t;
\nPleaseenters:
%ld"
s);
fun(s,&
t);
Theresultis:
%ld\n"
t);
7.盘算并输出k以内最大的10个能被13或17整除的天然数之和.k的值从键盘传入,若k的值为500,则输出4622.
intfun(intk)
intm=0,mc=0,j;
while((k>
=1)&
(mc<
10))
if((k%13==0)||(k%17==0))
{
m=m+k;
mc++;
k--;
returnm;
fun(500));
8.已知一个数列的前三项分离为0,0,1,今后的各项都是其相邻的前三项之和,盘算并输出该数列前n项的平方根之和sum.例如,当n=10时,程序的输出成果应为:
math.h>
doublefun(n){
doublesum,s0,s1,s2,s;
intk;
sum=1.0;
if(n<
=2)sum=0.0;
s0=0.0;
s1=0.0;
s2=1.0;
for(k=4;
k<
=n;
k++)
{s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;
s1=s2;
s2=s;
returnsum;
voidmain()
InputN="
&
%f\n"
fun(n));
9.编写一个程序,从键盘输入m,输出大于m且紧随m的素数.
intfun(intm)
inti,k;
for(i=m+1;
;
i++){
for(k=2;
k<
i;
k++)
if(i%k==0)
break;
if(k>
=i)
return(i);
\nPleaseentern:
fun(n));
10.断定两个整数m和n是否互质(等于否有公共的因子)(m≠1,n≠1).办法是:
用2到t(t取m和n中较小的谁人数)之间的数分离去除m和n,若m和n能同时被某个数除尽,则m和n不互质;
不然它们互质.
例如,若输入187和85,则应输出No(暗示它们不互质,它们有公因子17).若输入89和187,则应输出Yes(暗示它们互质).
intIsThat(intm,intn)
intk,t,mk=1;
t=m;
if(m>
n)t=n;
for(k=2;
=t;
k++)if(m%k==0&
n%k==0)
{mk=0;
break;
returnmk;
voidmain()
intm,n;
printf("
\nPleaseenter2numbers:
\n"
);
%d%d"
m,&
if(IsThat(m,n))
Yes\n"
else
No\n"
11.将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入).
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制暗示是1000).
voidTrans(intm,intk)
intaa[20],i,j;
for(i=0;
m;
i++)
aa[i]=m%k;
m/=k;
for(j=i-1;
j>
=0;
j--)
aa[j]);
intb,n;
\nPleaseenteranumberandabase:
n,&
b);
Trans(n,b);
12.统计从键盘输入的50个实数中有若干个正数.若干个负数.若干个零
voidfun(int*zs,int*fs,int*l,floataa[])
for(i=0;
50;
if(aa[i]>
(*zs)++;
if(aa[i]<
(*fs)++;
if(aa[i]==0)
(*l)++;
floatnum[50];
inti,czs,cfs,cl;
czs=cfs=cl=0;
printf("
\nPleaseenter50floatnumbers:
scanf(“%f”,&
num[i]);
fun(&
czs,&
cfs,&
cl,num);
\n正数:
%d,负数:
%d,零:
%d\n"
czs,cfs,cl);
13.盘算并输出方程X2+Y2=1989的所有整数解
voidfun()
intx,y;
for(x=1;
x<
=44;
x++)
for(y=1;
y<
y++)
if(x*x+y*y==1989)
printf(“x=%d,y=%d\n”,x,y);
printf(“方程x^2+y^2=1989的整数解为:
\n”);
fun();
14.从键盘输入10个整数,求出个中的最大值.
intfun(intaa[])
intm,i;
m=aa[0];
for(i=1;
10;
m)
m=aa[i];
returnm;
intnum[10],i;
printf(“请从键盘输入10个整数:
scanf(“%d”,&
printf(“\n最大的数是:
%d\n”,fun(num));
12345
11234
11123
11112
11111
15.从键盘输入n值,输出如右图形.(例如n=5时)
voidfun(intn)
inti,j;
for(j=1;
j<
=i;
j++)
printf(“%3d”,1);
for(j=2;
=n+1-i;
printf(“%3d”,j);
printf(“\n”);
printf(“\n请输入图形的行数:
”);
fun(n);
16.应用函数的方法,盘算如下公式的值.
A1=1,A2=──,A3=──,……An=────
1+A11+A21+A(n-1)
例如:
若n=10,则应输出:
floatfun(intn)
floatA=1;
inti;
for(i=1;
i<
i++)
A=1.0/(1+A);
returnA;
intn;
n);
A%d=%f\n"
n,fun(n));
*17.应用函数的方法,,按下面的公式盘算并输出数列的第m项.
┌2,m=1;
│3,m=2;
FFF(m)=┤5,m=3;
└FFF(m-3)+FFF(m-1),m>
3;
例如,若输入整数9,则应输出:
47.
(不必做)
*18.应用函数的方法,按以下递归公式求函数值
┌10(n=1)
fun(n)=│
└fun(n-1)+2(n>
1)
例如,当给n输入5时,函数值为18;
当给n输入3时,函数值为14.
19.盘算并输出当0<
时下列多项式的值,直到为止.
例如,在主函数中从键盘给x输入后,输出为.
doublefun(doublex)
intn=1;
/*轮回计数*/
doublesn=1;
/*累计数*/
doublexn=1,xn1=0;
/*x的n值,以及x的n-1值;
*/
while(fabs(xn-xn1)>
=0.000001)/*绝对值是否及格*/
xn=xn*x*(0.5-n+1)/n;
/*表达式分化今后xn=(xn-1)*x*(0.5-n+1)/n*/
n+=1;
sn+=xn;
/*sn累加上xn*/
returnsn;
doublex,s;
Inputx:
%lf"
x);
s=fun(x);
s=%f\n"
20.盘算并输出s.
x^2x^3x^n
s=1+x+──+──+……+──
2!
3!
n!
n,x从键盘输入,例如,当n=10,时,函数值为.
doublefun(doublex,intn)
doublef=1.0,h=x;
doubles=1;
s=s+h/f;
f=f*i;
h=h*x;
returns;
fun(0.3,10));
21.从键盘输入high,盘算并输出high以内最大的10个素数之和.例如,输入high的值为100,则输出732.
intfun(inthigh)
intsum=0,n=0,j,yes;
while((high>
=2)&
(n<
10))
yes=1;
for(j=2;
j<
=high/2;
j++)
if(high%j==0)
yes=0;
if(yes==1)
sum+=high;
n++;
high--;
returnsum;
fun(100));
22.请编写函数floatfun(intn),它的功效是:
返回n(包含n)以内能被5或9整除的所有天然数的倒数之和.例如,n=20,返回.留意:
请求n的值不大于100.
doublefun(intn)
doublesum=0.0;
if(n>
0&
n<
=100)
for(i=1;
if(i%5==0||i%9==0)
sum+=1.0/i;
doubles;
\nInputn:
\n\ns=%f\n"
23.请编一个函数fun(int*a,intn,int*odd,int*even),函数的功效是分离求出数组中所有奇数之和以及所有偶数之和.形参n给出数组a中数据的个数;
应用指针odd返回奇数之和,应用指针even返回偶数之和.
数组中的值依次为:
1,9,2,3,11,6;
则应用指针odd返回奇数之和24;
应用指针even返回偶数之和8.
#defineN20
fun(int*a,intn,int*odd,int*even)
inti,sum_odd=0,sum_even=0;
for(i=0;
i++)
if(a[i]%2==0)
sum_even+=a[i];
sum_odd+=a[i];
*odd=sum_odd;
*even=sum_even;
inta[N]={1,9,2,3,11,6},i,n=6,odd,even;
printf("
Theoriginaldatais:
\n"
for(i=0;
i<
n;
i++)printf("
%5d"
*(a+i));
\n\n"
fun(a,n,&
odd,&
even);
printf("
Thesumofoddnumbers:
odd);
Thesumofevennumbers:
even);
24.编写盘算三角形面积的程序,留意:
将盘算面积界说成函数floatfun(inta,intb,intc)(a,b,c为三角形的三条边,返回三角形的面积),在主函数中挪用fun
floatfun(inta,intb,intc)
floatp;
p=(a+b+c)/2;
returnsqrt(p*(p-a)*(p-b)*(p-c));
inta,b,c;
printf(“请输入三角形三条边:
scanf(“%d%d%d”,&
d);
printf(“三角形面积为:
%.2f”,fun(a,b,c));
else
printf(“无法组成三角形”);
25.编写程序,求E=1+1/1!
+1/2!
+……+1/n!
请求最后一项的值小于10-4
doublem=1.0;
inti=1;
doublep=1.0;
do{
m=m+1.0/p;
i++;
p=p*i;
}while(1.0/p>
=1E-4);