2023年北理c語言上機答案_第1頁
2023年北理c語言上機答案_第2頁
2023年北理c語言上機答案_第3頁
2023年北理c語言上機答案_第4頁
2023年北理c語言上機答案_第5頁
已閱讀5頁,還剩125頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1Helloworld讓我們用C語言向世界問好。最早的程序基本是這個樣子的:程序一:#include<stdio.h>

voidmain()

{

printf("Helloworld.\n");

}程序二:

#include<stdio.h>

intmain()

{

printf("Helloworld.\n");

return0;

}上面的程序你任意模仿一個,看看是否可以通過?假如你能通過這個簡樸的程序,那就讓我們繼續完畢后面的習題吧。輸入:無輸出:Helloworld.程序實例1:#include<stdio.h>voidmain(){printf("Helloworld.\n");}結果:Helloworld.程序實例2:#include<stdio.h>

intmain()

{

printf("Helloworld.\n");

return0;

}結果:Helloworld.1.WelcometoBeijing.讓我們來練習如何顯示多行文字。輸入:無輸出:就是下面的那段文字。程序實例1:#include"stdio.h"intmain(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return0;}結果:Welcome

to

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

to

Beijing.練習最簡樸的printf和scanfprintf函數和scanf函數是C語言中最常用的函數之一,下面讓我們練習一下吧。輸入:整型變量x的值。輸出:輸出整型變量x相應的十進制、八進制和十六進制形式。認真看看-1的八進制和十六進制輸出,請想想是為什么。程序實例1:#include"stdio.h"main(){intx;scanf("%d",&x);printf("x=%d,x=%o,x=%x\n",x,x,x);}結果:輸入:-1輸出:x=-1,x=,x=ffffffff程序實例2:#include"stdio.h"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<stdio.h>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<stdio.h>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<stdio.h>

voidmain()

{

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

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

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

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

}規定:按照上面的程序范例,編寫一個小程序,規定輸出的是4行由*號組成的等腰三角形。輸入:無。輸出:指定圖形。程序實例1:#include<stdio.h>intmain(void){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");return0;}結果:輸入:無輸出:

*

***

*****

*******程序實例2:#include"stdio.h"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<stdio.h>voidmain(){inta;floatx,y;scanf("%d%f",&a,&x);if(a==1){y=(x-32)*5.0/9.0;printf("TheCentigradeis%.2f\n",y);}elseif(a==2){y=(x*9.0/5.0)+32;printf("TheFahrenheitis%.2f\n",y);}}結果:輸入:1

100輸出:The

Centigrade

is

37.78輸入:2

-6.67輸出:The

Fahrenheit

is

19.99程序實例2:#include<stdio.h>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

-17.78輸入:2

88輸出:The

Fahrenheit

is

190.402計算圓柱的側面積及體積假如已知圓柱的底面半徑r,以及高h,則可計算出圓柱的側面積s=2πrh,體積v=πr2h。其中π=3.1415926輸入:第一行輸入圓柱的底面半徑r第二行輸入圓柱的高h輸出:s=<圓柱的側面積>,v=<圓柱的體積>規定1.所有變量都定義為雙精度類型2.結果精確到小數點后兩位程序實例1:#include<stdio.h>#include<math.h>voidmain(){doubler,h,s,v,PAI=3.1415926;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=100.53,v=100.53程序實例2:#include<stdio.h>voidmain(){ doublepi=3.1415926;intr,h;scanf("%d",&r);scanf("%d",&h);printf("s=%5.2f,v=%5.2f\n",2*pi*r*h,pi*r*r*h);}輸入:5

10輸出:s=314.16,v=785.403計算時鐘的夾角背景:鐘面上的時針和分針之間的夾角總是在\o"TeX"~\o"TeX"之間(涉及\o"TeX"和\o"TeX")。舉例來說,在十二點的時候兩針之間的夾角為\o"TeX",而在六點的時候夾角為\o"TeX",在三點的時候為\o"TeX"。本題要解決的是計算12:00到11:59之間任意一個時間的夾角。輸入:每組測試數據包含兩個數字:第一個數字代表小時(大于0小于等于12),第二個數字代表分(在區間[0,59]上)。輸出:相應每組測試數據,用常用格式顯示時間以及這個時候時針和分針間的最小夾角,精確到小數點后一位。輸出格式如下所示。程序實例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("At%.0f:0%.0ftheangleis%.1fdegrees.",x,y,z);elseprintf("At%.0f:%.0ftheangleis%.1fdegrees.",x,y,z);}輸入:12

0輸出:At

12:00

the

angle

is

0.0

degrees.程序實例2:#include<stdio.h>#include<math.h>main(){intx,y;floatz;scanf("%d%d",&x,&y);z=fabs(30*x-(float)y*11/2);z=z>180?360-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

165.0

degrees.4判斷三角形的形狀規定:輸入三角型的三條邊,判斷三角形的形狀。假設輸入的三邊邊長均>0。輸入:三角型的3條邊的長度(int型)。輸出:等邊三角形:equilateraltriangle

等腰三角形:isocelestriangle

不構成三角形:non-triangle

一般三角形:triangle程序實例1:#include<stdio.h>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<stdio.h>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,就一元二次方程ax2+bx+c=0的根。輸入:假設a,b,c均int。輸出:規定輸出的根為double型,保存6位小數。程序實例1:#include"stdio.h"#include"math.h"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*1.0/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*1.0/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*1.0/a2,sqrt(-q)/a2,-1.0*b/a2,sqrt(-q)/a2);}}結果:輸入:000輸出:Input

error!輸入:222輸出:x1=-0.500000+0.866025ix2=-0.500000-0.866025i程序實例2:#include<stdio.h>#include<math.h>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==0?0:-c/b);elseif(d==0)printf("x1=x2=%.6lf\n",b==0?0:-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=0.000000你會輸出一行星號嗎?(本題不記分噢)我們才開始上機,現在需要我們用最簡樸得辦法,在一行中輸出N個星號。輸入:N值輸出:一行中N個星號。程序實例1:#include<stdio.h>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<stdio.h>voidmain(){intn,k;doublesum;scanf("%d",&n);sum=1.0;for(k=2;k<=n;k++)sum=sum+1.0/k;printf("sum=%.6lf\n",sum);}結果:輸入:1輸出:sum=1.000000程序實例2:#include<stdio.h>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=1.8333337貪吃的猴子有一只猴子,第一天摘了若干個桃子

,當即吃了一半,但還覺得但是癮

,就又多吃了一個。第2天早上又將剩下的桃子吃掉一半,還是覺得但是癮,就又多吃了兩個。以后天天早上都吃了前一天剩下的一半加天數個(例如,第5天吃了前一天剩下的一般加5個)。到第n天早上再想吃的時候,就只剩下一個桃子了。輸入:天數n輸出:第一天的桃子個數程序實例1:#include<stdio.h>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<stdio.h>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<stdio.h>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%0.3d.\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<stdio.h>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"math.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;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"stdio.h"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);}結果:輸入:2023輸出:There

are

2

Black

Fridays

in

year

2023.

They

are:

2023/1/13

2023/10/13程序實例2:#include"stdio.h"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]);}}結果:輸入:2023輸出:Thereare2BlackFridaysinyear2023Theyare:2023/4/132023/7/1311百馬百擔有100匹馬,馱100擔貨,其中大馬馱3擔,中馬馱2擔,兩匹小馬馱1擔輸入:無輸出:大、中、小馬的個數,用逗號分隔。例如:2,30,68說明:大、中、小馬都必須有,結果中要列出所有的組合也許每個結果占一行

由于有多個結果,結果的排序按照大馬的個數從少到多程序實例1:#include<stdio.h>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<stdio.h>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角的硬幣厚度為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.1*i+0.5*j+1.0*k;if(a%10==0){printf("%d,%d,%d,%d\n",i,j,k,a);break;}}return0;}結果:輸入:無輸出:50,60,45,8013找出最大素數素數是指一個只能被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("%d",&n);while(judgeis(n)==0){n--;}printf("Themaxprimenumberis%d.",n);return0;}結果:輸入:100輸出:The

max

prime

number

is

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

請根據規定打印可空心倒三角形。輸入:

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

打印相應的空心倒三角形。圖樣參見測試用例。程序實例1:#include<stdio.h>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"stdio.h"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"stdio.h"#include"math.h"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"stdio.h"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<stdio.h>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"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=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"stdio.h"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<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輸出:918等值數列段(06秋)假如一個數列中的某一段(至少有兩個元素)的各元素值均相同,則稱之為等值數列段。等值數列段中元素的個數叫做等值數列段的長度。輸入:由N個元素組成的整數數列A(其中N<=50)輸出:A中長度最大的所有等值數列段的始末位置,假如沒有等值數列段,則輸出Noequalnumberlist.說明:始末位置是指數組下標,即0表達第一個元素。假如有多個同等長度的等值數列,只輸出第一個等值數列的起始位置。當在一個LIST中出現兩個等長的連續串的時候,我們的答案應當是第一個等長串。NNN開始,輸入j++記數器加1i++記數器加1保存長度和位置沒遍歷完i<n?假如相臨字符相等是否也與下一字符相等輸出,結束是否為最長YNYNYY程序實例1:#include"stdio.h"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"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-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"stdio.h"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<stdio.h>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<stdio.h>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<stdio.h>#include<math.h>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"stdio.h"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"stdio.h"#include"math.h"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輸出:22數制轉換(選作)我們通常使用的都是十進制的數字,但其實在生活中也經常會使用其它進制。這個題目會給你兩個不同的數字,它們不屬于同一進制,規定你計算出當它們分別處在何種進制之中時,兩個數字相等。譬如12和5,在十進制下它們是不等的,但若12使用3進制而5使用六進制或十進制時,它們的值就是相等的。因此只要選擇合適的進制,12和5就可以是相等的。程序的輸入是兩個數字M和N(其十進制的值不超過),它們的進制在2~36之間。對于十以下的數字,用0~9表達,而十以上的數字,則使用大寫的A~Z表達。求出分別在2~36哪種進制下M和N相等。若相等則輸出相應的進制,若不等則輸犯錯誤信息。信息的格式見測試用例。程序實例1:#include<stdio.h>#include<string.h>#include<math.h>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<stdio.h>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<len?NNNJ<iNJ<i結束結束YYnum[i]==num[j]num[i]==num[j]?NNYYJ++輸出J++輸出第i個字符I++I++程序實例1:#include<stdio.h>#include<string.h>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++)/*判斷是否與前邊的相等*/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論