C语言程序设计(第三版)习题库答案.doc
《C语言程序设计(第三版)习题库答案.doc》由会员分享,可在线阅读,更多相关《C语言程序设计(第三版)习题库答案.doc(26页珍藏版)》请在冰豆网上搜索。
C语言程序设计(第三版)习题库
1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include
main(){
floatr,h,C1,Sa,Sb,Va,Vb;
scanf(__”%f”__,&r);
scanf(”%d”,__&h_);;
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,Cl,Sa,Sb,Va,Vb);
}
2、输入一个华氏温度,要求输出摄氏温度。
公式为c=5(F-32)/9
输出要求有文字说明,取位2小数。
#include
main(){
floatF,c;
scanf("%f",&F);
____c=5*(F-32)/9______;
printf("c=%.2f",c);
}
3、有一函数:
写一程序,输入x值,输出y值。
#include
main(){
intx,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1){/*x<1*/
y=x;
printf("x=%3d,y=x=%d\n",x,y);
}elseif(____x<10_______){/*1≤x-10*/
_____y=2*x-1_______;
printf("x=%3d,y=2*x-1=%d\n",x,y);
}else{/*x≥10*/
y=3*x-11;
printf("x=%3d,y=3*x-11=%d\n",x#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%d",y);
}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%d\n",y);
}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}
printf("%d",y);
}scanf("%d",&x);
if(x<1)
{y=x;}
elseif(x>=1&&x<10)
{y=2*x-1;}
else
{y=3*x-11;}#include"stdio.h"
main()
{
intx,y;
scanf("%d",&x);
if(x<1)
y=x;
elseif(x>=1&&x<10)
y=2*x-1;
else
y=3*x-11;
printf("%d",y);
},y);
}
}
4、给定一个不多于5位的正整数,要求:
①求它是几位数;②按逆序打印出各位数字。
例如原数为321,应输出123。
#include
main(){
longintnum,m=0;
inti=0;
scanf("%ld",&num);
while(num>0){
i++;/*统计长度*/
m=m*10+num%10;
num=num/10;
}
printf("数字长度为:
%d",i);
printf("逆序数字为:
%d\n",m);
}
5、以下程序实现的功能:
求三个数的最大值
#include
main(){
inta,b,c,max;
scanf("%d%d%d",&a,&b,&c);
if(a>b){
if(a>c)max=a;
else max=c;
}else{
if(b>c) max=b;
else
max=c;
}
printf("max=%d",max);
}
#include
main(){
intx,y,z,t=0;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=y;y=x;x=t;}
if(x>z)
{t=z;z=x;x=t;}
if(y>z)
{t=z;z=y;y=t;}
printf("%d\n",z);
}
6、输入两个正整数m和n,求其最大公约数和最小公倍数。
/*枚举法*/
#include
main(){
longm,n,i=1,j,s;
scanf("%ld,%ld",&m,&n);
for(;i<=m&&i<=n;i++){
if(m%i==0&&n%i==0)s=i;
}
if(m>=n)j=m;
elsej=n;
for(;!
(j%m==0&&j%n==0);j++);
printf("s=%ld,j=%ld\n",s,j);
}
#include
main(){
inta,b,k,temp,i,p;
scanf("%d,%d",&a,&b);
if(a>b)
temp=b;
else
temp=a;
for(i=2;i<=temp;i++)
{if(a%i==0&&b%i==0)
k=i;
}
printf("%d\n",k);
p=a*b/k;
printf("%d\n",p);
}
/*辗转相除*/
#include
main(){
intm,n,k,j,p,r=1;
scanf("%d,%d",&m,&n);
k=m>n?
m:
n;
j=m>n?
n:
m;
do{
r=k%j;
k=j;
j=r;
}while(r!
=0);
printf("%d,%d",k,m*n/k);
}
/*反复减法*/
#include
main(){
intm,n,k,j,p,r=1;
scanf("%d,%d",&m,&n);
k=m>n?
m:
n;
j=m>n?
n:
m;
do{
p=k-j;
if(j>p){k=j;j=p;}
elsek=p;
}while(p!
=0);
printf("%d,%d",k,m*n/k);
}
7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include"stdio.h"
main(){
charc;inti=0,j=0,k=0,l=0;
while((c=getchar())!
=’\n’){
if(c>=’A’&&c<=’Z’||c>=’a’&&c<=’z’)
i++;//英文字母统计
elseif(c>=’0’&&c<=’9’)
j++;//数字统计
elseif(c==’’)
k++;//空格统计
elsel++;
}
printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
}
8、求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
例如:
2+22+222+2222+22222(n=5),n由键盘输入。
#include
main(){
inta,n;
longb=0,sum=0;
scanf(“%d%d”,&a,&n);
for(i=1;i<=n;i++){
b=b*10+a;
sum=sum+b;
}
printf(“%ld”,sum);
}
9、打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。
例如:
153是一个水仙花数,因为153=13+53+33。
【程序1】
#include
main(){
inti,m,n,k;
for(i=100;i<1000;i++){
m=__i%10__;
n=_i/10%10__;
k=i/100;
if(__m*m*m+n*n*n+k*k*k==i__)
printf("%5d",i);
}
}
【程序2】
#include
main(){
inti,a,n,s;
for(i=100;i<=999;i++){
n=i;s=0;
while(n>0){
a=__n%10__;
s+=a*a*a;
n/=__10__;
}
if(__s==i__)printf(“%d”,i);
}
10、一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1、2、3
#include
main(){
inta,i,m;
for(a=1;a<=1000;a++){
for(__i=1,m=0__;i<=a/2;i++)
if(!
(a%i))__m+=i__;
if(m==a)printf(“%4d”,a);
}
}
11、利用:
p/4=1-1/3+1/5-1/7+….级数求p的值,直到最后一项的绝对值小于10-6为止。
求绝对值的函数为fabs()。
#__include__
#include
main(){
inti=1,flag=1;
doublesum=0.0,s;
do{
s=__1.0/(2*i-1)__;
sum+=s*flag;
i++;
__flag=-flag__;
}w