c语言部分习题参考答案47.docx
《c语言部分习题参考答案47.docx》由会员分享,可在线阅读,更多相关《c语言部分习题参考答案47.docx(20页珍藏版)》请在冰豆网上搜索。
c语言部分习题参考答案47
C语言部分习题参考答案
第4章数据类型及表达式
4.1若a,b为整型变量,则下列表达式正确的是那些?
a=-21正确a=-0123正确以0开头的是八进制整型常量
a=0×12ab错误十六进制整型常量以0x开头
b=a正确a必须先有确定的值
a=b+a=3错误a=b+a=3等价于a=(b+a)=3等价于a=((b+a)=3)
b=a=3正确b=a=3等价于b=(a=3)
4.2写出下列整型数据在内存中的存储形式。
(用十六进制表示)
150xf-327600x80081270x7f
-327680x8000-1280xff8034870xd9f
4.3下列那些是合法的单字符常量?
合法单个字符常量:
(1)直接形式:
例‘A’;
(2)八进制‘\ddd’;(3)十六进制‘\xhh’;(4)转义字符:
以‘\’开头。
‘A’合法;‘\084’不合法;八进制中无“8”这个数码
‘\x34’,‘\n’合法;‘\m’不合法;“0”不合法;“0”为字符串
‘ab’不合法;单引号内为两个字符‘\t’合法。
4.4设有如下的数据描述:
inta=4,b=5;
floatx=65.789;
charc1='A',c2='\375';
(1)a*100+b*10+2=>4*100+5*10+2=>452
(2)c1*(a=x)=>65*(a=x)=>65*65=>4225其中:
x为float,需转化为int,舍弃小数点,表达式的值等于a的值
(3)b/a+(int)(x+a)%c1=>1+(int)69.789%c1=>1+69%65=>1+4=>5
(4)c1%c2=>65%(-3)=>2
(5)a+=a-=a%=a等价于a+=(a-=(a%=a))等价于a+=(a-=0)等价于a+=0等价于a=a+0等价于0a为0,表达式为0
(6)(a*=b,a*2),a+6等价于(a=a*b,a*2),a+6等价于(a=20,a*2),a+6等价于(a=20,40),a+6等价于40,a+6等价于表达式的值为26,a为20
4.5结果为:
9,11
4.6
(1)(x*x+y*y)/(x-y),v*t+1/2.0*a*t*t
(2)3.14*R*R,3/4.0*3.14*R*R*R
(3)2*(a+b),(a+b+c)/3.0,8*x+7*y+5*(12-x-y)
(4)sin(x+0.5)*sin(x+0.5)+3*cos(2*x+4)+atan(x)
4.8
(1)赋值表达式的值:
4;c=4,a=4;
(2)赋值表达式的值:
65533;d=65533,b=-3;
(3)赋值表达式的值:
‘.’;b=-3,c2=‘.’;
(4)赋值表达式的值:
‘>’;c1=‘>’,c2=‘z’;
(5)赋值表达式的值:
‘A’;c1=‘A’,x=65.789;
(6)赋值表达式的值:
65533,d=65533,c2=‘z’;
(7)赋值表达式的值:
1;a=1,b=-3。
第5章顺序结构程序设计
5.2D5.3BB5.4B5.5A
5.6以下程序的输出结果为:
i:
dec=-4,oct=177774,hex=fffc,unsigned=65532
5.9正确的数据输入形式是:
a=3b=7x=8.5y=71.82c1=Ac2=a↓
5-11编程题:
(1)输入一个三位数,将它反向输出,例如输入258,输出852。
N-S流程图:
源程序参考:
main()
{inta,b,ge,shi,bai;
printf("InputaThreeBitsNumber:
");
scanf("%d",&a);
bai=a/100;
shi=a/10%10;
ge=a%10;
b=bai+shi*10+ge*100;
printf("Output:
%d\n",b);
}
(2)根据圆柱体的高和半径,求圆柱体的表面积和体积。
N-S流程图参考:
源程序参考:
#definePI3.14
main()
{floatr,h,s,v;
printf("Inputr,h=");
scanf("%f,%f",&r,&h);
s=2*PI*r*r+2*PI*r*h;
v=PI*r*r*h;
printf("S=%.2f,V=%.2f\n",s,v);
}
第6章选择结构程序设计
6.1
(1)D
(2)B(3)D(4)B(5)B(6)B
6.2
(1)3,3,3,3
(2)x:
yu=z
(3)0.600000
(4)**1**
**3**
(5)c==tt=50(6)<==
/*6.5*/
main()
{inta,b,c;
printf("inputa,b:
\n");
scanf("%d,%d",&a,&b);
if(a*a+b*b>100)c=(a*a+b*b)/100;
elsec=a+b;
printf("%d\n",c);
}
/*6.4*/
输入a,b,c
max=a;
max
max=b
max
max=c
输出最大数max
main()/*方法一*/
{floata,b,c,max;
printf("inputa,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
max=a;
if(max
if(maxprintf("%f\n",max);
}
main()/*方法二*/
{floata,b,c,max;
printf("inputa,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
max=a
b:
a;
if(maxprintf("%f\n",max);
}
输入a,b,c
a
max=a
max=b
max
max=c
输出最大数max
main()/*方法三*/
{floata,b,c,max;
printf("inputa,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)max=a;
elsemax=b;
if(maxprintf("%f\n",max);
}
/*6.3*/
输入x
Y
x<3
N
y=2x3+3x+5
x<
Y
6
N
输出y
#include"math.h"
main()
{floatx,y;
printf("inputx:
\n");
scanf("%f",&x);
if(x<3)y=2*x*x*x+3*x+5;
elseif(x<6)y=pow((x-3)/(x+5),3);
elsey=sqrt(x+2*sin(3*x));
printf("x=%f,y=%f\n",x,y);
}
/*6.7*/
main()
{intx,flag;
printf("inputx:
\n");
scanf("%d",&x);
flag=0;
if(x%3==0)flag=flag+3;
if(x%5==0)flag=flag+5;
if(x%7==0)flag=flag+7;
switch(flag)
{case0:
printf("不能被3,5,7任一个整除\n");break;
case3:
printf("能被3整除\n");break;
case5:
printf("能被5整除\n");break;
case7:
printf("能被7整除\n");break;
case8:
printf("能被3,5整除\n");break;
case10:
printf("能被3,7整除\n");break;
case12:
printf("能被5,7整除\n");break;
case15:
printf("能被3,5,7整除\n");break;
}
}
补1、输入三角形三边长,判断其能否构成三角形,若能计算并输出三角形面积。
输入三边长x,y,z
x+y>z且y+z>x
Y
且z+x>y
N
s1=(x+y+z)/2
三边长
错误
s2=
输出面积
#include"math.h"
main()
{floatx,y,z,s1,s2;
printf("inputxyz:
\n");
scanf("%f%f%f",&x,&y,&z);
if(x+y>z&&y+z>x&&z+x>y)
{s1=(x+y+z)/2;
s2=sqrt(s1*(s1-x)*(s1-y)*(s1-z));
printf("area=%.2f\n",s2);
}
elseprintf("error\n");
}
补2、有一函数:
输入
,求
的值
输入x
Y
x<1
N
y=x*x
x<
Y
=10
N
y=2x-1
y=3x-1
输出y
main()
{floatx,y;
printf("inputx:
\n");
scanf("%f",&x);
if(x<1)y=x*x;
elseif(x<=10)y=2*x-1;
elsey=3*x-11;
printf("x=%f,y=%f\n",x,y);
}
补3、输入学生考试成绩,输出相应的等级
main()
{chargrade;
floatx;
inttemp;
printf("inputx:
\n");
scanf("%f",&x);
temp=x/10;
switch(temp)
{case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
default:
grade='E';
}
printf("x=%f,grade=%c\n",x,grade);
}
第7章循环结构程序设计
7.3
(1)0
(2)5,5
7.4
(1)break;i>10
(2)i<10j%3(或j%3!
=0)(3)i==ji!
=k&&j!
=k
(4)j=1k<=6(5)100-5*i-2*jk>=0
/*7.9*/
main()
输入x
sin=0a=xn=1b=1s=1
t=a/b
sin=sin+t
a=a*x*x
b=b*(n+1)*(n+1)
s=-1*s
t=a/b
n=n+2
while(t>=1e-10)
输出sin
{floatsin,x,a,b,t;/*a代表分子,b代表分母*/
ints,n;/*s代表每项的符号*/
printf("inputx:
\n");
scanf("%f",&x);
sin=0;a=x;n=1;b=1;s=1;t=a/b;
do
{sin=sin+s*t;
a=a*x*x;
b=b*(n+1)*(n+2);
s=-1*s;t=a/b;
n=n+2;
}while(t>=1e-10);
printf("sin(%.2f)=%f\n",x,sin);
}
/*7.7*/
main()
{longnum;/*num代表一任意数*/
输入一任意数num
sum=0
while(num!
=0)
x=num%10
sum=sum+x*x
num=num/10
输出任意数各位的平方和sum
intx,sum;/*x代表整数的各位数,sum代表累加和*/
printf("inputnum:
\n");
scanf("%ld",&num);
sum=0;
while(num!
=0)
{x=num%10;
sum=sum+x*x;
num=num/10;
}
printf("sum=%d",sum);
}
x=1
for(i=2;i<=10;i++)
x=x*10+x
输出x
/*7.15*/
main()
{floatx;/*x代表蚂蚁数*/
inti;
x=1;
for(i=2;i<=10;i++)
x=x*10+x;
printf("x=%f\n",x);
}
/*7.10*/
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
for(z=1;z<=9;z++)
xyz=x*100+y*10+z
zyx=z*100+y*10+x
xyz+zyx
Y
==1231
N
输出xyz
main()
{intx,y,z,xyz,zyx;
for(x=1;x<=9;x++)
for(y=0;y<=9;y++)
for(z=1;z<=9;z++)
{xyz=x*100+y*10+z;
zyx=z*100+y*10+x;
if(xyz+zyx==1231)
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
/*7.11*/
a=3b=2
for(i=1;i<=20;i++)
sum=sum+(float)a/b
t=a
a=a-b
b=t+b
输出sum
main()
{floatsum=0;
inta,b,i,t;
a=3;b=2;
for(i=1;i<=20;i++)
{sum=sum+(float)a/b;
t=a;
a=a-b;
b=t+b;
}
printf("sum=%f\n",sum);
}
/*7.6*/
main()
{longnum;
intx;
printf("inputnum\n");
scanf(“%ld”,&num);
do
{x=num%10;
printf(“%d“,x);
num=num/10;
}while(num!
=0);
}
/*7.16*/
输入m
flag=1t=sqrt(m)
for(i=2;i<=t;i++)
m%i=
Y
=0
N
flag=0
break
flag
1
0
m是素数
for(i=2;iYm%i=
=0N
输出因子i
#include"math.h"
main()
{intm,i,t,flag;
printf("inputm\n");
scanf("%d",&m);
flag=1;
t=sqrt(m);
for(i=2;i<=t;i++)
if(m%i==0)
{flag=0;
break;
}
if(flag)printf("%disaprime\n",m);
elsefor(i=2;iif(m%i==0)printf("%d",i);
printf("\n");
}
或:
main()
{intm,i,t,flag;
printf("inputm\n");
scanf("%d",&m);
flag=1;
for(i=2;iif(m%i==0)
{flag=0;
printf("%d",i)
}
if(flag)printf("%disaprime\n",m);
printf("\n");
}
/*7.5*/
1、
s=0,f=1
for(i=1;i<=20;i++)
f=f*i
s=s+f
输出s
main()
{floats=0,f=1;
inti;
for(i=1;i<=20;i++)
{f=f*i;
s=s+f;
}
printf("1!
+2!
+3!
+…+20!
=%.0f\n",s);
}
2、
main()
{intsum=0,s=0,i;
for(i=1;i<=20;i++)
{s=s+f;
sum=sum+s;
}
printf("sum=%d\n",sum);
}
3、
方法一:
方法二:
main()main()
{intx,a,b,c;{intx,a,b,c;
for(x=100;x<=999;x++)for(a=1;a<=9;a++)
{a=x/100;for(b=0;b<=9;b++)
b=x/10%10;for(c=0;c<=9;c++)
c=x%10;{x=a*100+b*10+c;
if(x==a*a*a+b*b*b+c*c*c)if(x==a*a*a+b*b*b+c*c*c)
printf('%d",x);printf('%d",x);
}}
}}
/*7.8合并8.8*/
longfac(n)main()
intn;{intcmn,n,m;
{longf=1;longfac();
inti;printf(“inputm,n:
\n”);
for(i=1;i<=n;i++)scanf(“%d,%d”,&m,&n);
f=f*i;cmn=fac(m)/(fac(n)*fac(m-n));
return(f);printf(“cmn=%d\n”,cmn);
}}
/*求俩个数的最大公约数和最小公倍数概念法*/
main()
{intm,n,i,temp;
printf(“pleaseinputm,n\n”);
scanf(“%d,%d”,&m,&n);
if(m{t=m;m=n;n=t;}
for(i=n;i>=1;i--)
if(m%i==0&&n%i==0)break;
printf(“最大公约数是:
%d\n”,i);
}
main()
{intm,n,i,temp;
printf(“pleaseinputm,n\n”);
scanf(“%d,%d”,&m,&n);
if(mfor(i=m;i<=m*n;i++)
if(i%m==0&&i%n==0)break;
printf(“最小公倍数是:
%d\n”,i);
}