《C语言程序设计方案习题库答案 .docx》由会员分享,可在线阅读,更多相关《C语言程序设计方案习题库答案 .docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品名师归纳总结C语言程序设计 第三版 习题库1、设圆半径r=1.5 ,圆柱高 h=3 ,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用 scanf 输入数据,输出运算结果,输出时要求文字说明,取小数点后两位数字。请编程序。#include mainfloat r,h,C1,Sa,Sb,Va,Vb。scanf” %f”,&r。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf”%d”, C1=2*3.14*r。Sa=3.14*r*r。Sb=4*Sa。&h_ 。可编辑资料 - - - 欢迎下载精品名师归纳总结Va=4*3.14*r*r*r/3。Vb=Sa*h。可编辑资料 - - -
2、 欢迎下载精品名师归纳总结printf ” Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f” ,Cl,Sa,Sb,Va,Vb 。可编辑资料 - - - 欢迎下载精品名师归纳总结2、输入一个华氏温度,要求输出摄氏温度。公式为c=5F-32/9输出要求有文字说明,取位2 小数。#include mainfloat F,c。scanf%f,&F。 c=5*F-32/9。printfc=%.2f,c。3、有一函数: y2x11x10 写一程序,输入 x 值,输出y 值。3x11x10xx1#include mainint x,y。printf输入 x: 。scanf%d,&x。
3、ifx1 /* x1 */y=x 。printfx=%3d, y=x=%dn,x,y。 else if x10/* 1x -10 */ y=2*x-1。printfx=%3d, y=2*x-1=%dn,x,y。 else/* x 10 */ y=3*x-11。printfx=%3d, y=3*x-11=%dn,x# include stdio.hmain可编辑资料 - - - 欢迎下载精品名师归纳总结int x,y。scanf%d,&x。ifx=1 & x10 y=2*x-1。 else y=3*x-11。 printf%d,y。# include stdio.h mainint x,y。sc
4、anf%d,&x。ifx=1 & x10 y=2*x-1。 else y=3*x-11。 printf%dn,y。# include stdio.h mainint x,y。scanf%d,&x。ifx=1 & x10 y=2*x-1。 else y=3*x-11。 printf%d,y。scanf%d,&x。ifx=1 & x10 y=2*x-1。 else y=3*x-11。# include stdio.h mainint x,y。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf%d,&x。ifx=1 & x10 y=2*x-1。elsey=3*x-11。printf%d,y。
5、,y。4、给定一个不多于5 位的正整数,要求:求它是几位数。按逆序打印出各位数字。例如原数为 321,应输出 123。#include mainlong int num,m=0。 int i=0。scanf%ld,&num。whilenum0i+。 /*统计长度 */ m=m*10+num%10 。num =num/10。printf数字长度为: %d,i。printf逆序数字为: %dn,m。5 、以下程序实现的功能:求三个数的最大值#includemainint a,b,c,max。scanf%d%d%d,&a,&b,&c。ifab可编辑资料 - - - 欢迎下载精品名师归纳总结 else
6、max=c 。ifac max=a 。elsemax=c 。ifbc max=b 。else可编辑资料 - - - 欢迎下载精品名师归纳总结printfmax= %d,max。#include main可编辑资料 - - - 欢迎下载精品名师归纳总结int x,y,z,t=0。scanf%d %d %d,&x,&y,&z。ifxyt=y。y=x 。x=t 。 ifxzt=z。z=x 。x=t 。 ifyzt=z。z=y 。y=t 。 printf%dn,z。6 、输入两个正整数m 和 n ,求其最大公约数和最小公倍数。/* 枚举法 */#include mainlong m,n,i=1,j,s
7、。scanf%ld,%ld,&m,&n。for。i=m&i=nj=m 。else j=n。for。.j%m=0&j%n=0。j+。printfs=%ld,j=%ldn,s,j。#include mainint a,b,k,temp,i,p。scanf%d,%d,&a,&b。ifab可编辑资料 - - - 欢迎下载精品名师归纳总结elsetemp=b。temp=a。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=2。i=temp。i+ ifa%i=0 & b%i=0k=i。printf%dn,k。p=a*b/k。printf%dn,p。/* 辗转相除 */#include可编辑资料 -
8、 - - 欢迎下载精品名师归纳总结mainint m,n,k,j,p,r=1。scanf%d,%d,&m,&n。k= mn.m:n。j= mn.n:m。dor= k%j。k=j。j=r。whiler.=0 。printf%d,%d,k,m*n/k。/* 反复减法 */#include mainint m,n,k,j,p,r=1。scanf%d,%d,&m,&n。k= mn.m:n。j= mn.n:m。dop= k-j 。ifjp k=j。 j=p。 else k=p。whilep.=0 。printf%d,%d,k,m*n/k。7 、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的
9、个数。#includestdio.hmainchar c。int i=0,j=0,k=0,l=0。whilec=getchar.=n ifc= A&c= a &c= 0 &c= 9 j+。 /数字统计else ifc= k+。 /空格统计else l+。printfi=%d,j=%d,k=%d,l=%dn,i,j,k,l。可编辑资料 - - - 欢迎下载精品名师归纳总结8 、 求 Sn=a+aa+aaa+ +aa aaa ( 有 n个 a )之 值, 其 中 a 是一个数 字。 例如 :2+22+222+2222+22222( n=5), n 由键盘输入。#include mainint a,
10、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 、打印出全部 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该本身。例如: 153 是一个水仙花数,由于153=13+53+33 。【程序 1】#include mainint i,m,n,k。fori=100。i1000。i+ m=i%10。n=_ i/10%10。k=i/100。ifm*m*m+n*n*n+k*k*k=i printf%5d,i。【程序 2】#include ma
11、inint i,a,n,s。for i=100。 i0 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 之内的全部完数,并按下面格式输出其因子: 6itsfactorsare1、2、3可编辑资料 - -
12、 - 欢迎下载精品名师归纳总结#include main int a,i,m。for a =1。 a=1000。a+ 可编辑资料 - - - 欢迎下载精品名师归纳总结for if .a%i i=1,m=0。 i = a/2。 i+m+=i。可编辑资料 - - - 欢迎下载精品名师归纳总结if m=a printf“ %4d”,a。11、利用 :/4=1-1/3+1/5-1/7+ . 级数求的值,直到最终一项的确定值小于10-6为止。求确定值的函数为fabs。#include #includemainint i=1,flag=1。double sum=0.0,s。dos=1.0/2*i-1 。s
13、um+=s*flag。i+。 flag=-flag。whilefabss1e-6 。/*/可编辑资料 - - - 欢迎下载精品名师归纳总结printfpi=%f, 4*sum 。可编辑资料 - - - 欢迎下载精品名师归纳总结11、有一分数序列: 2/1,3/2,5/3,求出这个数列的前20 项之和。#include #define N 20 maininti=1。double x=1,y=2, sum=0。whilei=20 sum=sum+y/x。y=x+y。x=y-x。i+ 。printf%fn,sum。12、一球从 100M 高度自由下落,每次落的后返回原高度的一半,再落下。求它在第1
14、0 次落的时共经过多少M ?第 10 次反弹多高?#include可编辑资料 - - - 欢迎下载精品名师归纳总结mainint i,n=10。double h=100,s=100。fori=2。 i=n。i+h*=0.5。s=s+h*2。printfs=%f,h=%fn,s,h。13、猴子吃桃问题。猴子第一天摘下如干个桃子,当即吃了一半,仍不过瘾,又多吃了一个。其次天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。#include #define N 10 mainint i=1,sum=1
15、。whilei+Nsum=sum+1*2。printfsum=%dn,sum。14、用迭代法求 。求平方根的迭代公式为:要求前后两次求出的得差的确定值少于0.00001。#include #include mainfloat x0,x1,a。scanf%f,&a。x1=a/2。dox0=x1。可编辑资料 - - - 欢迎下载精品名师归纳总结x1= while x0+a/x0/2 。x11e-5 。可编辑资料 - - - 欢迎下载精品名师归纳总结printf%gn,x1。可编辑资料 - - - 欢迎下载精品名师归纳总结15、用牛顿迭代法求方程#include2 x34x 23x60 在 1.5
16、邻近的根。可编辑资料 - - - 欢迎下载精品名师归纳总结#include #define fx 2*x*x*x-4*x*x+3*x-6 maindouble x,y。x=1.5。doy= fx。可编辑资料 - - - 欢迎下载精品名师归纳总结x=x-y/6*x*x-8*x+3。 whilefabsy1e-6。printfx=%.3fn,x。可编辑资料 - - - 欢迎下载精品名师归纳总结16、用二分法求方程#include #include 2x 34 x 23x60 在-10 , 10之间的根可编辑资料 - - - 欢迎下载精品名师归纳总结#define fx 2x*x*x-4*x*x+3
17、*x-6 maindouble x1=-10,x2=10,x,y。dox=x1+x2/2。y=fx。ify1e-6。printfx=%gn,x。17、以下程序的功能是:输入一个百分制成果,输出一个五级制成果等级。例如输入75,输出 C。请完成填空#include mainint score。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf switch %d,&score。score/10 可编辑资料 - - - 欢迎下载精品名师归纳总结case 1:case 2:case 3:case 4:case 5:printf“grade En” 。break。case 6: printf“
18、grade Dn” 。break。 case 7: printf“grade Cn” 。break。case 8: printf“grade Bn” 。break。case 9: printf“grade An” 。break。 default:printfError input.n。18、该程序功能:对x=1,2,.,10 ,求 fx=x*x-5*x+sinx 的最大值。#include #include #define fx x*x-5*x+sinx void mainint x。 float max。 max=f1。forx=2。x=10 。x+ ifmaxfx max=fx 。可编辑资
19、料 - - - 欢迎下载精品名师归纳总结printf%fn,max。19、程序功能:输入整数a 和 b 的值,如 a2+b2 大于 100,就输出 a2+b2 百位以上的数字, 否就输出两数之和。#include mainint a,b,s。scanf%d%d,&a,&b。s=a*a+b*b。可编辑资料 - - - 欢迎下载精品名师归纳总结ifs100 printf%d, else printf%d, s/100 。a+b 。可编辑资料 - - - 欢迎下载精品名师归纳总结20、有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。#include
20、mainint day,x1,x2。day=0。x1=1020。可编辑资料 - - - 欢迎下载精品名师归纳总结while x2= x10x1/2-2。 x1=x2。 day+可编辑资料 - - - 欢迎下载精品名师归纳总结printf“day=%d ” ,day。21、找出整数的全部因子#include mainint i,x。scanf“ %d” ,&x。i=1。for 。 i=x/2 。if x%i=0 printf%d” ,i。i+。22、统计用数字 0-9 可以组成多少个各位上的数字没有重复的3 位偶数。#include mainint n=0,i,j,k。for i = 1。i =
21、 9。i+for k = 0。k = 8。 k+=2 if k .= ifor j = 0。j = 9。j+可编辑资料 - - - 欢迎下载精品名师归纳总结if j.=i&j.=k n+。可编辑资料 - - - 欢迎下载精品名师归纳总结printf“n=%dn” ,n。可编辑资料 - - - 欢迎下载精品名师归纳总结23、用 100 元换成 1、2、5 元的全部兑换方案。#include main int i,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
22、%2d” ,i,j,k。l = l + 1。if l%5=0 printf“n ” 。24、输出 1-100 之间中意每位数的乘积大于每位数的和的数#include main int n,k=1,s=0,m。for n=1。 n0 k *=m%10。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=0printf“ %3d %3d %3dn” ,i,j,k。26、以下程序
23、的功能是:判定一个四位数是否中意这样的条件:它的9 倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。#include main可编辑资料 - - - 欢迎下载精品名师归纳总结int i,a,b,c,d,m。fori=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。可编辑资料 - - - 欢迎下载精品名师归纳总结printfi=%d,i。27 、以下程序完成两整数的交换。#include main
24、int a,b。printf“请依次输入 a,b的值: ” 。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf“%d,%d ”, a=a+b。 b=a-b。&a,&b 。可编辑资料 - - - 欢迎下载精品名师归纳总结 a=a-b。printf“交换后: a=%d,b=%d ”,a,b。28 、以下程序的功能是判定输入的年份是否为闰年,如是就输出”yes ”,否就输出”No ”。#include mainint year。scanf“%d”,&year。if year%400=0|year%4=0&year%100.=0 printf“yes ” 。else printf“No ”
25、。29、以下程序利用冒泡排序法对输入的10 个数进行排序。#include #define N 10void main int a N。int i,j,t。printf input 10 numbers :n 。for i=0。iN 。 i+ scanf%d, &ai 。printfn。forj=0。jN-1。j+fori=0。iai+1 。 ai=ai+1 i+1 =t 。printf the sorted numbers :n 。fori=0。iN 。i+printf %d ,a i 。printf n 。30、用筛法求100 之内的素数。筛法素数的思想是:1、取最小的数2,并声明它是素数
26、,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及它的倍数。 3、重复步骤2 至筛中许多,得到全部的素数。#include#define M 100 /范畴#define N M+1/2 /奇数的个数=2。i+/*初始数组实现 第一步筛选*/voidmain inti,j,aN。a0fori=1。 iN-1ai=2*i+1。fori=1。iN-1。i+/*第二步筛选*/可编辑资料 - - - 欢迎下载精品名师归纳总结if ai.=0 forj=i+1。jN。j+可编辑资料 - - - 欢迎下载精品名师归纳总结if aj%ai=0 /*倍 数 时 置 零 筛 去*/可
27、编辑资料 - - - 欢迎下载精品名师归纳总结aj=0。are2-%d:n,M/*显示得到素数ai.=0 printfnTheprimer。fori=0,j=0。iN。 i+*/ifprintf%5d,ai。if+j%10=0/*十个数换行*/printfn。getch。31、用选择法对 10 个整数从小到大排序。#include #define N 10 mainint aN,i,j,k,t。for i=0。iN 。 i+ scanf“ %d”,&ai。for i=0。iN-1。i+k=i。forj=i+1。jN 。j+可编辑资料 - - - 欢迎下载精品名师归纳总结ifajak 可编辑资料
28、 - - - 欢迎下载精品名师归纳总结t=ak。 ak=ai。ai=t。 fori=0。iN 。i+ printf“ %d”,ai。32、求一个 N N 矩阵主对角线元素、次对角线之和。#define N 3 #include main int i=0,j=0,aNN,s1=0,s2=0。fori=0。iN 。i+forj=0。jN 。j+scanf%d,&aij。fori=0。iN 。i+forj=0。jN 。j+ifi=j s1+=aij。/主对角线ifi+j=N-1 s2+=aij。/次对角线printfs1=%d,s2=%dn,s1,s2。33、已有一个已排好的数组今输入一个数要求按原
29、先排序的规律将它插入数组中。#define N 10 #include main int i,t,aN=1,7,8,17,23,24,59,62,101。scanf%d,&t。fori=N-2。i0。i-可编辑资料 - - - 欢迎下载精品名师归纳总结iftai else break。ai=ai-1 。可编辑资料 - - - 欢迎下载精品名师归纳总结ai+1=t。fori=0。i10。i+ printf%5d,ai。34、将一个数组的值按逆序重新存放,例如,原先次序为:8, 6, 5, 4, 1。要求改为:1, 4, 5, 6,8。#include #define N 11 mainint i
30、,aN,tmp。fori=0。 iN 。i+ scanf%d,&ai。fori=0。 iN/2。i+ tmp=ai。可编辑资料 - - - 欢迎下载精品名师归纳总结ai=aN-i-1 。 aN-i-1 =tmp 。 fori=0。 iN 。i+printf%5d,ai。35、打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为816357492要求打印出由 1 n2 的自然数构成的魔方阵。#defineN3#include main int i,j,k,aNN。/*初 始 化 魔 方 阵 置 为0, 作 为 有 无 数 字 的 判 断 */fori
31、=0。iN。i+forj=0。jN。j+aij= 0。j=N/2。a0j=1。 /*存放第一个数字 */*存放2n*n*/ fork=2。k=N*N。k+i-。 /数存放前一数行数减1、列数加 1 j+=1。if i N-1 /到达右上角的位置i=i+2。 j-。 else 可编辑资料 - - - 欢迎下载精品名师归纳总结i= ifjN-1n-1。/上一数的行数为 0,下一数的行数为n-1ifi0可编辑资料 - - - 欢迎下载精品名师归纳总结j=0。/上 一 数 的 列 数 为 n-1时 , 下 一 数 的 列 数 为 0可编辑资料 - - - 欢迎下载精品名师归纳总结if aij.=0 /
32、如下一数的位置上已经有数字,可编辑资料 - - - 欢迎下载精品名师归纳总结/就下一数存到上一个数行数加1 的位置i=i+2%N。j=j-1+N%N。可编辑资料 - - - 欢迎下载精品名师归纳总结aij= k 。/填数可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0。iN。i+/输出魔方阵printf。forj=0。jN。j+ printf%4d,aij。printfnn。可编辑资料 - - - 欢迎下载精品名师归纳总结36、找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。#include #define M 5#define N 4 mainint aMN,i,j,x,y,k,max,min。/x,y分别是用来记录鞍点的位置int flag=0。 /用于指示是否存在鞍点fori=0。iM 。i+ forj=0。jN 。j+scanf%d,&aij。fori=0。 iM 。i+ max=a