《2022年C语言程序设计方案习题库答案.docx》由会员分享,可在线阅读,更多相关《2022年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;欢迎下载精品学习资源printf ” Cl=%.2fSa=%.2fSb=%.2fV
2、a=%.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;ifx1 /* x1 */y=x ;printfx=%3d, y=x=%dn,x,y; else if x10/*
3、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;scanf%d,&x;ifx=1 & x10 y=2*x-1; else y=3*x-11; printf%dn,y;# include stdio
4、.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;,y;4、给定一个不多于5 位的正整数,要求:求它是几位数;按逆序打印出各位数字;例如原数为 321,应输出 123;#include mainlong int num,m
5、=0; int i=0;scanf%ld,#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欢迎下载精品学习资源 elsemax=c ;ifac max=a ;elsemax=c ;ifbc max=b ;else欢迎下载精品学习资源printfmax= %d,max;#include main欢迎下载精品学习资源int
6、 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;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,
7、%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欢迎下载精品学习资源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
8、%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 、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数;#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;欢迎下载精品学习
9、资源8 、 求 Sn=a+aa+aaa+ +aa aaa ( 有 n个 a )之 值, 其 中 a 是一个数 字; 例如 :2+22+222+2222+22222( n=5), n 由键盘输入;#include mainint 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 、打印出全部 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该本身;例如: 153 是一个水仙花数,由于153=13+53+33 ;【程序 1】#incl
10、ude 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 mainint 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 是 完数
11、;编程序找出1000 之内的全部完数,并按下面格式输出其因子: 6itsfactorsare1、2、3欢迎下载精品学习资源#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,
12、s;dos=1.0/2*i-1 ;sum+=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 高度自由下落,每次落地后返回原高度的一半,再落下;求它在第10 次落地时共经过多
13、少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;whilei+Nsum=sum+1*2;pri
14、ntfsum=%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 邻近的根;欢迎下载精品学习资源#include #define fx 2*x*x*x-4*x*x+3*x-6 maindouble
15、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*x-6 maindouble x1=-10,x2=10,x,y;dox=x1+x2/2;y=fx;ify1e-6;printfx=%gn,x;17、以下程序的功能是:输入一个百分制成果,输出一个五级制成果等级;例如输入75,输出 C;请完成填
16、空#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“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、该程序功
17、能:对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 ;欢迎下载精品学习资源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
18、printf%d, else printf%d, s/100 ;a+b ;欢迎下载精品学习资源20、有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数;#include 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;
19、i+;22、统计用数字 0-9 可以组成多少个各位上的数字没有重复的3 位偶数;#include mainint n=0,i,j,k;for i = 1;i = 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*
20、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 之间中意每位数的乘积大于每位数的和的数#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
21、=0printf“ %3d %3d %3dn” ,i,j,k;26、以下程序的功能是:判定一个四位数是否中意这样的条件:它的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 mainint
22、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 ” ;29、以下程序利用冒泡排序法对输入的10 个数进行排序;#in
23、clude #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,并声明它是素数,同时筛去它及它的倍数;2、取未筛去数中最小的数,并声明它是素数
24、,同时筛去它及它的倍数; 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 /*倍 数 时 置 零 筛 去*/欢迎下载精品学习资源aj=0;are2-%d:n,M/*显示得到素数ai.=0 printfnTheprimer;fori
25、=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 欢迎下载精品学习资源t=ak; ak=ai;ai=t; fori=0;iN ;i+ printf“ %d”,ai;32、求一个 N N 矩阵主对角线元素、次对角线之和;#define N
26、 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、已有一个已排好的数组今输入一个数要求按原先排序的规律将它插入数组中;#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-
27、欢迎下载精品学习资源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,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、打印“魔方阵
28、”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等;例如,三阶魔方阵为816357492要求打印出由 1 n2 的自然数构成的魔方阵;#defineN3#include main int i,j,k,aNN;/*初 始 化 魔 方 阵 置 为0, 作 为 有 无 数 字 的 判 断 */fori=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 欢迎下载精品
29、学习资源i= ifjN-1n-1;/上一数的行数为 0,下一数的行数为n-1ifi0欢迎下载精品学习资源j=0;/上 一 数 的 列 数 为 n-1时 , 下 一 数 的 列 数 为 0欢迎下载精品学习资源if aij.=0 /如下一数的位置上已经有数字,欢迎下载精品学习资源/就下一数存到上一个数行数加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、找出一个二位数组中的鞍点,即该位置上的元
30、素在该行上最大,在该列上最小,也可能没有鞍点;#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=ai0; y=0; /先默认第一个数是最大值fork=1;kN ;k+ifmaxaik y=k; max=aik ; min=aiy; x=i; /先默认第一个数是最小值fork=0;kaky x=k; min=aky ;欢迎下载精品
31、学习资源if i=kprintfa%d%d=%d是鞍点 n,x,y,axy;flag=1;欢迎下载精品学习资源if flag =0 printf“不存在鞍点 n ” ;37、有个 15 数按由小到大次序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值;假如该数不在数组中,就打印出 无此数 #include #define N 15 mainint low,high,mid,x;int aN=1,4,9,13,21,34,55,89,144,233,377,570,671,703,812;low=0,high=N-1;scanf%d,&x;domid=low+high/2
32、 ;ifamid=x break;欢迎下载精品学习资源else ifamidx low= else high= mid-1;mid+1;欢迎下载精品学习资源whilelow=high;iflow=high printfx is the %dth numbern,mid+1;欢迎下载精品学习资源else printfx not exist in the arrayn;38、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开;#include void main char string81 ;int i, num=0 , word=0 ;char c;getsstring;欢迎下载精品学习资源for i=0;c=string i ifc= word=0;else ifword=0 .= 0 ;i+欢迎下载精品学习资源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 10 mainint i,n,k,aN=1;printf“ %5