C语言程序设计练习题含程序及参考答案.docx
- 文档编号:29403583
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:45
- 大小:25.74KB
C语言程序设计练习题含程序及参考答案.docx
《C语言程序设计练习题含程序及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题含程序及参考答案.docx(45页珍藏版)》请在冰豆网上搜索。
C语言程序设计练习题含程序及参考答案
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=,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;i if(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;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=; 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中的值为: #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;k if((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时,函数返回4,below中的数据应为: 10、20、30、40。 #include<> #include<> intfun(intscore[],intm,intbelow[]) { inttotal=0; intaverage=0; int*p_below=below; inti=0; intj=0; for(i=0;i total=total+score[i]; } average=total/m; for(i=0;i if(score[i] *p_below=score[i]; p_below++; j++; } } *p_below=NULL; return(j); } main() {inti,n,below[9]; intscore[9]={10,20,30,40,50,60,70,80,90}; n=fun(score,9,below); printf("\nBelowtheaveragescoreare: "); for(i=0;i } 29、用插入排序法将n个字符进行排序(降序)。 (提示: 插入法排序的思路是: 先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。 #defineN80 #include"" #include"" voidinsert(char*aa) { inti,j,n;charch; n=strlen(aa); for(i=1;i { ch=aa[i]; j=i-1; while((j>=0)&&(ch { aa[j+1]=aa[j]; j--; } aa[j+1]=ch; } } voidmain() {chara[N]="QWERTYUIOPASDFGHJKLMNBVCXZ"; inti; printf("Theoriginalstri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 练习题 程序 参考答案