北理c语言上机答案(全)_第1页
北理c语言上机答案(全)_第2页
北理c语言上机答案(全)_第3页
北理c语言上机答案(全)_第4页
北理c语言上机答案(全)_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1练习两个整数之间的运算

背景:基本练习。

输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123444

输出:分别输出进行+、-、*、/、*之后的运行结果。

程序实例1:

#include<stdio.h>

voidmain()

{inta,b,c,d,e,f,g;

scanf(〃%d%d〃,&a,&b);

printf(z/%d+%d=%d\nz/,a,b,c=a+b);

printf(,/%d-%d=%d\n,/,a,b,d=a-b);

printf(〃%d*%d=%d\n〃,a,b,e=a*b);

printf(,z%d/%d=%d\nz,,a,b,f=a/b);

printfC,%d%%%d=%d\n,/,a,b,g=a%b);

)

结果:

输入:103

输出:

10+3=13

10-3=7

10*3=30

10/3=3

10%3=l

程序实例2:

#include<stdio.h>

voidmain()

{intxl,x2,x3,x4,x5,a,b;

scanf("%d%d〃,&a,&b);

xl=a+b;

x2=a-b;

x3=a*b;

x4=a/b;

x5=a%b;

printf(z,%d+%d=%d\n%d-%d=%d\n%d*%d=%d\n%d/%d=%d\n%d%%%d=%dz,,a,b,xl,a,b,x2,a,b,x3,a,b

,x4,a,b,x5);

)

结果:

输入:123444

输出:

123+444=567

123-444二-321

123*444=54612

123/444=0

123%444=123

1学习打印你的第一个图形

背景:

我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组

成的4*4的正方形。

程序如下:

#include<stdio.h>

voidmain()

(

printf(〃****\n〃);

printf(〃****\n〃);

printf(〃****\n〃);

printf(〃****\n〃);

)

要求:

按照上面的程序范例,编写一个小程序,要求输出的是4行由*号组成的等腰三角形。

输入:无。

输出:指定图形。

程序实例1:

#include<stdio.h>

intmain(void)

(

printf(〃*\n〃);

printf(〃;

printf(〃*****\n〃);

printf(〃*******\n〃);

return0;

}

结果:

输入:无

输出:

*

***

*****

*******

程序实例2:

#include〃stdio.h〃

main()

(

printf(z,*\n");

printf(〃***\n〃);

printf(,z*****\n〃);

printf(〃*******\n〃);

)

结果:

输入:无

输出:

*

***

*****

*****★★

1温度转换(06秋)

二目匕乐旦:

经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量

单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)o现在,请你根据温度转换公式设计

一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华

氏温度,显示转换的摄氏温度。

温度转换的公式为:F=(Cx9/5)+32;C=(F-32)x5/9;式中F—华氏温度,C一摄氏温度。

输入:第一个数据(1或2)确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);

第二个数据是相应需要转换的温度值。

输出:相应的转换后的温度值(保留小数点后2位)。

程序实例1:

#include<stdio.h>

voidmain()

{inta;

floatx,y;

scanf&a,&x);

if(a==l)

{y=(x-32)*5.0/9.0;

printf(,zTheCentigradeis%.2f\n〃,y);

}

elseif(a==2)

{y=(x*9.0/5.0)+32;

printf("TheFahrenheitis%.2f\n〃,y);

)

)

结果:

输入:1100

输出:TheCentigradeis37.78

输入:2-6.67

输出:TheFahrenheitis19.99

程序实例2:

#include<stdio.h>

voidmain()

{floatC;inta;

scanf(〃%d%f,z,&a,&C);

switch(a)

{case1:printf(^TheCentigradeis%.2f\n〃,(032)*5/9);break;

case2:printf(z,TheFahrenheitis%.2f\n〃,(C*9/5)+32);break;

default:printf(〃error\n〃);)

)

结果:

输入:10

输出:TheCentigradeis-17.78

输入:288

输出:TheFahrenheitis190.40

2计算圆柱的侧面积及体积

如果已知圆柱的底面半径r,以及高h,则可计算出圆柱的侧面积s=2Jirh,体积r2

ho其中n=3.1415926

输入:第一行输入圆柱的底面半径r

第二行输入圆柱的高h

输出:s=<圆柱的侧面积>,v=<圆柱的体积>

要求

1.所有变量都定义为双精度类型

2.结果精确到小数点后两位

程序实例1:

#include<stdio.h>

#include<math.h>

voidmain()

(

doubler,h,s,v,PAI=3.1415926;

scanf(z,%lf\n%lf,z,&r,&h);

s=2*PAI*r*h;

v二PAI*r*r*h;

printf(zzs=%.2f,v二%.2f\n〃,s,v);

)

结果:

输入:

2

8

输出:s=100.53,v=100.53

程序实例2:

#include<stdio.h>

voidmain()

(

doublepi=3.1415926;

intr,h;

scanf(〃%d〃,&r);

scanf(级d〃,&h);

printfCs=%5.2f,v=%5.2f\n”,2*pi*r*h,pi*r*r*h);

)

输入:

5

10

输出:s=314.16,v=785.40

3计算时钟的夹角

背景:

钟面上的时针和分针之间的夹角总是在~之间(包括和)。举例来说,在十二点的时候两针

之间的夹角为,而在六点的时候夹角为,在三点的时候为。本题要解决的是计算12:00到

11:59之间任意一个时间的夹角。

输入:每组测试数据包含两个数字:第一个数字代表小时(大于0小于等于12),第二个数

字代表分(在区间[0,59]±)o

输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到

小数点后一位。输出格式如下所示。

程序实例1:

#include<stdio.h>

voidmain()

{floatx,y,z;

scanf(〃%f%f”,&x,&y);

z=6*y-(30*x+y/2);

{if(z<=-180)z+=360;

elseif(z<0)z=-z;

elseif(z>=180)z=360-z;

elsez=z;}

if(y<10)printf(Z/At%.Of:0%.Oftheangleis%.Ifdegrees.x,y,z);

elseprintfCAt%.OfOftheangleis%.Ifdegrees.x,y,z);

)

输入:120

输出:At12:00theangleis0.0degrees.

程序实例2:

#include<stdio.h>

#include<math.h>

main()

{intx,y;floatz;

scanf(〃%d/d〃,&x,&y);

z=fabs(30*x-(float)y*l1/2);

z=z>180?360-z:z;

if(y<10)printf(z,At%d:0%dtheangleis%.Ifdegrees.\n,z,x,y,z);

elseprintf(〃At%d:%dtheangleis%.Ifdegrees.\n〃,x,y,z);

)

结果:

输入:1230

输出:At12:30theangleis165.0degrees.

4判断三角形的形状

要求:

输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。

输入:三角型的3条边的长度(int型)。

输出:等边三角形:equilateraltriangle

等腰三角形:isocelestriangle

不构成三角形:non-triangle

一般三角形:triangle

程序实例1:

#include<stdio.h>

voidmain()

{inta,b,c;

scanf(,z%d%d%dz,,&a,&b,&c);

if(a+b<=c||a+c<=b||b+c<=a)

printfC'non-triangle.,z);

elseif(a二二b&&b二二c)

printf(,zequilateraltriangle.z/);

elseif(a二二b&&b!=c||a==c&&c!=b||b==c&&c!=a)

printf(,zisocelestriangle.z,);

elseprintf(z/triangle.z/);

)

结果:

输入:222

输出:equilateraltriangle.

程序实例2:

#include<stdio.h>

voidmain()

(

inta,b,c;

scanf(〃%d%d%d〃,&a,&b,&c);

if(a二二b&&b二二c&&c二二a)

printfC'equilateraltriangle.\n〃);

elseif(a+b>c&&a+c>b&&b+c>a)

(a==b||b==c||c==a)?printf(^isocelestriangle.\n〃):printf("triangle.\n〃);

elseprintf(z,non-triangle.\nz,);

}

结果:

输入:131

输出:non-triangle.

5求解一元二次方程

初中的时候我们就会求解一元二次方程了,下面让我们来教计算机如何求解。输入a,b,c,就

一元二次方程ax2+bx+c=0的根。

输入:假设a,b,c均int。

输出:要求输出的根为double型,保留6位小数。

程序实例1:

#include〃stdio.h〃

#include"math.

voidmain()

{inta,b,c,a2;

doublexl=0,x2=0,q;

scanf(〃%d%d%d”,&a,&b,&c);

q二b*b—4*a*c;

a2=2*a;

if(a==0)

{if(b==O)

printf("Inputerror!\n,z);

elseprintf(〃x=%,6f\n”,-c*L0/b);

)

elseif(q>0)

printf(/zxl=%.6f\nx2=%.6f\nz/,(-b+sqrt(q))/a2,(-b-sqrt(q))/a2);

elseif(q==0)

printf("xl==x2=%.6f\n”,-b*L0/a2);

elseif(q<0)

{if(b=0)printf(//xl=%.6fi\nx2=%.6fi\n”,sqrt(-q)/a2,-sqrt(~q)/a2);

else

printf("xl=%,6f+%.6fi\nx2=%.6f-%.6fi”,-b*L0/a2,sqrt(-q)/a2,-1.0*b/a2,sqrt(-q)/a2);

)

)

结果:

输入:000

输出:Inputerror!

输入:222

输出:

xl=-0.500000+0.8660251

x2=-0.500000-0.866025i

程序实例2:

#include<stdio.h>

#include<math.h>

voidmain()

doublea,b,c,d;

scanfC%lf%lf%ir,&a,&b,&c);

d=b*b-4*a*c;

if(a==0&&b==0)printf("Inputerror!\n,z);

elseif(a==0)printf(z/x=%lf\nz/,c==0?0:-c/b);

elseif(d=0)printfCxl=x2=%.61f\n〃,b=O?O:-b/(2*a));

elseif(d>0)printf(/zxl=%lf\nx2=%lf\n,z,(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));

elseif(b=0)printf(,,xl=%lfi\nx2=-%lfi\nz,,sqrt(-d)/(2*a),sqrt(-d)/(2*a));

else

printf(/zxl=%lf+%lfi\nx2=%lf-%lfi\n/z,-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(

2*a));

}

结果:

输入:1000

输出:xl=x2=0.000000

你会输出一行星号吗?(本题不记分噢)

我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。

输入:N值

输出:一行中N个星号。

程序实例1:

#include<stdio.h>

voidmain()

(

intn,i;

scanf("%d",&n);

for(i=l;i<=n;i++)

printf("*〃);

printf(〃\n〃);

)

结果:

输入:4

输出:****

输入:8

输出:********

6计算SUM的值

已知公式:SUM=1+1/2+1/3+1/4+...+1/n

输入:n

输出:表达式sum的值。结果保留6位小数。

程序实例1:

#include<stdio.h>

voidmain()

intn,k;

doublesum;

scanf(〃%d〃,&n);

sum=l.0;

for(k=2;k<=n;k++)

sum=sum+1.0/k;

printf(,zsum=%.61f\n〃,sum);

)

结果:

输入:1

输出:sum=l.000000

程序实例2:

#include<stdio.h>

voidmain()

(

doublesum,i;

intn;

scanf(〃%d〃,&n);

for(i=l,sum=0;i<=n;i++)

sum=sum+l/i;

printf("sum=%.61f〃,sum);

)

结果:

输入:3

输出:sum=1.833333

7贪吃的猴子

有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第

2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前

一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃

的时候,就只剩下一个桃子了。

输入:天数n

输出:第一天的桃子个数

程序实例1:

#include<stdio.h>

voidmain()

{intn,i,y;

scanf(〃%d”,&n);

for(i=n-l,y=l;i>=l;i­)

y=2*(i+y);

if(y=l)printf("Themonkeygot%dpeachinfirstday.〃,y);

if(y!=1)printf(""Themonkeygot%dpeachsinfirstday.”,y);

)

结果:

输入:3

输Hl:Themonkeygot14peachsinfirstday.

8求最后3位数值

中学时我们就会求一个数的n次方了,但计算机不会,请你来编写一个程序吧。由于计算机比

较笨〃,所以我们编写程序的功能不用太强,只要能算出a的n次方的最后3位数就可以了。

输入:和n的值。假设*=150o

输出:求a的n次方的最后3位数。

程序实例1:

#include<stdio.h>

voidmain()

(

inti,x,y,m=l;

scanf(〃%d&x,&y);

for(i=l;i<=y;i++)

m=m*x%1000;

if(m==0)

printf(,zThelast3numbersis000.\n〃);

else

printf(^Thelast3numbersis%d.\n〃,m);

)

结果:

输入:100

输出:Thelast3numbersis1.

程序实例2:

#include<stdio.h>

voidmain()

(inta,n,i,s;

scanf(〃%d%d”,&a,&n);

i=l;s=l;

while(i<=n)

{s=s*a%1000;

i++;}

if(n!=0){printf(,zThelast3numbersis%0.3d.\n,z,s);}

else{printf(""Thelast3numbersis%d.\n〃,s);)

)

结果:

输入:10010

输出:Thelast3numbersis000.

9分数的四则运算

在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝

试下用C语言来实现。

输入:分数1操作符分数2

输出:计算结果

要求:

计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3

程序实例L

#include<stdio.h>

intmain()

(

inta,b,c,d,e,f,x,y,z;

charg;

scanfC%d/%d%c%d/%d〃,&a,&b,&g,&c,&d);

if(g==,+'){e=a*d+b*c;f=b*d;}

if(g==,-'){e=a*d-b*c;f=b*d;}

if(g==,*,){e=a*c;f=b*d;}

if(g==,r){e=a*d;f=b*c;}

x=e;y=f;z=x%y;

if(z!=O)

(

while(z!=0)

{x=y;y=z;z=x%y;}

e=e/y;f=f/y;

if(f>0)printf("%d/%d%c%d/%d=%d/%d”,a,b,g,c,d,e,f);

if(f<0)printf(z,%d/%d%c%d/%d=%d/%d,z,a,b,g,c,d,-e,-f);

}

else{printf(,z%d/%d%c%d/%d=%dz,,a,b,g,c,d,e/f);}

printf(〃\n〃);

return0;

)

结果:

输入:1/3+1/2

输出:1/3+1/2=5/6

程序实例2:

#include,zmath.h〃

#include<stdio.h>

voidmain()

(

inta,b,c,d,m,n,x,y,v;charz;

scanf(〃%d/%d%c%d/%d〃,&a,&b,&z,&c,&d);

switch(z)

{case('+'):m=a*d+b*c;n=b*d;break;

casem=a*d-b*c;n=b*d;break;

case('*'):m=a*c;n=b*d;break;

case('/'):m=a*d;n=b*c;break;

x=fabs(m);y=fabs(n);v=x%y;

while(v!=O)

{x=y;y=v;v=x%y;}

if(m/y==O)printf(/z%d/%d%c%d/%d=0\nz/,a,b,z,c,d);

elseif(n/y==l)printf(z,%d/%d%c%d/%d=%d\n”,a,b,z,c,d,m/y);

elseprintf("%d/%d%c%d/%d=%d/%d\nz/,a,b,z,c,d,m/y,n/y);

}

结果:

输入:1/2+2/6

输出:l/2+2/6=5/6

10黑色星期五

在西方,,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,

不管哪个月的十三日又恰逢星期五就叫''黑色星期五”。

输入:年份

输出:判断该年是否包含黑色星期五,如包含,给出具体日期

程序实例1:

ttinclude"stdio.h"

voidmainO

(

intyear,month,day,i,k=0,ruinian,n;

inta[12]={6,2,2,5,0,3,5,1,4,6,2,4};

intb[12]={6,2,3,6,1,4,6,2,5,0,3,5},c[12]={0};

scanfftyear);

n=((year%400)*365+(year%400+3)/4-(year%400)/100+5)%7;

ruinian=(year%4==0&&year%100!=0||year%400==0);

for(i=0;i<12;i++)

if((((ruinian==l)?b[i]:a[i])+n)%7==5)

(

c[i]=l;

k++;

)

printf(vThere%s%dBlack%sinyear

%d.\n%s:\n",(k==l)?"is":"are”,k,(k==l)?"Friday":"Fridays”,year,(k=l)?"Itis":"They

are");

for(i=0;i<12;i++)

if(c[i]==l)

printf(//%d/%d/13\n,/,year,i+1);

结果:

输入:2006

输出:

Thereare2BlackFridaysinyear2006.

Theyare:

2006/1/13

2006/10/13

程序实例2:

#includez,stdio.h〃

voidmain()

{intm,y,k=0,i,w,a[6];

scanf(级d〃,&y);

for(m=l;m<=2;m++)

{w=(13+2*(m+12)+3*(m+13)/5+y-l+(y-1)/4-(y-1)/100+(y-1)/400)%7;

if(w==4)

{a[k]=m;k++;})

for(m=3;m<13;m++)

{w=(l3+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

if(w=4)

{a[k]=m;k++;}}

if(k==l){printf("Thereis1BlackFridayinyear%d.\nltis:\n%d/%d/13\n,z,y,y,a[0]);}

else{printf("Thereare%dBlackFridaysinyear%d.\n〃,k,y);

printf("Theyare:\n〃);

for(i=0;i<k;i++)

printf("%d/%d/13\n”,y,a[i]);}

)

结果:

输入:2007

输出:

Thereare2BlackFridaysinyear2007

Theyare:

2007/4/13

2007/7/13

11百马百担

有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担

输入:无

输出:大、中、小马的个数,用逗号分隔。例如:2,30,68

说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行

因为有多个结果,结果的排序按照大马的个数从少到多

程序实例1:

#include<stdio.h>

voidmain()

intbigHorse,middleHorse,smallHorse;

bigHorse=O;

while(bigHorse<=33)

(

middleHorse=l;

while(middleHorse<50)

(

smal]Horse=100-bigHorse-middleHorse;

if(3*bigHorse+2*middleHorse+smallHorse/2==100&&smallHorse%2==0)

printf(,z%d,%d,%d\n〃,bigHorse,middleHorse,smallHorse);

middleHorse++;

}

bigHorse++;

)

)

结果:

输入:无

输出:

2,30,68

5,25,70

8,20,72

11,15,74

14,10,76

17,5,78

程序实例2

#include<stdio.h>

voidmain()

(

inta,b,c;

for(a=0;a<=33;a++)

(

for(b=l;b<50;b++)

(

c=100-a-b;

if(3*a+2*b+c/2==100&&c%2=0)

printf(*%d,%d,%d\nz/,a,b,c);

}

)

)

结果:

输入:无

输出:

2,30,68

5,25,70

8,20,72

11,15,74

14,10,76

17,5,78

12零钱换整钱

小明去银行存钱,拿了一堆硬币。已知1角的硬币厚度为1.8mm,5角的硬币厚1.5mm,1

元的硬币为2.0mm。小明将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬

币放成一摞,发现3摞硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币。问

小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?

输入:无

输出:1角的数量,5角的数量,1元的数量,总金额。(例如:20,30,40,50)

说明:在结果中只输出各个对应的数字即可

程序实例1:

#include<stdio.h>

intyue(inta,intb)

(

intt;

t=a%b;

while(t)

{a=b,b=t,t=a%b;}

returnb;

)

intmain(void)

{intx,y,z;

x=18*15/yue(18,15);

x=x*20/yue(x,20);

z=y=x/18+x*5/15+x/2;

while(z%100)

{z+=y;}

printf(〃%d,%d,%d,%d\n”,z/y*x/18,z/y*x/15,z/y*x/20,z/10);

return0;

)

结果:

输入:无

输出:50,60,45,80

程序实例2:

#include<stdio.h>

intmain()

{inti,j,k,a;

for(i=10;;i+=10)

{j=6*i/5;k=9*i/10;a=0.l*i+0.5*j+l.0*k;

if(a%10=0){printf(〃%d,%d,%d,%d\n”,i,j,k,a);break;}

}

return0;}

结果:

输入:无

输出:50,60,45,80

13找出最大素数

素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被

广泛应用。

输入:

取值范围

输出:

该范围内的最大素数

程序实例1

#include<stdio.h>

©include<math.h>

intjudgeis(inta)

(

inti;

for(i=2;i<sqrt(a);i++)

{if(a%i==0){return0;}}

return1;

)

intmain()

(

intn;

scanf&n);

while(judgeis(n)==0){n一;}

printf(,/Themaxprimenumberis%d.z,,n);

return0;

)

结果:

输入:100

输出:Themaxprimenumberis97.

程序实例2:

#include<stdio.h>

#include<math.h>

intIsPrime(intn){

inti;

for(i=2;i<=sqrt(n);i++)

if(n%i==0)return(0);

return(1);

)

voidmain(){

intn;

scanf("%d",&n);

for(;;n-)if(IsPrime(n))break;

printf(,zThemaxprimenumberis%d.\n〃,n);

)

结果:

输入:5555

输出:Themaxprimenumberis5531.

14空心的倒三角型

背景:

请根据要求打印可空心倒三角形。

输入:

输入三角形的高度(h>=0)o

输出:

打印相应的空心倒三角形。图样参见测试用例。

程序实例1:

#include<stdio.h>

intmain(void)

(

intn,i,j;

scanf(〃%d〃,&n);

for(i=0;i〈n;i++)

{for(j=0;j<(2*n-l-i);j++)

{if(i-0||i==j||j==(-i+2*n-2))printf;

elseprintf(〃〃);

)

printf(〃\n〃);

)

return0;

)

结果:

输入:3

输出:

*****

**

*

程序实例2:

#include〃stdio.h〃

voidmain()

{intr,1,h;

scanf(〃%d”,&h);

for(r=l;r<=2*h-l;r++)printf('*");

for(r=2;r<=h;r++)

{printf(〃\n〃);for(1=1;l<=2*h-r;1++)printf(〃%s〃,(l=r||l=2*h-r)?〃*〃:〃/z);}

)

结果:

输入:5

输出:

*********

★★

**

★★

*

15空心字符菱形

输入:菱型起始字母和菱形的高度。

输出:参看测试用例,打印空心的由字符组成的菱形。

程序实例1:

©include〃stdio.h〃

#include"math,h”

voidmain()

{charc;intn,i,j;

scanf(,,%c%d//,&c,&n);

for(c=c+n-l,i=l-n;i<=n-l;i++)

{for(j=l;j<=2*n-l-abs(i);j++)

if(j==abs(i)+l||j==2*n-l-abs(i))printf(〃%c〃,c-abs(i));

elseprintf(zz〃);

printf(〃\n〃);

)

}

结果:

输入:C4

输出:

C

DD

EE

FF

EE

DD

C

程序实例2:

#include,zstdio.h"

intmain()

(

inti,j,h;chare;

scanf("%c%d”,&e,&h);

for(i=l;i<=h;i++)

{for(j=l;j<=h+i-l;j++)

{if(j-h-i+l|Ij==h+iT)printf(绘c”,e+iT);

elseprintfC");}

printf("\n");

for(i=h+l;i<=2*h-l;i++)

{for(j=l:j<=3*h-i-l;j++)

{if(j=i-h+l||j==3*h-i-l)printfe+2*h-iT);

elseprintfC");}

printf("\n");

}

return0;

}

结果:

输入:S3

输出:

S

TT

UU

TT

S

16邮票组合(选作)

背景:我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张

的组合,可以满足不同邮件的不同的邮资。现在,邮局有4种不同面值的邮票。在每个信封上最

多能贴5张邮票,面值可相同,可不同。

输入:四种邮票的面值。

输出:用这四种面值组成的邮资最大的从1开始的一个连续的区间。

说明:如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。

名词解释:

邮资:就是你寄东西需要花多少钱。

邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。

如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有

面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:

采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组

合都可以得到同样一种邮资。

程序实例1:

/*Thisprogramistofindthemaxset*/

#include<stdio.h>

main()

inta,b,c,d,i,j,k,1;

staticints[1000];

scanf(z/%d%d%d%d,/,&a,&b,&c,&d);

for(i=0;i<=5;i++)

for(j=0;i+j<=5;j++)

for(k=0;k+i+j<=5;k++)

for(l=0;k+i+j+l<=5;l++)

if(a*i+b*j+c*k+d*l)s[a*i+b*j+c*k+d*l]++;

for(i=l;i<=1000;i++)

if(!s[i])break;

printf(,zThemaxis%d.\n〃,--i);

return0;

)

结果:

输入:141221

输出:Themaxis71.

程序实例2:

#include〃stdio.h〃

inttotal,max;

intvalue[5],num[1000]={0};

voidfindmax(intn,intp)

{inti;

if(p<5)

for(i=n;i<=4;i++)

{total+=value[i];

if(max<total)max=total;

num[total]=1;

findmax(i,p+1);

total-=value[i];

)

)

intmain()

{inti;

for(i=l;i<=4;i++)

scanf(z,%d,z,&value[i]);

total=0;max=0;

findmax(1,0);

for(i=l;i<=max;i++)

if(!num[i])break;

printf("Themaxis%d.\n〃,i-1);

return0;

}

结果:

输入:13712

输出:Themaxis46.

17谁能出线

背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10

名学生为个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名

学生得分相同都是第一名,则可同时进入下一轮。

输入:按顺序给出一个小组10个人的最后得分(int),

输出:能够出线的学生序号(0~9)。

程序实例1:

#include“stdio.h"

mainO

(

inti,maxa[10]={0},num,max=0,a[10];

for(i=0;i<10;i++)

scanf("%d”,&a[i]);/*输入*/

for(i=0;i<10;i++)

(

if(a[i]>max)/*如果大于最大值*/

(

max=a[i];/*保存最大值*/

num=l;/*个数*/

maxa[0]=i;/*保存下标*/

)

elseif(a[i]=max)/*如果等于最大值*/

(

maxa[num]=i;/*保存下标*/

num++;

)

)

for(i=0;i<num;i++)/*输出*/

printf(〃%d\n〃,maxa[i]);

)

结果:

输入:

98

98

100

97

95

94

90

94

93

92

输出:2

程序实例2;

#include<stdio.h>

voidmain()

{inti,a[10],m=0;

for(i=0;i<10;i++){

scanf("%d”,&a[i]);

if(a[i]>m)m=a[i];

)

for(i=0;i<10;i++){

if(a[i]==m){

printf("%d\n",i);

}

}

)

结果:

输入:

99

98

99

97

95

99

90

94

93

100

输出:9

18等值数列段(06秋)

如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数

列段中元素的个数叫做等值数列段的长度。

输入:由N个元素组成的整数数列A(其中N<=50)

输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出Noequalnumber

list.

说明:

始末位置是指数组下标,即0表示第一个元素。

如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。

当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。

开始,输入

程序实例1:

#includez,stdio.h"

mainO

(

inti=0,j=0,k,n,max=0,maxnum=O,a[50];

scanf(〃刎〃,&n);

for(i=0;i<n;i++)

scanf(z,%d,z,&a[i]);/*输入*/

for(i=j;i<n;i++)/*循环遍历*/

(

if(a[i]==a[j])/*如果相临的相等,i不变,继续看相等字符有多长*/

(

whi1e(a[i]==a[++j]);/*循环直到不相等为止*/

if(maxnum〈j-i)/*判断是否为最长*/

maxnum=j-i;/*保存长度*/

max=i;/*保存起始位置*/

)

)

if(maxnum>0)/*输出*/

printf(z,Thelongestequalnumberlistisfrom%dto%d.\n,z,max,maxnum+max-1);

else

printf(^Noequalnumberlist.\n〃);

}

结果:

输入:

5

12345

输出:Noequalnumberlist.

程序实例2:

#include〃stdio.h〃

voidmain()

(

inta,x[50],i,j,m=0,n=0;

scanf(〃%d〃,&a);

for(i=0;i<a;i++)

scanf(级d〃,&x[i]);

for(i=0;i<a-l;i=j)

{j=i+l;

while(x[j]==x[i]&&j<a)j++;

if(j-i-l>n-m){m=i;n=jT;}

)

if((n-m)==0)printf(,zNoequalnumberlist.\n〃);

elseprintf(Z/Thelongestequalnumberlistisfrom%dto%d.\n/z,m,n);

)

输入:

结果:

6

101110

输出:Thelongestequalnumberlistisfrom2to4.

19大家一起做游戏(06秋)

幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小

朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出

该游戏,直到只剩下一位小朋友游戏才中止。

每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。

现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的

小朋友。

输入:小朋友的个数«=50)要被练习的数字

输出:最终被留下的小朋友的序号

说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏

程序实例1:

#include,,stdio.h〃

main()

(

intm,n,d,i,temp,a[100];

scanf("%d%d”,&n,&m);

for(i=0;i<n;i++)

a[i]=i+l;

temp=0;

d=0;

while(d〈nT)/*标志次数,n-1次后结束,这是将只剩一个小孩*/

for(i=0;i<n;i++)

if(a[i]!=0)/*小朋友还没退出游戏*/

(

temp++;/*小朋友报数的数字*/

if(temp==m)/*小朋友这次该退出游戏*/

(

a[i]=0;/*在数组中表示出来*/

temp=0;/*报数从新开始*/

d++;/*退出人数加1*/

)

)

for(i=0;i<n;i++)/*输出,寻找最后一个退出的小朋友*/

if(a[i]!=0)

printf(,zTheleftchildisNO%d.\n,z,a[i]);

)

结果:

输入103:

输出:TheleftchildisNO4.

程序实例2:

#include<stdio.h>

voidmain()

(

inta[51],i,j,x,n;

scanf("%d%d〃,&n,&j);

for(i=0;i<=n-2;i++)a[i]=i+l;a[n-l]=0;x=n-l;

while(a[x]!=x)

{for(i=l;i<=j-l;i++)

x=a[x];

a[x]=a[a[x]];

}

printf(,zTheleftchildisNO%d.〃,x+1);

)

结果:

输入:5015

输出:TheleftchildisNO22.

20猜数字(选作)

有如下一组数字,其中每个数字都在1~63之间,

13579111315171921232527293133353739414345474951535557

596163

236710111415181922232627303134353839424346475051545558

596263

456712131415202122232829303136373839444546475253545560

616263

89101112131415242526272829303140414243444546475657585960

616263

1617181920212223242526272829303148495051525354555657585960

616263

3233343536373839404142434445464748495051525354555657585960

616263

现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个

数字是几。

输入:程序的输入是一串以空白符分开的数字,当输入0时表示输入结束。

输出:输出猜到的数字。

程序实例1:

#include<stdio.h>

main()

(

inti,re;

re=0;

scanf(绘d”,&i);

while(i){

re+=1«(i-1);

scanf&i);

}

printf(,z%d\n,/,re);

)

结果:

输入:120

输出:3

程序实例2:

#include<stdio.h>

#include<math.h>

intmain()

{inta[7],i=0,x=0;

scanf(〃%d〃,;

while(a[i])

{i++;

scanf(〃%d〃,;

)

for(i=0;a[i];i++)

x=x+pow⑵a[i]-l);

printf(〃%d”,x);

return0;

)

结果:

输入:34560

输出:60

21小蜜蜂(选作)

一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。

例如,从1号格子可以爬到2号或者3号格子,从2号则可以爬到3号或者4号格子。

请问从•个格子a爬到一个格子b一共有多少种可行的路线。

输入:分别是起始点a和终止点b的编号。(a和b在r100之间,且*b。)

输出:方案数量。

程序实例1:

^include〃stdio.h〃

voidmain()

{inta,b,i;

doubleal,a2,t;

scanf(,/%d%d,/,&a,&b);

al=l;a2=l;

for(i=l;i<=b-a;i++)

{t=a2;

a2=al+t;

al=t;

)

printf(〃%.01fz,,al);

)

结果:

输入:14

输出:3

程序实例2:

ttinclude“stdio.h〃

ttinclude"math.h〃

intmain()

{

inta,b,i,t;

doublen=0,x=l,y=l;

scanf(,z%d%d,z,&a,&b);

t=b+l-a;

for(i=l;i<=t;i++)

x*=(1+sqrt(5))/2,y*=(l-sqrt(5))/2;

printf("%.01f\n,z,(x-y)/sqrt(5));

return0;

)

结果:

输入:250

输出:7778742049

22数制转换(选作)

我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

这个题目会给你两个不同的数字,它们不属于同进制,要求你计算出当它们分别处于何种

进制之中时,两个数字相等。譬如12和5,在十进制下它们是不等的,但若1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论