C程序设计 2009春学期 上机练习M2-M8参考答案
输入一个正整数 repeat (0 输入精度 e 和 x,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。 cos(x) = x^0/0!-x^2/2!+x^4/4!-x^6/6!+…… 要求定义并调用函数 funcos(e,x)计算 cos(x) 的值,函数形参e和x的类型均为double,函数类型是double。 输入输出示例:括号内是说明 输入: 2 (repeat=2) } } return sum; 求funcos(e,x)方法2: double funcos(double e, double x) { int flag=1, n=0; double item=1.0; double sum=0.0; double demoninator=1.0; while(fabs(item)>=e){ item=flag*1.0*pow(x,n)/demoninator; sum=sum+item; demoninator=demoninator*(n+1)*(n+2); n=n+2; flag=-flag; } return sum; } 50052 使用函数找最大值 输入一个正整数repeat (0 输入两个整数a和b,输出其中较大的数。要求定义和调用函数max(a, b)找出a、b中较大的数,函数形参a、b的类型是int,函数类型是int。 输入输出示例:括号内是说明 输入 3 (repeat=3) 输入: 5 8 (a=5, b=8) 0.001 0 (e=0.001, x=0) 0.0001 -3.14 (e=0.0001, x=-3.14) 输出: sum = 1.000000 sum = -0.999999 #include \#include \double funcos(double e, double x); int main(void) { int repeat, ri; double e, sum, x; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\x); sum=funcos(e,x); printf(\ = %f\\n\ } } double funcos(double e, double x) { int flag,n; double sum,t; sum=1; flag=-1; n=2; t=1; while(fabs(t)>=e){ t=flag*t*x*x/(n*n-n); /* 通过后一项除以相-1 -10 (a=-1, b=-10) 1 1 (a=1, b=1) 输出: max(5,8) = 8 max(-1,-10) = -1 max(1,1) = 1 #include C程序设计 2009春学期 上机练习M2-M8参考答案 int repeat, ri; int max(int a, int b); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ maximum=max(a,b); int repeat, ri; long f; long fib(int n); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ f = 1; i =1; while (f <=n) { if(f>=m) printf(\ printf(%um); } } int max(int a, int b) { int c; c=a; /* 假设a是大数 */ if (c 50062 使用函数输出指定范围内的 Fibonacci 数 输入一个正整数repeat (0 输入两个正整数 m 和 n(1<=m,n<=10000),输出 m 到 n 之间所有的Fibonacci数。 Fibonacci 序列(第一项起):1 1 2 3 5 8 13 21 ...... 要求定义并调用函数fib(n),它的功能是返回第 n 项Fibonacci数,函数形参n的类型是int,函数类型是long。例如,fib(7)的返回值是13。 输出使用语句:printf(\输入输出示例:括号内是说明 输入: 3 (repeat=3) 1 10 (m=1, n=10) 20 100 (m=20, n=100) 1000 6000 (m=1000, n=6000) 输出: 1 1 2 3 5 8 (1到10之间的Fibonacci数) 21 34 55 89 (20到100之间的Fibonacci数) 1597 2584 4181 (1000到6000之间的Fibonacci数) #include \int main(void) { int i, m, n; f=fib(++i); } printf(\ } } long fib(int n) { int i; long a=1.0,b=1.0,c; if(n==1 || n==2) return 1; for(i=3;i<=n;i++){ c=a+b; a=b; b=c; } return c; } 50063 使用函数找出指定范围内的完数 输入一个正整数 repeat (0 输入两个正整数 m 和 n(1<=m,n<=1000),输出 m 到 n 之间的所有完数,完数就是因子和与它本身相等的数。 要求定义并调用函数 factorsum(number),它的功能是返回number的因子和,函数形参number的类型是整型,函数类型是整型。例如,factorsum(12)的返回值是16(1+2+3+4+6)。 输出使用语句:printf(\输入输出示例:括号内是说明 输入: 2 (repeat=2) 20 500 (m=20 n=500) 1 100 (m=1, n=100) 27 C程序设计 2009春学期 上机练习M2-M8参考答案 输出: 28 496 (20到500之间的完数有:28,496) 1 6 28 (1到100之间的完数有:1,6,28) #include \int main(void) { int i, m, n; int repeat, ri; int factorsum(int number); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\n); for(i=m;i<=n;i++){ if(i==factorsum(i)) printf(\ } 2 (repeat=2) 1 3 90 7 0 8 7 4 3 70 5 6 101 -1 输出 The sum of the odd numbers is 11. The sum of the odd numbers is 116. #include 第8周(M8) 40013 求奇数和 输入一个正整数repeat (0 sum); } } 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值 输入一个正整数repeat (0 输入1个实数 x,计算并输出下式的值,直到最后一项的绝对值小于0.00001(保留2位小数)。要求定义和调用函数fact(n)计算n的阶乘,可以调用pow函数求幂。 s = x+x*x/2!+x*x*x/3!+x*x*x*x/4!+…… 输入输出示例:括号内为说明 输入 3 (repeat=3) 0 (x=0) 1 (x=1) 0.1 (x=0.1) 输出 s = 0.00 s = 1.72 28 C程序设计 2009春学期 上机练习M2-M8参考答案 s = 0.11 #include 1 (repeat=1) 10 10 (x1=10, y1=10) 200 100 (x2=200, y2=100) 输出 Distance = 210.24 #include 50004 使用函数计算两点间的距离 输入一个正整数repeat (0 要求定义和调用函数 dist(x1, y1, x2, y2)计算两点间的距离,函数形参x1、y1、x2和y2的类型都是double,函数类型是double。 product = 1; for(j=1;j<=n;j++) product = product *j; } 50061 使用函数求a+aa+aaa+aa…a 程序填空,不要改变与输入输出有关的语句。 输入一个正整数repeat (0 要求定义并调用函数fn(a, n),它的功能是返回 aa…a(n个a),函数形参a和n的类型是int,函数类型是long。例如,fn(3,2)的返回值是33。 输入输出示例:括号内是说明 输入 2 (repeat=2) 2 3 (a=2, n=3) return product; 29 C程序设计 2009春学期 上机练习M2-M8参考答案 8 5 (a=8, n=5) 输出 246 (2+22+222) 98760 (8+88+888+8888+88888) #include 60002 整数的十进制、八进制和十六进制表现形式 输入一个正整数 repeat (0 依次以十进制、八进制和十六进制形式输入三个整数,输出每个整数的十进制、八进制和十六进制形式。 输入输出示例:括号内是说明 } return sum; b=b*10; sum+=b; int sum,j,b; sum=a; b=a; for(j=1;j 1 (repeat=1) 31 11 1a (十进制数31,八进制数11,十六进制数1a) 输出: The decimal is 31, the octal is 37, the hexadecimal is 1f. (十进制数31的十进制、八进制和十六进制形式是31, 37, 1f) The decimal is 9, the octal is 11, the hexadecimal is 9. (八进制数11的十进制、八进制和十六进制形式是9, 11, 9) The decimal is 26, the octal is 32, the hexadecimal is 1a. (十六进制数1a的十进制、八进制和十六进制形式是26, 32, 1a) #include 60003 分类统计字符 程序填空,不要改变与输入输出有关的语句。 输入一个正整数 repeat (0 输入一行字符,以回车结束,统计出其中的英文字母、空格、数字和其他字符的个数。 输入输出示例:括号内是说明 输入 2 (repeat=2) Reold building room 123. Programming is fun! 输出 letter = 17, blank = 3, digit = 3, other = 1 (\building room 123.\中的英文字母、空格、数字和其他字符的个数) letter = 16, blank = 2, digit = 0, other = 1 (\中的英文字母、空格、数字和其他 printf(\ printf(\printf(\printf(\ 30