VC作业.docx
《VC作业.docx》由会员分享,可在线阅读,更多相关《VC作业.docx(22页珍藏版)》请在冰豆网上搜索。
VC作业
第三次作业:
程序控制语句(顺叙、选择、循环)
注:
建议同学们在深入理解顺序、选择、循环三种控制语句的基础上再做本次作业,过程可能会更顺利,效果可能会更好一些。
1.三角形的面积和周长
对于一个三角形,设它的三条边分别为a、b、c,三角形的周长、面积计算公式分别为:
●Perimeter=a+b+c
●aere*area=s(s-a)(s-b)(s-c),其中:
s=(a+b+c)/2
要求编程实现以下功能:
输入一个正整数repeat(0输入三条边a,b,c,如果能构成一个三角形,输出面积area和周长perimeter(保
留2位小数);否则,输出“Thesesidesdonotcorrespondtoavalidtriangle”。
#include
#include
voidmain()
{
inti,repeat;
floats,a,b,c,area,perimeter;
printf("pleaseinputanumberyouwanttorepeatfrom1to10:
\n");
scanf("%d",&repeat);
for(i=1;i<=repeat;i++)
{printf("Inputthreenumbers\n");
scanf("%f%f%f",&a,&b,&c);
if(a+b>c&&b+c>a&&a+c>b)
{
perimeter=a+b+c;
s=0.5*perimeter;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%6.2f,perimeter=%6.2f\n",area,perimeter);
}else
printf("Thesenumbersdonotcorrespondtoavalidtriangle\n");
}
}
2.竖式打印
键盘输入两个两位正整数a,b(11<=a,b<=99,且a和b都不包含数字’0’),在屏幕上输出a与b相乘的竖式。
注意尽量按照样例的格式进行输出。
样例:
输入
输出
2512
25
*12
------
50
25
------
300
#include
voidmain()
{
intc,d,a,b,r1,r2;
printf("pleaseinputtwonumbersfrom11to99\n");
scanf("%d%d",&a,&b);
r1=a%10;
r2=b%10;
if(a<=99&&a>=11&&b<=99&&b>=11&&r1*r2!
=0)
{c=r2*a;
d=(b-r2)*a/10;
printf("%6d\n",a);
printf("*%5d\n",b);
printf("------\n");
printf("%6d\n",c);
printf("%5d\n",d);
printf("------\n");
printf("%6d\n",a*b);
}
else
printf("theaorbyouinputincludeazero!
");
}
3.铅笔工厂
在铅笔工厂里,一支铅笔要经过下列工序:
首先在一台机器中喷上彩漆,随后在另一台机器中喷上清漆。
遗憾的是这两台机器都有一些毛病。
上彩漆的机器在每处理n支铅笔后就“罢工”一次(也就是下一支铅笔将不被喷上彩漆),而上清漆机器在处理m支铅笔后“罢工”一次。
于是这所工厂出产四种铅笔,一种是成品铅笔,一种是只上过彩漆的铅笔,一种是只上过清漆的铅笔,最后一种是没有上过任何漆的铅笔。
请编写程序,对给定的n,m和k(被处理的铅笔总数),计算四种铅笔的数量。
例如,n=3,m=5以及k=17,那么铅笔的处理情况如下图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
彩漆
√
√
√
×
√
√
√
×
√
√
√
×
√
√
√
×
√
清漆
√
√
√
√
√
×
√
√
√
√
√
×
√
√
√
√
√
17支铅笔中,有12支是成品。
而第12支是什么漆也没上的;第6支只上了彩漆,还有3支只上了清漆。
输入:
仅一行,三个整数n,m和k。
0输出:
在一行中依次输出下列4个数:
a)铅笔成品数。
b)没被上漆的铅笔数。
c)上过彩漆而没上清漆的铅笔数。
d)上过清漆而没上彩漆的铅笔数。
样例1
输入
输出
3517
12113
样例2
输入
输出
999999999999999999999
99999900099900
#include
intgbs(longinta,longintb)
{
intr=1,q,s;
q=a>b?
a:
b;
s=a
a:
b;
a=q;
b=s;
for(;r!
=0;)
{
r=a%b;
a=b;
b=r;
}
r=q/a*s;
return(r);
}
voidmain()
{
longintk,chengp,wuqi,wucai,qingqi,n,m;
scanf("%ld%ld%ld",&n,&m,&k);
n=n+1;
m=m+1;
wuqi=(int)k/gbs(n,m);
wucai=(int)(k/n-wuqi);
qingqi=k/m-wuqi;
chengp=k-wucai-qingqi-wuqi;
printf("%d%d%d%d\n",chengp,wuqi,qingqi,wucai);
}
4.计算工资
某工厂规定一个工人工作时间每个月160小时,每小时工资为5元,如果加班的话,每小时加班费为4元;但是单位同时又规定,一个工人每月加班时间平均计算下来最多不能超过6个小时/天,多出的加班时间不给加班费。
(本题暂规定即使是周末、节假日加班也不能超过6小时;2月份假设全按照28天计算)。
请编程完成如下的功能。
输入一个正整数repeat(0由键盘输入月份数,某个工人的当月工作总时间,计算并打印此工人该月的工资。
#include
voidmain()
{
inti=1,repeat;
scanf("%d",&repeat);
if(repeat<=0||repeat>=10)
printf("pleaseinputanumberfrom0to10again!
");
else
{
while(i<=repeat)
{
intmonth,time,days;
scanf("%d%d",&month,&time);
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;break;
case4:
case6:
case9:
case11:
days=30;break;
case2:
days=28;break;
default:
printf("Themonthyouinputisillegal!
\n");
}
if(time>=160&&time<=(days*6+160))
printf("Thesalaryis%d\n",((time-160)*4+5*160));
elseif(time>=days*6+160)
printf("Thesalaryis%d\n",(days*6*4+5*160));
elseprintf("timeisnotenough!
\n");
i++;
}
}
}
5.个人所得税
按照国家关于《中华人民共和国个人所得税法实施条例》的规定,我国公民个人所得税税率(工资、薪金所得适用)如下表:
个人所得税税率表一(工资、薪金所得适用)
级数
全月应纳税所得额
税率(%)
1
不超过1500元的
3
2
超过1500元至4500元的部分
10
3
超过4500元至9000元的部分
20
4
超过9000元至35000元的部分
25
5
超过35000元至55000元的部分
30
6
超过55000元至80000元的部分
35
7
超过80000元的部分
45
(注:
本表所称全月应纳税所得额是指以每月收入额减除费用三千五百元后的余额,即通常所说的个税起征点。
)
要求编写以下的程序:
输入一个正整数repeat(0输入一个职工的月薪salary,输出应交的个人所得税tax(保留2位小数)。
#include
voidmain()
{
intrepeat,i=1;
scanf("%d",&repeat);
for(;i<=repeat;i++)
{
floatsalary,tax,j;
scanf("%f",&salary);
j=(salary-3500.0);
if(j<=0)
tax=0;
elseif(j<=1500)
tax=0.03*j;
elseif(j<=4500)
tax=0.03*1500+(j-1500)*0.1;
elseif(j<=9000)
tax=0.03*1500+0.1*3000+(j-4500)*0.2;
elseif(j<=35000)
tax=0.03*1500+0.1*3000+4500*0.2+(j-9000)*0.25;
elseif(j<=55000)
tax=0.03*1500+0.1*3000+4500*0.2+26000*0.25+(j-35000)*0.3;
elseif(j<=80000)
tax=0.03*1500+0.1*3000+4500*0.2+26000*0.25+20000*0.3+(j-55000)*0.35;
elsetax=0.03*1500+0.1*3000+4500*0.2+26000*0.25+20000*0.3+25000*0.35+(j-80000)*0.45;
printf("Thetaxis%8.2f\n",tax);
}
}
6.极限求值
编程计算:
1/1!
-1/3!
+1/5!
-1/7!
…+1/(2n-1)!
的值,直到计算到超出数有效表示范围为止。
请输出上述表达式的值,以及这时n的值。
#include
#include
voidmain()
{
intjie(intx);
intn=1,l=0;
floatm=0,q=1;
for(;fabs(1.0/jie(n))>=1e-6;n++)
{
m=m+q/jie(n);
q=-q;
//printf("%d%d",jie(n),m);
}
printf("theresultis%f\n",m);
printf("nis%d\n",n);
}
intjie(intx)
{
inti,s=1;
for(i=1;i<=2*x-1;i++)
s=s*i;
return(s);
}
7.数列求和
N为自然数,a为1~9之间的数字,编程计算a+aa+aaa+……+aa…a(n个a)的值,要求n和a由用户从键盘输入。
并请输出上述表达式的结果值。
#include
voidmain()
{
intn,a,i,s=0;
printf("pleaseinputnanda:
\n(aisanumberfrom1to9)\n");
scanf("%d%d",&n,&a);
if(a<1||a>9)
printf("aiswrong!
");
else
{
for(i=1;i<=n;i++)
{
s=s+a;
a=a*10+a;
}
printf("theresultis%d\n",s);
}
}
8.素数求和
输入2个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
#include
#include
voidmain()
{
intm,n,i,j,k=0,c=0;
floatq;
printf("pleaseinputmandn:
\nthenumberyouinputshouldbe1to500\n");
scanf("%d%d",&m,&n);
if(m<1||m>500||n<1||n>500)
printf("Error!
\n");
else{
for(i=m;i<=n;i++)
{
q=sqrt(i);
for(j=2;j<=q;j++)
{if(i%j==0)
break;
}
if(j>=(int)q+1)
{
k=k+i;
c++;
}
}
printf("theprimesfrom%dto%daddupto%d,thesumofthemis:
%d\n",m,n,c-1,k-1);
}
}
9.数字金字塔
数字金字塔是由1到N的数字构成的一个类似金字塔形状的数阵。
其中,第一层由1个数字1构成,第二层由2个数字2构成,第三层由3个数字3构成(每层均比上一层多1个数字,且每一层的数字之间都有一个空格格开)……
例如,当N=4时,一个4层的数字金字塔如下:
□□□1
□□2□2
□3□3□3
4□4□4□4
为了方便描述,上图中的“□”表示空格。
请你编写程序,对于给定的N,输出相应的数字金字塔。
输入:
数据从键盘输入。
输入只有一行一个整数N(1输出:
输出到屏幕。
有N行,为一个对应的数字金字塔。
样例输入
3
样例输出
1
22
333
#include
voidmain()
{
inti,j,k,N;
printf("inputanumberfrom1to10:
\n");
scanf("%d",&N);
for(j=1;j<=N;j++)
{
for(i=1;i<=N-j;i++)
printf("");
printf("%d",j);
for(k=1;k<=j-1;k++)
printf("%d",j);
printf("\n");
}
}
10.谷场里的老鼠与猫
有4座圆柱形谷仓,谷仓底面圆心位置分别为(5,0),(-5,0),(0,-5),(0,5),谷仓底面直径为5米,谷仓高度为10米。
见下图
今有一只猫和一只老鼠,如果猫只会沿谷仓壁垂直爬上爬下,在地面上左右平移或者前后平移爬行(注意:
本题中假设猫不会走斜线,谷仓下面可以通行)。
编程实现以下的功能:
输入老鼠与猫的坐标位置;
输出猫爬行到老鼠位置的最短路径距离。
#include
#include
voidmain()
{
floatx1,x2,y1,y2,d;
printf("pleaseinputthecoordinatepositionofcat:
");
scanf("%f%f",&x1,&y1);
printf("pleaseinputthecoordinatepositionofmouse:
");
scanf("%f%f",&x2,&y2);
if(sqrt((x1-5.0)*(x1-5.0)+y1*y1)>2.5&&sqrt((x1+5.0)*(x1+5.0)+y1*y1)>2.5&&sqrt((y1-5.0)*(y1-5.0)+x1*x1)>2.5&&sqrt((y1+5.0)*(y1+5.0)+x1*x1)>2.5)
{if(sqrt((x2-5.0)*(x2-5.0)+y2*y2)>2.5&&sqrt((x2+5.0)*(x2+5.0)+y2*y2)>2.5&&sqrt((y2-5.0)*(y2-5.0)+x2*x2)>2.5&&sqrt((y2+5.0)*(y2+5.0)+x2*x2)>2.5)
d=fabs(x1-x2)+fabs(y1-y2);
elsed=fabs(x1-x2)+fabs(y1-y2)+10.0;}
elseif(sqrt((x1-5.0)*(x1-5.0)+y1*y1)<=2.5||sqrt((x1+5.0)*(x1+5.0)+y1*y1)<=2.5||sqrt((y1-5.0)*(y1-5.0)+x1*x1)<=2.5||sqrt((y1+5.0)*(y1+5.0)+x1*x1)<=2.5)
{if(sqrt((x2-5.0)*(x2-5.0)+y2*y2)>2.5&&sqrt((x2+5.0)*(x2+5.0)+y2*y2)>2.5&&sqrt((y2-5.0)*(y2-5.0)+x2*x2)>2.5&&sqrt((y2+5.0)*(y2+5.0)+x2*x2)>2.5)
d=fabs(x1-x2)+fabs(y1-y2)+10.0;
elseif(sqrt((x1-5.0)*(x1-5.0)+y1*y1)<=2.5&&sqrt((x2-5.0)*(x2-5.0)+y2*y2)<=2.5)
d=fabs(x1-x2)+fabs(y1-y2);
elseif(sqrt((x1+5.0)*(x1+5.0)+y1*y1)<=2.5&&sqrt((x2+5.0)*(x2+5.0)+y2*y2)<=2.5)
d=fabs(x1-x2)+fabs(y1-y2);
elseif(sqrt((y1-5.0)*(y1-5.0)+x1*x1)<=2.5&&sqrt((y2-5.0)*(y2-5.0)+x2*x2)<=2.5)
d=fabs(x1-x2)+fabs(y1-y2);
elseif(sqrt((y1+5.0)*(y1+5.0)+x1*x1)<=2.5&&sqrt((y2+5.0)*(y2+5.0)+x2*x2)<=2.5)
d=fabs(x1-x2)+fabs(y1-y2);
else
d=fabs(x1-x2)+fabs(y1-y2)+20.0;}
printf("Themindistanceis%lf\n",d);
}
//假设猫和老鼠都可能在谷仓顶部,先对猫讨论,是否在谷仓上,然后对老鼠进行讨论。
11.方程求根
按照下述要求,分别用两种方法求方程式为:
的根。
●用牛顿迭代法求方程在1.5附近的根;
●用二分法求方程在(-10,10)之间的根。
T1
#include
#include
voidmain()
{
floatf(floatm);
floatfd(floata);
floatx1=1.5,x0;
for(;fabs(x0-x1)>=1e-5;)
{x0=x1;
x1=x0-f(x1)/fd(x1);
}
printf("Therootofequationis%5.2f\n",x1);
}
floatf(floatm)
{
floatf;
f=2*m*m*m-4*m*m+3*m-6;
return(f);
}
floatfd(floata)
{
a=6*a*a-8*a+3;
return(a);
}
T2
#include
#include
voidmain()
{
floatf(floatm);
floatx1=-10,x2=10,x3;
for(;fabs(x1-x2)>=1e-6;)
{x3=0.5*(x1+x2);
if(f(x1)*f(x3)<0)
x2=x3;
else
x1=x3;
}
printf("Therootofequationis%5.2f\n",x1);
}
floatf(floatm)
{
floatf;
f=2*m*m*m-4*m*m+3*m-6;
return(f);
}