《2022年C语言程序设计答案杜友福版.docx》由会员分享,可在线阅读,更多相关《2022年C语言程序设计答案杜友福版.docx(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源C 语言程序设计 第三版 习题答案习题一一、名词说明1程序 P1 2程序设计 P13机器语言 P1 4高级语言 P25汇编程序P3 6编译程序P47算法 P58结构化程序设计方法 P10二、简答题1. 设计程序时应遵循哪些基本原就?P4答:正确性、牢靠性、简明性、有效性、可爱护性、可移植性;2. 算法具有哪些特点?答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出;3. 算法的表示形式有哪几种?答:自然语言、伪代码、传统流程图、N-S 流程图、电脑语言;4. 结构化程序设计方法的三种基本结构是什么? 答:次序结构、选择结构和循环结构;5. 传统流程图与N-S 流程图最大
2、的区分是什么?答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简洁;三、用传统流程图或N-S 流程图表示求解以下问题的算法;1. 从键盘输入 10 个整数,求出其中的最小数并输出;2. 求 1+2+3+100 的值;3. 求 1050 的全部素数之和;欢迎下载精品学习资源4. 求以下分段函数的值;四、请参照本章例题,编写一个简洁的C 程序,输出以下三行信息;* Yangtze University*#include void mainprintf*n; printfYangtze Universityn;欢迎下载精品学习资源printf*n;习题二一、选择题1
3、10: B C D C D D B C A A11 20:D A C D B D B A C D二、填空题1. 字母L或字母l2. %c或字符 、%d或整数 3. 在程序运行过程中,其值可以在确定的范畴内变化的量405小数形式、指数形式6关键字、预定义标识符、用户标识符7字母、数字、下划线、数字81892、1、3010. 双精度实数或double11. 赋值、逗号、 20 、 20、 20、 4124、4习题三一、选择题1 10:B C C B C C C D C C注:第 4 题答案 D 为: 102233二、填空题1. printf、scanf2. h3.%5d4.05.e、E6.67.s
4、、c8.*9.-、+10.i三、编程题1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出;例如输入的时间为4258 秒,就输出结果为: 1 小时 10 分 58 秒;#include 欢迎下载精品学习资源void mainint x,h,m,s; scanf%d,&x;h=x/3600; m=x%3600/60; s=x%60;printf%ds=%d:%d:%d.n,x,h,m,s;2. 编写程序,读入三个整数给变量a、b、 c,然后交换它们中的数,把a 中原先的值给 b, 把 b 中原先的值给c,把 c 中原先的值给a;#include void ma
5、inint a,b,c,t; printfinput a b c:;scanf%d%d%d,&a,&b,&c;printfa=%d,b=%d,c=%dn,a,b,c; t=a;a=c;c=b;b=t; printfa=%d,b=%d,c=%dn,a,b,c;习题四一、填空题11、02!3x=0=.=&|=40、2520、0、0二、选择题17: D D C A D D C三、程序阅读题1.5959592.0.5000003.14.25.66a=2,b=17pass warn8.1四、编程题1. 设 a 为整型变量且其值大于零,请将以下if 语句改写成 switch 语句;欢迎下载精品学习资源if
6、a60 m=1;else ifa70 m=2;else ifa80 m=3;else ifa90 m=4;else m=5;方法 1#include void mainint a,m;scanf%d,&a; switcha/10case 0:case 1:case 2:case 3: case 4:case 5:m=1;break; case 6:m=2;break;case 7:m=3;break; case 8:m=4;break; default:m=5;break;printfm=%dn,m;方法 2#include void mainint a,m; scanf%d,&a; m=0;
7、switcha/10default:m+;case 8:m+; case 7:m+; case 6:m+;case 5:case 4:case 3:case 2:case 1:case 0:m+;printfm=%dn,m;2. 编写程序,从键盘输入一个整数,打印出它是奇数仍是偶数;#include void main欢迎下载精品学习资源int a;scanf%d,&a; ifa%2=1printf%d is a odd number.n,a;欢迎下载精品学习资源elseprintf%d is a even number.n,a;欢迎下载精品学习资源3. 编写程序,从键盘输入一个字符,判别它是
8、否是小写字母,假如是,将它转换为大写字母;假如不是,不转换;然后输出最终得到的字符;#include void mainchar ch;scanf%c,&ch; ifch=a & ch=zch=ch-32; printf%cn,ch;4. 编写程序,从键盘输入一个不多于4 位的正整数,打印出它是几位数;#include void mainint x,n;scanf%d,&x; ifx1000 n=4;else ifx100 n=3; else ifx10 n=2;else n=1; printf%dn,n;5. 当一个人的月收入在 3500 元以下时免税; 月收入在 3500 元到 5000
9、元之间时, 超过 3500 的部分纳税 3%;月收入在 5000 元以上时, 3500 至 5000 之间的部分纳税 3%,超过 5000 的部分纳税 10%;编写程序从键盘输入月收入 income ,运算并输出应交税款 tax;#include void mainint income;float tax; scanf%d,&income; ifincome=3500 tax=0;else ifincome=5000 tax=0.03*income-3500;else tax=0.03*5000-3500+0.10*income-5000; printftax=%fn,tax;欢迎下载精品学习
10、资源6. 回文是指正读和反读都一样的数或字符串;例如: 12321、55455、35553 等都是回文; 请编写一个程序,从键盘上读取一个包含五位数字的长整数,并判定它是否是回文;提示: 用除法运算和求余运算把一个数的个位、十位、百位、千位等分别别离出来;#include void mainlong x;int a,b,d,e; scanf%ld,&x;a=x/10000; b=x%10000/1000; d=x%100/10; e=x%10;ifa=e & b=dprintf%ld is huiwen.n,x; elseprintf%ld is not huiwen.n,x;习题五一、阅读题
11、1.82.43213.X4.-15.236.527.58.3二、填空题118223b=i+14175i=9、j%3.=06d=1.0、k=k+1、k=10三、选择题18: A D D A B D D A四、编程题1. 编写程序,打印出全部的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方之和等于该数本身;例如,407 是一个“水仙花数” ,由于 407=43+03+73 ;注:假设欢迎下载精品学习资源将题意改为打印出最大的或最小的“水仙花数”,就应将循环语句作如何调整?;#include void mainint a,b,c,k;fork=100;k=100;k-a=k/100;
12、b=k/10%10;c=k%10;ifk=a*a*a+b*b*b+c*c*cprintf%5d,k;/ 求最大或最小”水仙花数”时增加一个语句:break;printfn;2. 编写程序,输出 1980 2880 年全部闰年的年号;每输出5 个年号换一行;#include void mainint k,flag,n=0;fork=1980;k=2880;k+ flag=k%4=0&k%100.=0|k%400=0;ifflagprintf%5d,k;n+; ifn%10=0printfn;printfn;3. 编写程序,求1-3+5-7+ -99+101 的值;#include void ma
13、inint n,t=1,s=1;forn=3;n=101;n+=2 t=-t; s=s+t*n; printfs=%dn,s;欢迎下载精品学习资源4. 编写程序,运算并输出以下级数的前n 项之和 Sn;n 的值从键盘输入;#include void mainint fz,fm,n,i;float s,t;fz=2;fm=1;s=0; scanf%d,&n; fori=1;i=n;i+t=1.0*fz/fm;s=s+t;fz=fz+fm; fm=fz-fm;printfs=%fn,s;5编写程序,求 e 的值 e=1+1/1.+1/2.+1/3.+1/4.+1/n. #include void
14、mainint n,i;float t,fm=1,e=1; scanf%d,&n; fori=1;i=n;i+ fm=fm*i; t=1.0/fm; e=e+t; printfn=%d,e=%fn,n,e;6. 已知某球从 80 米高度自由落下, 落地后反复弹起, 每次弹起的高度都是上次高度的一半;求此球 8 次落地所经过的总路程;#include void mainint n;float s=80,h=s/2;forn=2;n=8;n+s=s+2*h;h=h/2;printfs=%fn,s;7. 用牛顿迭代法求高次方程fx=2x3-4x2+5x-18=0 的根约为 2.466 ;欢迎下载精品
15、学习资源注:牛顿迭代公式为:x2=x1-fx1/f x1,其中 f x1为导函数在点x1 的值;#include #include void mainfloat x,f,f1;x=8;/ x 的初值可为任意值do f=2*x*x*x-4*x*x+5*x-18; f1=6*x*x-8*x+5; x=x-f/f1;whilefabsf0.00001; printfx=%f,f=%fn,x,f;8. 有这样一些真分数:其分子和分母都是两位正整数,且分子的个位数与分母的十位数相同,假如把该分数的分子的个位数与分母的十位数同时去掉,所得到的新的分数正好与原分数的值相等,如 26/65=2/5 ;试编程求
16、出全部中意上述条件的真分数;#include void mainint a,b,c;/设这个分数为 ab/bc fora=1;a=9;a+forb=1;b=9;b+ forc=1;c=9;c+ifac&1.0*a/c=a*10.0+b/b*10.0+c printf%d/%d=%d%d/%d%d=%fn,a,c,a,b,b,c,1.0*a/c;9. 编写程序, 求数列: 1,1+1/2 ,1+1/2+1/3 ,1+1/2+1/3+1/4 ,1+1/2+1/3+1/4+1/5 , 的前 10 项之和;#include void mainfloat s,t;int i; s=0,t=0;fori=
17、1;i=10;i+ t=t+1.0/i; s=s+t; printfs=%fn,s;10. 编写程序,求 3 到 100 之间的全部素数之和;#include void mainint s,i,k,flag;s=0;fori=3;i=100;i+欢迎下载精品学习资源flag=1;fork=2;ki;k+ifi%k=0 flag=0; break; 欢迎下载精品学习资源ifflag s=s+i; printf%4d,i; printfnsum=%dn,s;11. 编写程序,求 Fibonacci 数列中大于 800 的最小的一个数 结果为 987;#include void mainint f1
18、=1,f2=1,f3;whilef3=800f3=f1+f2;f1=f2; f2=f3;printfFibonacci数列中大于 800 的最小数是 %5dn,f3;习题六一、选择题110: D D C B A B C D C D11 20: A B B C C D C A B B21 30: B B D D D D C D C A注:第 16 题答案 C 为:字符串 SHORT与SHORT 相等第 19 题题目为:已知: char str110,str210=books;就在程序中能够将字符串books 赋给数组 str1 的正确语句是;第 21 题题目为:设有: char str120=a
19、bcde,str220=xyz;就执行语句:printf%d,strlenstrcpystr1,str2;的结果是;第 28 题答案 D 为: aaaabbbbcccc dddd二、填空题19、02. 先行后列3. 字符数组4. QuickC欢迎下载精品学习资源5. c=getchar 、A+i 或 65+i 6.0、str1i-str2i7CDABC869 10000010000010000010000011060011. AzyD12. 4 some string *test三、编程题1. 定义一个有 20 个元素的整型数组,分别求出下标为奇数和偶数的元素的平均值;#include #in
20、clude void mainint i,s0=0,s1=0,a20; fori=0;i20;i+ai=rand%100;fori=0;i20;i+=2printf%3d,ai; s0=s0+ai;printfsum is:%dave=%fn,s0,s0/10.0; fori=1;i20;i+=2printf%3d,ai; s1=s1+ai;printfsum is:%dave=%fn,s1,s1/10.0;2. 设有一个整型数组,另输入一个整数,编程查找这个整数是否在数组中显现过,假设显现,就输出第一次显现的位置,否就,输出no found ;#include #include void m
21、ainint i,s,a20;fori=0;i20;i+ai=rand%100;scanf%d,&s; fori=0;i20;i+ifai=sprintffound:a%d=%dn,i,ai;欢迎下载精品学习资源break;ifi=20printfno foundn; fori=0;i20;i+printf%3d,ai; printfn;3. 设有一个已排好序的数组,今输入一个数,要求按原先排序的规律将它插入到数组中;#include #define N 10void mainint i,j,s;/int aN=1,3,5,7,9,11,13,15,17;int aN=17,15,13,11,
22、9,7,5,3,1;scanf%d,&s; i=0;ifa0ai i+;elsewhilesi;j-aj=aj-1; aj=s; fori=0;iN;i+printf%3d,ai; printfn;4. 编一程序,从一个已排好序的数组中删去某个位置上的元素;#include #define N 10void mainint i,j;int aN=1,3,5,7,9,11,13,15,17,19;fori=0;iN;i+ printf%3d,ai;printfn;scanf%d,&i; forj=i;jN-1;j+aj=aj+1;fori=0;iN-1;i+printf%3d,ai; print
23、fn;欢迎下载精品学习资源5. 将一个二维数组的行、列互换后存到另一个二维数组中并输出结果;#include void mainint i,j;int a34=1,3,5,7,9,11,13,15,17,19,21,23,b43;fori=0;i4;i+ forj=0;j3;j+bij=aji; printfarray a:n; fori=0;i3;i+forj=0;j4;j+printf%5d,aij; printfn;printfarray b:n; fori=0;i4;i+forj=0;j3;j+printf%5d,bij; printfn;6. 编一程序,在一个二维数组中,查找第一次显
24、现的负数,并输出该数及其所在的行、列号;#include void mainint i,j,flag;int a34=1,3,5,7,9,11,13,-15,17,19,-21,23;flag=0; fori=0;i3;i+forj=0;j4;j+ ifaij0欢迎下载精品学习资源flag=1;printffound:a%d%d=%dn,i,j,aij; i=j=100;/ 可使双重循环提前终止欢迎下载精品学习资源ifflag=0printfno found.; printfarray a:n;欢迎下载精品学习资源fori=0;i3;i+forj=0;j4;j+printf%5d,aij; p
25、rintfn;7. 编程将一个字符数组中的字母,按由大到小的次序进行排序;#include #include void mainchar t,s=ABCDIVBHFBVCNLKFDB;int i,j,n;putss; n=strlens; fori=0;in-1;i+forj=i+1;jn;j+ ifsisj t=si;si=sj;sj=t; putss;8. 输入一行字符,统计其中有多少个英语单词,单词之间用空格隔开;#include #include void mainchar s81;int w,i,n;getss; i=0;n=0;w=0;whilesi.=0欢迎下载精品学习资源ifs
26、i= elsei+;w=0;/*end of a word*/ ifw=0w=1;n+;/*begin of a word*/欢迎下载精品学习资源printfnumber of word:%dn,n;9. 编程将两个一维数组中的对应元素的值相减后进行输出;#include 欢迎下载精品学习资源#include void mainint i,a10,b10;fori=0;i10;i+ ai=rand%100;printf%4d,ai; printfn;fori=0;i10;i+ bi=rand%100;printf%4d,bi; printfn;fori=0;i10;i+printf%4d,ai
27、-bi; printfn;10. 有 n 个无序的数放在数组a 中,请将相同的那些数删得只剩得一个,输出经过删除后的数据;#include void mainint i,j,k,a10=90,20,40,30,50,50,50,50,20,80;fori=0;i10;i+ printf%4d,ai;printfn; fori=0;i9;i+forj=i+1;j10;j+ ifaj=ai aj=-888; k=0;fori=0;i10;i+ifai.=-888printf%4d,ai;ak+=ai;/ 不相同的有效元素只有K 个了printfn;11. 求二维数组中这样一个元素的位置:它在行上最
28、小,在列上也最小;假如没有这样的元素就输出相应的信息;#include #include void mainint j,i,k,flag,fz=0,a45; fori=0;i4;i+欢迎下载精品学习资源forj=0;j5;j+aij=rand%100;printf%4d,aij;printfn;fori=0;i4;i+forj=0;j5;j+欢迎下载精品学习资源flag=1;fork=0;k5;k+ ifaikaij flag=0;break; fork=0;k4&flag;k+ifakjaij flag=0;break; ifflag fz+; printfmin a%d%d=%dn,i,j
29、,aij; 欢迎下载精品学习资源iffz=0printfno found.;111112111132111432115432112. 在一个二维数组中形成并输出如下矩阵:A=#include #define N 5void mainint j,i,aNN;fori=0;iN;i+ forj=0;jN;j+欢迎下载精品学习资源ifi=jaij=1; else ifj=0aij=i+1;欢迎下载精品学习资源fori=0;iN;i+forj=0;jN;j+elseaij=ai-1j-1;欢迎下载精品学习资源printf%4d,aij; printfn;13. 已知 A 是一个 3 4 的矩阵, B
30、是一个 4 5 的矩阵,编程求 A B 得到的新矩阵 C,并输出 C 矩阵;#include void mainint j,i,k,a34=1,2,3,4,5,6,7,8,9,10,11,12;int b45=3,2,1,5,4,4,3,2,5,1,2,3,5,4,1,7,8,5,6,9,c35;printfarray A3*4:n; fori=0;i3;i+forj=0;j4;j+printf%4d,aij; printfn;printfarray B4*5:n; fori=0;i4;i+forj=0;j5;j+printf%4d,bij; printfn;fori=0;i3;i+ forj
31、=0;j5;j+欢迎下载精品学习资源cij=0; fork=0;k4;k+cij+=aik*bkj;欢迎下载精品学习资源printfarray C3*5=A * B:n; fori=0;i3;i+forj=0;j5;j+printf%4d,cij; printfn;欢迎下载精品学习资源14. 编程输出两个字符串中对应位置上相同的字符;#include void mainint i;char a81=acbsbdvhfejbvewvkbewljbv; char b81=anbdxwdbviuerkjvbfidbvuie bik; printfstring1: %sn,a;printfstring
32、2: %sn,b; printfstring3: ;i=0;whileai.=0 & bi.=0ifai=biprintf%c,ai; i+;printfn;15. 设有一字符串已按升序排列在字符数组a 中,请将另一字符串 b 中的字符按升序的规律插到数组 a 中;#include #include string.hvoid mainint i,j,k;char a81=acdfhjklmopxz; char b81=anbdx; printfstring1: %sn,a; printfstring2: %sn,b; i=0;whilebi.=0欢迎下载精品学习资源j=0;whileaj=j
33、ak+1=ak;k-; aj=bi; i+;欢迎下载精品学习资源printfstring3: %sn,a;16. 将已按升序排列的两个字符串a 和 b 中的字符按升序归并到字符数组c 中;#include #include string.hvoid mainint i,j,k;char a81=acdfhjklmopxz; char b81=abdnx;char c81;printfstring1: %sn,a; printfstring2: %sn,b; i=0;j=0;k=0;whileai.=0&bj.=0ifaibjck+=ai+;elseck+=bj+;whileaick+=ai+;
34、whilebjck+=bj+;ck=0;printfstring3: %sn,c;习题七一、选择题110: D C D B D B C A A B11 19:B B A B A D A B A二、填空题1. 声明2. 自动将其转换为函数定义时的类型3104. i=n、s、 0、fk5. Itis62721702468k、-1欢迎下载精品学习资源92、210p=j、xip、 LineMaxx115122413agen-1+2、agen14m%10、m/10、m 或 m.=0、rm三、编程题1. 编一函数,判定某年是否为闰年,假设是返回1,否就返回 0;#include int funint m return m%4=0&m%100.=0|m%400=0; void mainint n;scanf%d,&n; iffunnprintfyear:%d is a leap.n,n;2. 编写运算三角形面积的程序,将运算面积定义成函数;三角形面积公式为:A=式中 s=a+b+c/2其中 A 为三角形面