当前位置:文档之家› 程序设计基础习题

程序设计基础习题

7.8习题1.编制一个 C 程序,从键盘输入一个正整数,如果该数为素数,则输出该素数,否则输出该数的所有因子(除去1 与自身)。

2.编制一个 C 程序,从键盘输入一个正整数N,然后计算并输出1 2 |N |S=1 2 2 2最后计算并输出T= 1 1213K( 1)11K其中K S 的整数部分。

3.编制一个 C 程序,计算并输出多项式的值5. ( 0.5 1)05.( 0.5 1)( 05.2)2 3 S 1 05.x x x n2!3! 5. ( 0.5 1) ( 0.5 n 1)n!x n的值,直到|S n-S n-1|<0.000001 为止。

其中x 从键盘输入。

4. 编制一个 C 程序,计算下列级数和:s n=1+(2/1)+(3/2)+(5/3)+(8/5)+(13/8)+ , +(a n/a n-1)其中n≥1,由键盘输入;s1=1。

5.编制一个 C 程序,计算并输出下列级数之和:xe 1 x2 3 n x x x 2! 3! n!其中n 与x 从键盘输入。

6.编制一个 C 程序,输出能写成两个数平方之和的所有三位数。

7.如果一个数恰好等于它的所有因子(包括1 但不包括自身)之和,则称之为“完数”。

例如,6 的因子为1、2、3,且1+2+3=6 ,即 6 是一个“完数”。

编制一个 C 程序,计算并输出1000 以内的所有“完数”之和。

8.编制一个 C 程序,从键盘输入30 个实数,分别计算并输出以下 5 个量:所有正数之和,所有负数之和,所有数的绝对值之和,正数的个数,负数的个数。

9. 100 元钱买100 只鸡,母鸡 3 元/只,公鸡 2 元/只,小鸡0.5 元/只。

编制一个 C 程序,制定买鸡方案。

10.设A,B,C,D,E 五人,每人额头上贴了一张或黑或白的纸。

五人对坐,每人都可以看到其他人额头上的纸的颜色,但都不知道自己额头上的纸的颜色。

五人相互观察后开始说话:A 说:我看见有三人额头上贴的是白纸,一人额头上贴的是黑纸。

B 说:我看见其他四人额头上贴的都是黑纸。

C 说:我看见有一人额头上贴的是白纸,其他三人额头上贴的是黑纸。

D 说:我看见四人额头上贴的都是白纸。

E 什么也没说。

现在已知额头上贴黑纸的人说的都是真话,额头上贴白纸的人说的都是假话。

编制一个 C 程序,确定这五人中谁的额头上贴白纸,谁的额头上贴黑纸?7.9寻找1000 以内最小的10 个素数与最大的10 个素数(去掉重复的素数),计算并输出这20 个素数之和。

具体要求:(1) 画出计算过程的结构化流程图。

(2) 虽然1000 以内素数个数超过20 个,但仍要求考虑1000 以内不够10 个最小素数与10 个最大素数,以及最小的10 个素数与最大的10 个素数有重复的情况。

(3) 输出要有文字说明。

输出形式为zuixiaosushu:素数1,素数2,, ,素数10zui da sushu:素数1,素数2,, 素数10sushuzhi he:和的具体值(4) 在程序内部加必要的注释(至少有三处)。

方法说明:对于某个(从小到大与从大到小)自然数k,开始时置标志flag 为0,然后对 2 到k 中的自然数j 进行检测,当发现j 是k 的因子,就置flag 为1,表示不必再对别的自然数进行检测,因为此时已经可以确定k 不是素数了,只有当 2 到k 中的所有自然数都不是k 的因子(即flag 保持为0)时,说明k 为素数,输出k,并进行累加。

7.10 A 、B、C、D、E 五人分苹果。

A 将所有的苹果分为五份,将多余的一个苹果吃掉后再拿走自己的一份苹果; B 将剩下的苹果分为五份,将多余的一个苹果吃掉后再拿走自己的一份苹果;C、D、E 依次按同样的方法,将剩下的苹果分为五份,吃掉多余的一个苹果后拿走自己的一份苹果。

编程计算原来至少有多少个苹果?A、B、C、D、E 各得到多少个苹果?具体要求:(1) 画出计算过程的结构化流程图。

(2) 输出要有文字说明。

(3) 在程序内部加必要的注释(至少有三处)。

方法说明:采用逐步试探的方法。

设当前试探的苹果数为n。

如果n 满足下列条件:n-1(多余的一个被吃掉)后要能被 5 整除;拿走一份后,余下的四份苹果数为4*(n-1)/5 。

按上述策略连续进行五次分配,如果每次分配时均满足其中的条件,则试探的n 即为原来的苹果数x。

为了第一次能分配,试探从 6 开始。

根据分配策略,最后 A ,B,C,D,E 五人得到的苹果数(不包括吃掉的一个苹果)可以按如下公式依次计算:a=(x-1)/5b=(4*a-1)/5c=(4*b-1)/5d=(4*c-1)/5e=(4*d-1)/57.11某单位要在A,B,C,D,E,F 六人中选派若干人去执行一项任务,选人的条件如下:(1) 若C 不去,则 B 也不去;(2) C 和D 两人中去一个;(3) D 和E 要么都去,要么都不去;(4) A,B,F 三人中要去两个;(5) C 和F 不能一起去:(6) E 和F 两人中至少去一个。

问应该选哪几个人去?具体要求:(1) 画出计算过程的结构化流程图。

(2) 输出要有文字说明。

(3) 在程序内部加必要的注释(至少有三处)。

8.5习题4. 编写一个函数sabc(),根据给定的三角形三条边长a,b,c,函数返回三角形的面积。

5. 编写一个计算阶乘值的函数p()(该函数为双精度实型);再编写一个主函数,从键盘输入两个正整数m 与n(m≥n),通过调用函数p(),计算m!(m n)!n )。

的值(即求A m6. 编写一个函数,计算并返回给定正整数m 与n 的最大公约数。

7. 编写一个主函数,调用例8.3 中的函数sushu(),输出小于1000 的最大五个素数。

8. 编写一个主函数,调用例8.3 中的函数sushu(),验证6 到1000 中的所有偶数均能表示成两个素数之和。

9. 编写一个递归函数,计算并返回菲波那契(Fibonacci)数列中第n 项的值。

菲波那契数列的定义如下:Fib(1)=1 ,Fib(2)=1Fib(n)=Fib(n-1)+Fib(n-2)10. 编写一个递归函数,计算并返回阿克玛(Ackermann) 函数值。

阿克玛函数的定义如下:x 1 n 0x n 1 y 0且Ack (n,x,y) 0 n 2 y 0且1 n 3 y 0且且2 n 4 y 0且Ack( n 1,Ack( n, x, y 1), x)n 0 y 0其中n,x,y 均为非负整数。

11. 编写计算n!的递归函数。

12. 编写一个递归函数,其功能是将一个正整数n 转换成字符串(要求各字符之间用一个空格分隔)输出。

例如,输入的正整数为735,应输出字符串“7 3 5”。

其中正整数在主函数中从键盘输入,要求判断其输入的合理性。

13. 计算并输出500 以内的所有“亲密数”对,并输出所有“完数”之和。

具体要求:(1) 编写一个函数facsum(n),返回给定正整数n 的所有因子(包括 1 但不包括自身)之和。

(2) 编写一个主函数,调用(1)中的函数facsum(n),寻找并输出500 以内的所有“亲密数”对以及计算所有“完数”之和。

(3) 分别画出函数facsum(n)和主函数计算过程的结构化流程图。

(4) 在输出每对“亲密数”时,要求小数在前、大数在后,并去掉重复的数对。

例如,220 与284 是一对“亲密数”,而284 与220 也是一对“亲密数”,此时只要求输出220 与284这对“亲密数”。

(5) 输出要有文字说明(英文或汉语拼音)。

输出时每对“亲密数”用一对圆括号括起来,两数之间用逗号分隔,且所有的“亲密数”对占一行。

输出形式为各对“亲密数”“完数”之和(6) 在程序内部加必要的注释(至少有三处)。

(7) 将两个函数分别放在两个文件中进行编译、连接并运行。

(8) 将两个函数放在一个文件中进行编译、连接并运行。

方法说明:如果自然数M 的所有因子(包括 1 但不包括自身,下同)之和为N,而N 的所有因子之和为M ,则称M 与N 为一对“亲密数”。

例如,6 的所有因子之和为1+2+3=6,因此,6 与它自身构成一对“亲密数”;又如,220 的所有因子之和为1+2+4+5+10+11+20+22+44+55+110=284 ,而284 的所有因子之和为1+2+4+71+142=220 ,因此,220 与284 为一对“亲密数”。

如果一个自然数的所有因子之和恰好等于它自身,则称该自然数为“完数”。

例如,6 不仅与它自身构成一对“亲密数”,且6 是一个“完数”。

7.12计算并输出k !的值。

具体要求:(1) 编写一个计算k!的递归函数,其函数名返回k!的值。

(2) 编写一个主函数,首先从键盘输入m 和n 的值(要求n≥m≥0),然后调用(1)中的函数计算k!的值。

(3) 在计算k!的递归函数中,要检查形参k的合理性,当k<0 时,应输出出错信息,并返回0 值。

(4) 在主函数中应检查从键盘输入的数据的合理性,对于不合理的输入,应输出出错信息,并不再调用计算。

(5) 分别输入(m, n)=(-3, 7), (0, 0), (1, 7), (9, 13), (9, 4) 运行你的程序。

14. 利用变步长梯形求积法计算定积分。

具体要求:(1) 编写一个函数st(a, b, eps()要求该函数放在独立的文件中),其功能是利用变步长梯积分形求积法计算定bs f (x) dxa其中eps 为精度要求。

要求画出该函数处理的结构化流程图(2) 编写一个主函数以及计算被积函数值的函数fun(x) ,在主函数中调用(1)中的函数st(a, b, eps),计算并输出下列积分值8 1s dx4x精度要求为eps=0.0001。

要求主函数与函数fun(x) 放在同一个文件中。

(3) 编写另一个主函数以及计算被积函数值的函数fun(x) ,在主函数中调用(1)中的函数st(a, b, eps),计算并输出下列积分值s 111 2x1dx精度要求为eps=0.00001。

同样要求主函数与函数fun(x) 放在同一个文件中。

方法说明:变步长梯形求积法的基本步骤如下:①利用梯形公式计算积分。

即取n=1,h=b-a则有n 1hTn [ f (x) f (x)]k k 12k 0其中x k=a+kh。

②将求积区间再二等分一次(即由原来的n 等分变成2n 等分),在每一个小区间内仍利用梯形公式计算。

即有T2n h2nk1[f (x )kf (x ) f (x) f2 2k0.5k15.(x k)1 ]n 1 n 1h h= [f(x) f (x)] f (x )k k 1 k 0.54 2k 0 k 0n 11 h= T f (x )n k 0.52 2k 0③判断二等分前后两次的积分值之差的绝对值是否小于所规定的误差。

相关主题