C语言程序设计方案(第三版)习题库答案(DOC 28页).doc

上传人(卖家):2023DOC 文档编号:5855917 上传时间:2023-05-12 格式:DOC 页数:28 大小:322.50KB
下载 相关 举报
C语言程序设计方案(第三版)习题库答案(DOC 28页).doc_第1页
第1页 / 共28页
C语言程序设计方案(第三版)习题库答案(DOC 28页).doc_第2页
第2页 / 共28页
C语言程序设计方案(第三版)习题库答案(DOC 28页).doc_第3页
第3页 / 共28页
C语言程序设计方案(第三版)习题库答案(DOC 28页).doc_第4页
第4页 / 共28页
C语言程序设计方案(第三版)习题库答案(DOC 28页).doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、C语言程序设计(第三版)习题库1、 设圆半径r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体 积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请 编程序。#i nclude mai n()float r,h,C1,Sa,Sb,Va,Vb。scanf(_” f” _,&r)。scanf( ” %d”,_ &h_)。;6= 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

2、,Sb,Va,Vb )。2、 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9输出要求有文字说明,取位2小数。#i nclude mai n()float F,c 。scan f(%f,&F)。c=5*(F-32)/9 。prin tf(c=%.2f,c)。xx : 13、 有一函数:y=三2x-11 x 10写一程序,输入x值,输出y值。3x -11 x -10#i nclude mai n()int x,y 。printf(输入 x:)。scan f(%d, &x)。if(x1) /* x1 */y=x。prin tf(x=%3d, y=x=%dn,x,y)。 else i

3、f ( x10) /* 1 10 */y=3*x-11。prin tf(x=%3d, y=3*x-11=%dn,x# in clude stdio.hmain ()int x,y。scanf(%d,&x) 。 if(x=1 & x10) 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 & x10) y=2*x-1 。 else y=3*x-11。 printf(%dn,y) 。 # include stdio.h main() int x,y。scanf

4、(%d,&x) 。 if(x=1 & x10) y=2*x-1 。 else y=3*x-11。 printf(%d,y)。scanf(%d,&x)。if(x=1 & x10) y=2*x-1 。 else y=3*x-11。 # include stdio.hmain() int x,y。scanf(%d,&x) 。if(x=1 & x10)y=2*x-1 。elsey=3*x-11 。printf(%d,y) 。,y) 。4、 给定一个不多于 5位的正整数,要求:求它是几位数;按逆序打印出各位数字。 例如原数为 321,应输出 123。#include main()long int num

5、,m=0 。int i=0 。scanf(%ld,&num) 。while(num0)i+ 。 /* 统计长度 */m=m*10+num%10 。num =num/10 。printf( 数字长度为: %d,i)。printf( 逆序数字为: %dn,m)。5、以下程序实现的功能:求三个数的最大值#includemain()int a,b,c,max。scanf(%d%d%d,&a,&b,&c)。if(ab)if( ac)max=a 。elsemax=c 。 elseif( bc)max=b 。elsemax=c 。printf(max= %d,max) 。#include main()int

6、 x,y,z,t=0 。scanf(%d %d %d,&x,&y,&z) 。if(xy)t=y 。 y=x 。 x=t 。 if(xz)t=z 。 z=x 。 x=t 。 if(yz)t=z 。 z=y 。 y=t 。 printf(%dn,z) 。6、输入两个正整数 m和n ,求其最大公约数和最小公倍数。/* 枚举法 */#includemain()long m,n,i=1,j,s。scanf(%ld,%ld,&m,&n)。for( 。 i=m&i=n) j=m。else j=n 。for( 。 !(j%m=0&j%n=0)。 j+) 。printf(s=%ld,j=%ldn,s,j)。#i

7、nclude main()int a,b,k,temp,i,p。scanf(%d,%d,&a,&b)。if(ab)temp=b 。elsetemp=a 。for(i=2 。 i=temp 。 i+) if(a%i=0 & b%i=0)k=i 。printf(%dn,k)。p=a*b/k 。printf(%dn,p)。/* 辗转相除 */#includemain()int m,n,k,j,p,r=1 。 scanf(%d,%d,&m,&n) 。k= mn?m:n 。j= mn?n:m 。do r= k%j 。k=j 。 j=r 。while( r!=0) 。 printf(%d,%d,k,m*n

8、/k) 。 /* 反复减法 */#includemain()int m,n,k,j,p,r=1 。 scanf(%d,%d,&m,&n) 。k= mn? m:n。j= mn?n:m 。do p=k-j 。if(jp) k=j 。 j=p 。 else k=p 。while( p!=0) 。 printf(%d,%d,k,m*n/k) 。 7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #includestdio.hmain()char c 。 int i=0,j=0,k=0,l=0 。 while(c=getchar()!= n ) if( c= A&c= a &c=

9、0 &c= 9 )j+ 。 / 数字统计 else if(c= )k+ 。 / 空格统计 else l+ 。 printf(i=%d,j=%d,k=%d,l=%dn,i,j,k,l) 。8、求 Sn=a+aa+aaa+aaaaa (有n个a)之值,其中a是一个数 字。例如2+22+222+2222+22222( n=5), n 由键盘输入。#include main()int a,n。long b=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、 打印

10、出所有 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该 本身。例如: 153 是一个水仙花数,因为153=13+53+33。【程序 1】#includemain()int i,m,n,k 。for(i=100 。 i1000 。 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】#includemain()int i,a,n,s。for (i=100 。 i0) a=_n%10_ 。s+=a*a*a。n /=_10_ 。if (_s=i_) printf(“ %d

11、” ,i) 。10、 一个数如果恰好等于它的因子之和,这个数就称为完数。例如, 6 的因子为 1、 2、 3,而 6=1+2+3,因此 6是完数。编程序找出 1000之内的所有完数,并按下面格式输出 其因子: 6 its factors are 1、 2、 3#in elude mai n() int a,i,mfor (a =1for (_o a=1000i=1,m=0a+) i = a/2 o i+)if (!(a%i) _if (m=a) printf(11、利用:二/4=1-1/3+1/5-1/7+ 求绝对值的函数为 fabs() o#_ include_#in clude mai n

12、()int i=1,flag=1。double sum=0.0,s dos=_1.0/(2*i-1)sum+=s*flagi+om+=i_ o“ %4d ” ,a).级数求二的值,直到最后一项的绝对值小于10-6为止o_ flag=-flag _ 1e-6_) o /*/4*sum_) o11、有一分数序列:2/1,3/2,5/3,#in clude#defi ne N 20mai n()in ti=1odouble x=1,y=2, sum=0while(_i=20 _) sum=sum+_ y/x _。 y= x+y_o x=_ y-x_ o i+ oprin tf(%fn,sum)。求出

13、这个数列的前 20项之和o12、一球从100M高度自由下落,每次落地后返回原高度的一半,再落下。求它在第 落地时共经过多少 M ?第10次反弹多高?10次#in cludemai n()int i,n=10。double h=100,s=100。for(i=2 。 i=n 。 i+)h*=_ 0.5 _。s=_ s+h*2 _。prin tf(s=%f,h=%fn,s,h)。13、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第

14、一天共摘多少桃子。#in clude#defi ne N 10mai n()int i=1,sum=1。while(i+N)sum=_( sum+1)*2_。prin tf(sum=%dn,sum)。14、用迭代法求。求平方根的迭代公式为:要求前后两次求出的得差的绝对值少于0.00001。#in clude#in cludemai n()float x0,x1,a。scan f(%f,&a)。x仁a/2。dox0=x1 。x1=_ (x0+a/x0)/2_。 while(_x11e-5 _)。prin tf(%gn,x1)。15、 用牛顿迭代法求方程2x3 -4x2 3x -0在1.5附近的根

15、。#in clude#i nclude _#defi ne f(x) 2*x*x*x-4*x*x+3*x-6mai n()double x,y 。 x=_ 1.5 _。doy= f(x)。x=x-y/(6*x*x-8*x+3)。 while(fabs(y)1e-6)。prin tf(x=%.3fn,x)。3216、 用二分法求方程2x -4x Vx-60在(-io, 10)之间的根#in clude#in clude #define f(x) 2x*x*x-4*x*x+3*x-6mai n()double x仁-10,x2=10,x,y。dox=(x1+x2)/2。y=f(x) 。if(y1e

16、-6)。prin tf(x=%gn,x)。输入17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如75,输出C。请完成填空#in cludemai n()int score。scanf(”_%d ,&score)。switch(_score/10 _)case 1:case 2:case 3:case 4:case 5:printf( grade En ”)。 break_。case 6: printf(grade Dn ”)。break 。case 7: printf(grade Cn”)。break 。case 8: printf(grade Bn”)。break 。c

17、ase 9: printf(grade An”)。break 。_ default_:pri ntf(Error in put!n)。18、该程序功能:对 x=1,2,10,求f(x)=x*x-5*x+sin(x)的最大值。#in clude #in clude #define f(x) x*x-5*x+si n(x)void mai n()int x 。 float max 。_ max=f(1) _。for(x=2 。 x=10 。 x+)_ if(maxf(x) max=f(x) _。printf(%fn,max) 。19、程序功能:输入整数a 和 b 的值,若 a2+b2 大于 100

18、,则输出 a2+b2 百位以上的数字,否则输出两数之和。#includemain()int a,b,s 。scanf(%d%d,&a,&b) 。s=_ a*a+b*b _ 。if(s100) printf(%d,_s/100 _) 。else printf(%d,_a+b_) 。20、有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统 计卖完所需的天数。#include main()int day,x1,x2 。day=0。 x1=1020 。while(_x10 _)x2=_x1/2-2 _ 。 x1=x2 。 day+printf(“day=%d ” ,day

19、) 。21、找出整数的所有因子#include main()int i,x 。scanf( “ %d” ,&x) 。i=1 。for ( 。 _ i=x/2 _ 。 )if (x%i=0) printf(%d ” ,i) 。i+ 。22、统计用数字 0-9可以组成多少个各位上的数字没有重复的 3 位偶数。#include main()int n=0,i,j,k 。for (i = 1。 i = 9。 i+)for (k = 0 。 k = 8 。 _ k+=2_)if (k != i)for (j = 0o j = 9。j+)if (_j!=i&j!=k _) n+。printf(“n=%dn

20、 ” ,n) 。23、用 100 元换成 1、2、5 元的所有兑换方案。#include main() int i,j,k,l=0for (i = 0for (j =0k= _(if (_printf(。 i=20 。 i+)。 j=50 。 j+) 100-i-2*j)/5 _ 。i+j*2+k*5=100 _)“%2d %2d %2d ”,i,j,k)” n ” ) 。if (l%5=0) printf( 24、输出 1-100 之间满足每位数的乘积大于每位数的和的数#include main() int n,k=1,s=0,mn+) for (n=1 。 n0_) k *=m%10 。

21、s+=m%10 。_ m/=10 _ 。if (ks) printf(“%d” ,n) 。25、从 3个红球、 5个白球、 6 个黑球中任意取出 8个球,且其中必须有白球,输出所有可 能的方案。#include main() int i,j,k 。for (i=0 。 i=3 。 i+)for (j=1 _。j=0_)printf(“%3d %3d %3dn”,i,j,k)。26、以下程序的功能是:判断一个四位数是否满足这样的条件:它的9 倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。#includemain()int i,a,b,c,d,m 。for(i

22、=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 main()int a,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 、以下程序的功能是判断输入的年份是否为闰年 ,若是则

23、输出”yes ”,否则输出” No”。#include main()int year 。scanf(“%d” ,&year)。if (_year%400=0|year%4=0&year%100!=0 _) printf(“yes ” ) 。else printf(“No ” ) 。29、以下程序利用冒泡排序法对输入的10 个数进行排序。#include #define N 10void main() int a N。int i,j,t 。printf( in put 10 nu mbers :n)。for (i=0。 iN 。 i+)scanf(%d,_&ai _) 。printf(n)。fo

24、r(j=0 。 jN-1。 j+)for(i=0 。 iai+1_) t=ai 。 ai=ai+1 。a i+1 =t 。printf( the sorted numbers :n)。for(i=0。 iN 。 i+)printf( %d ,a i )。printf( n )。30、用筛法求 100 之内的素数。筛法素数的思想是:1、取最小的数 2,并声明它是素数,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及它的倍数。 3、重复步骤2至筛中无数,得到所有的素数。#include#define M 100 /范围#define N (M+1)/2) /奇数的个数v

25、oidmain()inti,j,aN。a0=2。for(i=1。iN-1。i+)/* 初始数组实现第一步筛选*/ai=2*i+1。for(i=1。iN-1。i+)/* 第 二步筛选*/if(_ai!=0_)for(j=i+1。jN。j+)if(_aj%ai=0_)/*倍数时置零筛去*/aj=0。printf(nTheprimerare2-%d:n,M)。for(i=0,j=0。iN。i+) /* 显示得到素数*/if(_ai!=0_)printf(%5d,ai)。if(+j)%10=0)/* 十 个 数 换 行*/printf(n)。 getch()。31、用选择法对 10 个整数从小到大排序

26、。#include #define N 10 main()int aN,i,j,k,t。for (i=0for (i=0k=_for(j=i+1。 iN 。 i+) scanf(“%d”,&ai)。 iN-1 。 i+)i _ 。 jN 。 j+)if(ajak _)t=ak 。 ak=ai。 ai=t 。 for(i=0 。 iN 。 i+) printf(“ %d” ,ai)。32、求一个N X N矩阵主对角线元素、次对角线之和。#define N 3#include main() int i=0,j=0,aNN,s1=0,s2=0 。for(i=0 。 iN 。 i+)for(j=0 。

27、 jN 。 j+) scanf(%d,&aij) 。for(i=0 。 iN 。 i+)for(j=0 。 jN 。 j+)if(_i=j _) s1+=aij。 / 主对角线if(_i+j=N-1 _) s2+=aij。 / 次对角线printf(s1=%d,s2=%dn,s1,s2) 。33、已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 #define N 10#include main() int i,t,aN=1,7,8,17,23,24,59,62,101 。scanf(%d,&t) 。 for(i=N-2 。 i0 。 i-)if(tai) _ ai=ai-

28、1 _。else break 。ai+1= _t _ 。for(i=0 。 i10 。 i+) printf(%5d,ai) 。34、 将一个数组的值按逆序重新存放,例如,原来顺序为:8, 6,5,4,1。要求改为: 1,4,5,6,8。#include #define N 11main()int i,aN,tmp 。for(i=0 。 iN 。 i+) scanf(%d,&ai) 。for(i=0 。 _ iN/2 _。 i+) tmp=ai 。ai= _ aN-i-1 _ _ aN-i-1 _=tmp 。 for(i=0。 iN 。 i+)printf(%5d,ai) 35、打印“魔方阵”

29、,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均 相等。例如,三阶魔方阵为8 1 63 5 74 9 2 要求打印出由1n2的自然数构成的魔方阵。#define N 3#include main(int i,j,k,aNN。/* 初始化魔方阵置 为for(i=0。iN。 i+)aij=j=N/2a0j=1。 /*存放第一个数字 */*存放2for(k=2。k=N*Ni-。 /数存放前一数行数减j+=1 _ 。if (i N-1) /)0,作为有无数字的判断 */for(j=0。 jN 。j+)_0_。 n*n*/。k+)1、列数加 1到达右上角的位置i=i+2 。j-。 else

30、if(iN-1)j=0 。/ 上 一数 的 列 数 为n-1 时 , 下 一数 的 列 数 为0Jif(_ aij!=0_) /若下一数的位置上已经有数字,/则下一数存到上一个数行数加 1 的位置i=(i+2)%N。j=(j-1+N)%N。Jaij=_k_。/填数Jfor(i=0。 iN。i+) /输出魔方阵printf()。for(j=0jNj+)printf(%4d,aij)printf(nn)36、找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可 能没有鞍点。#include #define M 5 #define N 4 main()int aMN,i,j,x

31、,y,k,max,min。 /x,y 分别是用来记录鞍点的位置int flag=0。 / 用于指示是否存在鞍点for(i=0。 iM 。 i+)for(k=1 。 kN 。 k+) if(maxaik) y=k min=aiy 。 x=i for(k=0 。 kaky) x=k。 _ max=aik _ 。 / 先默认第一个数是最小值。 _ min=aky _ 。 for(j=0 。jN。j+)for(i=0scanf(%d,&aij)。 iM 。 i+) max=ai0 。 y=0 。 / 先默认第一个数是最大值if(_ i=k _)是鞍点 n,x,y,axy)不存在鞍点 n ”) 。pri

32、ntf(a%d%d=%d flag=1 。 if (flag =0) printf(37、有个 15 数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出 该数组中第几个元素的值。如果该数不在数组中,则打印出 无此数 #include #define N 15main()int low,high,mid,x。int aN=1,4,9,13,21,34,55,89,144,233,377,570,671,703,812low=0,high=N-1。scanf(%d,&x)。domid=_(low+high)/2 _。if(amid=x) break。else if(amidx) l

33、ow=_mid+1_ 。else high=_mid-1 _。while(low=high)。if(low=high) printf(x is the %dth numbern,mid+1)。else printf(x not exist in the arrayn)38、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 #include void main() char string 81 。int i , num=0 , word=0 。char c 。gets(string) 。for (i=0。(c=string i ) _ != 0 _。i+)if(c= ,) word=0

34、 。else if(word=0) word=_ 1_ 。num+ 。printf( There are %d words in the line.n, num)。39、输出 10 行的杨辉三角形。11 11 2 11 3 3 1 #include #define N 10main()int i,n,k,aN=1。printf(“ %5dn ” ,a0)。for(i=1。 i=1 。 j-) aj= _for(j=0。 _ j=i _ 。 j+) printf(printf(“ n ” ) 。40、以下程序的功能是:从键盘输入一个整数aj+aj-1_ 。“%5d”,aj)n (nW 10)和n

35、个整数,存入数组a 中,先依次输出各个数组元素的值,然后找出最大值,并输出。#include main()int a10,n,i,j, _max_ 。printf(输入 n=)。scanf(%d,&n) 。printf(输入各数组元素: ) 。for(i=0 。 in 。 i+)scanf(%d, _&ai _) 。printf( 输出各数组元素: ) 。for(_ i=0 。 in 。 i+ _ ) printf(%d , _ai _ ) 。printf(n) 。max=_ a0 _ 。for(j=1 。 jmax) _max=ai _ 。printf( 最大值: %dn,max) 。41、 以下程序实现的功能是:将字符串s中所有的字符c删除。请完成程序填充#include#includemain()char s80 。int i,j。gets(s)。for(i=j=0 。 _ si!= 0 _ 。 i+)if(si!=c)sj=si 。_ j+_ 。sj=0 。puts(s) 。42、 以下程序的功能是:按顺序读入10 名学生 4 门课程的成绩,计算出每位学生的平均 分并输出,请完成程序填充。#include#define N 10main()int n,k。float sc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 待归类文档
版权提示 | 免责声明

1,本文(C语言程序设计方案(第三版)习题库答案(DOC 28页).doc)为本站会员(2023DOC)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|