C程序设计 2009春学期 上机练习M2-M8参考答案
}
{ rate=0.15; tax=rate*(salary-850); } else { rate=0.20; tax=rate*(salary-850); } } }
30052 统计学生平均成绩与及格人数
输入一个正整数 n,再输入 n 个学生的成绩,计算平均分(结
if((year%4==0&&year0!=0)||(year@0==0)) else printf(\.\\n\printf(\.\\n\printf(\} 果保留1位小数),并统计所有及格的人数。 输入输出示例:括号内是说明 输入
5 (n=5) 77 54 92 73 60 输出
average = 71.2 count = 4
#include
输入一个正整数repeat (0 输入年year,判断该年是否为闰年。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。 输出使用以下语句: printf(\printf(\输入输出示例:括号内是说明 输入 3 (repeat=3) 2000 (year=2000) 2010 (year=2010) 2011 (year=2011) 输出 2000 is a leap year. 2010 isn't a leap year. 2011 isn't a leap year. #include 30053 分段计算水费(使用嵌套的if-else语句) printf(\ 16 C程序设计 2009春学期 上机练习M2-M8参考答案 输入一个正整数repeat (0 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下。 输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。要求用嵌套的if-else语句。 0 (x<0) (0<=x<=15) 输入一个正整数 repeat (0 输入两个正整数m和n,输出它们的最小公倍数和最大公约数。 输入输出示例:括号内为说明 输入: 3 (repeat=3) 3 7 (m=3,n=7) 24 4 (m=24,n=4) 24 18 (m=24,n=18) 输出: 21 is the least common multiple of 3 and 7, 1 is the greatest common divisor of 3 and 7. 24 is the least common multiple of 24 and 4, 4 is the greatest common divisor of 24 and 4. 72 is the least common multiple of 24 and 18, 6 is the greatest common divisor of 24 and 18. #include 2.5x-10.5 (x>15) 输入输出示例:括号内是说明 输入 3 (repeat=3) -0.5 (x=-0.5) 9.5 (x=9.5) 21.3 (x=21.3) 输出 f(-0.50) = 0.00 f(9.50) = 12.67 f(21.30) = 42.75 #include 第6周(M6) 40011 求最小公倍数和最大公约数(调试示例error04_1) } for(gcd=c; ;gcd--) { if(m%gcd==0&&n%gcd==0) break; printf(\is the least common multiple of %d and %d, %d is the greatest common divisor of %d and %d.\\n\ } return 0; 17 C程序设计 2009春学期 上机练习M2-M8参考答案 } 参考方法2: #include sum = 0.835549 sum = 0.826310 #include 40012 求1-1/4+1/7-1/10+1/13-1/16+…… 输入一个正整数repeat (0 读入1个正实数 eps,计算并输出下式的值,精确到最后一项的绝对值小于 eps(保留6位小数)。请使用 while 语句实现循环。 计算:1-1/4+1/7-1/10+1/13-1/16+…… 输入输出示例:括号内是说明 输入 2 (repeat=2) 2E-4 (eps=2E-4) 0.02 (eps=0.02) } } return 0; 40014 求整数的位数 输入一个正整数 repeat (0 输入一个整数 in,求它的位数。例如123的位数是3。请使用do-while语句实现循环。 输入输出示例:括号内是说明 输入 4 (repeat=4) 12345 (in=12345) -100 (in=-100) -1 (in=-1) 1290 (in=1290) 输出 count = 5 (12345的位数是5) 18 C程序设计 2009春学期 上机练习M2-M8参考答案 count = 3 (-100的位数是3) count = 1 (-1的位数是1) count = 4 (99的位数是2) #include (money=13分) fen5:1,fen2:2,fen1:1,total:4 fen5:1,fen2:1,fen1:3,total:5 count = 2 分有2种换法) fen5:2,fen2:1,fen1:1,total:4 fen5:1,fen2:3,fen1:2,total:6 fen5:1,fen2:2,fen1:4,total:7 fen5:1,fen2:1,fen1:6,total:8 count = 4 分有4种换法) #include \int main(void) { int count, fen1, fen2, fen5, money; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ return 0; scanf(\ count=0; (10 (13 } while (in!=0); printf(\ } } 40023 换硬币 输入一个正整数 repeat (0 将一笔零钱(大于8分,小于1元, 精确到分)换成5分、2分和1分的硬币。 输入金额,问有几种换法?针对每一种换法,每种硬币至少有一枚,请输出各种面额硬币的数量和硬币的总数量。 要求:硬币面值按5分、2分、1分顺序,各类硬币数量依次从大到小的顺序,输出各种换法。 输出使用语句: printf(\fen2, fen1, fen5+fen2+fen1); 输入输出示例:括号内为说明 输入: 2 10 (repeat=2) for(fen5=money/5;fen5>=1;fen5--) for(fen2=money/2;fen2>=1;fen2--) for(fen1=money/1;fen1>=1;fen1--) if(fen5*5+fen2*2+fen1*1==money){ printf(\fen2, fen1, fen5+fen2+fen1); count++;} printf(\ } } 40024 找出各位数字的立方和等于它本身的数 输入一个正整数 repeat (0 return 0; (money=10分) 19 C程序设计 2009春学期 上机练习M2-M8参考答案 输入两个正整数 m 和 n(1<=m, n<=1000),输出 m 到 n之间的所有满足各位数字的立方和等于它本身的数。 例如153的各位数字的立方和是 1^3+5^3+3^3=153 ,这里a^b表示a的b次方。 输出使用语句:printf(\输入输出示例:括号内为说明 输入: 2 (repeat=2) 100 400 (m=100, n=400) 1 100 输出: result: 153 (1*1*1+5*5*5+3*3*3=153) 370 (3*3*3+7*7*7=370) 371 (3*3*3+7*7*7+1*1*1=371) result: 1 (1*1*1=1) #include \int main(void) { int i, digit, m, n, a,b,c,sum; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ printf(\ for(i=m;i<=n;i++){ digit=i; a=digit; digit=digit/10; b=digit; digit=digit/10; c=digit; sum=a*a*a+b*b*b+c*c*c; (m=1, n=100) int main(void) { int i, digit, m, n, number, sum; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ printf(\ for(i=m;i<=n;i++){ number=i; sum=0; while(number>0){ digit=number; sum=sum+digit*digit*digit; number=number/10; } if(sum==i) printf(\ } } } 40025 找完数(改错题error04_2) 输入一个正整数 repeat (0 输入两个正整数 m 和 n(1<=m, n<=1000),输出 m 到 n之间的所有完数,并输出其因子。一个数如恰好等于它的因子之和,这个数称为完数,例如,6=1+2+3,其中1、2、3为因子,6为因子和。 输出使用以下语句: printf(\printf(\printf(\ 输入输出示例:括号内为说明 输入: 2 (repeat=2) 1 30 (m=1, n=30) 400 500 (m=400, n=500) if(sum==i) printf(\ } } 参考2: #include \return 0; } 输出 result: 1 = 1 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 20