北京理工大学级C程序设计非信息类答案解析part.docx
《北京理工大学级C程序设计非信息类答案解析part.docx》由会员分享,可在线阅读,更多相关《北京理工大学级C程序设计非信息类答案解析part.docx(104页珍藏版)》请在冰豆网上搜索。
北京理工大学级C程序设计非信息类答案解析part
北京理工大学2013级C程序设计非信息类答案Part1
1.【入门】Helloworld.
成绩
5
开启时间
2014年03月3日星期一08:
00
折扣
0.8
折扣时间
2014年03月18日星期二23:
55
允许迟交
否
关闭时间
2014年03月18日星期二23:
55
让我们用C语言向世界问好。
最早的程序基本是这个样子的:
#include
intmain()
{
printf("Helloworld.\n");
return0;
}
请模仿上面的程序,看看是否可以通过编译?
如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
输入:
无输出:
Helloworld.
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.↵
1.Hello world.↵
1秒
64M
0
1.#include
2.int main(){printf("Hello world.\n"); return 0;}
2.【入门】输出你的第一个图形
成绩
5
开启时间
2014年02月25日星期二14:
00
折扣
0.8
折扣时间
2014年03月18日星期二23:
55
允许迟交
否
关闭时间
2014年03月18日星期二23:
55
背景:
我们已经学习了printf函数的基本使用方法,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。
程序如下:
#include
int main()
{
printf("****\n");
printf("****\n");
printf("****\n");
printf("****\n");
return 0;
}
要求:
按照上面的程序范例,编写一个小程序,要求输出的是4行由*号组成的等腰三角形。
输入:
无。
输出:
指定图形。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.↵
*↵
1. ***↵
2. *****↵
3.*******↵
1秒
64M
0
1.#include
2.int main()
3.{ printf(" *\n");
4. printf(" ***\n");
5. printf(" *****\n");
6. printf("*******\n");
7. return 0;}
3.【入门】求A+B
成绩
5
开启时间
2014年02月3日星期一14:
00
折扣
0.8
折扣时间
2014年03月18日星期二23:
55
允许迟交
否
关闭时间
2014年03月18日星期二23:
55
我们已经学了如何使用scanf函数中输入整型数据(%d),下面让我们使用scanf函数来输入两个整数,然后求它们的和。
输入:
整数1 整数2输出:
整数1+整数2=和
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.10↵
2.20↵
1.10+20=30↵
1秒
64M
0
测试用例2
1.-10↵
2.10↵
1.-10+10=0↵
1秒
64M
0
测试用例3
1.300 200↵
1.300+200=500↵
1秒
64M
0
1.#include
2.int main()
3.{ int a,b; scanf("%d",&a); scanf("%d",&b);
4.printf("%d+%d=%d\n",a,b,a+b);return 0;}
4.【入门】求整数的3次方
成绩
5
开启时间
2014年02月25日星期二14:
00
折扣
0.8
折扣时间
2014年03月18日星期二23:
55
允许迟交
否
关闭时间
2014年03月18日星期二23:
55
输入一个整数x,输出x的3次方。
想一想,在C语言中如何用公式来表达x的3次方?
输入:
一个整数。
输出:
该整数的3次方值。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.3↵
1.27↵
1秒
64M
0
测试用例2
1.-3↵
1.-27↵
1秒
64M
0
1.#include
2.int main(){int x;scanf("%d",&x);printf("%d\n",x*x*x);return 0;}
5.【入门】输出字符的ASCII码
成绩
5
开启时间
2014年02月25日星期二14:
00
折扣
0.8
折扣时间
2014年03月18日星期二23:
55
允许迟交
否
关闭时间
2014年03月18日星期二23:
55
背景:
我们在计算机基础中已经学过:
字母在计算机中采用ASCII码进行存储。
下面要从键盘上输入任意一个字符,然后输出该字符对应的ASCII码。
输入:
一个字符输出:
该字符对应的ASCII码
说明:
如果编程有问题,请先看看教材P51的例题3-4,然后再办法发挥一下……
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.A↵
1.The ASCII of character 'A' is 65.↵
1秒
64M
0
测试用例2
1.Z↵
1.The ASCII of character 'Z' is 90.↵
1秒
64M
0
测试用例3
1.0↵
1.The ASCII of character '0' is 48.↵
1秒
64M
0
测试用例4
1.1↵
1.The ASCII of character '1' is 49.↵
1秒
64M
0
测试用例5
1.+↵
1.The ASCII of character '+' is 43.↵
无限制
64M
0
1.#include
2. int main(){char a;scanf("%c",&a);
3. printf("The ASCII of character '%c' is %d.\n",a,a);
4. return 0;}
6.【入门】大小写字母转换
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月4日星期五23:
55
允许迟交
否
关闭时间
2014年04月6日星期日23:
55
我们知道,英文字母是分大小写的,下面我们需要编写一个简单的程序,将输入的全部小写字母变换为大写字母,大写字母变换为小写字母,非写字母保持不变。
输入:
一个字符输出:
变换后的字符
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.A↵
1.a↵
1秒
64M
0
测试用例2
1.Z↵
1.z↵
1秒
64M
0
测试用例3
1.b↵
1.B↵
1秒
64M
0
测试用例4
1.y↵
1.Y↵
1秒
64M
0
测试用例5
1.#↵
1.#↵
无限制
64M
0
1.#include
2.int main()
3.{char x,y;scanf("%c",&x);
4.if(x>=65&&x<=90) y=x+32;
5.else if(x>=97&&x<=122)y=x-32;
6.else y=x;
7.printf("%c\n",y);return 0;}
7.【小学】一年级的算术题
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月4日星期五23:
55
允许迟交
否
关闭时间
2014年04月6日星期日23:
55
背景:
小明上小学一年级了,老师已经教会了他们整数的+、-、*、/、%计算,下面老师开始出题,请小明给出计算结果。
输入:
两个整数,每个整数之间使用空格分隔。
例如输入格式为:
123 444
输出:
分别输出按照整型数据进行+、-、*、/、*之后的运行结果。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.10 3↵
1.10+3=13↵
2.10-3=7↵
3.10*3=30↵
4.10/3=3↵
5.10%3=1↵
1秒
64M
0
1.#include
2.int main(){int a,b;scanf("%d%d",&a,&b);
3.printf("%d+%d=%d\n",a,b,a+b);
4.printf("%d-%d=%d\n",a,b,a-b);
5.printf("%d*%d=%d\n",a,b,a*b);
6.printf("%d/%d=%d\n",a,b,a/b);
7.printf("%d%%%d=%d\n",a,b,a%b);return 0;}
8.【中学】判断三角形的形状
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月4日星期五23:
55
允许迟交
否
关闭时间
2014年04月6日星期日23:
55
小明上了初中,开始学习如何求解一元二次方程。
要求:
输入三角型的三条边,判断三角形的形状。
假设输入的三边边长均>0。
(提示:
本题中应该要用到if语句嵌套)
输入:
三角型的3条边的长度(int型)。
输出:
等边三角形:
equilateraltriangle.等腰三角形:
isocelestriangle.不构成三角形:
non-triangle.一般三角形:
triangle.
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.2 2 2↵
1.equilateral triangle.↵
1秒
64M
0
测试用例2
1.3 2 2↵
1.isoceles triangle.↵
1秒
64M
0
测试用例3
1.1 3 1↵
1.non-triangle.↵
1秒
64M
0
测试用例4
1.3 4 5↵
1.triangle.↵
1秒
64M
0
1.#include
2.int main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);
3.if(a+b<=c||a+c<=b||b+c<=a) printf("non-triangle.\n");
4.else if(a==b&&b==c) printf("equilateral triangle.\n");
5.else if(a==b&&b!
=c||a==c&&c!
=b||b==c&&c!
=a) printf("isoceles triangle.\n") ;
6.else printf("triangle.\n");
7.return 0;}
9.【中学】计算时钟的夹角
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月6日星期日23:
55
允许迟交
是
关闭时间
2014年04月11日星期五23:
55
背景:
钟面上的时针和分针之间的夹角总是在0~180之间(包括0和180)。
举例来说,在十二点的时候两针之间的夹角为0,而在六点的时候夹角为180,在三点的时候为90。
本题要解决的是计算12:
00到11:
59之间任意一个时间的夹角。
输入:
每组测试数据包含两个数字:
第一个数字代表小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
输出格式如下所示。
再看一看,想一想:
是否可以不用if语句,只使用printf函数来简化你的程序?
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.12 0↵
1.At 12:
00 the angle is 0.0 degrees.↵
1秒
64M
0
测试用例2
1.12 30↵
1.At 12:
30 the angle is 165.0 degrees.↵
1秒
64M
0
测试用例3
1.6 0↵
1.At 6:
00 the angle is 180.0 degrees.↵
1秒
64M
0
测试用例4
1.3 0↵
1.At 3:
00 the angle is 90.0 degrees.↵
1秒
64M
0
测试用例5
1.3 3↵
1.At 3:
03 the angle is 73.5 degrees.↵
1秒
64M
0
测试用例6
1.3 9↵
1.At 3:
09 the angle is 40.5 degrees.↵
1秒
64M
0
测试用例7
1.4 0↵
1.At 4:
00 the angle is 120.0 degrees.↵
1秒
64M
0
测试用例8
1.5 59↵
1.At 5:
59 the angle is 174.5 degrees.↵
1秒
64M
0
测试用例9
1.4 20↵
1.At 4:
20 the angle is 10.0 degrees.↵
1秒
64M
0
测试用例10
1.0 0↵
1.At 0:
00 the angle is 0.0 degrees.↵
1秒
64M
0
1.#include
2.#include
3.main(){int x,y;float z; scanf("%d%d",&x,&y);
4. z=fabs(30*x-(float)y*11/2); z=z>180?
360-z:
z;
5. if(y<10) printf("At %d:
0%d the angle is %.1f degrees.\n",x,y,z);
6.else printf("At %d:
%d the angle is %.1f degrees.\n",x,y,z);}
10.【日期】根据日期求星期
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月6日星期日23:
55
允许迟交
否
关闭时间
2014年04月11日星期五23:
55
任意给出一个年月日,求出是星期几。
输入:
年月日输出:
0~6。
星期日用0表示,星期一用1表示,星期二用2表示......星期六用6表示。
假设年份大于1900。
先想一想:
我们现在只会使用if语句,该如何建立数学模型?
找到数学模型是解决本题的关键。
看了部分先完成同学提交的程序,有人居然使用数组了,这个太不应该,因为我们根本就没有讲数组,让我怀疑使用数组的程序是抄的。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.2013 3 11↵
1.1↵
1秒
64M
0
测试用例2
1.2013 3 15↵
1.5↵
1秒
64M
0
测试用例3
1.2013 3 17↵
1.0↵
1秒
64M
0
1.#include
2.int main()
3.{int year,month,day,ty,m,y,c,d,weeks; scanf("%d%d%d",&year,&month,&day);
4.ty=year;m=month;if(m<3){m=12+m;ty--;}
5.y=ty%100;c=ty/100;d=day;
6.weeks=(y+y/4+c/4-2*c+26*(m+1)/10+d-1)%7;printf("%d\n",weeks);}
11.【中学】求解一元二次方程
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月11日星期五23:
55
允许迟交
是
关闭时间
2014年04月11日星期五23:
55
初中的小明已经开始学习求解一元二次方程了,下面让我们来教计算机如何求解。
输入a,b,c,求一元二次方程ax²+bx+c=0的根。
输入:
假设a,b,c均int。
输出:
要求输出的根为double型,保留6位小数。
说明:
如果不会作,请参考教材P108的例5-17
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.0 0 0↵
1.Input error!
↵
1秒
64M
0
测试用例2
1.0 0 10↵
1.Input error!
↵
1秒
64M
0
测试用例3
1.0 10 0↵
1.x=0.000000↵
1秒
64M
0
测试用例5
1.10 0 0↵
1.x1=x2=0.000000↵
1秒
64M
0
测试用例6
1.10 20 0↵
1.x1=0.000000↵
2.x2=-2.000000↵
1秒
64M
0
测试用例8
1.10 0 20↵
1.x1=1.414214i↵
2.x2=-1.414214i↵
1秒
64M
0
测试用例9
1.1 2 1↵
1.x1=x2=-1.000000↵
1秒
64M
0
测试用例10
1.1 2 -1↵
1.x1=0.414214↵
2.x2=-2.414214↵
1秒
64M
0
测试用例11
1.2 2 2↵
1.x1=-0.500000+0.866025i↵
2.x2=-0.500000-0.866025i↵
1秒
64M
0
1.#include
2.#include
3.void main(){double a,b,c,d; scanf("%lf%lf%lf",&a,&b,&c);
4.d=b*b-4*a*c;if(a==0&&b==0) printf("Input error!
\n");
5.else if(a==0) printf("x=%lf\n",c==0?
0:
-c/b);
6.else if(d==0) printf("x1=x2=%.6lf\n",b==0?
0:
-b/(2*a));
7.else if(d>0) printf("x1=%lf\nx2=%lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));
8.else if(b==0) printf("x1=%lfi\nx2=-%lfi\n",sqrt(-d)/(2*a),sqrt(-d)/(2*a));
9.else printf("x1=%lf+%lfi\nx2=%lf-%lfi\n",-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a));}
12.【中学】找出最大素数
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月11日星期五23:
55
允许迟交
否
关闭时间
2014年04月11日星期五23:
55
小明在中学学习了什么是素数。
素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。
输入:
取值范围输出:
该范围内的最大素数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
1.100↵
1.The max prime number is 97.↵
1秒
64M
0
1.#include
2.#include
3.int IsPrime(int n) {int i;
4. for(i=2;i<=sqrt(n);i++)
5. if(n%i==0) return(0);
6. return
(1);}
7.void main()
8.{int n;scanf("%d",&n);
9. for(;;n--) if(IsPrime(n)) break;
10.printf("The max prime number is %d.\n",n);}
13.【小学】再做一年级算术题
成绩
5
开启时间
2014年03月17日星期一08:
00
折扣
0.8
折扣时间
2014年04月11日星期五23:
55
允许迟交
否
关闭时间
2014年04月11日星期五23:
55
小明上小学一年级了,老师已经教会了他们进行整数的+、-、*、/、%计算,下面老师开始出题,给出一个简单的算术表达式,请小明给出计算结果,请你用switch语句编写一个程序,帮小明算出结果。
输入:
操作数1op操作数2输出:
计算结果提示:
关键是在表达式输入过程中如何取出运算符?
测试输入