北京理工大学C语言编程.docx
《北京理工大学C语言编程.docx》由会员分享,可在线阅读,更多相关《北京理工大学C语言编程.docx(28页珍藏版)》请在冰豆网上搜索。
北京理工大学C语言编程
1-3.磨磨你的砍柴刀:
判断三角形的形状
成绩:
10/折扣:
0.8
输入三角型的三条边,判断三角形的形状。
假设输入的三边边长均>0。
输入:
三角型的3条边的长度(int型)。
输出:
三角形形状
等边三角形:
equilateraltriangle.
等腰三角形:
isocelestriangle.
不构成三角形:
non-triangle.
一般三角形:
triangle.
友情提示:
这个题有点复杂吧,因为用到了分支语句,你参考一下教材P98的程序。
要把a、b、c三条边长度的可能情况都想到。
如果程序运行出现了问题,你尝试用开发工具的单步执行调试工具,检查问题出在哪一句。
什么叫单步执行?
老师在课上告诉你们了吗?
没讲过?
那就读读网络教室的那些文章吧!
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.2 2 2↵
以文本方式显示
1.equilateral triangle.↵
1秒
64M
0
测试用例2
以文本方式显示
1.3 2 2↵
以文本方式显示
1.isoceles triangle.↵
1秒
64M
#include
main()
{inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
if(a==b&&a==c)
printf("equilateraltriangle.\n");
elseif(a==b||b==c||a==c)
printf("isocelestriangle.\n");
else
printf("triangle.\n");
else
printf("non-triangle.\n");
getch();
}
2-1.整型数的表示范围
编写一个循环程序,输入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;
5. long m;
6. scanf("%d",&n);
7. i=1;
8. m=1;
9. do{m=m*i;
10. i=i+1;
11. }while(i<=n);
12. if(m>=0)
13. printf("%ld\n",m);
14. else
15. printf("N is too big!
\n");
16.}
2-2.求正弦函数值
成绩:
10/折扣:
0.8
已知求正弦sin(x)的近似值的多项式公式为:
sin(x)=x-x3/3!
+x5/5!
-x7/7!
+……+(-1)nx2n+1/(2n+1)!
+…
编写程序,要求输入x(单位是弧度)和ε,按上述公式计算sin(x)的近似值,要求计算的误差小于给定的ε。
此题当然要用到循环语句,到第六章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。
求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。
友情提示:
给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。
如果出现死循环的情况,可以用+键退出程序。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.0 0.000001↵
以文本方式显示
1.0.000000↵
1秒
64M
0
测试用例2
以文本方式显示
1.1.57079 0.000001↵
以文本方式显示
1.1.000000↵
1秒
64M
0
开启时间
2011年02月28日星期一08:
00
折扣时间
2011年03月25日星期五22:
00
关闭时间
2011年03月30日星期三22:
00
#include
#include
main()
{inti;
doublex,e,a,b,sin;
i=3;
scanf("%lf%lf",&x,&e);
a=x;
sin=x;
do{a=a*x*x/i/(i-1);
a=-a;
i=i+2;
sin+=a;
b=fabs(a);
}while(b>=e);
printf("%f\n",sin);
}
2-3.判断输入的字符的类型
成绩:
10/折扣:
0.8
我们将字符分为五类:
大写字母、小写字母、数字、控制字符、其他字符。
编写程序,从键盘输入一个字符,输出字符所属的类型:
大写字母时输出capitalletters,小写字母时输出smallletters,数字是输出figures,控制字符时输出controlcharacters,其他字符时输出others。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.A↵
以文本方式显示
1.capital letters↵
1秒
64M
0
开启时间
2011年02月28日星期一08:
00
折扣时间
2011年03月25日星期五22:
00
关闭时间
2011年03月30日星期三22:
00
#include
main()
{
charx;
scanf("%c",&x);
if(x>='A'&&x<='Z')
printf("capitalletters\n");
else
if(x>='a'&&x<='z')
printf("smallletters\n");
else
if(x>='0'&&x<='9')
printf("figures\n");
else
printf("others\n");
}
3-1.字符加密输出
成绩:
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
开启时间
2011年03月7日星期一01:
20
折扣时间
2011年03月27日星期日01:
20
关闭时间
2011年04月3日星期日01:
20
3-2.求和
成绩:
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
开启时间
2011年03月7日星期一08:
00
折扣时间
2011年03月27日星期日22:
00
关闭时间
2011年04月3日星期日22:
00
允许迟交:
否
3-3.计算时钟的夹角
成绩:
10/折扣:
0.8
背景:
钟面上的时针和分针之间的夹角总是在0度~359度之间。
举例来说,在十二点的时候两针之间的夹角为0度,而在六点的时候夹角为180度,在三点的时候为90度。
本题要解决的是计算12:
00到11:
59之间任意一个时间的夹角。
输入:
每组测试数据包含两个数字:
第一个数字代表小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
输出格式如下所示。
输入:
1230
输出:
At12:
30theangleis165.0degrees.
友情提示:
以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.12 0↵
以文本方式显示
1.At 12:
00 the angle is 0.0 degrees.↵
7秒
64M
0
测试用例2
以文本方式显示
1.3 3↵
以文本方式显示
1.At 3:
03 the angle is 73.5 degrees.↵
7秒
64M
0
测试用例3
以文本方式显示
1.12 30↵
以文本方式显示
1.At 12:
30 the angle is 165.0 degrees.↵
7秒
64M
1.#include
main()
{
float a,b,c,d,i;
scanf("%f %f",&a,&b);
c=30*a+0.5*b;
d=6*b;
i=fabs(c-d);
if(i>180) i=360.0-i;
printf("At %1.0f:
%02.0f the angle is %2.1f degrees.\n",a,b,i);
getch();
}#include
2.main()
3.{
4. int a,b;
5. float c,d,e;
6. scanf("%d %d",&a,&b);
7. d=6*b;
8. c=30*a+0.5*b;
9. if(c>=360)
10. {c=c-360;}
11. else
12. {c=c;}
13. e=d-c;
14. e=fabs(e);
15. printf("At ");
16. printf("%d",a);
17. printf(":
");
18. if(b<=9)
19. {printf("0");
20. printf("%d",b);}
21. else
22. printf("%-2d",b);
23. printf(" the angle is ");
24. printf("%.1f",e);
25. printf(" degrees.\n");
26.}
3-4.求亲密数
成绩:
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 "stdio.h"
2.main()
3.{int a,b=0,c=0,i,j=0;
4.scanf("%d",&a);
5.for(i=1;i<=a/2;i++)
6.if(a%i==0) b+=i;
7.if(a<=b)
8.for(i=1;i<=b/2;i++)
9.if(b%i==0) c+=i;
10.if(c==a) {printf("%d-%d\n",a,b);j=1;}
11.if(j==0) printf("No output\n");
12.}
4-1.打印实心正方形
成绩:
10/折扣:
0.8
上次你已经打印了一行*号,这次在屏幕上输出一个由星号组成的n行n列的正方形。
程序输入n值,输出如下例(n=4)所示的高和上底均为n的正方形:
****
****
****
****
输入:
高n
输出:
n行n列的正方形
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例3
以文本方式显示
1.4↵
以文本方式显示
1.****↵
2.****↵
3.****↵
4.****↵
1秒
64M
0
1.#include"stdio.h"
2.main()
3.{ int n,i=1,j=1;
4. scanf("%d",&n);
5. while(j<=n)
6. { while(i<=n)
7. { printf("*");
8. i++;
9. }printf("\n");i=1;
10. j++;
11. }
12.}
4-2.学习成绩归类
成绩:
10/折扣:
0.8
学生的学习成绩是百分制,成绩的归类标准是:
90<=成绩<=100 为"super";
80<=成绩<90 为"good";
70<=成绩<80 为"ok";
60<=成绩<70 为"pass"
成绩<60 为"nogood"。
编写程序。
输入若干个成绩,输出成绩和相应的等级。
输入成绩为负时,程序结束,输入成绩大于100分,显示“inputerror”。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.82 42 96 73 80 -1↵
以文本方式显示
1.82 "good"↵
2.42 "no good"↵
3.96 "super"↵
4.73 "ok"↵
5.80 "good"↵
1秒
64M
0
1.#include "stdio.h"
2.main()
3.{ int a=0;
4. while(a>=0)
5. {scanf("%d",&a);
6. if(a>100) printf("%d \"input error\"\n",a);
7. else if(a>=90&&a<=100)
8. printf("%d \"super\"\n",a);
9. else if(a>=80&&a<90)
10. printf("%d \"good\"\n",a);
11. else if(a>=70&&a<80)
12. printf("%d \"ok\"\n",a);
13. else if(a>=60&&a<70)
14. printf("%d \"pass\"\n",a);
15. else if(a>=0&&a<60)
16. printf("%d \"no good\"\n",a);
17. }
18. return 0;
19.}
4-3.输出星期几的英文表示
成绩:
10/折扣:
0.8
输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词"Error(回车)"。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.3↵
以文本方式显示
1.Wednesday↵
无限制
64M
0
1.#include"stdio.h"
2.main()
3.{ int a;
4. scanf("%d",&a);
5. switch(a)
6. { case 7:
printf("Sunday\n");break;
7. case 6:
printf("Saturday\n");break;
8. case 5:
printf("Friday\n");break;
9. case 4:
printf("Thursday\n");break;
10. case 3:
printf("Wednesday\n");break;
11. case 2:
printf("Tuesday\n");break;
12. case 1:
printf("Monday\n");break;
13. default:
printf("Error\n");
14. }
15.}
4-4.求最大数和最小数的算数运算结果
成绩:
10/折扣:
0.8
输入若干个整数,及其要进行的算术运算(+|-|*|/)符号,输出最大整数与最小整数进行给定的算术运算的结果。
输入的整数范围是(0~65535),输入等号作为输入的结束,输出格式见例题。
输入:
整数序列及其运算序号
输出:
最大数与最小数的算术运算式
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.15,1,11,2,0,3,+,=↵
以文本方式显示
1.15+0=15↵
1秒
64M
0
测试用例4
以文本方式显示
1.1,5,2,0,/,=↵
以文本方式显示
1.Error!
↵
1秒
64M
0
1.#include "stdio.h"
2.main()
3.{
4. char ch,i,j='\\';
5. int max=0,min=65535,n=0;
6. while((ch=getchar())!
='=')
7. {
8. if('0'<=ch&&ch<='9')
9. n=n*10+ch-48;
10. if(ch==','&&j!
=' ')
11. {
12. max=n>max?
n:
max;
13. min=nn:
min;
14. n=0;
15. }
16. if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
17. {i=ch;
18. j=' ';
19. }
20. }
21. switch(i)
22. { case '+':
printf("%d+%d=%d\n",max,min,max+min);break;
23. case '-':
printf("%d-%d=%d\n",max,min,max-min);break;
24. case '*':
printf("%d*%d=%d\n",max,min,max*min);break;
25. case '/':
if(min!
=0)printf("%d/%d=%d\n",max,min,max/min);
26. else printf("Error!
\n");break;
27. }
28.}
(4-5.黑色星期五
成绩:
10/折扣:
0.8
在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。
所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。
输入某年年号和该年的元旦是星期几(1-7),输出该年所有的“黑色星期五”的日期(年/月/日)。
输入:
4位年号和该年元旦是星期几
输出:
所有的“黑色星期五”的日期(年/月/日)
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.2006 7↵
以文本方式显示
1.2006/1/13↵
2.2006/10/13↵
1秒
64M
0