C 语言实训教程
----选择专项练习
能够熟练并正使用 if 语句,if…else 语句,if…else if…else…语句解决实际问题;
能够使用 switch…case 语句解决实际问题;
能够掌握并使用各种分支语句嵌套及分支与循环语句嵌套。
(下面 1、2 可以选做其中一个)
完数
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2
+3.编程找出 1000 以内的所有完数,并输出其所有因子。
水仙花数
打印出所有的“水仙花数”,所谓 “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次方
+5 的三次方+3 的三次方。
1. 程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。
亲密数
如果整数 A 的全部因子(包括 1,不包括 A 本身)之和等于 B;且整数 B 的全部因子(包括 1,不包括 B 本身)之和等于 A,则将整数 A 和 B 称为亲密数。求 3000以内的全部亲密数。输出亲密数对例如:A..B
算法分析:
按照亲密数定义,要判断数 a 是否有亲密数,只要计算出 a 的全部因子的累加和为 b,再计算 b 的全部因子的累加和为 n,若 n 等于 a 则可判定 a 和 b 是亲密数。
计算数 a 的各因子的算法:
用 a 依次对 i(i=1~a/2)进行模运算,若模运算结果等于 0,则 i 为 a 的一个因子;否则 i 就不是 a 的因子。
互不相同且无重复数字的三位数
有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?一共有多少个?
1. 程序分析:可填在百位、十位、个位的数字都是 1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
猴子分桃子
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
有 n 个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。
1. 程序分析:
首先不要将思维局限在一圈人,可以先将 n 个人看做一排,即作为一个数组,为这个数组的每一个元素(即人)编号,第 0 个人就编号 1,以此类推。有了编号之后可以这样:让第一个人开始报数,到第三个人喊 3 的时候,将其编号重置为 0,并且将喊的那个数重置 0(即让下一个人喊的时候又从 1 开始),如此这么循 环(循环的条件就是留下的人至少为一个)。有一点要注意的就是,当指针访问到最后一个人的时候,由于题目要求是围成一圈,而我们这里是一排,所以要重置指针,使其指向排头。
7. 一个偶数总能表示为两个素数之和。
1.程序分析:输入一个素数,先找一个素数,然后判断另一个数是否素数,如果不是,依次寻找下去。
加密电话
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
怎样存钱利最大
假设银行整存整取存款不同期限的月息利率分别为:
0.63% 期 限 =1 年
0.66% 期 限 =2 年
0.69% 期 限 =3 年
0.75% 期 限 =5 年
0.84% 期 限 =8 年
利息=本金*月息利率*12*存款年限。
现在某人手中有 2000 元钱,请通过计算选择一种存钱方案,使得钱存入银
行 20 年后得到的利息最多(假定银行对超过存款期限的那一部分时间不付利息)。算法分析:
为了得到最多的利息,存入银行的钱应在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样不断地滚动直到满 20
年为止,由于存款的利率不同,所以不同的存款方法(年限)存 20 年得到的利息是不一样的。
分析题意,设 2000 元存 20 年,其中 1 年存 i1 次,2 年存 i2 次,3 年存 i3
次,5 年存 i5 次,8 年存 i8 次,则到期时存款人应得到的本利合计为:
2000*(1+rate1)i1*(1+rate2)i2*(1+rate3)i3*(1+rate5)i5*(1+rate8)i8
其中 rateN 为对应存款年限的利率。根据题意还可得到以下限制条件:
0<=i8<=2
0<=i5<=(20-8*i8)/5
0<=i3<=(20-8*i8-5*i5)/3
0<=i2<=(20-8*i8-5*i5-3*i3)/2
0<=i1=20-8*i8-5*i5-3*i3-2*i2
可以用穷举法穷举所有的 i8、i5、i3、i2 和 i1 的组合,代入求本利的公式计算出最大值,就是最佳存款方案。
分数四则运算
对输入的两个分数进行+、-、*、/四则运算,输出分数结果。 算法分析:
对分数 b/a 与 d/c,不管哪一种运算,其运算结果均为 y/x 形式。对结果 y/x进行化简,约去分子分母的公因数:试用 i(i=1,...,y)对 y,x 进行试商,若能同时整除 y,x,则 y,x 同时约去公因数 i,最后打印约简的分数。
将长整型数中每一位上为奇数的数依次取出,构成一个新数放在 t 中。高位仍在高位,低位仍在低位。
例如:当 s 中的数为:87653142 时,t 中的数为: 7531。