网络教室c语言参考答案21至49.docx
《网络教室c语言参考答案21至49.docx》由会员分享,可在线阅读,更多相关《网络教室c语言参考答案21至49.docx(26页珍藏版)》请在冰点文库上搜索。
网络教室c语言参考答案21至49
2-1.整型数的表示范围
成绩:
10/折扣:
0.8
编写一个循环程序,输入N值,输出N的阶乘。
关于循环程序怎么编写,可以参考教材第六章P123的内容。
注意整型数的表示范围,如果当输入的N比较大时,例如N等于20时,输出怎么是负数了?
自己想明白吧!
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.5↵
以文本方式显示
1.120↵
1秒
64M
0
测试用例4
以文本方式显示
1.12↵
以文本方式显示
1.479001600↵
1秒
64M
0
测试用例2
以文本方式显示
1.20↵
以文本方式显示
1.N is too big!
↵
1秒
64M
0
1.#include
2.main()
3.{
4. int i,N,k;
5. scanf("%d",&N);
6. for(i=k=1;i<=N;i++)
7. k*=i;
8. if(k>0)
9. printf("%d\n",k);
10. else
11. printf("N is too big!
\n");
12. system("pause");
13.}
2-2.打印N形图形
成绩:
10/折扣:
0.8
编程,输入n值,输出下例(n=4)所示的图形:
**********
输入:
图形的高n
输出:
高为n的N形图形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.4↵
以文本方式显示
1.* *↵
2.** *↵
3.* **↵
4.* *↵
1秒
64M
0
1.#include
2.main()
3.{
4. int n,i,j;
5. scanf("%d",&n);
6. for(i=1;i<=n;i++)
7. {for(j=1;j<=n;j++)
8. printf("%s",j==1||j==n||j==i?
"*":
" ");
9. printf("\n");
10. }
11.}
2-3.打印X形图形
成绩:
10/折扣:
0.8
输入n值,输出下例(n=3)所示的图形:
* *
* *
*
* *
* *
输入:
图形的高n
输出:
高为n的X形图形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.4↵
以文本方式显示
1.* *↵
2. * *↵
3. * *↵
4. *↵
5. * *↵
6. * *↵
7.* *↵
1秒
64M
0
1.#include
2.main()
3.{
4. int i,n,j;
5. scanf("%d",&n);
6. for(i=1;i<=2*n-1;i++)
7. {
8. for(j=1;j<=2*n-i||j<=i;j++)
9. printf("%s",j==i||j==2*n-i?
"*":
" ");
10. printf("\n");
11. }
12.}
2-4.判断输入的字符的类型
成绩:
10/折扣:
0.8
我们将字符分为五类:
大写字母、小写字母、数字、控制字符、其他字符。
编写程序,从键盘输入一个字符,输出字符所属的类型:
大写字母时输出capitalletters,小写字母时输出smallletters,数字是输出figures,控制字符时输出controlcharacters,其他字符时输出others。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.A↵
以文本方式显示
1.capital letters↵
1秒
64M
0
1.#include
2.main()
3.{
4.char c;
5.scanf("%c",&c);
6.if('A'<=c&&c<='Z')
7.printf("capital letters\n");
8.else if('a'<=c&&c<='z')
9.printf("small letters\n");
10.else if('0'<=c&&c<='9')
11.printf("figures\n");
12.else if('NUL'<=c&&c<='US')
13.printf("control characters\n");
14.else printf("others\n");
15.}
2-5.整数的反序数
成绩:
10/折扣:
0.8
输入四位正整数N,若它的K(11234的反序数是4321),输出所有满足条件的K和反序数,若不存在,则输出:
Nooutput↵
输入:
四位正整数N
输出:
K和反序数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.1089↵
以文本方式显示
1.9 9801↵
1秒
64M
0
1.#include
2.main()
3.{
4. int a,b,c,M,d,k;float N,p,u;
5. a!
=0; 保证四位数的作用
6. scanf("%1d%1d%1d%1d",&a,&b,&c,&d);
7. N=1000*a+100*b+10*c+d,
8. M=1000*d+100*c+10*b+a,
9. u=M/N,
10. k=(int)u,
11. p=(float)k;
12. if (u==p&&113. printf("%d %d\n",k,M);
14. else
15. printf("No output\n");
16.}
3-1.打印菱形图形
成绩:
10/折扣:
0.8
输入n,输出如下例(n=3)所示的边长为n的菱形:
*
***
*****
***
*
输入:
边长n
输出:
边长为n的菱形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.5↵
以文本方式显示
1. *↵
2. ***↵
3. *****↵
4. *******↵
5.*********↵
6. *******↵
7. *****↵
8. ***↵
9. *↵
1秒
64M
0
1.#include
2.main()
3.{ int i,j,n;
4. scanf("%d",&n);
5. for(i=1;i<=n;i++)
6. { for(j=1;j<=n-i;j++)
7. printf(" ");
8. for(j=1;j<=2*i-1;j++)
9. printf("*");
10. printf("\n");
11. }
12. for( i=1;i<=n-1;i++ )
13. { for( j=1;j<=i;j++ )
14. printf(" ");
15. for( j=1;j<=2*(n-i)-1;j++ )
16. printf("*");
17. printf("\n");
18. }
19.}
3-2.打印平行四边形
成绩:
10/折扣:
0.8
输入图形的高n和首字符c,输出如下例(c='A',n=5)所示的图形.
ABCDE
BCDEF
CDEFG
DEFGH
EFGHI
输入:
高n和首字符c
输出:
高为n和首字符为c的平行四边形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.3,a↵
以文本方式显示
1.abc↵
2. bcd↵
3. cde↵
1秒
64M
0
1.#include
2.main()
3.{ int i,j,n; char c;
4. scanf("%d,%c",&n,&c);
5. for( i=1;i<=n;i++ )
6. { for( j=1;j<=i-1;j++ )
7. printf(" ");
8. for( j=1;j<=n;j++ )
9. for( j=i;j<=n+i-1;j++ )
10. printf("%c",c+j-1);
11. printf("\n");
12. }
13.}
3-3.求和
成绩:
10/折扣:
0.8
输入整数m和正整数n,按下列公式计算s:
s=m-(m+1)+m+2-(m+3)+……+(-1)n(m+n)。
输入:
m和n
输出:
s
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.1 90↵
以文本方式显示
1.s=46↵
1秒
64M
0
1.#include
2.main()
3.{ int i,k,m,n;long s;
4. scanf("%d %d",&m,&n);
5. i=1;k=-1;
6. s=m;
7. while(i<=n)
8. { s+=k*(m+i);
9. i++;
10. k=(-k);
11. }
12. printf("s=%ld\n",s);
13.}
3-4字符加密输出
成绩:
10/折扣:
0.8
从键盘上输入一个字符,进行加密以后再输出在屏幕上。
加密规律是:
输入小写英文字母时,输入a输出Z、输入b输出Y、输入c输出X、...、输入z输出A。
输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符‘b’。
输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9的ASCII码值是57,加上十位上的数5后是62,则输出字符‘>’。
输入其他字符时原样输出。
友情提示:
整数之间运算的结果要取整,例如5/2的结果是2,而5.0/2.0对小数四舍五入的结果就是3.0了。
所以输入大写英文字母时的输出要仔细考虑。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例2
以文本方式显示
1.g↵
以文本方式显示
1.T↵
1秒
64M
0
1.#include
2.main()
3.{ char a,b;
4. int c;
5. float d,e;
6. scanf("%c",&a);
7. c=a/2;
8. e=a;
9. d=e/2;
10. if( a-97>=0&&a-122<=0 )
11. b=187-a;
12. else if( (a-65)>=0&&(a-90)<=0 )
13. {if(d-c>=0&&d-c<0.5) b=a+c;
14. if(d-c>=0.5) b=a+c+1;}
15. else if( a-48>=0&&a-57<=0 ) b=a+(a/10);
16. else b=a;
17. printf("%c\n",b);
18.}
19.3-5.计算时钟的夹角
20.成绩:
10/折扣:
0.8
21.背景:
22.钟面上的时针和分针之间的夹角总是在0度~359度之间。
举例来说,在十二点的时候两针之间的夹角为0度,而在六点的时候夹角为180度,在三点的时候为90度。
本题要解决的是计算12:
00到11:
59之间任意一个时间的夹角。
23.输入:
24.每组测试数据包含两个数字:
第一个数字代表小时(大于等于0小于等于12),第二个数字代表分(在区间[0,59]上)。
25.输出:
26.对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
输出格式如下所示。
27.输入:
1230
28.输出:
At12:
30theangleis165.0degrees.
29.友情提示:
以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。
30.#include
31.#include
32.main()
33.{ float a,b,c,d;
34. int e,f;
35. scanf("%f %f",&a,&b);
36. e=a;
37. f=b;
38. c=fabs(30*a-5.5*b);
39. if( c>=180 ) d=360-c;
40. else d=c;
41. if( f>=10 ) printf("At %d:
%d the angle is %.1f degrees.\n",e,f,d);
42. else printf("At %d:
0%d the angle is %.1f degrees.\n",e,f,d);
43.}
3-6.求亲密数
成绩:
10/折扣:
0.8
若正整数A的全部约数(包括1,不包括A本身)之和等于B;且整数B的全部约数(包括1,不包括B本身)之和等于A,则A、B为亲密数。
编程,输入正整数A,输出亲密数A,B(A<=B),若不存在亲密数,则输出“Nooutput(回车)”。
例如:
220和284就是一对亲密数。
220的约数是:
1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:
1、2、4、71、142,约数之和是220。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例2
以文本方式显示
1.220↵
以文本方式显示
1.220-284↵
1秒
64M
0
1.#include
2.main()
3.{ int i,a,b,c;
4. scanf("%d",&a);
5. b=0;c=0;
6. for( i=1;i<=a/2;i++ )
7. { if(a%i==0)
8. b+=i;
9. }
10. for( i=1;i<=b/2;i++)
11. { if(b%i==0)
12. c+=i;
13. }
14. if(c==a)
15. if(a<=b) printf("%d-%d\n",a,b);
16. else printf("%d-%d\n",b,a);
17. else printf("No output\n");
}
4-1打印空心等腰梯形
成绩:
10/折扣:
0.8
输入n值,输出如下例(n=4)所示的高和上底均为n的等腰梯形:
****
**
**
*********
输入:
高n
输出:
高和上底均为n的等腰梯形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.3↵
以文本方式显示
1. ***↵
2. * *↵
3.*******↵
1秒
64M
0
1.#include
2.main()
3.{ int i,j,n;
4. scanf("%d",&n);
5. for(i=1;i<=n;i++)
6. { for(j=1;j<=2*n+i-3;j++)
7. if(j==n-i+1||j>n-i+1&&(i==1||i==n))
8. printf("*");
9. else printf(" ");
10. printf("*\n");
11. }
12.}
4-2.反序输出整数
成绩:
10/折扣:
0.8
输入一个整数N,要求以相反的顺序输出该数,例如,N=-1234,输出-4321。
输入:
整数N
输出:
N的反序数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.4567↵
以文本方式显示
1.7654↵
1秒
64M
0
1.#include
2.#include
3.main()
4.{ int a,b,c;
5. scanf("%d",&a);
6. b=fabs(a);
7. if(a>=0)
8. {do
9. { c=b-(b/10)*10;
10. printf("%d",c);
11. b/=10;
12. }while(b);
13. }
14. if(a<=0)
15. {printf("-");
16. do
17. { c=b-(b/10)*10;
18. printf("%d",c);
19. b/=10;
20. }while(b);
21. }
22. printf("\n");
23.}
4-3.求最大、次大、最小和次小值
成绩:
10/折扣:
0.8
输入n和n个整数及其序号(如:
15,1 45,2 ...),依次输出n个整数的最大值、次大值、最小值、次小值及其原始序号。
输入:
n和n个整数及其序号
输出:
n个整数的最大值、次大值、最小值、次小值及其原始序号
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.5↵
2.15,1 11,2 0,3 7,4 1,5↵
以文本方式显示
1.15,1 11,2↵
2.0,3 1,5↵
1秒
64M
0
1.# include "stdio.h"
2.main()
3.{ int i,j,t,m,n,a[100],b[100];
4. scanf("%d\n",&n);
5. for(i=0;i<=(n-1);i++)
6. scanf("%d,%d",&a[i],&b[i]);
7. for(i=1;i<=(n-1);i++)
8. for(j=0;j9. if(a[j]10. {m=a[j];
11. a[j]=a[j+1];
12. a[j+1]=m;
13. t=b[j];
14. b[j]=b[j+1];
15. b[j+1]=t;
16.}
17. printf("%d,%d %d,%d\n%d,%d %d,%d\n",a[0],b[0],a[1],b[1],a[n-1],b[n-1],a[n-2],b[n-2]);
18. }
4-4.10进制数转换为16位二进制数
成绩:
10/折扣:
0.8
将任一正整数(<32768)转换为16位二进制形式。
输入:
正整数
输出:
正整数的16位二进制数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.144↵
以文本方式显示
1