c 语言答案Word下载.docx
《c 语言答案Word下载.docx》由会员分享,可在线阅读,更多相关《c 语言答案Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
习题3
3-1选择题
1-5 BDABC6-10 ADCAC11-12 BB
3-2填空题
1. 3
2. 0261
3. 0x10
4.2,1 互换a,b的值
5. 6.6
6. –003
8. 7
7. 5.0,4,c=3<
Enter>
8. i=10,j=20<
9.
(1)65
(2)65,A
(3)56.123400,123.456001
(4)3.141600
(5)8765.432
(6)5.864000e+002
(7)3.141600e+000
(8)3.1416
(9)8765
(10)3.1416,8765.43
10. a=2b=5x=8.8y=76.34c1=65c2=97
3-3编程题
1.编写程序实现从键盘输入两个十进制整型数据10和8给变量x和y,并按下列格式�输出。
�xy
十进制数108
八进制数1210
十六进制数a8
{intx,y;
scanf("
%d%d"
&
x,&
y);
xy\n"
%4d%4d\n"
x,y);
%4o%4o\n"
%4x%4x\n"
}
2.编写一个程序,输入一个大写英文字符('
B'
~'
Y'
),输出它的前导字符、该字符本身及其后续字符。
{charc;
scanf(“%c”,&
c);
printf(“%c,%c,%c\n”,c-1,c,c+1);
3.编写一个程序,输入一个3位正整数,要求反向输出对应的整数,如输入123,则输出321。
编写程序并给出相应的程序流程图。
{inta,a1,a2,a3;
scanf(“%d”,&
a);
a1=a%10;
a=a/10;
a2=a%10;
a3=a%10;
printf(“%d%d%d\n”,a1,a2,a3);
4.编写程序,读入3个double型数据,求它们的平均值,保留此平均值小数点后1位数,对小数点后第2位数进行四舍五入,最后输出结果。
{doublea,b,c,ave;
scanf(“%lf%lf%lf”,&
a,&
b,&
ave=(a+b+c)/3;
printf(“%8.2f\n”,ave);
5.编写程序,读入3个整数给变量a、b、c,然后交换它们的值,把a原来的值给b,把b原来的值给c,把c原来的值给a。
{inta,b,c,t;
scanf(“%d%d%d”,&
t=a;
a=c;
c=b;
b=t;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
习题4
4-1单选题
1~5AADAD6~10ACBBB11~12BA
4-2填空题
1.1
2.
(1)a>
0||b>
0
(2)x>
0&
&
x<
=10
(3)a==1.5&
b==1.5&
c==1.5(4)p<
a||p<
b||p<
c
3.
(1)0
(2)1(3)1(4)0(5)1
4.(max=a>
b?
a:
b)>
c?
max:
5.-4
6.1
7.5,0,3
8.
(1)(a==0)
(2)(b==0)(3)(disc<
0)
4-3编程题
1.输入3个实型数值a、b、c,如果能用它们作为三角形的3条边形成一个三角形,则输出三角形的面积,并画出实现该算法的N-S流程图并编程实现。
#include“math.h”
main()
{floata,b,c,s,area;
scanf(“%f,%f,%f”,&
a,&
b,&
c);
if(a+b>
c&
a+c>
b&
b+c>
a)
{s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“%f”,area);
2.输入整数x、y,若x2+y2>
1000,则输出x2+y2百位以上的数字,否则输出两数之和。
{intx,y;
scanf(“%d,%d”,&
x,&
if(x*x+y*y>
1000)
printf(“%d\n”,(x*x+y*y)/100);
else
printf(“%d\n”,x+y);
3.输入一个整数,判断它能否同时被3、5、7整除,并输出“yes”或“no”字样。
{intx,
scanf(“%d”,&
x);
if(x%3==0&
x%5==0&
x%7==0)
printf(“yes\n”);
printf(“no\n”);
4.对任意输入的x,用下式计算并输出y的值。
{floatx,y;
scanf(“%f”,&
if(x<
-2)y=x*x-sin(x);
elseif(x<
=2)y=pow(2,x)+1;
elsey=sqrt(x*x+x+1);
printf(“%f\n”,y);
5.编写程序输入一个5位整数,判断它是不是回文数。
回文数是指一个数从右到左和从左到右的对应数码相同,如12321是回文数,个位与万位相同,十位与千位相同。
main()
{longge,shi,qian,wan,x;
scanf("
%ld"
&
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if(ge==wan&
shi==qian)/*个位等于万位并且十位等于千位*/
thisnumberisahuiwen\n"
else
thisnumberisnotahuiwen\n"
6.编写程序用于计算某运输公司的运费。
设每公里每吨货物的基本运费为p,货物重量为w,路程为s(单位为km),折扣为d,总费用计算公式为:
f=p*w*s*(1-d)
运费计算标准见表4.5。
表4.5某运输公司运费计算标准
s<
250不打折
250<
=s<
500折扣2%
500<
1000折扣5%
1000<
2000折扣8%
2000<
3000折扣10%
s>
3000折扣15%
{floatp,w,s,d,f;
scanf(“%f,%,%f”,p,s,w);
if(s>
3000)d=0.15
elseif(s>
=2000)d=0.1;
elseif(s>
=1000)d=0.08;
=500)d=0.05;
=250)d=0.02;
elsed=0
f=p*w*s*(1-d);
printf(“%f”,f);
习题5
5-1单选题
1~5CDABA6~10ABDDB11~14DBCB
5-2填空题
1.20
2.333
3.
(1)i<
10
(2)j%3!
=0
4.
(1)flag*(float)k/(k+1)
(2)flag=-flag
5.
(1)max=x
(2)x!
=-1(3)scanf("
%d"
&
x)
5-3编程题
1.用3种循环语句编写程序实现下列算式:
(1)1+2′2+3′3+…+100′100
(2)e=,当最后一项的值小于10-6时为止。
(1)
#include"
{inti;
lonts=0;
for(i=1;
i<
=100;
i++)
s+=i*i;
printf(“%ld”,s);
(2)
{inti=1;
lontp=1;
floats=0;
do{
s+=1.0/p;
p*=++i;
}while(1.0/p>
1e-6)
printf(“%f”,s);
2.编写程序求两个正整数的最大公约数。
{intm,n,t,a,b;
scanf(“%d,%d”?
m,&
n)?
;
if(m<
n){t=m?
m=n?
n=t?
a=m;
b=n;
t=m%n?
while(t)
{m=n?
n=t?
t=m%n;
printf(”%d,%d”,n,a*b/n);
3.编写程序求一个整数的任意次方的最后3位数,即求xy的最后3位数。
{intx,y,s=1;
scanf(”%d,%d?
”,&
y)?
for(?
y>
0?
y--)s*=x?
printf(”%d,%d,%d\n?
”,s%10,s/10%10,s/100%10);
4.百鸡问题。
用100元钱买100只鸡,其中,公鸡每只5元,母鸡每只3元,小鸡每3只1元。
编写程序输出各种买法。
{intx,y,z;
for(x=1?
20?
x++)
for(y=1?
y<
33?
y++)
{z=100-x-y?
if(z>
=0&
(5*x+3*y+z/3)-100<
1e-5)
printf(”x=%d,y=%d,z=%d\n”,x,y,z)?
5.编写程序分别打印如下图形:
*
***
*****
********
(a)(b)
(a)#include"
{intj,k;
for(j=1;
j<
=4;
j++)
{for(k=1;
k<
=4-j;
k++)printf("
"
****"
);
\n"
(b)#include"
for(k=1;
=2*j-1;
k++)
*"
6.请编写程序求100~999之间所有的水仙花数。
水仙花数的含义是指这样的一个3位数,其各位数字的立方和等于该数本身。
例如,371=33+73+13,所以371是一个水仙花数。
程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
{
inti,j,k,n;
'
waterflower'
numberis:
"
for(n=100;
n<
1000;
n++)
{
i=n/100;
/*分解出百位*/
j=n/10%10;
/*分解出十位*/
k=n%10;
/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("
%-5d"
n);
}
}
习题6
6-1单选题
1-5 CBBAD6-10 DBCCD11-15 DCABC
6-2填空题
1. 120
2. x
3. 3,2,2,3
4.fac/i
5. 8,17
6. 9
7. 1.0/(i*i)
8. fun-in:
30,20,10
fun-end:
1015,35,1050
10,20,30
9. 012345
10.93636
6-3编程题
1.编写一函数把字符串中的小写字母转换成大写字母,其他字符不变。
voidzhuan()
{charch;
while((ch=getchar())!
=’\n’)
{if(ch>
=’a’&
ch<
=’z’)ch=ch-32;
putchar(ch);
2.编写一函数求e=
floatexpp(intn)
{intk,fac=1;
floatsum=0;
for(k=1;
k<
=n;
k++)
{fac*=k;
sum+=1.0/fac;
return(sum);
3.编写一函数求一个整数的任意次方的最后3位数,即求xy的最后3位数。
intxy3(intx,inty)
{intk,num=1;
=y;
num*=x;
num=num%1000;
returnnum;
4.有5个人坐在一起,第5个人说他比第4个人大2岁,第4个人说他比第3个人大2岁,第3个人说他比第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁,请问第5个人多大?
intage(intn)
{intc;
if(n==1)c=10;
elsec=age(n-1)+2;
returnc;
习题7
7-1单选题
1-5 DBCCB6-8BDC
7-2填空题
1. c
2. 60
3. 1000 10
4. 16
7-3编程题
1.编写程序计算下列公式中的f值,使用带参数的宏来实现。
#defineF(a)a*a+sqrt(3*a*a+2*a+1)
{floatx,f;
scanf(“%f”,&
x);
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x);
printf(“%f\n”,f);
习题8
8-1单选题
1~15CADAC6~10CCDAB11~15CBBCD
8-2填空题
1
(1)2345
(2)10010(3)QuickC(4)
2.
(1)j+=2
(2)a[i]>
a[j]
3.
(1)r+b[k]
(2)*x
8-3编程题
1.设数组a中的元素都为正整数,编程求其中偶数的个数和偶数的平均值。
#defineN10
{inta[N]={1,2,3,4,5,6,7,8,9,0},osum=0,ocount=0,j;
for(j=0;
10;
if(!
(j%2)){ocount++;
osum+=a[j];
printf(“ocount=%d,osum=%d\n”,ocount,osum);
2.有一个已排好序的数组,输入一个数,要求按原来排序的规律将它插入数组中,插入后数组仍然有序,请编程实现。
#defineN10
{inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;
N;
if(x<
a[j])break;
for(k=N-1;
k>
j;
k--)a[k]=a[k-1];
a[j]=x;
for(j=0;
j++)printf(“%d”,a[j]);
3.编程求一个矩阵对角元素之和,其中矩阵元素值由数组初始化时给定。
#defineM3
{inta[M][M]={{1,2,3},{4,5,6},{7,8,9}},j,sum1=0,sum2=0;
for(j=0;
M;
{sum1+=a[j][j];
sum2+=a[j][M-(j+1)];
printf(“%d,%d\n”,sum1,sum2);
4.编一个程序检查二维数组是否对称(即对所有的i和j,都有a[i][j]=a[j][i])。
{inta[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;
for(k=0;
if(a[j][k]!
=a[k][j]){flag=0;
break;
if(flag)printf(“ok”);
elseprintf(”NO”);
5.编程比较两个字符串的大小(不用strcmp()函数)。
#include“string.h”
{charc1[10],c2[10],j;
gets(c1);
gets(c2);
(c1[j]==c2[j])&
c1[j]&
c2[j];
j++);
printf(“%d\n”,c1[j]-c2[j]);
6.有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格及其他字符的个数。
#include”string.h”
#defineM3
#defineN80
{chara[M][N],j,k,n[5]={0};
j++)gets(a[j]);
a[j][k];
if(a[j][k]>
=’A’&
a[j][k]<
=’Z’)n[1]++;
elseif(a[j][k]>
=’z’)n[2]++;
=’0’&
=’9’)n[3]++;
elseif(a[j][k]=’’)n[4]++;
elsen[5]++;
5;
printf(“%4d”,n[j]);
习题9
9-1单选题
1~5DDACB6~10ACBAD11~15CDBCC
9-2填空题
1.
(1)2,1
(2)10#30#(3)FOUR,O(4)60
2.
(1)49
(2)2(3)2(4)75319(5)15
(6)
(7)
3.
(1)*x
(2)t
4.
(1)'
\0'
或0
(2)n++或n+=1或n=n+1
5.024
9-3编程题
1.按以下要求编写一个程序。
定义三个变量用于存放输入的三个整数;
另定义三个指向整型变量的指针变量,并利用它们实现将输入的三个整数按由小到大的顺序输出。
intn1,n2,n3;
int*pointer1,*pointer2,*pointer3;
pleaseinput3number:
n1,n2,n3:
%d,%d,%d"
n1,&
n2,&
n3);
pointer1=&
n1;
pointer2=&
n2;
pointer3=&
n3;
if(n1>
n2)swap(pointer1,pointer2);
n3)swap(pointer1,pointer3);
if(n2>
n3)swap(pointer2,pointer3);
thesortednumbersare:
%d,%d,%d\n"
n1,n2,n3);
swap(p1,p2)
int*p1,*p2;
{intp;
p=*p1;
*p1=*p2;
*p2=p;
2.编写函数,得到两个整数相除的商和余数。
要求通过指针在函数间传递商和余数这两个数据