C语言程序设计北京理工大学MOOC提交作业.docx
《C语言程序设计北京理工大学MOOC提交作业.docx》由会员分享,可在线阅读,更多相关《C语言程序设计北京理工大学MOOC提交作业.docx(57页珍藏版)》请在冰豆网上搜索。
![C语言程序设计北京理工大学MOOC提交作业.docx](https://file1.bdocx.com/fileroot1/2023-1/30/7ef4dc42-a9a3-4324-a0fd-3cefc546fca3/7ef4dc42-a9a3-4324-a0fd-3cefc546fca31.gif)
C语言程序设计北京理工大学MOOC提交作业
第一周作业
【练习1】HelloWorld
成绩
0
开启时间
2014年10月21日星期二08:
00
折扣
0.8
折扣时间
2014年12月7日星期日23:
55
允许迟交
否
关闭时间
2014年12月7日星期日23:
55
让我们学习用C语言向世界问好。
“HelloWorld”示例程序最早出现于1972年,由贝尔实验室成员BrianKernighan撰写的内部技术文件《IntroductiontotheLanguageB》之中。
不久同作者于1974年所撰写的《ProgramminginC:
ATutorial》,也延用这个示例。
一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初学者所编写的第一个程序。
它还可以用来确定该语言的编译器、程序开发环境,以及运行环境是否已经安装妥当。
将“HelloWorld”作为第一个示范程序,已经成为编程语言学习的传统。
我们在这里继续传统,这也是一种向前辈们致敬的方式之一吧!
最早的程序基本是这个样子的:
#include
intmain()
{
printf("Helloworld.\n");
return0;
}
请模仿上面的程序,看看是否可以通过编译?
如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
略
第二周作业
【练习2】学学scanf和printf的用法吧
成绩
0
开启时间
2014年10月21日星期二08:
00
折扣
0.8
折扣时间
2014年12月7日星期日23:
55
允许迟交
否
关闭时间
2014年12月7日星期日23:
55
该如何处理double型的数据:
如何定义变量类型?
如何使用scanf函数?
如果已知圆柱的底面半径r,以及高h,则可计算出圆柱的侧面积s=2πrh,体积v=πr2h。
其中π=3.1415926。
输入:
第一行输入圆柱的底面半径r
第二行输入圆柱的高h
输出:
s=<圆柱的侧面积>,v=<圆柱的体积>
要求
1.所有变量都定义为双精度类型
2.结果精确到小数点后两位。
作为练习题目:
我们已经给您编写好了大部分的代码,请您自己修改几个地方,完成程序的剩余部分。
**********************************************分隔线************
#include
#definePAI 3.1415926
intmain()
{
intr,h;
doubles,v;
scanf("%d%d", );
s=2*PAI*r*h;
v=PAI*r*r*h;
printf("s=%.2f,v= \n",s, );
return0;
}
**********************************************分隔线************
Code:
#include
#definePAI3.1415926
intmain()
{
intr,h;
doubles,v;
scanf("%d%d",&r,&h);
s=2*PAI*r*h;
v=PAI*r*r*h;
printf("s=%.2f,v=%.2f\n",s,v);
return0;
}
第三周作业
1、输出字符的ASCII码
成绩
10
开启时间
2014年10月21日星期二10:
00
折扣
0.8
折扣时间
2014年11月5日星期三23:
55
允许迟交
否
关闭时间
2014年11月12日星期三23:
55
背景:
我们在计算机基础中已经学过:
字母在计算机中采用ASCII码进行存储。
下面要从键盘上输入任意一个字符,然后输出该字符对应的ASCII码。
输入:
一个字符
输出:
该字符对应的ASCII码
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例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.↵
1秒
64M
0
Code:
#include
intmain()
{
charch;
scanf("%c",&ch);
printf("TheASCIIofcharacter'%c'is%d.",ch,ch);
return0;
}
2、一年级的算术题
成绩
10
开启时间
2014年10月21日星期二10:
00
折扣
0.8
折扣时间
2014年11月5日星期三23:
55
允许迟交
否
关闭时间
2014年11月12日星期三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
测试用例2
以文本方式显示
1.11 -3↵
以文本方式显示
1.11+-3=8↵
2.11--3=14↵
3.11*-3=-33↵
4.11/-3=-3↵
5.11%-3=2↵
1秒
64M
0
Code
#include
intmain()
{
inta,b;
charch=37;
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d\n",a,b,a/b);
printf("%d%c%d=%d\n",a,ch,b,a%b);
return0;
}
3、判断三角形的形状
成绩
10
开启时间
2014年10月21日星期二10:
00
折扣
0.8
折扣时间
2014年11月5日星期三23:
55
允许迟交
否
关闭时间
2014年11月12日星期三23:
55
要求
输入三角型的三条边,判断三角形的形状。
假设输入的三边边长均>0。
输入:
三角型的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
测试用例5
以文本方式显示
1.2 3 2↵
以文本方式显示
1.isoceles triangle.↵
1秒
64M
0
测试用例6
以文本方式显示
1.2 2 3↵
以文本方式显示
1.isoceles triangle.↵
1秒
64M
0
测试用例7
以文本方式显示
1.3 1 1↵
以文本方式显示
1.non-triangle.↵
1秒
64M
0
测试用例8
以文本方式显示
1.1 1 3↵
以文本方式显示
1.non-triangle.↵
1秒
64M
0
测试用例9
以文本方式显示
1.5 4 3↵
以文本方式显示
1.triangle.↵
1秒
64M
0
测试用例10
以文本方式显示
1.4 5 3↵
以文本方式显示
1.triangle.↵
1秒
64M
0
Code
#include
intmain()
{
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&&b==c)
{
printf("equilateraltriangle.\n");
return0;
}
if(a==b||a==c||b==c)
{
printf("isocelestriangle.\n");
return0;
}
printf("triangle.\n");
}
else
{
printf("non-triangle.\n");
}
return0;
}
第四周作业
1.【中学】计算时钟的夹角
成绩
10
开启时间
2014年10月28日星期二08:
25
折扣
0.8
折扣时间
2014年11月12日星期三08:
25
允许迟交
否
关闭时间
2014年11月19日星期三08:
25
背景:
钟面上的时针和分针之间的夹角总是在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
oCode
#include
intmain()
{
inthour,minute,temp;
floatangle,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_angle-m_angle:
m_angle-h_angle;
if(angle>180.0)angle=360.0-angle;
printf("At%d:
%02dtheangleis%.1fdegrees.\n",hour,minute,angle);
return0;
}
2.【日期】确定母亲节
成绩
10
开启时间
2014年10月28日星期二10:
35
折扣
0.8
折扣时间
2014年11月12日星期三10:
35
允许迟交
否
关闭时间
2014年11月19日星期三10:
35
母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。
输入:
年份
输出:
日期(5月的哪一天)
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.2014↵
以文本方式显示
1.11↵
1秒
64M
0
测试用例2
以文本方式显示
1.2015↵
以文本方式显示
1.10↵
1秒
64M
0
测试用例3
以文本方式显示
1.2012↵
以文本方式显示
1.13↵
1秒
64M
0
Code:
#include
intmain()
{
intyear,n,week,total,day;
scanf("%d",&year);
if((year%4==0&&year%100!
=0)||year%400==0)
{
week=(year+year/4+year/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<5;n++)
{
if(n==0)total=0;
if(n==1||n==3)total+=31;
if(n==2)total+=28;
if(n==4)total+=30;
}
}
week=(week+total)%7;
if(week==0)week=7;
day=7-week+8;
printf("%d\n",day);
return0;
}
3.【日期】计算星期
成绩
10
开启时间
2014年10月28日星期二10:
40
折扣
0.8
折扣时间
2014年11月12日星期三10:
40
允许迟交
否
关闭时间
2014年11月19日星期三10:
40
给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。
输入:
年月日
输出:
0~6。
星期日用0表示,星期一用1表示,星期二用2表示......星期六用6表示。
假设年份大于1900。
先想一想:
我们现在只会使用if语句,该如何建立数学模型?
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.2013 3 11↵
以文本方式显示
1.1↵
1秒
64M
0
测试用例2
以文本方式显示
1.2013 13 15↵
以文本方式显示
1.month is error.↵
1秒
64M
0
测试用例3
以文本方式显示
1.2013 3 32↵
以文本方式显示
1.day is error.↵
1秒
64M
0
Code:
#include
intmain()
{
intyear,month,day,n,week,total;
scanf("%d%d%d",&year,&month,&day);
if(year<=1900){
printf("yeariserror.\n");
return0;
}
if(month>=13||month<1){
printf("monthiserror.\n");
return0;
}
if(day<0){
printf("dayiserror.\n");
return0;
}
switch(month){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if(day>31)
{printf("dayiserror.\n");return0;}
break;
case4:
case6:
case9:
case11:
if(day>30)
{printf("dayiserror.\n");return0;}
break;
case2:
if((year%4==0&&year%100!
=0)||year%400==0)
{
if(day>29){printf("dayiserror.\n");return0;}
}
else
{
if(day>28){printf("dayiserror.\n");return0;}
}
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{
if(n==0)total=0;
if(n==1||n==3||n==5||n==7||n==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{
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||n==6||n==9||n==11)total+=30;
}
}
week=(week+total+day-1)%7;
printf("%d\n",week);
return0;
}
4.【中学】求最后3位数值(选做)
成绩
0
开启时间
2014年10月28日星期二10:
45
折扣
0.8
折扣时间
2014年11月12日星期三