1、习题 4-7,求110000之间所有满足各位数字的立方和等于它本身的数。 例如153的各位数字的立方和是13+53+33=153,void main() int i, x, d, sum;for(i=1; i=10000; i+)x = i; sum = 0;while(x != 0)d = x % 10;sum += d*d*d;x = x / 10;if (sum = i) printf(“%d “, i); ,习题 4-8,验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。 例如6=3+3,8=3+5,18=7+11。 要求将6100之间的偶数都表示成两个素数之和,打印时一行
2、打印5组。,int prime(int m); void main() int x, a, b, i, count=0;for(x=6; x=100; x=x+2)for(a=2; a=x/2; a+)b = x-a;if(prime(a) ,习题4-9,输入一个长整数,从高位开始逐位分割并输出。 例如输入123456,逐位输出: 1,2,3,4,5,6,,void main( ) int digit;long in, temp, pow;scanf(“%ld“, ,习题4-10(解1),将一个正整数分解质因数。 例如,输入90,输出90=2*3*3*5,int prime(int m); v
3、oid main( ) int i, n, c=0;scanf(“%d“, ,习题4-10(解2),将一个正整数分解质因数。 例如,输入90,输出90=2*3*3*5,int prime(int m); void main() int i, n, c=0;scanf(“%d“, ,习题4-11,输入两个正整数m和n,求其最大公约数和最小公倍数。,int gcd(int m, int n) /* 最大公约数 */ int x;x = m=n ? m : n;while(x = m*n)if(x%m=0 ,习题4-12,一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10
4、次落地时,共经过多少米?第10次反弹多高?,void main() double sum=100, x=sum/2;int i;for(i=2; i=10; i+)sum = sum + 2*x;x = x / 2;printf(“%lf %lfn“, sum, x); void main() double x, sum=0;int i;x = 100;for(i=1; i=10; i+) sum = sum + x + 1.0/2*x;x = 1.0 / 2 * x; sum = sum x;printf(“%lf %lfn“, sum, x); ,练习4-13,输出100200之间的所有素
5、数,每行输出8个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。,#include void main() int i, j;int is_prime, n=0;for(i=100; i=200; i+) is_prime = 1;for(j=2; j=i-1; j+)if(i % j = 0) is_prime = 0;break;if(is_prime = 1) n+; printf(“%4d“, i);if(n%8 = 0) printf(“n“); ,习题4-14,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,
6、又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第1天共摘了多少桃子?,#include void main() int day, peach;peach = 1;for(day=9; day=1; day-)peach = 2 * (peach + 1);printf(“peach = %dn“, x); ,练习5-6,输入2个正整数m和n(1=m,n=500),统计并输出m 和n之间的素数的个数以及这些素数的和。要求定义并调用函数prime(m)判断m是否为素数。,int prime(int m); void main() int m,
7、 n, i;int count=0, sum=0;scanf(“%d %d“, ,习题5-1,输入2个正整数a和n,求a+aa+aaa+aa(n个a)之和。要求定义并调用函数fn(a,n),它的功能是返回aaa(n个a)。例如,fn(3,2)返回值是33。,long fn(long a, int n) int i;long tn=0;for(i=1; i=n; i+)tn=tn+a;a=a*10;return tn; ,void main( ) int i, n;long a, sn;scanf(“%ld%d“, ,习题5-2,读入1个整数,统计并输出该数中2的个数。要求定义并调用函数coun
8、tdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。,int countdigit(long number, int digit) int count=0;if(number0) number=-number;count=0;do if(number%10=digit) count+;number=number/10; while(number);return count; void main( ) int count;long in; scanf(“%ld“, ,习题5-3,输入2个正整数m
9、和n(1=m,n=10000),输入mn之间 所有的Fibonacci数。Fibonacci序列(第1项起):1 1 2 3 5 8 13 21 。要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如fib(7)返回13。,long fib(int n) if(n=1 | n=2) return 1;else return fib(n-1)+fib(n-2); void main( ) int i, m, n;long f;scanf(“%d%d“, ,习题5-4,输入2个正整数m和n(1=m,n=1000),输入mn之间 所有的完数,完数就是因子和与它本身相等的数。
10、要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6),#include int factorsum(int number) int i, sum;if(number=1) return 1;sum = 0;for(i=1; i=number/2; i+)if(number%i=0)sum = sum + i;return sum; void main( ) int i, m, n;scanf(“%d%d“, ,习题5-5,输入2个正整数m和n(1=m,n=1000),输入mn之间 所有的满
11、足各位数字的立方与它本身相等的数。要求定义并调用函数is(number)判断number的各个数字之立方和是否等于它本身。,int is(int number) int digit, t;long sum;t=number;sum = 0;while(t!=0)digit = t%10;t = t/10;sum = sum + digit*digit*digit;return sum=number; void main( ) int i, m, n;scanf(“%d%d“, ,习题5-6,输入1个整数,将它逆序输出。要求定义并调用函数reverse(number),它的功能是返回number
12、的逆序数。例如,reverse(12345)的返回值是54321,long reverse(long number) int flag, digit;long res = 0;flag = number0 ? -1 : 1;if(number0) number = - number;while(number!=0)res = res*10 + number%10;number /= 10;return flag*res; void main( ) long in, res;scanf(“%ld“, ,习题6-1,输入一行字符,统计出其中的英文字母、空格、数字和其他字符的个数。,#include
13、 void main( ) int blank, digit, letter, other;char c;c = getchar();blank = digit = letter = other = 0;while(c!=n)if(c=a ,习题6-2,输入一行字符,统计出其中单词的个数。各个单词之间用空格分隔,空格数可以是多个。,#include void main( ) int count, word;char c;c = getchar();count=word=0;while(c!=n)if(c= )word=0;else if(word=0)count+;word=1;c=getchar();printf(“%dn“, count); ,习题6-3,程序模拟简单运算器的工作:输入一个算式(没有空格) ,遇等号“=”说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如,输入1+2*10-10/2=后,输出10。,#include void main( ) int op1, op2, res;char op;scanf(“%d“, ,