C语言程序设计练习题含程序及参考答案21182.docx

上传人:b****8 文档编号:28070653 上传时间:2023-07-08 格式:DOCX 页数:46 大小:30.78KB
下载 相关 举报
C语言程序设计练习题含程序及参考答案21182.docx_第1页
第1页 / 共46页
C语言程序设计练习题含程序及参考答案21182.docx_第2页
第2页 / 共46页
C语言程序设计练习题含程序及参考答案21182.docx_第3页
第3页 / 共46页
C语言程序设计练习题含程序及参考答案21182.docx_第4页
第4页 / 共46页
C语言程序设计练习题含程序及参考答案21182.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

C语言程序设计练习题含程序及参考答案21182.docx

《C语言程序设计练习题含程序及参考答案21182.docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题含程序及参考答案21182.docx(46页珍藏版)》请在冰豆网上搜索。

C语言程序设计练习题含程序及参考答案21182.docx

C语言程序设计练习题含程序及参考答案21182

C语言练习题

(所提供的源程序均采用自定义函数方式解决,如不采用函数方式,也可直接在main函数中借鉴该思想编程,因时间有限,所有程序未能一一验证,仅供参考使用)

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;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,"%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()

{

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,则应输出:

0.617977。

#include

floatfun(intn)

{

floatA=1;inti;

for(i=1;i<=n;i++)

A=1.0/(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输入0.21后,输出为:

s=1.100000。

#include

#include

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;

}

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=0.3时,函数值为1.349859。

#include

doublefun(doublex,intn)

{

inti;

doublef=1.0,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(0.3,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,返回0.583333。

注意:

要求n的值不大于100。

#include

doublefun(intn)

{

inti;

doublesum=0.0;

if(n>0&&n<=100)

{

for(i=1;i<=n;i++)

if(i%5==0||i%9==0)

sum+=1.0/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;i

if(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;i

printf("\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=1.0;

inti=1;

doublep=1.0;

do{

m=m+1.0/p;

i++;

p=p*i;

}while(1.0/p>=1E-4);

returnm;

}

voidmain()

{

intn;doubles;

printf("Inputn:

");scanf("%d",&n);

s=fun(n);

printf("s=%f\n",s);

}

26、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。

例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:

s=35.951014。

#include

#include

doublefun(doublex[9])

{

inti;

doubleavg=0.0,sum=0.0;

for(i=0;i<8;i++)

{

avg=(x[i]+x[i+1])/2;

sum+=sqrt(avg);

}

returnsum;

}

voidmain()

{

doubles,a[9]={12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0};

inti;

printf("\nTheoriginaldatais:

\n");

for(i=0;i<9;i++)printf("%6.1f",a[i]);printf("\n\n");

s=fun(a);

print

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1