C语言程序设计第三版习题库答案.docx
《C语言程序设计第三版习题库答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第三版习题库答案.docx(46页珍藏版)》请在冰豆网上搜索。
![C语言程序设计第三版习题库答案.docx](https://file1.bdocx.com/fileroot1/2023-8/15/853ddd87-bcc9-42db-baaa-da2b170cdcd5/853ddd87-bcc9-42db-baaa-da2b170cdcd51.gif)
C语言程序设计第三版习题库答案
C语言程序设计(第三版)习题库
1、设圆半径r=1、5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include <stdio、h>
main(){
float r,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()
{
int x,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()
{
int x,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()
{
int x,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;
else if(x〉=1&&x<10)
y=2*x-1;
else
ﻩy=3*x-11;
printf(”%d”,y);
},y);
}
}
4、给定一个不多于5位得正整数,要求:
①求它就是几位数;②按逆序打印出各位数字。
例如原数为321,应输出123。
#includemain(){
longint num,m=0;
int i=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<stdio、h>
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(){
int x,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<stdio、h〉
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〈stdio、h〉
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〈stdio、h〉
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<stdio、h〉
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<stdio、h>
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〈stdio、h>
main(){
int i,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〈stdio、h>
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 factorsare 1、2、3
#include〈stdio、h〉
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、利用:
π/4=1-1/3+1/5-1/7+…、级数求π得值,直到最后一项得绝对值小于10-6为止。
求绝对值得函数为fabs().
#__include#include<math、h〉
main(){
inti=1,flag=1;
doublesum=0、0,s;
do{
s=__1、0/(2*i—1)__;
sum+=s*flag;
i++;
__flag=-flag__;
}while(__fabs(s)〉1e-6__);/**/
printf("pi=%f”,__4*sum__);
}
11、有一分数序列:
2/1,3/2,5/3, 求出这个数列得前20项之与。
#include<stdio、h>
#defineN20
main(){
inti=1;
doublex=1,y=2, sum=0;
while(__i〈=20__){
sum=sum+__y/x__;
y = ___x+y__;
x = __y-x__;
i++;
}
printf("%f\n”,sum);
}
12、一球从100米高度自由下落,每次落地后返回原高度得一半,再落下。
求它在第10次落地时共经过多少米?
第10次反弹多高?
#include 〈stdio、h〉
main(){
int i,n=10;
double h=100,s=100;
for(i=2;i<=n;i++){
h*=__0、5__;
ﻩs=__s+h*2__;
}
printf("s=%f,h=%f\n",s,h);
}
13、猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下得桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下得一半零一个.到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘多少桃子.
#include <stdio、h>
#defineN10
main(){
inti=1,sum=1;
while(i++<N)
sum=__(sum+1)*2__;
printf("sum=%d\n”,sum);
}
14、用迭代法求.求平方根得迭代公式为:
要求前后两次求出得得差得绝对值少于0、00001.
#include
#include〈math、h>
main(){
floatx0,x1,a;
scanf("%f”,&a);
x1=a/2;
do{
x0=x1;
x1=__(x0+a/x0)/2__;
}while(__x1>1e-5__);
printf("%g\n",x1);
}
15、用牛顿迭代法求方程在1、5附近得根。
#include<stdio、h〉
#include__<math、h〉__
#definef(x) 2*x*x*x-4*x*x+3*x-6
main(){
doublex,y;x=__1、5__;
do{
y =f(x);
x=x—y/(6*x*x-8*x+3);
}while(fabs(y)〉1e—6);
printf(”x=%、3f\n",x);
}
16、用二分法求方程在(—10,10)之间得根
#include
#include#definef(x) 2x*x*x-4*x*x+3*x—6
main(){
doublex1=-10,x2=10,x,y;
do{
x=(x1+x2)/2;
y=f(x);
if(y<0)x1=x;
elsex2=x;
}while(fabs(y)>1e-6);
printf("x=%g\n",x);
}
17、以下程序得功能就是:
输入一个百分制成绩,输出一个五级制成绩等级。
例如输入75,输出C。
请完成填空
#include〈stdio、h〉
main(){
int score;
scanf("__%d__”,&score);
switch(__score/10__){
ﻩcase1:
case2:
case3:
case4:
case 5:
printf(“gradeE\n”);___break__;
case6:
printf(“gradeD\n”);break;
ﻩcase7:
printf(“gradeC\n”);break;
ﻩcase8:
printf(“gradeB\n”);break;
case9:
printf(“grade A\n”);break;
__default__:
printf("Errorinput!
\n”);
}
}
18、该程序功能:
对x=1,2,、、、,10,求f(x)=x*x-5*x+sin(x)得最大值.
#include<stdio、h>
#include〈math、h〉
#definef(x) x*x-5*x+sin(x)
voidmain(){
int x; floatmax;
__max=f
(1)__;
for(x=2;x<=10;x++)
ﻩ __if(max printf("%f\n",max);
}
19、程序功能:
输入整数a与b得值,若a2+b2大于100,则输出a2+b2百位以上得数字,否则输出两数之与.
#include〈stdio、h>
main(){
inta,b,s;
scanf("%d%d”,&a,&b);
s=__a*a+b*b__;
if(s〉100) printf(”%d”,__s/100__);
else printf(”%d”,___a+b__);
}
20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下得一半多两个,以下程序统计卖完所需得天数。
#includemain(){
intday,x1,x2;
day=0;x1=1020;
while(__x1〉0__){
x2=__x1/2-2__; x1=x2;day++}
printf(“day=%d”,day);
}
21、找出整数得所有因子
#include
main(){
inti,x;
scanf(“%d",&x);
i=1;
for( ;__i<=x/2__;){
if(x%i==0)printf(%d”,i);
i++;
}
}
22、统计用数字0-9可以组成多少个各位上得数字没有重复得3位偶数.
#include
main(){
intn=0,i,j,k;
for(i=1;i<= 9;i++)
for(k=0;k<=8;__k+=2__)
if(k !
= i)
for(j=0;j<=9;j++)
if(__j!
=i&&j!
=k__)n++;
printf(“n=%d\n",n);
}
23、用100元换成1、2、5元得所有兑换方案.
#include 〈stdio、h〉
main() {
inti,j,k,l=0;
for(i=0;i<=20;i++)
for (j =0;j〈=50;j++){
k=__(100-i—2*j)/5__;
if(__i+j*2+k*5==100__){
printf(“%2d%2d%2d",i,j,k);
l=l+1;
if(l%5==0) printf(“\n”);
}
}
}
24、输出1-100之间满足每位数得乘积大于每位数得与得数
#includemain() {
intn,k=1,s=0,m;
for (n=1;n<=100; n++) {
k=1;s=0;
__m=n__;
while(__m>0__) {
k*=m%10;
s+=m%10;
___m/=10__;
}
if(k>s)printf(“%d”,n);
}
25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能得方案。
#include
main(){
int i,j,k;
for(i=0;i〈=3;i++)
for(__j=1__;j〈=5;j++){
k=8 – i– j;
if (__k〉=0__)
printf(“%3d%3d%3d\n”,i,j,k);
}
}
26、以下程序得功能就是:
判断一个四位数就是否满足这样得条件:
它得9倍刚好就是它得反序数.反序数就是指整数各个位上得数字逆序所形成得整数。
请完成程序得填空。
#includemain(){
ﻩinti,a,b,c,d,m;
ﻩfor(i=1000;;i++){
ﻩa=__i%10__;
ﻩﻩb=i/10%10;
ﻩc=i/100%10;
ﻩd=i/1000;
ﻩﻩm=__a*1000+b*100+c*10+d__;
if(___m==i*9__)__break__;
}
ﻩﻩprintf("i=%d",i);
}
27、以下程序完成两整数得交换。
#include〈stdio、h〉
main(){
inta,b;
printf(“请依次输入a,b得值:
”);
scanf(“%d,%d",__&a,&b__);
a=a+b;
__b=a—b__;
__a=a-b__;
printf(“交换后:
a=%d,b=%d",a,b);
}
28、以下程序得功能就是判断输入得年份就是否为闰年,若就是则输出”yes",否则输出"No”。
#include〈stdio、h〉
main(){
int year ;
scanf(“%d”,&year);
if(__year%400==0||year%4==0&&year%100!
=0__)printf(“yes");
else printf(“No”);
}
29、以下程序利用冒泡排序法对输入得10个数进行排序。
#include<stdio、h>
#define N10
voidmain(){
int a[N];
inti,j,t;
printf(″input10numbers:
\n″);
for (i=0;i<N;i++)
scanf("%d”,__&a[i]__);
printf("\n”);
for(j=0;j〈N-1;j++)
for(i=0;i<__N—j-1__;i++)
if(__a[i]>a[i+1]__) {
t=a[i];a[i]=a[i+1];
a[i+1]=t;
}
printf(″thesortednumbers:
\n″);
for(i=0;i〈N;i++)
printf(″%d ″,a[i]);
printf(″\n″);
}
30、用筛法求100之内得素数。
筛法素数得思想就是:
1、取最小得数2,并声明它就是素数,同时筛去它及它得倍数。
2、取未筛去数中最小得数,并声明它就是素数,同时筛去它及它得倍数.3、重复步骤2至筛中无数,得到所有得素数.
#include #defineM 100//范围
#defineN((M+1)/2) //奇数得个数
void main(){
inti,j,a[N];ﻫ a[0]= 2;ﻫ for(i=1;i a[i]=2*i+1;ﻫ for(i=1;i<N-1;i++) /*第二步筛选 */