Res - 2009春学期C语言上机练习参考答案汇总

更新时间:2024-05-24 23:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C程序设计 2009春学期 上机练习M2-M8参考答案

第2周(M2) ................................................................................................................................................................2 30004 显示五级记分制成绩所对应的百分制成绩

20011求华氏温度100°F对应的摄氏温度。..............................................................................................................2 区间(使用switch).........................................................................................

20012 求华氏温度 150°F 对应的摄氏温度。 ...........................................................................................................2 30005 显示水果的价格(使用switch) .........................................................

20013求摄氏温度26°C对应的华氏温度。 ...............................................................................................................2 30007 求三角形的面积和周长 ......................................................................20015当n为152时,分别求出n的个位数字(digit1)、

30008 计算个人所得税 ................................................................................

十位数字(digit2)和百位数字(digit3)的值。 ...............................................................................................................2 30051 判断闰年 ..........................................................................................20026 输入2个整数 num1 和 num2,计算并输出它

30052 统计学生平均成绩与及格人数 ............................................................

们的和、差、积、商与余数。.................................................................................................................................2 30053 分段计算水费(使用嵌套的if-else语句) ...........................................

第3周(M3) ................................................................................................................................................................3 第6周(M6) ..........................................................................................................

20031 error02_5) 20032 20033 1/n 20034 20035 项之和 20036 error02_6) 20038 20041 20044 1000^0.5 20053 20056 20061 20062

求1+2+3+......+100(调试示例3

40011 求最小公倍数和最大公约数(调试示例

error04_1) .....................................................................................................

求m+(m+1)+(m+2)+......+100 ........................................................................................................3 40012 求1-1/4+1/7-1/10+1/13-1/16+……............................................. 求1/m+1/(m+1)+1/(m+2)+......+3

40014 求整数的位数....................................................................................

40023 换硬币..............................................................................................

求1 + 1/3 + 1/5 + ......的前n项和...................................................................................................4 40024 找出各位数字的立方和等于它本身的数............................................... 求1-1/4+1/7-1/10+……的前n4

输出华氏-摄氏温度转换表(改错题5

40025 找完数(改错题error04_2)..............................................................40027 从高位开始逐位输出一个整数的各位数字

(选作)..............................................................................................................

40052 判断素数 ..........................................................................................

求x的n次幂 .............................................................................................................................5 40053 逆序输出整数....................................................................................

生成 3 的乘方表.........................................................................................................................6 40054 输出斐波那契序列 ............................................................................. 求100^0.5+101^0.5+……+6

第7周(M7) ..........................................................................................................

50002 使用函数判断数的符号 ......................................................................

计算物体自由下落的距离.............................................................................................................6 50003 使用函数求奇数和 .............................................................................

计算分段函数..............................................................................................................................6 50005 使用函数统计素数并求和...................................................................

阶梯电价 ....................................................................................................................................7 50006 使用函数统计一个整数中数字的个数 .................................................. 求m*m+1/m+(m+1)*(m+1)+

50007 使用函数找水仙花数..........................................................................

1/(m+1)+(m+2)*(m+2)+1/(m+2)+......+n*n+1/n....................................................................................................7 50009 使用函数求余弦函数的近似值 ............................................................20063

1-2/3+3/5-4/7+

50052 使用函数找最大值 .............................................................................

5/9-6/11+…… 8 20064

50062 使用函数输出指定范围内的 Fibonacci 数 ...........................................

求2^1+2^2+2^3+……+2^n ....................................................................................................8 50063 使用函数找出指定范围内的完数.........................................................

第4周(M4) ................................................................................................................................................................8 第8周(M8) ..........................................................................................................

10007 显示图案 (复习printf()的字符串输出)................................................................................................8 40013 求奇数和 ..........................................................................................20042 生成阶乘表.............................................................................................................................................8 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……

20043 使用函数求 n! /(m!* (n-m)!) ....................................................................................................................9 的值 ................................................................................................................

20054 求平均值 ................................................................................................................................................9 50004 使用函数计算两点间的距离 ...............................................................

20057 求1+1/2+1/3+......+1/n ...................................................................................................................... 50061 使用函数求a+aa+aaa+aa…a..........................................................10 20065 求0!+1!+2!+……+n!........................................................................................................................ 60002 整数的十进制、八进制和十六进制表现形式10

40015 求最小值 .............................................................................................................................................. .......................................................................................................................11

40018 求a+aa+aaa+aa…a........................................................................................................................... 60003 分类统计字符....................................................................................11

第5周(M5) .............................................................................................................................................................. 60006 验证歌德巴赫猜想 .............................................................................11

30001 求一元二次方程的根 ............................................................................................................................. 60007 使用函数输出整数的逆序数 ...............................................................11

30002 求分段函数的值 .................................................................................................................................... 60009 统计单词 ..........................................................................................12

30003 分类统计字符 ....................................................................................................................................... 60062 简单计算器 .......................................................................................13

1

C程序设计 2009春学期 上机练习M2-M8参考答案

第2周(M2)

20011求华氏温度100°F对应的摄氏温度。

计算公式如下,c=5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。(源程序error02_1.cpp) 输入输出示例: fahr=100,celsius=37

#include int main(void) { int celsius, fahr; /*---------*/ fahr=100; celsius=5*(fahr-32)/9; printf(\ahr = %d, celsius = %d\\n\ahr, celsius); return 0; }

20012 求华氏温度 150°F 对应的摄氏温度。

计算公式:C = 5*F/9-5*32/9,式中:C表示摄氏温度,F表示华氏温度。 输入输出示例: fahr=150, celsius=66

#include int main(void) { int celsius, fahr; /*---------*/ fahr=150; celsius=5*fahr/9-5*32/9; #include int main(void) { int celsius, fahr; /*---------*/ celsius=26; fahr=9*celsius/5+32; printf(\ahr = %d\\n\ahr); }

20015当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。 输入输出示例:

整数152的个位数字是2,十位数字是5,百位数字是1

#include int main(void) { int n,digit1,digit2,digit3; n=152; digit1=n; digit2=(n/10); digit3=n/100; return 0; /*---------*/ printf(\整数%d的个位数字是%d, 十位数字是%d, 百位数字是%d\\n\ }

20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。

输出两个整数的余数可以用 printf(\num1, num2, num1%num2); 输入输出示例:括号内是说明 输入

5 3 (num1=5,num2=3) 输出 5 + 3 = 8 5 - 3 = 2 5 * 3 = 15 5 / 3 = 1

return 0; printf(\ahr = %d, celsius = %d\\n\ahr, celsius); return 0; }

20013求摄氏温度26°C对应的华氏温度。

计算公式如下,f=9*c/5+32,式中:c表示摄氏温度,f表示华氏温度。 输入输出示例: celsius=26,fahr=78

2

C程序设计 2009春学期 上机练习M2-M8参考答案

5 % 3 = 2 #include int main(void) { /*---------*/ scanf(\printf(\+ %d int num1,num2; 输入一个正整数repeat (0

输入一个正整数m(0<=m<=100),计算表达式 m + (m+1) + (m+2) + ...... + 100的值。 输入输出示例:括号内为说明 输入 3 0 10 50

- %d 输出 sum = 5050

* %d sum = 5005 sum = 3825

/ %d

#include % % %d int main(void) { int i, m, sum; int repeat, ri; (repeat=3)

(计算0+1+2+...+100) (计算10+11+12+...+100) (计算50+51+52+...+100)

= %d\\n\ printf(\= %d\\n\ printf(\= %d\\n\ printf(\= %d\\n\ printf(\= %d\\n\ }

第3周(M3) 20031

求1+2+3+......+100(调试示例error02_5) return 0; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; for(i=m;i<=100;i++) sum=sum+i; /*---------*/ 计算表达式 1 + 2 + 3 + ...... + 100的值。 输出示例: sum = 5050

#include int main(void) { int i, sum; sum=0; for(i=1;i<=100;i++) sum=sum+i; printf(\ = %d\\n\ } } 20033

求1/m+1/(m+1)+1/(m+2)+......+1/n

输入一个正整数repeat (0

输入2个正整数 m 和 n(m<=n),计算表达式 1/m + 1/(m+1) + 1/(m+2) + ...... + 1/n的值,输出时保留3位小数。 输入输出示例:括号内为说明 输入

3 (repeat=3)

求m+(m+1)+(m+2)+......+100

5 15 (计算1/5+1/6+1/7+...+1/15) 10 20 (计算1/10+1/11+1/12+...+1/20)

printf(\} 20032

3

C程序设计 2009春学期 上机练习M2-M8参考答案

1 3 (计算1+1/2+1/3) 输出 sum = 1.235 sum = 0.769 sum = 1.833

#include int main(void) { int i, m, n; int repeat, ri; double sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; for (i=m; i<=n; i++) sum=sum+1.0/i; double sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; denominator=1; for(i=1;i<=n;i++) { } sum=sum+1.0/denominator; denominator=denominator+2; printf(\ = %.6f\\n\ } } 20035

求1-1/4+1/7-1/10+……的前n项之和

输入一个正整数repeat (0

读入一个正整数 n,计算1-1/4+1/7-1/10+……的前 n 项之和,输出时保留3位小数。 输入输出示例:括号内是说明 输入

printf(\ = %.3f\\n\ } } 20034

求1 + 1/3 + 1/5 + ......的前n项和

2 (repeat=2) 3 10 输出 sum = 0.893 sum = 0.819

输入一个正整数repeat (0

输入一个正整数 n,计算表达式 1 + 1/3 + 1/5 + ...... 的前 n 项之和,输出时保留6位小数。 输入输出示例:括号内为说明 输入 2 5 23 输出

sum = 1.787302 sum = 2.549541

#include int main(void) { int i, n; int denominator; (repeat=2)

(计算1+1/3+1/5+1/7+1/9) (计算1+1/3+1/5+...+1/45)

#include int main(void) { int flag, i, n, t; int repeat, ri; double item, sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; flag=1; t=1; int repeat, ri; 4

C程序设计 2009春学期 上机练习M2-M8参考答案

for(i=1;i<=n;i++){ item=flag*1.0/t; sum=sum+item; flag=-flag; t=t+3; for(fahr=lower;fahr<=upper; fahr++, fahr++) } 20038

求x的n次幂 } { }/*---------*/ celsius=5*(fahr-32)/9; printf(\,celsius); }/*---------*/ } } 20036 error02_6)

输入一个正整数repeat (0

读入2个整数 lower 和 upper,输出一张华氏—摄氏温度转换表,华氏温度的取值范围是[lower, upper],每次增加2F。 计算公式:c = 5 * (f - 32) / 9,其中:c表示摄氏温度,f表示华氏温度。

输出请使用语句 printf(\celsius);

输入输出示例:括号内是说明 输入

2 (repeat=2)

32 35 (lower=32,upper=35) 40 30 (lower=40,upper=30) 输出

fahr celsius 32 0.0 34 1.1 fahr Celsius

#include int main(void) { int lower, upper; int repeat, ri; double celsius, fahr; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\, &upper); printf(\ celsius\\n\ 输出华氏-摄氏温度转换表(改错题printf(\输入一个正整数repeat (0

读入1 个实数x和正整数 n(n<=50),计算并输出 x 的 n 次幂(保留2位小数),不允许调用pow函数求幂。 输入输出示例:括号内是说明 输入

2 (repeat=2) 1.5 2 (x=1.5,n=2) 2 7 (x=2,n=7) 输出 2.25 128.00

#include int main(void) { int i, n; int repeat, ri; double mypow, x; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\x, &n); mypow=1; for(i=1;i<=n;i++) mypow=mypow*x; /*---------*/ printf(\ }

} 5

C程序设计 2009春学期 上机练习M2-M8参考答案

20041 生成 3 的乘方表 sum=sum+sqrt(i); /*---------*/ 输入一个正整数n,生成一张3的乘方表,输出3^0 ~ 3^n的值,可调用幂函数计算3的乘方。

输出使用语句 printf(\输入输出示例:括号内是说明 输入 3 输出

pow(3,0) = 1 pow(3,1) = 3 pow(3,2) = 9 pow(3,3) = 27

#include #include int main(void) { int i, n; double mypow; scanf(\ } 20044

求100^0.5+101^0.5+……+1000^0.5 for(i=0;i<=n;i++) { } mypow=pow(3,i); printf(\(n=3)

printf(\} 20053

计算物体自由下落的距离

一个物体从 100m 的高空自由落下,编写程序,求它在前 3s 内下落的垂直距离(结果保留2位小数)。设重力加速度为10米/秒^2。

#include int main(void) { double height; height=0.5 * 10 * 3* 3; /*---------*/ printf(\} 20056

计算分段函数

输入一个正整数repeat (0

编写程序,输入x,计算并输出下列分段函数f(x)的值(保留2位小数),请调用sqrt()函数求平方根,调用pow()函数求幂。

当 x>=0 时,f(x) = x^0.5,当 x小于0时,f(x) = x^5 + 2x + 1/x。

输入输出示例:括号内是说明 输入

3 (repeat=3) 10 (x=10) -0.5 (x=-0.5) 0 (x=0) 输出

f(10.00) = 3.16 f(-0.50) = -3.03 f(0.00) = 0.00

#include #include int main(void) { 计算 100^0.5+101^0.5+……+1000^0.5的值(保留2位小数),可调用sqrt函数计算平方根。 输入输出示例:括号内是说明 输出

sum = 20435.99

#include #include int main(void) { int i; double sum; sum=0; for(i=100;i<=1000;i++) 6

C程序设计 2009春学期 上机练习M2-M8参考答案

int repeat, ri; double x, y; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\if(x>=0) y=sqrt(x); cost=0.53*50+(e-50)*0.58; /*---------*/ printf(\ } 20062

求m*m+1/m+(m+1)*(m+1)+1/(m+1)+} else y=pow(x,5)+2*x+1.0/x; /*---------*/ printf(\ = %.2f\\n\ } 20061

阶梯电价 } (m+2)*(m+2)+1/(m+2)+......+n*n+1/n

输入一个正整数repeat (0

输入两个正整数 m 和 n(m<=n),求 sum = m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)......+n*n+1/n,结果保留6位小数。 输入输出示例:括号内为说明 输入

3 (repeat=3) 1 2 (m=1,n=2) 2 5 (m=2,n=5) 5 10 (m=5,n=10) 输出

sum = 6.500000 sum = 55.283333 sum = 355.845635

#include

int main(void) { int i, m, n; int repeat, ri; double sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; for(i=m;i<=n;i++) sum=sum+i*i+1.0/i; 输入一个正整数repeat (0

为了提倡居民节约用电,某省电力公司执行\阶梯电价\,安装一户一表的居民用户电价分为两个\阶梯\:月用电量50千瓦时以内的,电价为0.53元/千瓦时;超过50千瓦时的用电量,电价上调0.05元/千瓦时。

输入用户的月用电量e(千瓦时),计算并输出该用户应支付的电费(元),结果保留2位小数。 输入输出示例:括号内是说明 输入

2 (repeat=2) 10 (e=10) 100 (e=100) 输出 cost = 5.30 cost = 55.50

#include int main(void) { int repeat, ri; double cost, e; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ if(e<=50) else cost=e*0.53; /*---------*/ printf(\ = %.6f\\n\ }

} 7

C程序设计 2009春学期 上机练习M2-M8参考答案

20063 求1-2/3+3/5-4/7+5/9-6/11+……

#include #include int main(void) { int i,n; int repeat, ri; double sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; for(i=1;i<=n;i++) sum=sum+pow(2,i); 输入一个正整数repeat (0

输入一个正整数 n,计算1-2/3+3/5-4/7+5/9-6/11+……的前n项之和,输出时保留3位小数。 输入输出示例:括号内是说明 输入

3 (repeat=3) 1 (n=1) 3 (n=3) 5 (n=5) 输出 sum = 1.000 sum = 0.933 sum = 0.917

#include int main(void) { int flag, i, n; float denominator; /*---------*/ printf(\ = %.0f\\n\ }

第4周(M4)

10007 显示图案 (复习printf()的字符串输出) 编写程序,在屏幕上显示如下图案。 * * * * * * * * * *

#include int main(void) item=flag* i *1.0/ denominator; sum=sum+item; flag=-flag; denominator = denominator +2; { printf(\ \ \ * *\\n\ \ *\\n\ /*---------*/ printf(\}

20042 生成阶乘表

输入一个正整数n,生成一张阶乘表,输出 1! ~ n! 的值,

求2^1+2^2+2^3+……+2^n

要求定义和调用函数fact(n)计算 n!,函数类型为double。

} int repeat, ri; double item, sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; flag=1; denominator =1.0; for(i=1; i<=n; i++) { } /*---------*/ } 20064

} 8

C程序设计 2009春学期 上机练习M2-M8参考答案

输出使用语句 printf(\输入输出示例:括号内是说明 输入 3 输出 1! = 1 2! = 2 3! = 6

#include int main(void) { int i, n; double myfact; double fact(int n); scanf(\ for(i=1;i<=n;i++) { myfact=fact(i); printf(\ } } double fact(int n) { double result; int j; result=1; for(j=1;j<=n;j++) result=result*j; return result; }

20043 使用函数求 n! /(m!* (n-m)!)

输入一个正整数repeat (0

输入2个正整数 m 和 n(m<=n),计算 n! /(m!* (n-m)!) 。 要求定义并调用函数fact(n)计算n的阶乘, 其中 n 的类型是 int,函数类型是 double。 例:括号内是说明 输入:

2 (repeat=2) 2 7 (m=2, n=7) 5 12 (m=5, n=12) 输出:

(n=3)

result = 21 result = 792

#include \int main(void) { int m, n; int repeat, ri; double s; double fact(int n); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ fact(n); fact(m); fact(n-m); s=1; s=s*fact(n)/(fact(m)*fact(n-m)); printf(\ } } double fact(int n) { double result; int i; result=1; for(i=1;i<=n;i++) result=result*i; return result; }

20054 求平均值

编写程序,输入 3 个整数,计算并输出它们的平均值(结果保留2位小数)。 输入输出示例: 输入 1 2 3 输出

average = 2.00

#include int main(void) { 9

C程序设计 2009春学期 上机练习M2-M8参考答案

int a, b, c; double average; scanf(\ average= (a+b+c )/3.0; printf(\}

20057 求1+1/2+1/3+......+1/n

输入一个正整数repeat (0

编写程序,输入一个正整数n,求1+1/2+1/3+......的前n项之和,输出时保留6位小数。 输入输出示例:括号内为说明 输入 2 6 2 输出

sum = 2.450000 sum = 1.500000

#include int main(void) { int i, n; int repeat, ri; double sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; for(i=1;i<=n;i++) sum=sum+1.0/i; (repeat=2)

(计算1+1/2+1/3+1/4+1/5+1/6) (计算1+1/2)

编写一个程序,输入一个正整数 n,计算 e = 0!+1!+2!+……+n!,要求定义和调用函数fact(n)计算n!,函数类型是double。 例:括号内是说明 输入

3 (repeat=3) 1 2 4 输出 sum = 2 sum = 4 sum = 34

#include int main(void) { int i,n; int repeat, ri; double sum; double fact(int n); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=1; for(i=1;i<=n;i++){ fact(i); sum=sum+fact(i); } /*---------*/ printf(\ = %.0f\\n\ } } double fact(int n) { double result; int j; result=1; for(j=1;j<=n;j++) result=result*j; return result; } printf(\ } }

20065 求0!+1!+2!+……+n!

输入一个正整数repeat (0

10

C程序设计 2009春学期 上机练习M2-M8参考答案

40015 求最小值

输入一个正整数repeat (0

输入一个正整数n, 再输入n个整数,输出最小值。 输入输出示例:括号内是说明 输入

3 (repeat=3) 4 -2 -123 100 0 4 -9 -1 1 -8 3 5 3 1 输出 min = -123 min = -9 min = 1

#include int main(void) { int i, min, n, x; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ #include #include int main(void) { int a, i, n, sn, tn; int ri, repeat; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sn=0; tn=0; for (i=0; i

第5周(M5)

30001 求一元二次方程的根

输入一个正整数repeat (0

输入参数a,b,c,求一元二次方程a*x*x+b*x+c=0的根,结果保留2位小数。 输出使用以下语句:

printf(\参数都为零,方程无意义!\\n\printf(\和b为0,c不为0,方程不成立\\n\printf(\

printf(\printf(\printf(\sqrt(-d)/(2*a));

printf(\sqrt(-d)/(2*a));

输入输出示例:括号内为说明 输入:

5 (repeat=5)

scanf(\ min=x; for(i=1;ix) min=x; } /*---------*/ printf(\ } }

40018 求a+aa+aaa+aa…a

提示: 第i项通项: tn = a + a * 10 + a * 100 … +a * 10^( n-1) = t(n-1) + a * 10^(n-1) 11

C程序设计 2009春学期 上机练习M2-M8参考答案

0 0 0 (a=0,b=0,c=0) 0 0 1 (a=0,b=0,c=1) 0 2 4 (a=0,b=2,c=4) 2.1 8.9 3.5 (a=2.1,b=8.9,c=3.5) 1 2 3 (a=1,b=2,c=3) 输出:

参数都为零,方程无意义! a和b为0,c不为0,方程不成立 x = -2.00 x1 = -0.44 x2 = -3.80 x1 = -1.00+1.41i x2 = -1.00-1.41i #include #include int main(void) { int repeat, ri; double a, b, c, d; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\b, &c); d=b*b-4*a*c; if(a==0){ if(b==0){ if(c==0){ printf(\参数都为零,方程无 printf(\= %0.2f\\n\(-b-sqrt(d))/(2*a)); } else{ printf(\= %0.2f+%0.2fi\\n\ printf(\= %0.2f-%0.2fi\\n\ } } } }

30002 求分段函数的值

输入一个正整数 repeat (0

输入一个整数 x,计算并输出下列分段函数 sign(x) 的值。

-1 x < 0

x = 0 x > 0

y = sign(x) = 0

1

输入输出示例:括号内是说明 输入

3 (repeat=3) 10 (x=10) 0 (x=0) -98 (x=-98) 输出

sign(10) = 1 (x = 10时 y = 1)

意义!\\n\ } else{ printf(\和b为0,csign(0) = 0 (x = 0时 y = 0) sign(-98) = -1 (x = -98时y = -1)

#include 不为0,方程不成立\\n\ } else{ if(d>=0){ printf(\= %0.2f\\n\ } else{ } printf(\} int main(void) { int repeat, ri; int x, y; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ if(x==0) y=0; (-b+sqrt(d))/(2*a)); else if(x>0) y=1; 12

C程序设计 2009春学期 上机练习M2-M8参考答案

else y=-1; 五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示\。 输出使用以下语句: printf(\printf(\printf(\printf(\printf(\

printf(\

输入输出示例:括号内是说明 输入

6ABCDEj (repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j) 输出 90-100 80-89 70-79 60-69

0-59

Invalid input #include int main(void) { (输入数据不合法)

printf(\ } }

30003 分类统计字符

输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入输出示例:括号内是说明 输入 Reold 123? 输出

letter = 5, blank = 1, digit = 3, other = 1

#include int main(void) { char c; int blank, digit, i, letter, other; blank = digit = letter = other = 0; for(i = 1; i <= 10; i++){ c = getchar(); } printf(\= %d, blank = %d, digit = %d, other = %d\\n\, blank, digit, other); }

30004 显示五级记分制成绩所对应的百分制成绩区间(使用switch)

输入一个正整数 repeat (0

输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。

if(c==' ') blank ++; else else else other ++; if(c>='0'&&c<='9') digit ++; if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) letter ++; char ch; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ ch = getchar(); switch(ch){ case'A': printf(\ break; case'B': printf(\ break; case'C': printf(\ break; case'D': printf(\break; 13

C程序设计 2009春学期 上机练习M2-M8参考答案

} case'E': printf(\break; printf(\ printf(\ printf(\ printf(\ printf(\ scanf(\ if(choice == 0) break; else{ switch (choice){ case 1: price= 3.00; break; default: } printf(\ break; return 0; }

30005 显示水果的价格(使用switch)

查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。

在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。

当用户输入编号1~4,显示相应水果的单价(保留1位小数);输入0,退出查询;输入其他编号,显示价格为0。 输入输出示例:括号内是说明 输入

3 (oranges的编号) 0 (退出查询) 输出 [1] apples [2] pears [3] oranges [4] grapes [0] Exit price = 4.1 [1] apples [2] pears [3] oranges [4] grapes [0] Exit

#include int main(void) { int choice, i; double price; for(i = 1; i <= 5; i++){ case 2: price=2.50; break; case 3: price=4.10; break; case 4: } price=10.20; break; } } }

printf(\30007 求三角形的面积和周长

输入一个正整数 repeat (0

输入三角形的3条边 a, b, c,如果能构成一个三角形,输出面积 area 和周长 perimeter(保留2位小数);否则,输出\。 在一个三角形中,任意两边之和大于第三边。三角形面积计算公式:area = (s(s-a)(s-b)(s-c))^0.5 ,其中s = (a+b+c)/2

输出使用以下语句:

printf(\perimeter);

printf(\triangle\\n\

输入输出示例:括号内是说明

14

C程序设计 2009春学期 上机练习M2-M8参考答案

输入

2 (repeat=2) 5 5 3 1 4 1 输出

area = 7.15, perimeter = 13.00

These sides do not correspond to a valid triangle

#include #include int main(void) { int a, b, c; int repeat, ri; double area, perimeter, s; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ if ((a+b>c)&& (a+c>b) && (b+c>a) ){ perimeter=a+b+c; s=(a+b+c)/2.00; area =sqrt(s*(s-a)*(s-b)*(s-c)); printf(\= %.2f, perimeter (a=5,b=5,c=3) (a=1,b=4,c=1)

输入输出示例:括号内是说明 输入

5 (repeat=5) 1010.87 (salary=1010.87) 32098.76 (salary=32098.76) 800 (salary=800) 4010 (salary=4010) 2850 (salary=2850) 输出 tax = 8.04 tax = 6249.75 tax = 0.00 tax = 474.00 tax = 200.00

#include int main() { printf(\sides do not correspond to scanf(\ for(ri=1; ri<=repeat; ri++) { scanf(\ if (salary<=850) { } else if (salary<=1350) { rate=0.05; tax=rate*(salary-850); } else if (salary<=2850) { rate=0.10; tax=rate*(salary-850); } else if (salary<=5850) rate=0; tax=rate*(salary-850); int ri, repeat; double rate, salary, tax; = %.2f\\n\ } else a valid triangle\\n\ } }

30008 计算个人所得税

输入一个正整数 repeat (0

输入一个职工的月薪 salary,输出应交的个人所得税 tax(保留2位小数)。

计算公式:tax = rate * (salary - 850) 当 salary ≤850 时,rate = 0

当 850 < salary ≤ 1350 时,rate = 5% 当 1350 < salary≤ 2850 时,rate = 10% 当 2850 < salary ≤ 5850 时,rate = 15% 当 5850 < salary 时,rate = 20%

15

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 int main(void) { int count, i, n; double average, grade, total; 30051 判断闰年

输入一个正整数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 int main(void) { int repeat, ri; int year; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ scanf(\ total=0; count=0; for(i=1;i<=n;i++){ } average = 1.00 * total/n; scanf(\total=total+grade; if(grade>=60){ } count++; printf(\ }

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 int main(void) { int gcd, lcm, m, n,c; int repeat, ri; scanf(\for(ri = 1; ri <= repeat; ri++) { scanf(\ scanf(\ if(m<=n) c=m; /* 若m小,最大可能的公约y = f(x) = 4x/3

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 int main(void) { int repeat, ri; double x, y; scanf(\ for(ri = 1;ri <= repeat; ri++){ scanf(\x); if(x<0) y=0; else if(x>=0&&x<=15) y=4.0*x/3; else y=2.5*x-10.5; 数就是m */ else c=n; for(lcm=1; ;lcm++) { if(lcm%m==0&&lcm%n==0) } break; printf(\ = %.2f\\n\ } }

第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 int main(void) { int gcd, lcm, m, n,i; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ scanf(\ if(m <= 0 || n <= 0) printf(\ else{ i=1; while(i<=(m+n)/2) { } lcm=m*n/gcd; if((m%i==0)&&(n%i==0)) i++; gcd=i; 输出

sum = 0.835549 sum = 0.826310 #include #include int main(void) { int denominator, flag; int repeat, ri; double eps, item, sum; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0; denominator=1; flag=1; item=1.0; while(fabs(item)>=eps){ } printf(\item=flag*1.0/denominator; sum=sum+item; flag=-flag; denominator=denominator+3; printf(\is the least common multiple of %d and %d, %d is the greatest common divisor of %d and %d.\\n\ } } }

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 int main(void) { int count, in; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ count=0; if(in<0) do{ count++; in=in/10; in=-in; 13 输出:

(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

C程序设计 2009春学期 上机练习M2-M8参考答案

result:

496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248

#include int main(void) { int factor, m, n, number, sum; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ printf(\ for (number=m;number<=n;number++) sum=1; for { 8 (in=8) 输出 2 3 4 5 6 6 0 0 8

#include int main(void) { int digit, in, power, temp, k; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ if (sum==number) { printf(\for printf(\ printf(\ power=in; while(temp>0) /* temp是控制循环次数 */ { temp --; k = k/10; digit = power / k; power = power % k; /* power向右 if(in<0) in=-in; power=in; (factor=2;factor<=number/2;factor++) if sum=sum+factor; (numberúctor==0) temp=0; k = 1; while(power>0) { } power=power/10; temp++; k = k * 10; (factor=2;factor

} } printf(\ 40027 从高位开始逐位输出一个整数的各位数字(选作) 输入一个正整数repeat (0

输入一个整数 in,从高位开始逐位分割并输出它的各位数字。

输出使用语句:printf(\输入输出示例:括号内为说明 输入

3 (repeat=3) 23456 (in=23456) -600 (in=-600)

推进 */ } return 0; }

40052 判断素数

printf(\ } printf(\ 21

C程序设计 2009春学期 上机练习M2-M8参考答案

输入一个正整数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

输出使用以下语句:

printf(\printf(\输入输出示例:括号内为说明 输入 4

1 2 9 17 输出

1 is'nt a prime 2 is a prime 9 is'nt a prime 17 is a prime #include #include int main(void) { int flag, i, j, k, m, n; scanf(\ for(i=1;i<=n;i++){ scanf(\if(m==1) printf(\else { k=sqrt(m); for(j=2;j<=k;j++) if(m%j==0) { printf(\is'nt a (n=4)

输入一个正整数repeat (0

输入一个整数 in,将其逆序输出。假设正数和负数逆序输出的结果一样。

输出使用语句 printf(\输入输出示例:括号内为说明 输入

2 (repeat=2) 200 (in=200) -12345 (in=-12345) 输出 0 0 2 5 4 3 2 1 #include int main(void) { int digit, x; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf (\x); if(x<0) x=-x; while(x!=0){ } digit=x; printf(\x=x/10; printf(\ } prime\\n\ } } if(j>k) break; }

40054 输出斐波那契序列

输入一个正整数 n(1

1 1 2 3 5 8 13 21 34 55

printf(\} return 0; }

40053 逆序输出整数

22

C程序设计 2009春学期 上机练习M2-M8参考答案

#include int main(void) { int i, n, x1, x2, x; scanf(\ x1 = 1; x2 = 1; printf (\ }

第7周(M7)

50002 使用函数判断数的符号

输入一个正整数 repeat (0

输入1个整数 x,若 x 大于0,sign(x) = 1;若 x 等于0,sign(x) = 0;否则,sign(x) = -1,最后输出sign(x)的值。 要求定义和调用函数sign(x)实现该分段函数, 函数形参x的类型是int,函数类型是int。 输入输出示例:括号内是说明 输入

3 (repeat=3) 10 (x=10) -5 (x=-5) 0 (x=0) 输出

sign(10) = 1 (x=10时sign(x)的值为1) sign(-5) = -1 (x=-5时sign(x)的值为-1) sign(0) = 0 (x=0时sign(x)的值为0) ①

for(i=1;i<=n-2;i++){ } return 0; x=x1+x2; printf(\ x1=x2; x2=x; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\x); y=sign(x); printf(\ } } int sign(int x) { int t=0; if(x<0) t=-1; else if(x==0) t=0; else t=1; return t; }

50003 使用函数求奇数和

输入一个正整数repeat (0

输入一批正整数(以零或负数为结束标志),求其中的奇数和。

要求定义和调用函数even(n) 判断数的奇偶性,当n为偶数时返回1,否则返回0,函数形参n的类型是int,函数类型是int。

输入输出示例:括号内是说明 输入

2 (repeat=2) 12 9 7 18 3 11 20 0 11 8 6 17 2 10 19 -1 输出

The sum of the odd numbers is 30. The sum of the odd numbers is 47.

#include int even(int n); int main(void) { int n, sum; int ri, repeat; scanf(\ for(ri = 1; ri <= repeat; ri++){ sum=0; #include int sign(int x); int main(void) { int x, y; int repeat, ri; 23

C程序设计 2009春学期 上机练习M2-M8参考答案

scanf(\ while (n>0){ if (even(n)==0) sum=sum+n; scanf(\} sum); } } int even(int n) { int t; }

50005 使用函数统计素数并求和

输入一个正整数 repeat (0

输入2个正整数 m 和 n(1<=m,n<=500),统计并输出 m 到 n 之间的素数的个数以及这些素数的和。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

要求定义并调用函数 prime(m) 判断m是否为素数,当m为素数时返回1,否则返回0,函数形参 m 的类型是int,函数类型是int。

输入输出示例:括号内是说明 输入: 1 1 10 输出:

Count = 4, sum = 17 (1到10之间有4个素数:2,3,5,7)

#include \#include \int main(void) { int count, i, m, n, sum; int repeat, ri; int prime(int m);

(repeat=1) (m=1, n=10)

if (n%2==0) else t=0; return t; t=1; printf(\sum of the odd numbers is %d.\\n\ scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\n); sum=0; count=0; if (m==1) m++; /* 若第一个数是1, 可直接判定下一个数 */ for(i=m;i<=n;i++){ if(prime(i)==1){ sum=sum+i; count++; } } } } int prime(int m) { int t, limit, result; result=1; /* 初始假设结果是素数 */ for ( t=2; t <= m-1; t++) if (m%t == 0) { result=0; /* 不是素数跳出循环 */ break; } return result; }

50006 使用函数统计一个整数中数字的个数

输入一个正整数 repeat (0

读入1 个整数in,再输入一个数字digit(0≤digit<10),统计并输出整数 in 中数字 digit 的个数。

要求定义并调用函数countdigit(number,digit),它的功能是统计整数 number 中数字 digit 的个数 ,函数形参number和digit的类型是int,函数类型是int。例如,countdigit(10090,0)的返回值是3。 输入输出示例:括号内是说明 输入

2 (repeat=2)

21252 2 (number=21252, digit=2) -1111 9 (number=-1111, digit=9) 输出

printf(\ 24

C程序设计 2009春学期 上机练习M2-M8参考答案

Number 21252 of digit 2: 3 (21252中有3个2) Number -1111 of digit 9: 0 (-1111中有0个9)

#include \int main(void) { int count, digit, in; int repeat, ri; int countdigit(int number, int digit); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ count=countdigit(in,digit); 100 400 (m=100, n=400) 1 100 (m=1, n=100) 输出:

result: (100 到400之间的水仙花数) 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到100之间的水仙花数) 1 #include \int main(void) { int i, m, n; (1*1*1=1) printf(\ int repeat, ri; } } int countdigit(int number,int digit) { int c,t; c=0; if(number<0) int is(int number); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ printf(\ number=-number; /* 这里若没将负数转成正数,判断就会出错 for (i=m;i<=n;i++) { */ while (number!=0){ t=number; number=number/10; if(t==digit) c++; } return c; } 50007 使用函数找水仙花数 输入一个正整数 repeat (0

2 (repeat=2)

}

50009 使用函数求余弦函数的近似值 } } int is(int number) { int sum,res,t,j; } if(sum!=number) res=0; return res; res=1; sum=0; j=number; while (j!=0) { t=j; j=j/10; sum=sum+t*t*t; if(is(i)==1) printf(\} 25

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 int main(void) { int a, b, maximum; 邻的前一项可以计算出通项 tn */ sum=sum+t; n=n+2; 26

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 int main(void) { int x, sum; int repeat, ri; scanf(\for(ri = 1; ri <= repeat; ri++) { scanf(\ sum=0; while(x>0) { } printf(\if(x%2!=0) sum+=x; scanf(\ printf(\ } } int factorsum(int number) { int t,sum,j; sum=0; if(number==1) sum=1; else { j=number/2; for(t=1;t<=j;t++){ if(number%t==0) sum=sum+t; } } return sum; }

第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 #define MY_EPS 0.00001 int main(void) { int i; int repeat, ri; double item, s, x; double fact(int n); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\x); i=2; item=x; s=x; while(item*x/fact(i)>= MY_EPS){ } printf(\item=item*x; s+=item/fact(i); i++; 输入输出示例:括号内是说明 输入

1 (repeat=1) 10 10 (x1=10, y1=10) 200 100 (x2=200, y2=100) 输出

Distance = 210.24 #include #include double dist(double x1, double y1, double x2, double y2); int main(void) { int repeat, ri; double distance, x1, y1, x2, y2; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\x2, &y2); distance=dist(x1, y1, x2, y2); printf(\ } } double dist(double x1, double y1, double x2, double y2) { double a,b,c; a=(x2-x1)*(x2-x1); b=(y1-y2)*(y1-y2); c=sqrt((a+b)); return c; } } double fact(int n) { int j; double product; }

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 int main(void) { int a, i, n; int ri, repeat; long sn; long fn(int a, int n); scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ } } /* 思路:如2222 =( ( 2 + 2 * 10) * 10 ) +2) * 10 ) + 2, 是一个累加和 */ long fn(int a, int n) { { }

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 int main(void) { int decimal, octal, hexadecimal; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\xadecimal); } }

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

C程序设计 2009春学期 上机练习M2-M8参考答案

字符的个数)

#include int main(void) { char c; int blank, digit, letter, other; int ri, repeat; scanf(\ getchar(); for(ri = 1; ri<=repeat; ri++) { c = getchar(); letter=blank=digit=other=0; while (c!='\\n') { if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) letter++; else if (c==' ') blank++; else if(c>='0'&&c<='9') digit++; else other++; c=getchar(); 90=37+53 92=3+89 94=5+89 96=7+89 98=19+79 100=3+97 #include int prime(int m) { } int main(void) { int count, i, m, n, number; scanf(\n); if(m % 2 != 0) m = m + 1; int i, ifPrime=0; if(m==1) return 0; for(i=2;i<=m/2;i++) { } if(i>m/2) ifPrime=1; if(m%i==0) break; return ifPrime; } printf(\, blank, digitif(m >= 6) { , other); } } 60006 验证歌德巴赫猜想 程序填空,不要改变与输入输出有关的语句。 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 输入两个正整数 m 和 n(6<=m<=n<=100),将 m 到 n 之间的偶数表示成两个素数之和,打印时一行打印5组。 要求定义并调用函数 prime(m) 判断m是否为素数,当m为素数时返回1,否则返回0,函数形参 m 的类型是int,函数类型是int。 输出使用语句:printf(\= M + M \number, i, number - i); 输入输出示例:括号内为说明 输入: 89 100(m=89, n=100) 输出:

for(number=m;number<=n;number=number+2) { for(i=1;i<=number/2;i++) if( prime(i) { && count=0; prime(number-i) ) { printf(\\number, i, number-i); } }

60007 使用函数输出整数的逆序数

} } } count++; if(count%5==0) printf(\ break; 31

C程序设计 2009春学期 上机练习M2-M8参考答案

程序填空,不要改变与输入输出有关的语句。 输入2个整数,分别将其逆向输出。

要求定义并调用函数 fun(n),它的功能是返回 n 的逆向值,函数形参 n 的类型是int,函数类型是int。例如,fun(123)的返回值是321。

输入输出示例:括号内是说明 输入: 123 -910 输出:

123的逆向是321 -910的逆向是-19

#include int fun(int n); int main(void) { int m1,m2; scanf(\ printf(\的逆向是%d\\n\ printf(\的逆向是%d\\n\ } /* 思路:例如 12345 = 1*10^4 + 2 * 10^3 + 3* 10^2 + 4 * 10 ^1+ 1 + 5 * 10^0 1)n和n=n/10探测各个位 2)逆序数可用n的每个位上的数×10(即10进制数位左移1位),累计相加, 累加和问题, 用循环语句 */ int fun(int n) { int a, num=0; /*设置一个累加和的变量 */ while(n) { a = n; num=num*10 + a; n=n/10; } return num; }

60009 统计单词

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

2 (repeat=2)

Let's go to room 209. Programming is fun 输出

count = 5 (\ go to room 209.\中有5个单词) count = 3 (\ Programming is fun\中有3个单词)

#include int main(void) { char c; int count, word; int repeat, ri; scanf(\ getchar(); for(ri = 1; ri <= repeat; ri++){ c = getchar(); count = 0; while(c==' ') c=getchar(); while (c!='\\n') { while (c!=' ' && c!='\\n') c=getchar(); } }

60062 简单计算器

程序填空,不要改变与输入输出有关的语句。

输入一个正整数 repeat (0

} printf(\count++; while (c==' ' && c!='\\n') c=getchar(); 32

C程序设计 2009春学期 上机练习M2-M8参考答案

算:

模拟简单运算器的工作:输入一个算式(没有空格),遇等号 \说明输入结束,输出运算结果。

假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。 输入输出示例:括号内是说明 输入

2 (repeat=2) 15+2/3= 1+2*10-10/2= 输出 5 10

程序中使用了operator作为变量,这是VC++的关键字,但不是TC的,要避免这种情况的发生,可以将关键字的颜色作标记,编程时就可避免。一般VC++缺省环境下关键字颜色会与一般的变量显示不同。 #include int main(void) { char c; int operand1, operand2, res; int repeat, ri; scanf(\ for(ri = 1; ri <= repeat; ri++) scanf(\ c=getchar(); res=operand1; { }

while(c != '=') { scanf(\ switch(c) { case'+':res=res+operand2;break; case'-':res=res-operand2;break; case'*':res=res*operand2;break; case'/':res=res/operand2;break; } c= getchar(); } printf(\ } 33

本文来源:https://www.bwwdw.com/article/19b7.html

Top