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

下载本文档

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

文档简介

北理c语言上机答案(全)北理c语言上机答案(全)北理c语言上机答案(全)北理c语言上机答案(全)编制仅供参考审核批准生效日期地址:电话:传真:邮编:1Helloworld让我们用C语言向世界问好。最早的程序基本是这个样子的:程序一:#include<>voidmain(){

printf("Helloworld.\n");}程序二:#include<>intmain(){

printf("Helloworld.\n");

return0;}上面的程序你任意模仿一个,看看是否可以通过如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。输入:无输出:Helloworld.程序实例1:#include<>voidmain(){printf("Helloworld.\n");}结果:Helloworld.程序实例2:#include<>intmain(){

printf("Helloworld.\n");

return0;}结果:Helloworld.1.WelcometoBeijing.让我们来练习如何显示多行文字。输入:无输出:就是下面的那段文字。程序实例1:#include""intmain(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return0;}结果:Welcome

to

Beijing.程序实例2:#include<>voidmain(){printf("Welcome\nto\nBeijing.\n");}结果:Welcome

to

Beijing.练习最简单的printf和scanfprintf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。输入:整型变量x的值。输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真看看-1的八进制和十六进制输出,请想想是为什么。程序实例1:#include""main(){intx;scanf("%d",&x);printf("x=%d,x=%o,x=%x\n",x,x,x);}结果:输入:-1输出:x=-1,x=777,x=ffffffff程序实例2:#include""voidmain(){longx;scanf("%d",&x);printf("x=%d,x=%o,x=%0x\n",x,x,x);}结果:输入:292输出:x=292,x=444,x=124练习两个整数之间的运算背景:基本练习。输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123

444输出:分别输出进行+、-、*、/、*之后的运行结果。程序实例1:#include<>voidmain(){inta,b,c,d,e,f,g;scanf("%d%d",&a,&b);printf("%d+%d=%d\n",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("%d/%d=%d\n",a,b,f=a/b);printf("%d%%%d=%d\n",a,b,g=a%b);}结果:输入:10

3输出:10+3=13

10-3=7

10*3=30

10/3=3

10%3=1程序实例2:#include<>voidmain(){intx1,x2,x3,x4,x5,a,b;scanf("%d%d",&a,&b);x1=a+b;x2=a-b;x3=a*b;x4=a/b;x5=a%b;printf("%d+%d=%d\n%d-%d=%d\n%d*%d=%d\n%d/%d=%d\n%d%%%d=%d",a,b,x1,a,b,x2,a,b,x3,a,b,x4,a,b,x5);}结果:输入:123444输出:123+444=567123-444=-321123*444=54612123/444=0123%444=123学习打印你的第一个图形背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:#include<>voidmain(){

printf("****\n");

printf("****\n");

printf("****\n");

printf("****\n");}要求:按照上面的程序范例,编写一个小程序,要求输出的是4行由*号组成的等腰三角形。输入:无。输出:指定图形。程序实例1:#include<>intmain(void){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");return0;}结果:输入:无输出:

*

***

*****

*******程序实例2:#include""main(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");}结果:输入:无输出:

*

***

*****

*******温度转换(06秋)背景:经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。温度转换的公式为:F=(C×9/5)+32;C=(F-32)×5/9;式中F--华氏温度,C--摄氏温度。输入:第一个数据(1或2)确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);

第二个数据是相应需要转换的温度值。输出:相应的转换后的温度值(保留小数点后2位)。程序实例1:#include<>voidmain(){inta;floatx,y;scanf("%d%f",&a,&x);if(a==1){y=(x-32)*;printf("TheCentigradeis%.2f\n",y);}elseif(a==2){y=(x*+32;printf("TheFahrenheitis%.2f\n",y);}}结果:输入:1

100输出:The

Centigrade

is

输入:2

输出:The

Fahrenheit

is

程序实例2:#include<>voidmain(){floatC;inta;scanf("%d%f",&a,&C);switch(a){case1:printf("TheCentigradeis%.2f\n",(C-32)*5/9);break;case2:printf("TheFahrenheitis%.2f\n",(C*9/5)+32);break;default:printf("error\n");}}结果:输入:1

0输出:The

Centigrade

is

输入:2

88输出:The

Fahrenheit

is

2计算圆柱的侧面积及体积如果已知圆柱的底面半径r,以及高h,则可计算出圆柱的侧面积s=2πrh,体积v=πr2h。其中π=输入:第一行输入圆柱的底面半径r第二行输入圆柱的高h输出:s=<圆柱的侧面积>,v=<圆柱的体积>要求1.所有变量都定义为双精度类型2.结果精确到小数点后两位程序实例1:#include<>#include<>voidmain(){doubler,h,s,v,PAI=;scanf("%lf\n%lf",&r,&h);s=2*PAI*r*h;v=PAI*r*r*h;printf("s=%.2f,v=%.2f\n",s,v);}结果:输入:2

8输出:s=,v=程序实例2:#include<>voidmain(){ doublepi=;intr,h;scanf("%d",&r);scanf("%d",&h);printf("s=%,v=%\n",2*pi*r*h,pi*r*r*h);}输入:5

10输出:s=,v=3计算时钟的夹角背景:钟面上的时针和分针之间的夹角总是在~之间(包括和)。举例来说,在十二点的时候两针之间的夹角为,而在六点的时候夹角为,在三点的时候为。本题要解决的是计算12:00到11:59之间任意一个时间的夹角。输入:每组测试数据包含两个数字:第一个数字代表小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序实例1:#include<>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("At%.0f:0%.0ftheangleis%.1fdegrees.",x,y,z);elseprintf("At%.0f:%.0ftheangleis%.1fdegrees.",x,y,z);}输入:12

0输出:At

12:00

the

angle

is

degrees.程序实例2:#include<>#include<>main(){intx,y;floatz;scanf("%d%d",&x,&y);z=fabs(30*x-(float)y*11/2);z=z>180360-z:z;if(y<10)printf("At%d:0%dtheangleis%.1fdegrees.\n",x,y,z);elseprintf("At%d:%dtheangleis%.1fdegrees.\n",x,y,z);}结果:输入:12

30输出:At

12:30

the

angle

is

degrees.4判断三角形的形状要求:输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateraltriangle

等腰三角形:isocelestriangle

不构成三角形:non-triangle

一般三角形:triangle程序实例1:#include<>voidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a+b<=c||a+c<=b||b+c<=a)printf("non-triangle.");elseif(a==b&&b==c)printf("equilateraltriangle.");elseif(a==b&&b!=c||a==c&&c!=b||b==c&&c!=a)printf("isocelestriangle.");elseprintf("triangle.");}结果:输入:2

2

2输出:equilateral

triangle.程序实例2:#include<>voidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a==b&&b==c&&c==a)printf("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("non-triangle.\n");}结果:输入:1

3

1输出:non-triangle.5求解一元二次方程初中的时候我们就会求解一元二次方程了,下面让我们来教计算机如何求解。输入a,b,c,就一元二次方程ax²+bx+c=0的根。输入:假设a,b,c均int。输出:要求输出的根为double型,保留6位小数。程序实例1:#include""#include""voidmain(){inta,b,c,a2;doublex1=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==0)printf("Inputerror!\n");elseprintf("x=%.6f\n",-c*b);}elseif(q>0)printf("x1=%.6f\nx2=%.6f\n",(-b+sqrt(q))/a2,(-b-sqrt(q))/a2);elseif(q==0)printf("x1=x2=%.6f\n",-b*a2);elseif(q<0){if(b==0)printf("x1=%.6fi\nx2=%.6fi\n",sqrt(-q)/a2,-sqrt(-q)/a2);elseprintf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi",-b*a2,sqrt(-q)/a2,*b/a2,sqrt(-q)/a2);}}结果:输入:000输出:Input

error!输入:222输出:x1=+x2=程序实例2:#include<>#include<>voidmain(){doublea,b,c,d;scanf("%lf%lf%lf",&a,&b,&c);d=b*b-4*a*c;if(a==0&&b==0)printf("Inputerror!\n");elseif(a==0)printf("x=%lf\n",c==00:-c/b);elseif(d==0)printf("x1=x2=%.6lf\n",b==00:-b/(2*a));elseif(d>0)printf("x1=%lf\nx2=%lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));elseif(b==0)printf("x1=%lfi\nx2=-%lfi\n",sqrt(-d)/(2*a),sqrt(-d)/(2*a));elseprintf("x1=%lf+%lfi\nx2=%lf-%lfi\n",-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a));}结果:输入:1000输出:x1=x2=你会输出一行星号吗(本题不记分噢)我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序实例1:#include<>voidmain(){ intn,i; scanf("%d",&n); for(i=1;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<>voidmain(){intn,k;doublesum;scanf("%d",&n);sum=;for(k=2;k<=n;k++)sum=sum+k;printf("sum=%.6lf\n",sum);}结果:输入:1输出:sum=程序实例2:#include<>voidmain(){ doublesum,i;intn;scanf("%d",&n);for(i=1,sum=0;i<=n;i++)sum=sum+1/i;printf("sum=%.6lf",sum);}结果:输入:3输出:sum=7贪吃的猴子有一只猴子,第一天摘了若干个桃子

,当即吃了一半,但还觉得不过瘾

,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数程序实例1:#include<>voidmain(){intn,i,y;scanf("%d",&n);for(i=n-1,y=1;i>=1;i--) y=2*(i+y);if(y==1)printf("Themonkeygot%dpeachinfirstday.",y);if(y!=1)printf("Themonkeygot%dpeachsinfirstday.",y);}结果:输入:3输出:The

monkey

got

14

peachs

in

first

day.8求最后3位数值中学时我们就会求一个数的n次方了,但计算机不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出a的n次方的最后3位数就可以了。输入:和n的值。假设a<=150。输出:求a的n次方的最后3位数。程序实例1:#include<>voidmain(){ inti,x,y,m=1;scanf("%d%d",&x,&y);for(i=1;i<=y;i++)m=m*x%1000;if(m==0) printf("Thelast3numbersis000.\n"); else printf("Thelast3numbersis%d.\n",m);}结果:输入:10

0输出:The

last

3

numbers

is

1.程序实例2:#include<>voidmain(){inta,n,i,s;scanf("%d%d",&a,&n);i=1;s=1;while(i<=n){s=s*a%1000;i++;}if(n!=0){printf("Thelast3numbersis%.\n",s);}else{printf("Thelast3numbersis%d.\n",s);}}结果:输入:100

10输出:The

last

3

numbers

is

000.9分数的四则运算在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。输入:分数1操作符分数2输出:计算结果要求:计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3程序实例1:#include<>intmain(){inta,b,c,d,e,f,x,y,z;charg;scanf("%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=='/'){e=a*d;f=b*c;}x=e;y=f;z=x%y;if(z!=0){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("%d/%d%c%d/%d=%d/%d",a,b,g,c,d,-e,-f);}else{printf("%d/%d%c%d/%d=%d",a,b,g,c,d,e/f);} printf("\n");return0;}结果:输入:1/3

+

1/2输出:1/3

+

1/2

=

5/6程序实例2:#include""#include<>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;case('-'):m=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!=0){x=y;y=v;v=x%y;}if(m/y==0)printf("%d/%d%c%d/%d=0\n",a,b,z,c,d);elseif(n/y==1)printf("%d/%d%c%d/%d=%d\n",a,b,z,c,d,m/y);elseprintf("%d/%d%c%d/%d=%d/%d\n",a,b,z,c,d,m/y,n/y);}结果:输入:1/2+2/6输出:1/2+2/6=5/610黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期程序实例1:#include""voidmain(){ 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}; scanf("%d",&year); 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==1)b[i]:a[i])+n)%7==5) { c[i]=1; k++; } printf("There%s%dBlack%sinyear%d.\n%s:\n",(k==1)"is":"are",k,(k==1)"Friday":"Fridays",year,(k==1)"Itis":"Theyare"); for(i=0;i<12;i++) if(c[i]==1) printf("%d/%d/13\n",year,i+1);}结果:输入:2006输出:There

are

2

Black

Fridays

in

year

2006.

They

are:

2006/1/13

2006/10/13程序实例2:#include""voidmain(){intm,y,k=0,i,w,a[6];scanf("%d",&y);for(m=1;m<=2;m++){w=(13+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7;if(w==4){a[k]=m;k++;}}for(m=3;m<13;m++){w=(13+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;if(w==4){a[k]=m;k++;}}if(k==1){printf("Thereis1BlackFridayinyear%d.\nItis:\n%d/%d/13\n",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输出:Thereare2BlackFridaysinyear2007Theyare:2007/4/132007/7/1311百马百担有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担输入:无输出:大、中、小马的个数,用逗号分隔。例如:2,30,68说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行

因为有多个结果,结果的排序按照大马的个数从少到多程序实例1:#include<>voidmain(){intbigHorse,middleHorse,smallHorse;bigHorse=0;while(bigHorse<=33){middleHorse=1;while(middleHorse<50){smallHorse=100-bigHorse-middleHorse;if(3*bigHorse+2*middleHorse+smallHorse/2==100&&smallHorse%2==0)printf("%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<>voidmain(){inta,b,c;for(a=0;a<=33;a++){for(b=1;b<50;b++){c=100-a-b;if(3*a+2*b+c/2==100&&c%2==0)printf("%d,%d,%d\n",a,b,c);}}}结果:输入:无输出:2,30,68

5,25,70

8,20,72

11,15,74

14,10,76

17,5,7812零钱换整钱小明去银行存钱,拿了一堆硬币。已知1角的硬币厚度为,5角的硬币厚,1元的硬币为。小明将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,发现3摞硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个输入:无输出:1角的数量,5角的数量,1元的数量,总金额。(例如:20,30,40,50)说明:在结果中只输出各个对应的数字即可程序实例1:#include<>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<>intmain(){inti,j,k,a;for(i=10;;i+=10){j=6*i/5;k=9*i/10;a=*i+*j+*k;if(a%10==0){printf("%d,%d,%d,%d\n",i,j,k,a);break;}}return0;}结果:输入:无输出:50,60,45,8013找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入:

取值范围输出:

该范围内的最大素数程序实例1#include<>#include<>intjudgeis(inta){inti;for(i=2;i<sqrt(a);i++){if(a%i==0){return0;}}return1;}intmain(){intn;scanf("%d",&n);while(judgeis(n)==0){n--;}printf("Themaxprimenumberis%d.",n);return0;}结果:输入:100输出:The

max

prime

number

is

97.程序实例2:#include<>#include<>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("Themaxprimenumberis%d.\n",n);}结果:输入:5555输出:Themaxprimenumberis5531.14空心的倒三角型背景:

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

输入三角形的高度(h>=0)。输出:

打印相应的空心倒三角形。图样参见测试用例。程序实例1:#include<>intmain(void){intn,i,j;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<(2*n-1-i);j++){if(i==0||i==j||j==(-i+2*n-2))printf("*");elseprintf("");}printf("\n");}return0;}结果:输入:3输出:*****

*

*

*程序实例2:#include""voidmain(){intr,l,h;scanf("%d",&h);for(r=1;r<=2*h-1;r++)printf("*");for(r=2;r<=h;r++){printf("\n");for(l=1;l<=2*h-r;l++)printf("%s",(l==r||l==2*h-r)"*":"");}}结果:输入:5输出:*********

*

*

*

*

*

*

*15空心字符菱形输入:菱型起始字母和菱形的高度。输出:参看测试用例,打印空心的由字符组成的菱形。程序实例1:#include""#include""voidmain(){charc;intn,i,j;scanf("%c%d",&c,&n);for(c=c+n-1,i=1-n;i<=n-1;i++){for(j=1;j<=2*n-1-abs(i);j++)if(j==abs(i)+1||j==2*n-1-abs(i))printf("%c",c-abs(i));elseprintf("");printf("\n");}}结果:输入:C

4输出:

C

D

D

E

E

F

F

E

E

D

D

C程序实例2:#include""intmain(){inti,j,h;chare;scanf("%c%d",&e,&h);for(i=1;i<=h;i++){for(j=1;j<=h+i-1;j++){if(j==h-i+1||j==h+i-1)printf("%c",e+i-1);elseprintf("");}printf("\n");}for(i=h+1;i<=2*h-1;i++){for(j=1;j<=3*h-i-1;j++){if(j==i-h+1||j==3*h-i-1)printf("%c",e+2*h-i-1);elseprintf("");}printf("\n");}return0;}结果:输入:S

3输出:

S

T

T

U

U

T

T

S16邮票组合(选作)背景:我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。现在,邮局有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<>main(){inta,b,c,d,i,j,k,l;staticints[1000];scanf("%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=1;i<=1000;i++)if(!s[i])break;printf("Themaxis%d.\n",--i);return0;}结果:输入:1

4

12

21输出:The

max

is

71.程序实例2:#include""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=1;i<=4;i++)scanf("%d",&value[i]);total=0;max=0;findmax(1,0);for(i=1;i<=max;i++)if(!num[i])break;printf("Themaxis%d.\n",i-1); return0;}结果:输入:13712输出:Themaxis46.17谁能出线背景:电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(0~9)。开始,输入开始,输入i++遍历下一个输出,结束没遍历完i<n大于最大值等于最大值Y保存最大值和下标保存下标NNNYY程序实例1:#include""main(){ 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=1;/*个数*/ 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<>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输出:918等值数列段(06秋)如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由N个元素组成的整数数列A(其中N<=50)输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出Noequalnumberlist.说明:始末位置是指数组下标,即0表示第一个元素。如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。NNN开始,输入j++记数器加1i++记数器加1保存长度和位置没遍历完i<n如果相临字符相等是否也与下一字符相等输出,结束是否为最长YNYNYY程序实例1:#include""main(){ inti=0,j=0,k,n,max=0,maxnum=0,a[50]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]);/*输入*/ for(i=j;i<n;i++)/*循环遍历*/ { j=i+1; if(a[i]==a[j])/*如果相临的相等,i不变,继续看相等字符有多长*/ { while(a[i]==a[++j]);/*循环直到不相等为止*/ if(maxnum<j-i)/*判断是否为最长*/ { maxnum=j-i;/*保存长度*/ max=i;/*保存起始位置*/ } } } if(maxnum>0)/*输出*/ printf("Thelongestequalnumberlistisfrom%dto%d.\n",max,maxnum+max-1); else printf("Noequalnumberlist.\n");}结果:输入:5

1

2

3

4

5输出:No

equal

number

list.程序实例2:#include""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-1;i=j){j=i+1;while(x[j]==x[i]&&j<a)j++;if(j-i-1>n-m){m=i;n=j-1;}}if((n-m)==0)printf("Noequalnumberlist.\n");elseprintf("Thelongestequalnumberlistisfrom%dto%d.\n",m,n);}输入:结果:6

1

0

1

1

1

0输出:The

longest

equal

number

list

is

from

2

to

4.19大家一起做游戏(06秋)幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。输入:小朋友的个数(<=50)要被练习的数字输出:最终被留下的小朋友的序号说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏NN数组计数器加1输出,结束更改数组置零计数器更改从头遍历开始,输入,初始化小朋友是否已退出遍历数组结束只剩下一位小朋友YNY这次是否退出NYYY报数记数器加1程序实例1:#include""main(){ intm,n,d,i,temp,a[100]; scanf("%d%d",&n,&m); for(i=0;i<n;i++) a[i]=i+1; temp=0; d=0; while(d<n-1)/*标志次数,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("TheleftchildisNO%d.\n",a[i]);}结果:输入10

3:输出:The

left

child

is

NO

4.程序实例2:#include<>voidmain(){inta[51],i,j,x,n;scanf("%d%d",&n,&j);for(i=0;i<=n-2;i++)a[i]=i+1;a[n-1]=0;x=n-1;while(a[x]!=x){for(i=1;i<=j-1;i++)x=a[x];a[x]=a[a[x]];}printf("TheleftchildisNO%d.",x+1);}结果:输入:50

15输出:The

left

child

is

NO

22.20猜数字(选作)有如下一组数字,其中每个数字都在1~63之间,135791113151719212325272931333537394143454749515355575961632367101114151819222326273031343538394243464750515455585962634567121314152021222328293031363738394445464752535455606162638910111213141524252627282930314041424344454647565758596061626316171819202122232425262728293031484950515253545556575859606162633233343536373839404142434445464748495051525354555657585960616263现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。输入:程序的输入是一串以空白符分开的数字,当输入0时表示输入结束。输出:输出猜到的数字。程序实例1:#include<>main(){inti,re;re=0;scanf("%d",&i);while(i){re+=1<<(i-1);scanf("%d",&i);}printf("%d\n",re);}结果:输入:1

2

0输出:3程序实例2:#include<>#include<>intmain(){inta[7],i=0,x=0;scanf("%d",&a[i]);while(a[i]){i++;scanf("%d",&a[i]);}for(i=0;a[i];i++)x=x+pow(2,a[i]-1);printf("%d",x);return0;}结果:输入:3

4

5

6

0输出:6021小蜜蜂(选作)一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从1号格子可以爬到2号或者3号格子,从2号则可以爬到3号或者4号格子。

请问从一个格子a爬到一个格子b一共有多少种可行的路线。输入:分别是起始点a和终止点b的编号。(a和b在1~100之间,且a<b。)输出:方案数量。程序实例1:#include""voidmain(){inta,b,i;doublea1,a2,t;scanf("%d%d",&a,&b);a1=1;a2=1;for(i=1;i<=b-a;i++){t=a2;a2=a1+t;a1=t;}printf("%.0lf",a1);}结果:输入:1

4输出:3程序实例2:#include""#include""intmain(){inta,b,i,t;doublen=0,x=1,y=1;scanf("%d%d",&a,&b);t=b+1-a;for(i=1;i<=t;i++)x*=(1+sqrt(5))/2,y*=(1-sqrt(5))/2;printf("%.0lf\n",(x-y)/sqrt(5));return0;}结果:输入:2

50输出:4922数制转换(选作)我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12和5就可以是相等的。程序的输入是两个数字M和N(其十进制的值不超过00),它们的进制在2~36之间。对于十以下的数字,用0~9表示,而十以上的数字,则使用大写的A~Z表示。求出分别在2~36哪种进制下M和N相等。若相等则输出相应的进制,若不等则输出错误信息。信息的格式见测试用例。程序实例1:#include<>#include<>#include<>intzhi(charc){if(c>='A')returnc-'A'+10;elsereturnc-'0';}intminjinzhi(char*s){intmax,cur;max=0;while(*s){cur=zhi(*s);if(cur>max)max=cur;s++;}returnmax+1;}intmain(){chara[1000],b[1000],*pa,*pb;doublena,nb;intja,jb,ra,rb;inti,j,la,lb,find=0;scanf("%s%s",a,b);na=nb=0;la=strlen(a);lb=strlen(b);for(ja=minjinzhi(a);find==0&&ja<=36;ja++){na=0;for(i=0;i<la;i++)na+=zhi(a[i])*pow((float)ja,la-i-1);for(jb=minjinzhi(b);find==0&&jb<=36;jb++){for(nb=0,i=0;i<lb;i++)nb+=zhi(b[i])*pow((float)jb,lb-i-1);if(na==nb){find=1;ra=ja;rb=jb;}}}if(find==1)printf("%s(base%d)=%s(base%d)\n",a,ra,b,rb);elseprintf("%sisnotequalto%sinanybase2..36\n",a,b);return0;}结果:输入12

5:输出:12

(base

3)

=

5

(base

6)程序实例2:#defineN50#include<>longha(longx,longy){inti,k=1;for(i=1;i<=y;i++)k=k*x;return(k);}longmaxmum(px)char*px;{longx=2,k;while(*px!='\0'){if(*px<58&&*px-47>x)x=*px-47;if(*px>64&&*px-54>x)x=*px-54;px++;}return(x);}longvalue(x1,px)char*px;longx1;{char*py;longy,i,j,k=0;py=px;for(;*px!='\0';px++);px--;for(i=0;px>=py;i++){if(*px>64)k=k+(*px-55)*ha(x1,i);if(*px<58)k=k+(*px-48)*ha(x1,i);px--;}return(k);}main(){charchar1[N],char2[N];longi,j,k,n,m,l,flag=1;scanf("%s",char1);scanf("%s",char2);n=maxmum(&char1[0]);m=maxmum(&char2[0]);for(i=n;i<=36;i++)for(j=m;j<=36;j++){k=value(i,&char1[0]);l=value(j,&char2[0]);if(k==l){printf("%s(base%ld)=%s(base%ld)\n",char1,i,char2,j);flag=0;break;}}if(flag)printf("%sisnotequalto%sinanybase2..36\n",char1,char2);}结果:输入:123

456输出:123

is

not

equal

to

456

in

any

base

2..3623删除重复字符(06秋)背景:输入一个长度不超过100的字符串,删除串中的重复字符。输入:输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出:删除重复字符后的字符串。例如:abced。开开始输入字符串输入字符串求串长len,求串长len,I=1输出第一个字符输出第一个字符J=0YI<J=0YI<lenNNNJ<iNJ<i结束结束YYnum[i]==num[j]num[i]==num[j]NNYYJ++输出第i个字符J++输出第i个字符I++I++程序实例1:#include<>#include<>main(){ charnum[99]; inti,j,len,m=0; gets(num);/*输入字符串*/ len=strlen(num);/*求字符串长度*/ printf("%c",num[0]); for(i=1;i<len;i++,m=0)/*从第二个开始*/ { for(j=0;j<i;j++)/*判断是否与前边的相等*/ if(num[i]==num[j])/*如果有相等的*/ { m=1; break; } if(m==0)/*如果没有相等的*/ printf("%c",num[i]); }}结果:输入:abacaeedabcdcd输出:abced程序实例2:#include""#include""voidmain(){charch[101];inti,j,k,s;gets(ch);s=strlen(ch);for(i=1;i<s;i++)for(j=0;j<i;j++)if(ch[i]==ch[j]){for(k=i;k<s;k++)ch[k]=ch[k+1];i--;s--;break;}puts(ch);}输入:55577yuyuyu输出:123457yu24单词排序(06秋)输入5个单词,将它们按从大到小的顺序排列后输出。输入:5个单词输出:排序后的顺序开开始输入5个字符串输入5个字符串i=0i=0i<4i<4J=iYJ=iYJ<5J<5NNNN输出输出YY结束Nw[i]<w[j]结束Nw[i]<w[j]YYw[i]w[i]交换w[j]i++j++i++j++程序实例1:#include<>#include<>main(){ charw[5][20],a[20]; inti,j; for(i=0;i<5;i++) gets(w[i]);/*用一维数组读串的方式生成二维数组*/ for(i=0;i<4;i++) for(j=i;j<5;j++) if(strcmp(w[i],w[j])<0)/*用字符串比较函数判断*/ {/*冒泡法排序:直接交换*/ strcpy(a,w[j]); strcpy(w[j],w[i]); strcpy(w[i],

温馨提示

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

评论

0/150

提交评论