1、湖南省计算机二级 C 语言程序题复习指导【题型一】在一定范围内求满足条件的整数个数(或求最大最小值、求和) 。【求解方法】利用循环,对指定范围内的每一个整数进行条件判断。【易错点】统计整数个数或求和的变量未赋初值。一般应赋初值0。求和时变量类型错误,造成数据溢出。建议用于整数求和的变量均定义为 long 类型。数据过大时,用 double 类型。【程序示例】1、编写程序,计算 050 范围内有多少个数,其每位数字之积小于每位数字和。分析:一位数显然不满足条件。求解思路是:(1)k=10,n=0(k 作循环变量,n 统计满足条件的数据个数)(2)取 k 的十位数字 a 和个位数字 b:a=k/1
2、0,b=k%10(3)如果 ab50 则输出 n 的值,程序结束。否则转 (2)参考代码(n=17):main() int k,a,b,n=0;for(k=10;kk/2 则转(3),否则转 B(k 的最大因子不超过 k/2)(3)如果 s 与 k 相等,则 n+(4)确定下一个整数是否为完数:k+(5)如果 k10000 则输出 n,程序结束。否则转 (2)参考代码(n=4):main() int k, s,i,n=0; for(k=6;kBC,130BC,A+B+CA+B2BB130if(n=10)break;printf(“%d“,y);也可不使用 sqrt 函数,如:k=2;while
3、(k*ky) n+;if(n=10)break;7、A+B、A-B 均为平方数的两个正整数(AB)称为自然数对。求1,100中所有这样的自然数对中 B 的和。方法一:对 A、B 分别进行穷举搜索求解。#include “math.h“main()/*参考答案:1160 */ int a,b,x,s=0;for(a=2;a60 故 a30*/for(b=1;b60printf(“%d“,n); 解法二:设另两边为 a、b,则:(1)a+b60 (两边之和大于第三边)(2)a!=b。可假定 ab,则 3051;k-) /*51 为 2698 开方取整*/if(2698%k=0)if(2698/k+
4、k=sqrt(2698),即 B=52。因此可对 B 在52,2698上从左向右搜索,一旦 B 整除 2698,即停止搜索。main() int b=52;while(2698%b) b+;printf(“%d“,b); 5、求共有几组 i,j,k 符合算式 ijk+kji=1534。其中 i,j,k 均为0,9上的整数且 i=4?main( ) /*参考答案:19 */ float i=1;int j=0;while (i96)f=32;else f=0;x-=f;(2)将字符依次编号:A-0、B-1、Z-25:x=x-65(3)对 k 值进行调整,以方便后续算法的设计:k%=26;if(k
5、96)f=32;x-=f+65;k%=26;if(k1)main() int x,n=0;for(x=203;x1)main() int k,n=0;for(k=120;k1000 则输出和值 s,程序结束。否则转(2)main()int s=0,t,n;long k;for(k=2;k=1000;k+) t=1;n=k;while(n)t*=10,n/=10;if(k*k-k)%t=0)s+=k;printf(“%d“,s);参考答案:11133、某些分数的分子分母都是二位正整数的真分数,如果将分子的两位数字相加作分子,分母两位数字相加作分母,得到的分数值不变。求这些分数的分子与分母的总和。
6、分析:设分子为 x,分母为 y,则 xy(真分数) 。可先对 x在区间10,99)上穷举,对每一个 x,再在区间x+1,99上搜索匹配条件的 y。main() int x,y,s=0;for(x=10;x99;x+)for(y=x+1;y100;y+)if(y*(x/10%10+x%10)=x*(y/10%10+y%10)s+=x+y;printf(“%d“,s);/*x/y=m/n 即 xn=ym,转化以避免分数运算带来的误差。*/参考答案:101344、100 个学生按至 100 顺时针编号围成一圈做出局游戏,从编号为 10 的人开始顺时针报数 1、2、3,每数到 3 的人从圈里出来,剩下的学生继续报数 1、2、3,直至剩下最后一个学生为止,问最后这个学生的编号是多少?请编程求解。/*函数功能:n 人编号 0n-1,从 0 号开始报数 ,报到 k 的出局,求最后余下几号*/int Last(int n,int k) int i,a=0;for(i = 2;i=n;i+)a = (a + k)%i;return a;参考答案:100需对学生重新编号:从 10 开始按顺时针从 0 至 99 编号。这时 Last(100,3)的返回值为90,对应的原编号是 100。即最后留下的学生编号是100。