《C语言程序设计—北京理工大学MOOC提交作业.doc》由会员分享,可在线阅读,更多相关《C语言程序设计—北京理工大学MOOC提交作业.doc(43页珍藏版)》请在三一办公上搜索。
1、第一周作业【练习1】HelloWorld成绩0开启时间2014年10月21日 星期二 08:00折扣0.8折扣时间2014年12月7日 星期日 23:55允许迟交否关闭时间2014年12月7日 星期日 23:55让我们学习用C语言向世界问好。“Hello World”示例程序最早出现于1972年,由贝尔实验室成员Brian Kernighan撰写的内部技术文件Introduction to the Language B之中。不久同作者于1974年所撰写的Programming in C: A Tutorial,也延用这个示例。一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初
2、学者所编写的第一个程序。它还可以用来确定该语言的编译器、程序开发环境,以及运行环境是否已经安装妥当。将“Hello World”作为第一个示范程序,已经成为编程语言学习的传统。我们在这里继续传统,这也是一种向前辈们致敬的方式之一吧!最早的程序基本是这个样子的:#include int main() printf(Hello world.n); return 0;请模仿上面的程序,看看是否可以通过编译?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。略第二周作业【练习2】学学scanf和printf的用法吧成绩0开启时间2014年10月21日 星期二 08:00折扣0.8折扣时间20
3、14年12月7日 星期日 23:55允许迟交否关闭时间2014年12月7日 星期日 23:55该如何处理 double 型的数据:如何定义变量类型?如何使用 scanf 函数?如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2 r h ,体积 v= r 2 h 。其中 =3.1415926。输入: 第一行输入圆柱的底面半径 r第二行输入圆柱的高 h输出: s=,v=要求 1. 所有变量都定义为双精度类型2. 结果精确到小数点后两位。作为练习题目:我们已经给您编写好了大部分的代码,请您自己修改几个地方,完成程序的剩余部分。*分隔线*#include#define PAI
4、3.1415926int main() int r,h; double s,v; scanf(%d %d, ); s=2*PAI*r*h; v=PAI*r*r*h; printf(s=%.2f,v=n,s, ); return 0;*分隔线*Code:#include#define PAI 3.1415926int main() int r,h; double s,v; scanf(%d %d,&r,&h); s=2*PAI*r*h; v=PAI*r*r*h; printf(s=%.2f,v=%.2fn,s,v); return 0;第三周作业1、输出字符的 ASCII 码成绩10开启时间20
5、14年10月21日 星期二 10:00折扣0.8折扣时间2014年11月5日 星期三 23:55允许迟交否关闭时间2014年11月12日 星期三 23:55背景:我们在计算机基础中已经学过:字母在计算机中采用ASCII码进行存储。下面要从键盘上输入任意一个字符,然后输出该字符对应的ASCII码。输入: 一个字符输出: 该字符对应的ASCII码测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. A以文本方式显示 1. TheASCIIofcharacterAis65.1秒64M0测试用例 2以文本方式显示 1. Z以文本方式显示 1. TheASCIIofcharacte
6、rZis90.1秒64M0测试用例 3以文本方式显示 1. 0以文本方式显示 1. TheASCIIofcharacter0is48.1秒64M0测试用例 4以文本方式显示 1. 1以文本方式显示 1. TheASCIIofcharacter1is49.1秒64M0测试用例 5以文本方式显示 1. +以文本方式显示 1. TheASCIIofcharacter+is43.1秒64M0Code:#includeint main() char ch; scanf(%c,&ch); printf(The ASCII of character %c is %d.,ch,ch);return 0;2、一
7、年级的算术题成绩10开启时间2014年10月21日 星期二 10:00折扣0.8折扣时间2014年11月5日 星期三 23:55允许迟交否关闭时间2014年11月12日 星期三 23:55背景:小明上小学一年级了,老师已经教会了他们进行整数的 +、-、*、/、% 计算,下面老师开始出题,给出一个简单的算术表达式,请小明给出计算结果。输入: 接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出: 分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 103以文本方式显示 1. 10+3=13
8、2. 10-3=73. 10*3=304. 10/3=35. 10%3=11秒64M0测试用例 2以文本方式显示 1. 11-3以文本方式显示 1. 11+-3=82. 11-3=143. 11*-3=-334. 11/-3=-35. 11%-3=21秒64M0Code#includeint main() int a, b; char ch = 37; scanf(%d%d,&a,&b); printf(%d+%d=%dn,a,b,a + b); printf(%d-%d=%dn,a,b,a - b); printf(%d*%d=%dn,a,b,a * b); printf(%d/%d=%dn
9、,a,b,a / b); printf(%d%c%d=%dn,a,ch,b,a % b); return 0;3、判断三角形的形状成绩10开启时间2014年10月21日 星期二 10:00折扣0.8折扣时间2014年11月5日 星期三 23:55允许迟交否关闭时间2014年11月12日 星期三 23:55要求输入三角型的三条边,判断三角形的形状。假设输入的三边边长均0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle等腰三角形:isoceles triangle不构成三角形:non-triangle一般三角形:triangle测试输入期待的输出
10、时间限制内存限制额外进程测试用例 1以文本方式显示 1. 222以文本方式显示 1. equilateraltriangle.1秒64M0测试用例 2以文本方式显示 1. 322以文本方式显示 1. isocelestriangle.1秒64M0测试用例 3以文本方式显示 1. 131以文本方式显示 1. non-triangle.1秒64M0测试用例 4以文本方式显示 1. 345以文本方式显示 1. triangle.1秒64M0测试用例 5以文本方式显示 1. 232以文本方式显示 1. isocelestriangle.1秒64M0测试用例 6以文本方式显示 1. 223以文本方式显示
11、 1. isocelestriangle.1秒64M0测试用例 7以文本方式显示 1. 311以文本方式显示 1. non-triangle.1秒64M0测试用例 8以文本方式显示 1. 113以文本方式显示 1. non-triangle.1秒64M0测试用例 9以文本方式显示 1. 543以文本方式显示 1. triangle.1秒64M0测试用例 10以文本方式显示 1. 453以文本方式显示 1. triangle.1秒64M0Code#includeint main() int a, b, c; scanf(%d%d%d,&a,&b,&c);if(a + b c & a + c b
12、& b + c a)if(a = b & a = c & b = c)printf(equilateral triangle.n);return 0;if(a = b | a = c | b = c)printf(isoceles triangle.n);return 0;printf(triangle.n);elseprintf(non-triangle.n); return 0;第四周作业1.【中学】计算时钟的夹角成绩10开启时间2014年10月28日 星期二 08:25折扣0.8折扣时间2014年11月12日 星期三 08:25允许迟交否关闭时间2014年11月19日 星期三 08:25
13、背景:钟面上的时针和分针之间的夹角总是在 0 180之间 ( 包括 0和180) 。举例来说,在十二点的时候两针之间的夹角为 0,而在六点的时候夹角为180,在三点的时候为90。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。输入:每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 0, 59 上 ) 。输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。再看一看,想一想:是否可以不用if 语句,只使用 printf 函数来简化你的程序?测试输入期待
14、的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 120以文本方式显示 1. At12:00theangleis0.0degrees.1秒64M0测试用例 2以文本方式显示 1. 1230以文本方式显示 1. At12:30theangleis165.0degrees.1秒64M0测试用例 3以文本方式显示 1. 60以文本方式显示 1. At6:00theangleis180.0degrees.1秒64M0测试用例 4以文本方式显示 1. 30以文本方式显示 1. At3:00theangleis90.0degrees.1秒64M0测试用例 5以文本方式显示 1. 33以文本方
15、式显示 1. At3:03theangleis73.5degrees.1秒64M0测试用例 6以文本方式显示 1. 39以文本方式显示 1. At3:09theangleis40.5degrees.1秒64M0测试用例 7以文本方式显示 1. 40以文本方式显示 1. At4:00theangleis120.0degrees.1秒64M0测试用例 8以文本方式显示 1. 559以文本方式显示 1. At5:59theangleis174.5degrees.1秒64M0测试用例 9以文本方式显示 1. 420以文本方式显示 1. At4:20theangleis10.0degrees.1秒64M
16、0测试用例 10以文本方式显示 1. 00以文本方式显示 1. At0:00theangleis0.0degrees.1秒64M0o Code#includeint main() int hour, minute, temp; float angle, h_angle, m_angle; scanf(%d%d,&hour,&minute); temp = hour; if(hour = 12) temp = 0; h_angle = temp * 30.0 + minute * 0.5; m_angle = minute * 6.0; angle = h_angle m_angle ? h_a
17、ngle - m_angle : m_angle - h_angle; if(angle 180.0) angle = 360.0 - angle; printf(At %d:%02d the angle is %.1f degrees.n,hour,minute,angle); return 0;2.【日期】确定母亲节成绩10开启时间2014年10月28日 星期二 10:35折扣0.8折扣时间2014年11月12日 星期三 10:35允许迟交否关闭时间2014年11月19日 星期三 10:35母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。输入: 年份输出: 日期(
18、5月的哪一天)测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 2014以文本方式显示 1. 111秒64M0测试用例 2以文本方式显示 1. 2015以文本方式显示 1. 101秒64M0测试用例 3以文本方式显示 1. 2012以文本方式显示 1. 131秒64M0Code:#includeint main() int year, n, week, total, day; scanf(%d,&year); if(year % 4 = 0 & year % 100 != 0) | year % 400 = 0) week = (year + year / 4 + y
19、ear / 400 - year / 100 - 1) % 7; for(n = 0;n 5; n+) if(n = 0) total = 0; if(n = 1 | n = 3) total += 31; if(n = 2) total += 29; if(n = 4) total += 30; else week = (year + year / 4 + year / 400 - year / 100) % 7; for(n = 0; n 1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。输入:年 月 日输出:0
20、6。 星期日用 0 表示,星期一用 1 表示,星期二用 2 表示.星期六用 6 表示。假设年份大于1900。先想一想:我们现在只会使用 if 语句,该如何建立数学模型?测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 2013311以文本方式显示 1. 11秒64M0测试用例 2以文本方式显示 1. 20131315以文本方式显示 1. monthiserror.1秒64M0测试用例 3以文本方式显示 1. 2013332以文本方式显示 1. dayiserror.1秒64M0Code:#includeint main() int year, month, day,
21、n, week, total; scanf(%d%d%d,&year, &month, &day); if(year = 13 | month 1) printf(month is error.n); return 0; if(day 31)printf(day is error.n); return 0; break; case 4: case 6:case 9:case 11: if(day 30)printf(day is error.n); return 0; break;case 2:if(year % 4 = 0 & year % 100 != 0) | year % 400 =
22、0) if(day 29) printf(day is error.n); return 0; else if(day 28) printf(day is error.n); return 0; break; if(year % 4 = 0 & year % 100 != 0) | year % 400 = 0) week = (year + year / 4 + year / 400 - year / 100 - 1) % 7; for(n = 0;n month; n+) if(n = 0) total = 0; if(n = 1 | n = 3 | n = 5 | n = 7 | n =
23、 8 | n = 10 ) total += 31; if(n = 2) total += 29; if(n = 4 | n = 6 | n = 9 | n = 11) total += 30; else week = (year + year / 4 + year / 400 - year / 100) % 7; for(n = 0; n month; n+) if(n = 0) total = 0; if(n = 1 | n = 3 | n = 5 | n = 7 | n = 8 | n = 10 ) total += 31; if(n = 2) total += 28; if(n = 4
24、 | n = 6 | n = 9 | n = 11) total += 30; week = (week + total + day - 1) % 7; printf(%dn,week); return 0;4.【中学】求最后3位数值(选做)成绩0开启时间2014年10月28日 星期二 10:45折扣0.8折扣时间2014年11月12日 星期三 10:45允许迟交否关闭时间2014年11月19日 星期三 10:45小明在中学会求一个数的 n 次方了,但计算机还不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。
25、输入: a 和 n 的值。假设 a=150 。输出: 求 a 的 n 次方的最后 3 位数。提示:再想一想,你的方法对吗?你用的是什么数据类型?测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 100以文本方式显示 1. Thelast3numbersis1.1秒64M0测试用例 2以文本方式显示 1. 28以文本方式显示 1. Thelast3numbersis256.1秒64M0测试用例 3以文本方式显示 1. 10010以文本方式显示 1. Thelast3numbersis000.1秒64M0o Code:o #includeo int main()o o i
26、nt a, n, i, total = 1;o scanf(%d%d,&a,&n);o if(n = 0) total = 1;o for(i = 1; i = n; i+)o o total *= a;o o total = total % 1000;o printf(The last 3 numbers is %d.n,total);o return 0;第五周作业1.锻炼身体吧成绩10开启时间2014年11月4日 星期二 07:50折扣0.8折扣时间2014年11月19日 星期三 07:50允许迟交否关闭时间2014年11月26日 星期三 07:50题目描述:沫沫,灰灰和渣渣去锻炼身体,
27、如果对他们跑步的距离分别只计整数 a、 b、 c,由于他们身高的差距,造成了 a=b=c,并且渣渣跑了N米之后就再也跑不动了。但是,按照他们事先的约定: 只有当 c*c=a*a+b*b 时,他们的锻炼才有效果。现在他们三个人想知道,如果渣渣的极限N已知,那么有多少种有锻炼效果的跑步方案(即a, b, c有多少种可能的取值)。输入:一个整数N,表示渣渣的体力极限, N = 5000。输出:一个整数,代表他们跑步方案的个数。Hint:对于输入N=5,有方案 a=3, b=4, c=5, 共一种。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 5以文本方式显示 1. 11
28、秒64M0测试用例 2以文本方式显示 1. 22以文本方式显示 1. 61秒64M0Code:#includeint main() int a = 1,b = 1,c = 1,maxnum,count = 0; scanf(%d,&maxnum); for(c = 1;c = maxnum;c+) for(a = 1; a c; a+ ) for(b = 1; b c; b+) if(c*c = a*a +b*b)&(a = b) count+; printf(%dn,count); return 0;2.寻找特殊偶数成绩10开启时间2014年11月4日 星期二 08:00折扣0.8折扣时间2
29、014年11月19日 星期三 08:00允许迟交否关闭时间2014年11月26日 星期三 08:00背景有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 300030202. 604060903. 00以文本方式显示 1. 30123014301630182. counter=43. 604260
30、48605260546058607260746078608260844. counter=101秒64M0测试用例 2以文本方式显示 1. 91012. 87-13. 00以文本方式显示 1. Error2. Error1秒64M0Code:#includeint main() int maxnum, minnum, n, g, s, b, q, count = 0; while(1) scanf(%d%d,&minnum,&maxnum); if(minnum = 0 & maxnum = 0) return 0; if(minnum 999 & minnum 999 & maxnum =
31、minnum) for(n = minnum; n = maxnum; n+) if(n % 2 = 0) q = n / 1000; b = n % 1000 / 100; s = n % 100 / 10; g = n % 10; if(q != b & q != s & q != g & b != s & b != g & s != g) count+;printf(%d ,n); printf(n); printf(counter=%dn,count); count = 0; else printf(Errorn); return 0;3.求最小 m 值成绩10开启时间2014年11月
32、4日 星期二 08:05折扣0.8折扣时间2014年11月19日 星期三 08:05允许迟交否关闭时间2014年11月26日 星期三 08:05求满足下列不等式的最小 m。. 1 + 2 + 3 + 4 + . + m n例如:n=100,当 m =14 时,满足:1+2+3+4+.+13=91100。输入:n输出:m测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 100以文本方式显示 1. 141秒64M0Code:#includeint main() int max, i = 0, sum = 0; scanf(%d,&max); while(sum max)
33、i+; sum += i; printf(%dn,i);第六周作业数字正方型成绩10开启时间2014年11月12日 星期三 05:55折扣0.8折扣时间2014年11月26日 星期三 05:55允许迟交否关闭时间2014年12月3日 星期三 05:55这是双重循环的入门题目,大家来看看,你会做吗?输入 n 的值,输出如下例( n=4 )所示的由数字组成的正方型。 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16输入: n输出: 数字组成的正方型测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 1以文本方式显示 1. 11秒64M0测试用例 2
34、以文本方式显示 1. 2以文本方式显示 1. 122. 341秒64M0测试用例 3以文本方式显示 1. 3以文本方式显示 1. 1232. 4563. 7891秒64M0测试用例 4以文本方式显示 1. 5以文本方式显示 1. 123452. 6789103. 11121314154. 16171819205. 21222324251秒64M0Code#includeint main() int n, x, y, count = 0; scanf(%d,&n); for(y = 0; y n; y+) for(x = 0; x n; x+) count+; printf(%3d,count); printf(n); return 0;空心字符菱形成绩10开启时间2014年11月13日 星期四 06:10折扣0.8折扣时间2014年11月26日 星期三 06:10允许迟交否关闭时间2014年12月3日 星期三 06:10输入: 菱型起始字母和菱形的高度。输出: 参看测试用例,打印空心的由字符组成的菱形。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. C4以文本方式显示