《C语言程序设计答案杜友福版 .docx》由会员分享,可在线阅读,更多相关《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;可编辑资料 - - - 欢
3、迎下载精品名师归纳总结printf*n;习题二一、选择题1 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. print
4、f、scanf2. h3.%5d4.05.e、E6.67.s、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 中原先的值给
5、 b, 把 b 中原先的值给c,把 c 中原先的值给a。#include void mainint 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 为整型
6、变量且其值大于零,请将以下if 语句改写成 switch 语句。可编辑资料 - - - 欢迎下载精品名师归纳总结ifa60 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;pri
7、ntfm=%dn,m;方法 2#include void mainint a,m; scanf%d,&a; m=0;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;可编辑资
8、料 - - - 欢迎下载精品名师归纳总结elseprintf%d is a even number.n,a;可编辑资料 - - - 欢迎下载精品名师归纳总结3. 编写程序,从键盘输入一个字符,判别它是否是小写字母,假如是,将它转换为大写字母。假如不是,不转换。然后输出最终得到的字符。#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=
9、4;else ifx100 n=3; else ifx10 n=2;else n=1; printf%dn,n;5. 当一个人的月收入在 3500 元以下时免税。 月收入在 3500 元到 5000 元之间时, 超过 3500 的部分纳税 3%。月收入在 5000 元以上时, 3500 至 5000 之间的部分纳税 3%,超过 5000 的部分纳税 10%。编写程序从键盘输入月收入 income ,运算并输出应交税款 tax。#include void mainint income;float tax; scanf%d,&income; ifincome=3500 tax=0;else ifi
10、ncome=5000 tax=0.03*income-3500;else tax=0.03*5000-3500+0.10*income-5000; printftax=%fn,tax;可编辑资料 - - - 欢迎下载精品名师归纳总结6. 回文是指正读和反读都一样的数或字符串。例如: 12321、55455、35553 等都是回文。 请编写一个程序,从键盘上读取一个包含五位数字的长整数,并判定它是否是回文。提示: 用除法运算和求余运算把一个数的个位、十位、百位、千位等分别别离出来。#include void mainlong x;int a,b,d,e; scanf%ld,&x;a=x/1000
11、0; 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;习题五一、阅读题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=4
12、3+03+73 。注:假设可编辑资料 - - - 欢迎下载精品名师归纳总结将题意改为打印出最大的或最小的“水仙花数”,就应将循环语句作如何调整?。#include void mainint a,b,c,k;fork=100;k=100;k-a=k/100;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
13、=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 mainint 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;
14、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 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 次落
15、的所经过的总路程。#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 。可编辑资料 - - - 欢迎下载精品名师归纳总结注:牛顿迭代公式为: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+
16、5; x=x-f/f1;whilefabsf0.00001; printfx=%f,f=%fn,x,f;8. 有这样一些真分数:其分子和分母都是两位正整数,且分子的个位数与分母的十位数相同,假如把该分数的分子的个位数与分母的十位数同时去掉,所得到的新的分数正好与原分数的值相等,如 26/65=2/5 。试编程求出全部中意上述条件的真分数。#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/
17、%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=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+可编辑资料 - - - 欢迎下载精品名师归
18、纳总结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=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 D1
19、1 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=abcde,str220=xyz;就执行语句:printf%d,strlenstrcpystr1,str2;的结果是。第 28 题答案 D 为: aaaabbbbcccc dddd二、填空题19、02. 先行后列3. 字符数组4. Q
20、uickC可编辑资料 - - - 欢迎下载精品名师归纳总结5. c=getchar 、A+i 或 65+i 6.0、str1i-str2i7CDABC869 10000010000010000010000011060011. AzyD12. 4 some string *test三、编程题1. 定义一个有 20 个元素的整型数组,分别求出下标为奇数和偶数的元素的平均值。#include #include 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;pri
21、ntfsum 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 mainint i,s,a20;fori=0;i20;i+ai=rand%100;scanf%d,&s; fori=0;i20;i+ifai=sprintffound:a%d=%dn,i,ai;可编辑资料
22、- - - 欢迎下载精品名师归纳总结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,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,a
23、i; 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; printfn;可编辑资料 - - - 欢迎下载精品名师归纳总结5. 将一个二维数组的行、列互换后存到另一个二维数组中并输出结果。#include void mainint i,j;in
24、t 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. 编一程序,在一个二维数组中,查找第一次显现的负数,并输出该数及其所在的行、列号。#include void mainint i,j,flag;int a34=1,3,5,7,9,11,13
25、,-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; printfn;7. 编程将一个字符数组中的字母,按由大到小的次序
26、进行排序。#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可编辑资料 - - - 欢迎下载精品名师归纳总结ifsi= elsei+;w=0;/*en
27、d 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+pr
28、intf%4d,ai-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. 求二维数组中这样一个元
29、素的位置:它在行上最小,在列上也最小。假如没有这样的元素就输出相应的信息。#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;brea
30、k; ifflag fz+; printfmin a%d%d=%dn,i,j,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=
31、0;jN;j+elseaij=ai-1j-1;可编辑资料 - - - 欢迎下载精品名师归纳总结printf%4d,aij; printfn;13. 已知 A 是一个 3 4 的矩阵, B 是一个 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
32、; printfn;printfarray B4*5:n; fori=0;i4;i+forj=0;j5;j+printf%4d,bij; printfn;fori=0;i3;i+ forj=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. 编程输出两个字符串中对应位置上相同
33、的字符。#include void mainint i;char a81=acbsbdvhfejbvewvkbewljbv; char b81=anbdxwdbviuerkjvbfidbvuie bik; printfstring1: %sn,a;printfstring2: %sn,b; printfstring3: ;i=0;whileai.=0 & bi.=0ifai=biprintf%c,ai; i+;printfn;15. 设有一字符串已按升序排列在字符数组a 中,请将另一字符串 b 中的字符按升序的规律插到数组 a 中。#include #include string.hvoid
34、mainint i,j,k;char a81=acdfhjklmopxz; char b81=anbdx; printfstring1: %sn,a; printfstring2: %sn,b; i=0;whilebi.=0可编辑资料 - - - 欢迎下载精品名师归纳总结j=0;whileaj=j 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+;els