C语言程序设计练习题.docx
《C语言程序设计练习题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题.docx(42页珍藏版)》请在冰豆网上搜索。
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=,b=,c=。
#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=%,b=%,c=%\n\n",a,b,c);
fun(&a,&b,&c);
printf("a=%,b=%,c=%\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("","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时,则函数值为:
#include<>
#include<>
floatfun(intn)
{
inti;
floats=,h=1;
for(i=2;i<=n;i++)
{
h=h+i;s=s+h;
}
returns;
}
voidmain()
{
intn;floats;
printf("\nPleaseenterN:
");scanf("%d",&n);
s=fun(n);
printf("theresultis:
%f",s);
}
6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
例如,当s中的数为:
时,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时,程序的输出结果应为:
。
#include<>
#include<>
doublefun(n)
{
doublesum,s0,s1,s2,s;
intk;
sum=;
if(n<=2)sum=;
s0=;s1=;s2=;
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()
{
printf(“方程x^2+y^2=1989的整数解为:
\n”);
fun();
}
14、从键盘输入10个整数,求出其中的最大值。
#include<>
intfun(intaa[])
{
intm,i;
m=aa[0];
for(i=1;i<10;i++)
if(aa[i]>m)
m=aa[i];
returnm;
}
voidmain()
{
intnum[10],i;
printf(“请从键盘输入10个整数:
\n”);
for(i=0;i<10;i++)
scanf(“%d”,&num[i]);
printf(“\n最大的数是:
%d\n”,fun(num));
}
12345
11234
11123
11112
11111
15、从键盘输入n值,输出如右图形。
(例如n=5时)
#include<>
voidfun(intn)
{
inti,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
printf(“%3d”,1);
for(j=2;j<=n+1-i;j++)
printf(“%3d”,j);
printf(“\n”);
}
}
voidmain()
{
intn;
printf(“\n请输入图形的行数:
”);
scanf(“%d”,&n);
fun(n);
}
16、使用函数的方式,计算如下公式的值。
111
A1=1,A2=──,A3=──,……An=────
1+A11+A21+A(n-1)
例如:
若n=10,则应输出:
。
#include<>
floatfun(intn)
{
floatA=1;inti;
for(i=1;i<=n;i++)
A=(1+A);
returnA;
}
voidmain()
{
intn;
printf("\nPleaseentern:
");
scanf("%d",&n);
printf("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输入后,输出为:
s=。
#include<>
#include<>
doublefun(doublex)
{
intn=1;/*循环计数*/
doublesn=1;/*累计数*/
doublexn=1,xn1=0;/*x的n值,以及x的n-1值;*/
while(fabs(xn-xn1)>=/*绝对值是否合格*/
{
xn=xn*x*+1)/n;/*表达式分解以后xn=(xn-1)*x*+1)/n*/
n+=1;
sn+=xn;/*sn累加上xn*/
}
returnsn;
}
voidmain()
{
doublex,s;
printf("Inputx:
");scanf("%lf",&x);
s=fun(x);
printf("s=%f\n",s);
}
20、计算并输出s。
x^2x^3x^n
s=1+x+──+──+……+──
2!
3!
n!
n,x从键盘输入,例如,当n=10,x=时,函数值为。
#include<>
doublefun(doublex,intn)
{
inti;
doublef=,h=x;
doubles=1;
s=s+h/f;
for(i=2;i<=n;i++)
{
f=f*i;h=h*x;
s=s+h/f;
}
returns;
}
voidmain()
{
printf("%f\n",fun,10));
}
21、从键盘输入high,计算并输出high以内最大的10个素数之和。
例如,输入high的值为100,则输出732。
#include<>
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;break;
}
if(yes==1)
{
sum+=high;n++;
}
high--;
}
returnsum;
}
voidmain()
{
printf("%d\n",fun(100));
}
22、请编写函数floatfun(intn),它的功能是:
返回n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,n=20,返回。
注意:
要求n的值不大于100。
#include<>
doublefun(intn)
{
inti;
doublesum=;
if(n>0&&n<=100)
{
for(i=1;i<=n;i++)
if(i%5==0||i%9==0)
sum+=i;
}
returnsum;
}
voidmain()
{
intn;doubles;
printf("\nInputn:
");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
}
23、请编一个函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给出数组a中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:
数组中的值依次为:
1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
#include<>
#defineN20
fun(int*a,intn,int*odd,int*even)
{
inti,sum_odd=0,sum_even=0;
for(i=0;iif(a[i]%2==0)
sum_even+=a[i];
else
sum_odd+=a[i];
*odd=sum_odd;
*even=sum_even;
}
voidmain()
{
inta[N]={1,9,2,3,11,6},i,n=6,odd,even;
printf("Theoriginaldatais:
\n");
for(i=0;iprintf("\n\n");
fun(a,n,&odd,&even);
printf("Thesumofoddnumbers:
%d\n",odd);
printf("Thesumofevennumbers:
%d\n",even);
}
24、编写计算三角形面积的程序,注意:
将计算面积定义成函数floatfun(inta,intb,intc)(a,b,c为三角形的三条边,返回三角形的面积),在主函数中调用fun
#include<>
#include<>
floatfun(inta,intb,intc)
{
floatp;
p=(a+b+c)/2;
returnsqrt(p*(p-a)*(p-b)*(p-c));
}
voidmain()
{
inta,b,c;
printf(“请输入三角形三条边:
\n”);
scanf(“%d%d%d”,&a,&b,&d);
if(a+b>c&&b+c>a&&a+c>b)
printf(“三角形面积为:
%.2f”,fun(a,b,c));
else
printf(“无法构成三角形”);
}
25、编写程序,求E=1+1/1!
+1/2!
+……+1/n!
,要求最后一项的值小于10-4
#include<>
doublefun(intn)
{
doublem=;
inti=1;
doublep=;
do{
m=m+p;
i++;
p=p*i;
}whilep>=1E-4);
returnm;
}
voidmain()
{
intn;doubles;
printf("Inputn:
");scanf("%d",&n);
s=fun(n);
printf("s=%f\n",s);
}
26、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为、、、、、、、、,输出应为:
s=。
#include<>
#include<>
doublefun(doublex[9])
{
inti;
doubleavg=,sum=;
for(i=0;i<8;i++)
{
avg=(x[i]+x[i+1])/2;
sum+=sqrt(avg);
}
returnsum;
}
voidmain()
{
doubles,a[9]={,,,,,,,,};
inti;
printf("\nTheoriginaldatais:
\n");
for(i=0;i<9;i++)printf("%",a[i]);printf("\n\n");
s=fun(a);
printf("s=%f\n\n",s);
}
27、将1到m之内(含m)能被7或11整除的所有整数放在数组a中。
例如,若输入m的值为50,则在数组a中的值为:
711142122283335424449
#include<>
#defineM100
voidfun(intm,int*a,int*n)
{
inti,count=0;
for(i=1;i<=m;i++){
if(i%7==0||i%11==0){
a[count++]=i;
}
}
*n=count;
}
voidmain()
{
intaa[M],n,k;
fun(50,aa,&n);
for(k=0;kif((k+1)%20==0)printf("\n");
elseprintf("%4d",aa[k]);
printf("\n");
}
28、请编写函数intfun(intm,intscore[],intbelow[]),它的功能是:
将低于平均分的人数作为函数值返回,并将低于平均分的成绩放在below数组中(m表示score的长度,score表示成绩)。
例如,当score数组中的数据为:
10、20、30、40、50、60、70、80、90