C语言程序设计练习题含程序及参考答案.docx
《C语言程序设计练习题含程序及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题含程序及参考答案.docx(35页珍藏版)》请在冰豆网上搜索。
C语言程序设计练习题含程序及参考答案
1、定义一个函数intfun(inta,intb,intc),它的功能是:
若a,b,c能构成等边三角形函数返回3,若能构成等腰返回2,一般三角形返回1,若不能构成三角形返回0。
#include
intfun(inta,intb,intc)
{
if(a+b>c&&b+c>a&&a+c>b)
{
if(a==b&&b==c)
return3;
elseif(a==b||b==c||a==c)
return2;
elsereturn1;
}
elsereturn0;
}
voidmain()
{
inta,b,c,shape;
printf("\nInputa,b,c:
");
scanf("%d%d%d",&a,&b,&c);
printf("\na=%d,b=%d,c=%d\n",a,b,c);
shape=fun(a,b,c);
printf("\n\nTheshape:
%d\n",shape);
}
2、编写一个程序,将两个变量的值交换,例如变量a中的值原为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。
#include
voidfun(int*x,int*y)
{
intt;
t=*x;*x=*y;*y=t
}
voidmain()
{
inta=3,b=8;
printf("%d%d\n",a,b);
fun(&a,b);
printf("%d%d\n",a,b);
}
3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。
例如,输入的数为:
551234,
输出结果应当是:
a=55.0,b=34.0,c=12.0。
#include
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<*q)
{k=*p;*p=*q;*q=k;}
}
voidmain()
{floata,b,c;
printf("Inputabc:
");scanf("%f%f%f",&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
}
4、编写函数fun(intn),它的功能是:
计算正整数n的所有因子(1和n除外)之和作为函数值返回。
例如:
n=120时,函数值为239。
#include
#include
intfun(intn)
{
inti,s=0;
for(i=2;iif(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,"%d\n",fun(120));
fclose(wf);
}
5、计算s,并输出
111
S=1+──+───+……+──────
1+2 1+2+3 1+2+3+…+n
n通过键盘输入,例如:
若n的值为11时,则函数值为:
1.833333
#include
#include
floatfun(intn)
{
inti;
floats=1.0,h=1;
for(i=2;i<=n;i++)
{
h=h+i;s=s+1.0/h;
}
returns;
}
voidmain()
{
intn;floats;
printf("\nPleaseenterN:
");scanf("%d",&n);
s=fun(n);
printf("theresultis:
%f",s);
}
6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
87653142时,t中的数为:
7531。
#include
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;
printf("\nPleaseenters:
");
scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
7、计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值从键盘传入,若k的值为500,则输出4622。
#include
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;
}
voidmain()
{
printf("%d\n",fun(500));
}
8、已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum。
例如,当n=10时,程序的输出结果应为:
23.197745。
#include
#include
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()
{
intn;
printf("InputN=");
scanf("%d",&n);
printf("%f\n",fun(n));
}
9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。
#include
intfun(intm)
{
inti,k;
for(i=m+1;;i++){
for(k=2;k
if(i%k==0)
break;
if(k>=i)
return(i);
}
}
voidmain()
{
intn;
printf("\nPleaseentern:
");
scanf("%d",&n);
printf("%d\n",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(表示它们互质)。
#include
intIsThat(intm,intn)
{
intk,t,mk=1;
t=m;
if(m>n)t=n;
for(k=2;k<=t;k++)
if(m%k==0&&n%k==0)
{mk=0;break;}
returnmk;
}
voidmain()
{
intm,n;
printf("\nPleaseenter2numbers:
\n");
scanf("%d%d",&m,&n);
if(IsThat(m,n))
printf("Yes\n");
else
printf("No\n");
}
11、将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入)。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
#include
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--)
printf("%d",aa[j]);
}
voidmain()
{
intb,n;
printf("\nPleaseenteranumberandabase:
\n");
scanf("%d%d",&n,&b);
Trans(n,b);
}
12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零
#include
voidfun(int*zs,int*fs,int*l,floataa[])
{
inti;
for(i=0;i<50;i++)
{
if(aa[i]>0)
(*zs)++;
if(aa[i]<0)
(*fs)++;
if(aa[i]==0)
(*l)++;
}
}
voidmain()
{
floatnum[50];
inti,czs,cfs,cl;
czs=cfs=cl=0;
printf("\nPleaseenter50floatnumbers:
\n");
for(i=0;i<50;i++)
scanf(“%f”,&num[i]);
fun(&czs,&cfs,&cl,num);
printf("\n正数:
%d,负数:
%d,零:
%d\n",czs,cfs,cl);
}
13、计算并输出方程X2+Y2=1989的所有整数解
#include
voidfun()
{
intx,y;
for(x=1;x<=44;x++)
for(y=1;y<=44;y++)
if(x*x+y*y==1989)
printf(“x=%d,y=%d\n”,x,y);
}
voidmain()
{
pr