2023年北京理工大學網絡教室C語言編程題庫及答案絕對經典_第1頁
2023年北京理工大學網絡教室C語言編程題庫及答案絕對經典_第2頁
2023年北京理工大學網絡教室C語言編程題庫及答案絕對經典_第3頁
2023年北京理工大學網絡教室C語言編程題庫及答案絕對經典_第4頁
2023年北京理工大學網絡教室C語言編程題庫及答案絕對經典_第5頁
已閱讀5頁,還剩164頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.Helloworld.輸入:無輸出:Helloworld.程序:#include<stdio.h>intmain(){ printf("Helloworld.\n");?return0;}2.WelcometoBeijing.程序:#include<stdio.h>intmain(){?printf("Welcome\n"); printf("to\n");?printf("Beijing.\n"); return0;}3.求A+B輸入:整數1整數2輸出:整數1+整數2=和程序:#include<stdio.h>intmain(){?inta,b; scanf("%d",&a);?scanf("%d",&b);?printf("%d+%d=%d\n",a,b,a+b);?return0;}4.求x的3次方輸入:一個整數。輸出:該整數的3次方值。程序:#include<stdio.h>intmain(){intx;scanf("%d",&x);printf("%d\n",x*x*x);return0;}5.學習打印你的第一個圖形編寫一個小程序,規(guī)定輸出的是4行由*號組成的等腰三角形。程序:#include<stdio.h>intmain(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");return0;}6.一年級的算術題輸入:接受兩個整數,每個整數之間使用空格分隔。例如輸入格式為:123444輸出:分別輸出按照整型數據進行+、-、*、/、*之后的運營結果。程序:#include<stdio.h>intmain(){inta,b;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%%%d=%d\n",a,b,a%b);return0;}7.求兩個變量的最小值輸入:兩個整型數輸出:兩個整型值中的最小值程序:#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("min=%d\n",a<b?a:b);return0;}8.判斷三角形的形狀輸入:三角型的3條邊的長度(int型)。輸出:等邊三角形:equilateraltriangle?等腰三角形:isocelestriangle?不構成三角形:non-triangle?一般三角形:triangle程序:#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){?if(a==b&&b==c&&a==c) ?printf("equilat(yī)eraltriangle.\n");?elseif(a==b||a==c||b==c) ?printf("isocelestriangle.\n"); else??printf("triangle.\n");}elseprintf("non-triangle.\n");return0;}9.計算圓柱的側面積及體積輸入:第一行輸入圓柱的底面半徑r?第二行輸入圓柱的高h輸出:s=<圓柱的側面積>,v=<圓柱的體積>規(guī)定?1.所有變量都定義為雙精度類型?2.結果精確到小數點后兩位程序:#include<stdio.h>#definePI3.1415926intmain(){doubler,h,s,v;scanf("%lf",&r);scanf("%lf",&h);s=2*PI*r*h;v=PI*r*r*h;printf("s=%.2f,v=%.2f\n",s,v);return0;}10.計算時鐘的夾角背景:鐘面上的時針和分針之間的夾角總是在0~180之間(涉及0和180)。舉例來說,在十二點的時候兩針之間的夾角為0,而在六點的時候夾角為180,在三點的時候為90。本題要解決的是計算12:00到11:59之間任意一個時間的夾角。輸入:每組測試數據包含兩個數字:第一個數字代表小時(大于0小于等于12),第二個數字代表分(在區(qū)間[0,59]上)。輸出:相應每組測試數據,用常用格式顯示時間以及這個時候時針和分針間的最小夾角,精確到小數點后一位。輸出格式如下所示。程序:#include<stdio.h>#include<mat(yī)h.h>intmain(){inth,m;float(yī)d1,d2,d;scanf("%d%d",&h,&m);d1=30*(h+m/60.0);d2=m*360/60.0;d=fabs(d1-d2);if(d>180) d=360-d;?printf("At%d:%dtheangleis%.1fdegrees.\n",h,m,d);return0;}11.找出最大素數素數是指一個只能被1和它自身整除的數,在數論中占有重要的研究地位,在當代密碼學中也被廣泛應用。輸入:取值范圍輸出:該范圍內的最大素數程序:#include<stdio.h>intmain(){intn,i,j;scanf("%d",&n);for(i=n;i>=1;i--){for(j=2;j<i;j++)if(i%j==0)break;if(j==i){printf("Themaxprimenumberis%d.\n",i);break;}}}12.求最后3位數值輸入:a和n的值。假設a<=150。輸出:求a的n次方的最后3位數。程序:#include<stdio.h>intmain(){ longints=1;?inta,n,i=1,t=1; scanf("%d%d",&a,&n);?if(n==0)? printf("Thelast3numbersis1.\n");?else?{ for(i=1;i<=n;i++)? {???s=(s*a)%1000; ?} ?t=s%1000; ?if(t>=0&&t<10)printf("Thelast3numbersis00%d.\n",t);??if(t>=10&&t<100)?printf("Thelast3numbersis0%d.\n",t);??if(t>=100&&t<1000) printf("Thelast3numbersis%d.\n",t); } return0;}13.貪吃的猴子有一只猴子,第一天摘了若干個桃子,當即吃了一半,但還覺得但是癮,就又多吃了一個。第2天早上又將剩下的桃子吃掉一半,還是覺得但是癮,就又多吃了兩個。以后天天早上都吃了前一天剩下的一半加天數個(例如,第5天吃了前一天剩下的一般加5個)。到第n天早上再想吃的時候,就只剩下一個桃子了。輸入:天數n輸出:第一天的桃子個數程序:#include<stdio.h>intmain(){?inti,n,amount=1;?scanf("%d",&n); for(i=n-1;i>=1;i--)? amount=2*(amount+i);?printf("Themonkeygot%dpeachsinfirstday.\n",amount);}14.黑色星期五在西方,星期五和數字13都代表著壞運氣,兩個不幸的個體最后結合成超級不幸的一天。所以,不管哪個月的十三日又恰逢星期五就叫“黑色星期五”。輸入:年份輸出:判斷該年是否包含黑色星期五,如包含,給出具體日期程序:#include<stdio.h>intmain(){?inti,n=0,year,month[12]={0};?inta[13]={0,13,44,73,104,134,165,195,226,257,287,318,348};?intb[13]={0,13,44,72,103,133,164,194,225,256,286,317,347};?scanf("%d",&year);?for(i=1;i<13;i++)?{??if((year%4==0&&year%100!=0)||year%400==0) {???if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+a[i])%7==5)? ?{????n++; ???month[n]=i;?? }??}??else? ?if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+b[i])%7==5)?? { ???n++;?? ?month[n]=i;?? } }?if(n==1)?{??printf("Thereis%dBlackFridayinyear%d.\n",n,year);??printf("Itis:\n");??printf("%d/%d/13\n",year,month[1]);?} else?{??printf("Thereare%dBlackFridaysinyear%d.\n",n,year);??printf("Theyare:\n");? for(i=1;i<=n;i++) ?{?? printf("%d/%d/13\n",year,month[i]); ?}?}?return0;}15.你會輸出一行星號?我們才開始上機,現在需要我們用最簡樸得辦法,在一行中輸出N個星號。輸入:N值輸出:一行中N個星號。程序:#include<stdio.h>intmain(){?inti,n;?scanf("%d",&n);?for(i=1;i<=n;i++)?printf("*");?printf("\n");}16.計算SUM的值已知公式:SUM=1+1/2+1/3+1/4+...+1/n輸入:n輸出:表達式sum的值。結果保存6位小數。程序:#include<stdio.h>intmain(){?inti,n;?doublesum=0;?scanf("%d",&n); for(i=1;i<=n;i++) ?sum+=1.0/i;?printf("sum=%.6lf\n",sum);?return0;}17.尋找特殊整數請編寫一個程序尋找一種特殊整數:一個n位的正整數等于其各位數字的n次方之和。例如:407=4×4×4+0×0×0+7×7×7。所以407就是一個特殊數。輸入:正整數的位數n(n<=6)。輸出:所有此n位特殊數。每個數占一行。若不存在符合條件的特殊數,則輸出提醒:“Nooutput.”;若存在,則從小到大進行輸出。說明:假設輸入為4,在4位整數中,有3個4位的特殊數,則輸出格式為(輸出中的1111、2222和9999并不是4位特殊數,只是格式樣例):111122229999程序:#include<stdio.h>#include<mat(yī)h.h>intmain(){intn,i,j,num,t,s=0,t1,flag=0;scanf("%d",&n);t=pow(10,n-1);for(i=t;i<t*10;i++){?t1=i;?s=0;?for(j=1;t1!=0;j++)?{ ?num=t1%10; ?s+=pow(num,n);??t1=t1/10; }?if(s==i)?{??flag=1;??printf("%d\n",i);?}}if(flag==0) printf("Nooutput.\n");?return0;}18.空心的倒三角型輸入:輸入三角形的高度(h>=0)。輸出:打印相應的空心倒三角形。圖樣參見測試用例。程序:#include<stdio.h>#include<math.h>intmain(){inti,j,h;scanf("%d",&h);for(i=1;i<=h;i++){for(j=1;j<i;j++)printf("");if(i==1||i==h){for(j=1;j<=2*(h-i)+1;j++)printf("*");printf("\n");}else{printf("*");for(j=1;j<=2*(h-i)-1;j++)printf("");printf("*\n");}}return0;}19.空心字符菱形輸入:菱型起始字母和菱形的高度。輸出:參看測試用例,打印空心的由字符組成的菱形。程序:#include<stdio.h>#include<math.h>intmain(){?inti,j,h; charch;?scanf("%c%d",&ch,&h);?for(i=1;i<=h;i++) {??for(j=1;j<=h-i;j++) ?printf("");??printf("%c",ch+i-1);??for(j=1;j<=2*i-3;j++)???printf("");??if(i==1)??{?? printf("\n"); ?continue;??}??printf("%c\n",ch+i-1);?}?for(i=h+1;i<=2*h-1;i++) {? ??for(j=1;j<=i-h(huán);j++)???printf("");? printf("%c",ch+(2*h-1)-i);??for(j=1;j<=(2*h-1-i)*2-1;j++)???printf("");??if(i==2*h-1)??{ ??printf("\n");? ?continue;??}??printf("%c\n",ch+(2*h-1)-i); }?return0;}20.空心梯形輸入行數n和首數字字符,在屏幕上輸出由數字圍起的高和下底寬度均n的空心梯形。規(guī)定:輸出的數字是循環(huán)的,即輸出數字9后再輸出的數字是0。輸入:行數n和首字符輸出:空心梯形程序:#include<stdio.h>#include<math.h>intmain(){?inti,j,n,f,t=0;?scanf("%d%d",&n,&f);?t=f;?for(j=1;j<=3*n-2;j++)?{? if(j==3*n-2)???printf("%d",t); else?? printf("%d",t);??if(j<(3*n-1)/2)? { ??if(t==9)t=0; ??else??? t++;??} ?elseif(j==(3*n-1)/2&&n%2==0)continue;??else ?{?? if(t==0)t=9;???else????t--;? }???}?printf("\n");?t=f;?for(i=2;i<=n;i++)?{ ?for(j=1;j<=2*(i-1);j++)???printf("");??if(i==n)? { ?for(j=1;j<=(n+1)/2;j++) ? { ???if(t==9)? ??{ ? ?t=0;? ???printf("%d",t);? ? } ???else??? ?printf("%d",++t);???}? ?for(j=1;j<=n/2;j++)???{ ??if(t==0&&n%2!=0)?????t=9; ? ?elseif(j==1&&n%2==0) ?? {??? ?if(j==n/2)??????printf("%d\n",t); ????else??? ??printf("%d",t);???? continue; ?? }?? else?????t--;????if(j==n/2)? ???printf("%d\n",t); ? ?else??? printf("%d",t); } }??else??{?? if(t==9)???{????printf("0");????for(j=1;j<=6*n-4*i-3;j++)???? printf("");?? ?printf("0\n"); ???t=0; ?}???else???{ ????t++;????printf("%d",t);??? for(j=1;j<=6*n-4*i-3;j++) ? ??printf("");?? ?printf("%d\n",t); ? }??}?}?return0;}H1:計算通用產品代碼(UPC)的校驗位(選作)下面是一種計算校驗位的方法:一方面把第一位、第三位、第五位、第七位、第九位和第十一位數字相加。然后把第二位、第四位、第六位、第八位和第十位數字相加。接著把第一次加法結果乘以3后再加上第二次加法的結果。隨后,再把上述結果減去1。減法后的結果除以10取余數。最后,用9減去上一環(huán)節(jié)中得到的余數。現在以Morton碘鹽為例,第一組數字的加法是0+4+0+0+0+3=7,而第二組數字的加法是2+6+0+1+0=9。把第一組加法值乘以3后再加上第二組加法值得到的結果是30。再減去1,結果變?yōu)?9。再把這個值除以10取余數為9。9在減去余數結果9,最終值為0。輸入:每次輸入三行數據,第一行是UPC的第一位數字,第二行是UPC的第一組五位數字,第三行是UPC的第二組五位數字。輸出:UPC的校驗位程序:#include<stdio.h>#include<math.h>intmain(){?inti,j,s1=0,s2=0,t; inta[11];?charb[6],c[6];?scanf("%d",&a[0]);?scanf("%s",b);?scanf("%s",c);?for(i=0,j=1;i<5;i++,j++)? a[j]=b[i]-48; for(i=0,j=6;i<5;i++,j++)??a[j]=c[i]-48;?for(i=0;i<11;i++)?{??if(i%2==0)???s1+=a[i];??else ??s2+=a[i]; } t=9-(s1*3+s2-1)%10;?printf("%d\n",t); return0;}H2:數制轉換(選作)這個題目會給你兩個不同的數字,它們不屬于同一進制,規(guī)定你計算出當它們分別處在何種進制之中時,兩個數字相等。譬如12和5,在十進制下它們是不等的,但若12使用3進制而5使用六進制或十進制時,它們的值就是相等的。因此只要選擇合適的進制,12和5就可以是相等的。程序的輸入是兩個數字M和N(其十進制的值不超過),它們的進制在2~36之間。對于十以下的數字,用0~9表達,而十以上的數字,則使用大寫的A~Z表達。求出分別在2~36哪種進制下M和N相等。若相等則輸出相應的進制,若不等則輸犯錯誤信息。當然了,對于多種也許成立的情況,找出符合規(guī)定的進制最小的一組就行了。信息的格式見測試用例。程序:#include<stdio.h>intmain(){longintpm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0; inta[30],b[30];?charm[30],n[30]; inti,j,g,k,max1=0,max2=0,flag=0;?scanf("%s%s",m,n);?for(i=0;m[i]!='\0';i++)?{??if(m[i]>='A'&&m[i]<='Z') ??a[i]=m[i]-55;? if(m[i]>='0'&&m[i]<='9')???a[i]=m[i]-48;??max1=max1<(a[i]+1)?(a[i]+1):max1;??max1=max1<2?2:max1;?}?pm=i; for(j=0;n[j]!=0;j++)?{??if(n[j]>='A'&&n[j]<='Z') ?b[j]=n[j]-55;??if(n[j]>='0'&&n[j]<='9')???b[j]=n[j]-48;??max2=max2<(b[j]+1)?(b[j]+1):max2;??max2=max2<2?2:max2;?}?pn=j;?for(i=max1,j=max2;i<=36&&j<=36;) {? p=0; ?q=0; ?w=1;??e=1;??for(g=pm-1;g>=0;g--) ?{? ?p+=a[g]*w;? ?w=w*i;??} ?for(k=pn-1;k>=0;k--)??{???q+=b[k]*e; ??e=e*j;? } ?if(p<q)i++;??elseif(p>q)j++;? else { ??flag=1;???printf("%s(base%d)=%s(base%d)\n",m,i,n,j);???break;? } } if(flag==0)??printf("%sisnotequalto%sinanybase2..36\n",m,n);?return0;}21.零錢換整錢小明手中有一堆硬幣,小紅手中有若干張10元的整錢。已知1角的硬幣厚度為1.8mm,5角的硬幣厚1.5mm,1元的硬幣為2.0mm。小明和小紅一起玩游戲,小紅拿出若干張10元的紙幣,小明要將1角的硬幣放成一摞,將5角的硬幣硬幣放成一摞,將1元的硬幣放成一摞,假如3摞硬幣同樣高,并且金額可以正好小紅規(guī)定的面值,則雙方可以進行互換,否則沒有辦法互換。輸入:小紅希望互換幾張10元的紙幣輸出:1角的數量,5角的數量,1元的數量程序:三種硬幣厚度公倍數:18mm(1角10個共1元,5角12個共6元,1元9個共9元,要想3摞硬幣同樣高總錢數必須是16元(1+6+9)的公倍數)#include<stdio.h>intmain(){intn,t,x,y,z; scanf("%d",&n);?t=n*10;?if(t%16!=0)??printf("Nochange.\n"); else?{?t=t/16;?x=t*10;?y=t*12;z=t*9;printf("%d,%d,%d\n",x,y,z); }?return0;}22.買東西.某商品有A、B、C三種品牌,各品牌的價格各不相同,其中A品牌的價格為每個5元,B品牌為每個3元,而C品牌為每3個1元。假如要用M元錢買N個該商品,規(guī)定每個商品至少買一個,編程求各種品牌各能買多少個。輸入:?先后輸入M(錢數)及N(商品個數)的實際數值輸出:?所有也許情況下可以購買的3種商品的個數,按A、B、C品牌的順序輸出,用逗號分隔。例如:2,30,68;表達A品牌商品2個、B品牌商品30個、C品牌商品68個。規(guī)定:由于有多個結果,結果的排序按照A品牌的個數從少到多的順序輸出。程序:#include<stdio.h>intmain(){inti,j,k; floatm,n;?scanf("%f%f",&m,&n); for(i=1;i<n-1;i++) {??for(j=1;j<=n-1-i;j++)? {???for(k=1;k<=n-i-j;k++)? if((i*5+j*3+k*1.0/3)==m&&i+j+k==n)? ???printf("%d,%d,%d\n",i,j,k);??}?} return0;}23.誰能出線電視臺舉辦“超級學生”才藝大賽,由于報名人數狂多,所以要先進行分組預賽。按規(guī)定,每10名學生為一個預賽小組,評委打出分數(0~100分),各小組第一名可以進入下一輪;假如有多名學生得分相同都是第一名,則可同時進入下一輪。輸入:

按順序給出一個小組10個人的最后得分(int)。輸出:?可以出線的學生序號(0~9)。程序:#include<stdio.h>intmain(){ inti,s[10]={0},max=0;?for(i=0;i<10;i++)?{?scanf("%d",&s[i]);?if(max<s[i])??max=s[i]; }?for(i=0;i<10;i++)?{??if(s[i]==max) ? printf("%d\n",i); }?return0;}24.尋找特殊偶數有一種特殊偶數,它每一位上的數字都兩兩不相同。我們現在需要找出四位數中某一區(qū)間內的這類偶數。輸入所要尋找的四位偶數的范圍。每組輸入有兩個數字:第一個數字是最小范圍;第二個數字是最大范圍。假如輸入碰到0,輸入結束。輸出列出此范圍內的所有特殊偶數,并且列出此范圍內特殊偶數的個數。程序:#include<stdio.h>#include<math.h>main(){ inti,j,k,a,b,c,d,m=0,e;?for(e=0;e>=0;e++)?{scanf("%d%d",&i,&j); if((i==0)||(j==0))break;??elseif((i>9999||i<1000)||(j>9999||j<1000))printf("Error\n");?else{for(k=i;k<=j;k++)?{if(k%2==1)continue;?a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10;??if((((a==b)||(b==c))||(c==d))||((d==a)||((a==c)||(d==b))))continue;??printf("%d",k);m+=1;} ?printf("\ncounter=%d\n",m);m=0;}}???}25.輸出字母圍起的正方形輸入N*N圖形正方形的邊長N,圖形左上角的字母,輸出由字母圍成的空心正方形。輸出的字母是順時針連續(xù)的,且是循環(huán)的,即輸出字母'Z'后輸出字母"A"。注旨在兩個字母之間有一個空格。程序:#include<stdio.h>intmain(){ intn,i,j,t;?charm;?scanf("%d%c",&n,&m);?for(i=0;i<n;i++) {??if(i==0)? {? ?for(j=0;j<n;j++) ? {????t=m+j;????if((m<=90&&t>90)||(m>96&&t>122))?? ?t=t-26; if(j==n-1)? printf("%c\n",t);??else?? printf("%c",t);?? }? }??elseif(i==n-1)???{??for(j=0;j<n;j++) ? {? ???t=m+3*n-3-j;?? ?if((m<=90&&t>90)||(m>96&&t>122)) ??t=t-26;??if(j==n-1)???printf("%c\n",t);??else???printf("%c",t);?? }??} ?else??{? ?for(j=0;j<2*n-1;j++)???{???? ? if(j==0) ???{t=m+4*n-4-i;????if((m<=90&&t>90)||(m>96&&t>122))? ???t=t-26;?? ?printf("%c",t); ???} ??elseif(j==2*n-2)? ?{??? ?t=m+n-1+i; ???if((m<=90&&t>90)||(m>96&&t>122))?????t=t-26; ????printf("%c\n",t);??? }????else? ???printf("");???}??}?}?return0;}H3:猜數字(選作)有如下一組數字,其中每個數字都在1~63之間,13579111315171921232527293133353739414345474951535557596163

236710111415181922232627303134353839424346475051545558596263

456712131415202122232829303136373839444546475253545560616263

89101112131415242526272829303140414243444546475657585960616263?1617181920212223242526272829303148495051525354555657585960616263

3233343536373839404142434445464748495051525354555657585960616263現在需要編寫一個程序,當從鍵盤輸入某數字在且僅在哪幾行出現了,該程序可以“猜”出這個數字是幾。輸入:程序的輸入是一串以空白符分開的數字,當輸入0時表達輸入結束。輸出:輸出猜到的數字。程序:#include<stdio.h>intmain(){inta[7],m,n=0,i,p=0;for(i=0;i<7;i++){scanf("%d",&a[i]);n++;if(a[i]==0){break;}scanf("");}for(m=1;m<64;m++){?p=0;for(i=0;i<(n-1);i++){if(a[i]==1){if(m==m/2*2){p=1;break;}}if(a[i]==2){if(m%4!=3&&m%4!=2){p=1;break;}}if(a[i]==3){if(m%8!=4&&m%8!=5&&m%8!=6&&m%8!=7){p=1;break;}}if(a[i]==4){if(m%16!=8&&m%16!=9&&m%16!=10&&m%16!=11&&m%16!=12&&m%16!=13&&m%16!=14&&m%16!=15){p=1;break;}}if(a[i]==5){if(m>31&&m<48||m<16){p=1;break;}}if(a[i]==6){if(m<32){p=1;break;}}}if(p==0){printf("%d\n",m);break;}}return0;}H4:小蜜蜂(選作)一只小蜜蜂在如下圖所示的蜂窩上爬行。它爬行時,只能從一個格爬到相鄰的大號格子中。例如,從1號格子可以爬到2號或者3號格子,從2號則可以爬到3號或者4號格子。請問從一個格子a爬到一個格子b一共有多少種可行的路線。輸入:分別是起始點a和終止點b的編號。(a和b在1~100之間,且a<b。)輸出:程序:#include"stdio.h"#defineN50intmain(){intb[N]={0};intc[N]={0};inti,j,k,n,a1,a2,t,l;b[1]=c[1]=1;scanf("%d%d",&a1,&a2);n=a2-a1+1;for(j=3;j<=n;j++){for(i=1;i<N;i++){t=b[i]+c[i];if(l==1){c[i]=b[i]-1;l=0;}elsec[i]=b[i];b[i]=t;if(b[i]>=10){l=1;b[i+1]=b[i+1]+1;b[i]=b[i]%10;}}}k=N;while(b[--k]==0){}for(i=k;i>=1;i--)printf("%d",b[i]);printf("\n");return0;}#include<stdio.h>intmain(){?longdoublenum1,num2,num3=0;?inta=0,b=0,i; scanf("%d%d",&a,&b);?num1=1; num2=2;?if(b-a==1)??printf("1\n");?elseif(b-a==2)??printf("2\n");?else {?for(i=3;i<=b-a;i++) {??num3=num1+num2;? num1=num2;??num2=num3;?}?printf("%.0lf\n",num3);?} return0;}H5.鋪地板(選作)背景:你是一名室內裝潢工程隊的配料員。你的伙伴們喜歡采用“之”字型的方式鋪大理石地磚,圖案如下:12671535814164913172210121821231119202425學了C語言以后,你決定編寫一個程序,幫助你的同伴生成這樣的圖形。輸入:方陣N的大小。輸出方陣。程序:#include<stdio.h>intmain(){?inti=0,j=0,g,n,t=1;?inta[100][100];?scanf("%d",&n);?for(g=0;g<n;g++) { ?if(g%2!=0)??{ for(i=0,j=g;i<=g&&j>=0;i++,j--)???{????a[i][j]=t;??t++;? }?} ?else??{ ?for(i=g,j=0;i>=0&&j<=g;i--,j++)???{ ?? a[i][j]=t;? t++;?? }? }?} for(g=1;g<n;g++)?{??if(g%2!=0)??{?for(i=g,j=n-1;i<n&&j>=g;i++,j--)???{????a[i][j]=t;??t++;???} } else ?{ ??for(i=n-1,j=g;i>=g&&j<n;i--,j++) ??{????a[i][j]=t; ?t++;?? }??}?}??for(i=0;i<n;i++)?{??for(j=0;j<n;j++)??{ if(j==n-1)???printf("%2d",a[i][j]);??else??printf("%2d",a[i][j]);??} printf("\n");?}?return0;}H6暈(選作)看著這樣的“回”形圖案你暈嗎?讓我們不用數組,來做出它。輸入:?n。正方形的邊長輸出:?邊長為n的數字回形方陣。程序:#include<stdio.h>intmain(){? inta[20][20],i,j,n,m=1,l,k=0;?scanf("%d",&n); l=n; for(i=1;i<=(n+1)/2;i++)?{for(j=0;j<l;j++)?{a[k][j+k]=j+m;?a[n-1-k][j+k]=3*l-3+m-j;?}?for(j=1;j<=l-1;j++)?{a[j+k][k]=4*l-4-j+m;?a[j+k][n-1-k]=l+j+m-1; }?m=m+4*l-4;?l=l-2;?k=k+1;?} for(i=0;i<=n-1;i++)?{?for(j=0;j<=n-1;j++)?printf("%3d",a[i][j]);?printf("\n");?}}H7子數整除(選作)對于一個五位數a1a2a3a4a5,可將其拆分為三個子數:sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位數20237可以拆提成:sub1=202sub2=020(=20)sub3=207現在給定一個正整數K,規(guī)定你編程求出10000到30000之間所有滿足下述條件的五位數,條件是這些五位數的三個子數sub1、sub2、sub3都可被K整除。輸出時請按照由小到大的順序排列(每行輸出一個數)。程序:#include<stdio.h>intmain(void){?inti,j,k,l,m,n; scanf("%d",&n);?for(i=1;i<=3;i++)??for(j=0;j<=9;j++)???for(k=0;k<=9;k++)????for(l=0;l<=9;l++) ??? for(m=0;m<=9;m++)???? {? ? ??if((i*100+j*10+k)%n==0&&(j*100+k*10+l)%n==0&&(k*100+l*10+m)%n==0)???????printf("%d%d%d%d%d\n",i,j,k,l,m);???? ?if(i==3)return0;? ?? }?return0;}H8郵票組合(選作)背景:我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資?,F在,郵局有4種不同面值的郵票。在每個信封上最多能貼5張郵票,面值可相同,可不同。輸入:四種郵票的面值。輸出:用這四種面值組成的郵資最大的從1開始的一個連續(xù)的區(qū)間。說明:如結果為10,則表白使用4張郵票可組合出1、2、3、4、5、6、7、8、9、10這些郵資。名詞解釋:郵資:就是你寄東西需要花多少錢。郵票面額:是由國家發(fā)行的具有固定價格的花紙片,被稱為郵票。假如你寄東西,郵局稱了重量,告訴你要240分。這樣你就要貼郵票了。假如現在郵局的郵票有面值為80分、50分、20分和10分的四種,你就可以采用不同的組合得到240的郵資,例如:采用3張80分的可以湊出240分;或者24張10分的湊起來240分也可以。顯然不同郵票的組合都可以得到同樣一種郵資。程序:#include<stdio.h>main(){?inti,j,k,p,a1,a2,a3,a4,m=1,flag;?scanf("%d%d%d%d",&a1,&a2,&a3,&a4);A:?for(i=0;i<=5;i++)?{??for(j=0;j<=5-i;j++)??{ ??for(k=0;k<=5-i-j;k++)? ?{????for(p=0;p<=5-i-j-k;p++)? ? {???? flag=1;?????if(a1*p+a2*k+a3*j+a4*i==m) ????{? ????flag=0;??? ??m++;??????gotoA;?? ??}??? }? ?}??} } if(flag==1)??printf("Themaxis%d.\n",m-1);}H9撞球(選做)一天,丁俊暉編一整天的程序,忽然覺得累了,于是便決定在房間內四處走走。他的房間是矩形的,他從電腦開始隨便選了一個角度開始行走。由于職業(yè)習慣,丁俊暉走路始終是直線,并且碰到墻以后會反彈,入射角度與出射角度完全相同。丁俊暉會一直行走,直到靈感再次迸發(fā)。假設他的行走速度是勻速的,現在,丁俊暉的母親想知道他一共休息了多長時間以便提醒他繼續(xù)工作。丁俊暉想考考他的母親,于是他記錄了自己碰到墻壁的序列并且告訴了她,你有沒有辦法可以幫助她計算出小丁所走的路程?輸入輸入涉及多個測試用例,每個測試用例如下:第一行包含兩個數字w,l(0<w,l<=1000),分別代表房間的寬度和長度;第二行涉及兩個數字x0,y0,代表電腦的位置坐標(x0,y0);第三行包含兩個數字x1,y1,代表丁俊暉的位置坐標(x1,y1);最后一行是一個包含'F','B','L','R'四種字符的字符串,分別代表墻在前面、后面、左邊或是右邊,字符串的長度小于等于1000;我們約定,左上角的坐標為0,0,所有的坐標都是浮點型數字。輸出一個浮點型數字,代表總路程,結果精確到小數點后4位。程序:#include"stdio.h"#include"string.h"#include"mat(yī)h.h"voidmain(){?chara[2023];?intw,l,x0,y0,x1,y1,i,k,r=0,f=0,n=0,m=0;?doublec,d,s;?scanf("%d%d",&w,&l);?scanf("%d%d",&x0,&y0);?scanf("%d%d",&x1,&y1);?scanf("%s",a);?k=strlen(a);?for(i=0;i<k;i++)?{? if(a[i]=='R'||a[i]=='L')? ?m++;??if(a[i]=='F'||a[i]=='B') ?n++; }?for(i=0;i<k;i++)?{ if(a[i]=='R')? ?r=1;??if(a[i]=='L')???r=2;??if(r>0)break;?}??for(i=0;i<k;i++) {? if(a[i]=='F')???f=1; ?if(a[i]=='B') ??f=2;??if(f>0)break;?}?if(m%2==0)??d=m*w+(x0-x1)*pow(-1,r);?else ?d=m*w+w-x0-x1;?if(n%2==0)??c=n*l+(-y0+y1)*pow(-1,f);?else ?c=n*l-l+y0+y1; s=sqrt(pow(d,2)+pow(c,2));?printf("%.4f\n",s);}H10.整數問題(選做)請求輸出滿足以下條件的n位正整數的個數:規(guī)定該n位整數的從高位開始前1位可以被1整除,該n位整數前2位可以被2*2整除,該整數前3位可以被3*3整除,該整數前4位可以被4*4整除……。即該整數前k位都可被k平方整除。例如:n=1,則符合條件的1位正整數為1~9,輸出答案9。n=2,符合條件的正整數為:12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,則輸出答案22。當n=4時,2432就是一個符合題意的整數。第一位2可以被1整除;前2為24可以被4整除;前3位243可以被9整除;整個4位2432可以被16整除。輸入:n(0<=n<9)輸出:符合該條件的n位正整數的數量(本題目為軟件學院2023年保研學生初試上機試題。本題可以不用數組)程序:#include<stdio.h>#include<math.h>main(){stat(yī)icinta[30],b[30],n,t,temp,i,j,k;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<30;j++){for(k=0;k<=9;k++){b[t]=a[j]*10+k;if(b[t]%(i*i)==0&&b[t]>b[t-1])t++;}}for(j=1;j<30;j++){a[j]=b[j];b[j]=0;}t--;}printf("%d\n",t);}26.二年級小學生的題目兩個二年級小朋友在一起玩游戲,小明給出一堆不超過兩位的正整數和運算規(guī)定(+、-、*、/、%),小麗要找出這些整數中的最大值和最小值,然后按照小明的規(guī)定算出最大數與最小數進行算術運算的結果。輸入:?用逗號分隔的不超過兩位的正整數序列,及其運算符和等號輸出:

最大數op最小數=結果程序:#include<stdio.h>intmain(){inti,a,max=0,min=100,s;charl[100]={0},op;gets(l);for(i=0;;i=i+2){if(l[i]=='=')break;else{if(l[i]==43||l[i]==45||l[i]==42||l[i]==37||l[i]==47)op=l[i];else{if(l[i+2]==44){a=(l[i]-48)*10+l[i+1]-48;i++;}elsea=l[i]-48;if(a>=max){max=a;}if(a<=min){min=a;}}}}switch(op){case43:s=max+min;printf("%d+%d=%d\n",max,min,s);break;case45:s=max-min;printf("%d-%d=%d\n",max,min,s);break;case42:s=max*min;printf("%d*%d=%d\n",max,min,s);break;case37:{if(min==0){printf("Error!\n");break;}else{s=max%min;printf("%d%%d=%d\n",max,min,s);break;}}case47:{if(min==0){printf("Error!\n");break;}else{s=max/min;printf("%d/%d=%d\n",max,min,s);break;}}}}27.等值數列段假如一個數列中的某一段(至少有兩個元素)的各元素值均相同,則稱之為等值數列段。等值數列段中元素的個數叫做等值數列段的長度。輸入:?由N個元素組成的整數數列A(其中N<=50)輸出:?A中長度最大的所有等值數列段的始末位置,假如沒有等值數列段,則輸出Noequalnumberlist.說明:?始末位置是指數組下標,即0表達第一個元素。?假如有多個同等長度的等值數列,只輸出第一個等值數列的起始位置。?當在一個LIST中出現兩個等長的連續(xù)串的時候,我們的答案應當是第一個等長串。程序:#include<stdio.h>#include<string.h>#defineN50#defineM50intmain(){?chara[N],t;?inti,j=0,n,b[M]={0},max=0,min=0,temp;?scanf("%d",&n); k:?{?gets(a); if((strlen(a)+1)/2!=n) ?gotok;?}?t=a[0];?b[0]=0; for(i=2;i<strlen(a);i+=2) {??if(t!=a[i])? {???t=a[i];???j++;? ?b[j]=(i+1)/2;??}?}?j++;?b[j]=(i+1)/2;?temp=b[1]-b[0];?max=b[1]-1;?min=b[0]; for(i=1;i<=j;i++)?{ ?if(temp<b[i+1]-b[i])? {??temp=b[i+1]-b[i];??max=b[i+1]-1;??min=b[i];??}?} if(temp==1)??printf("Noequalnumberlist.\n"); else?printf("Thelongestequalnumberlistisfrom%dto%d.\n",min,max);?return0;}28.大家一起做游戲輸入:?小朋友的個數(<=50)要被練習的數字輸出:?最終被留下的小朋友的序號說明:

如“要被練習的數字”是5,則每次數到5的同學要退出該游戲程序:#include<stdio.h>voidmain(){?longintleft,p,i,j,k,q,flag[100],n,m;?scanf("%d%d",&n,&m);?left=n;p=1;?for(i=1;i<=n;i++)flag[i]=1;?for(i=1;i<=n;i++)?{ ?q=(m-1)%left+1; ?j=0;k=p;? while(j!=q) ?{???if(flag[k]==1)j++; ??if(j==q)break; ??k++;?if(k==n+1)k=1;??}??flag[k]=0;??p=k;left--;?}?printf("TheleftchildisNO%d.\n",k);}29.組成最大數任意輸入一個自然數,輸出該自然數的各位數字組成的最大數。例如,輸入1593,則輸出為9531。輸入:自然數n輸出:各位數字組成的最大數程序:#include<stdio.h>#include<string.h>intmain(){? chara[10000];?intx[10]={0};?scanf("%s",a);?intn=strlen(a);?for(inti=0;i<n;i++)x[a[i]-'0']++;?for(inti=9;i>=0;i--)??for(intj=0;j<x[i];j++)printf("%d",i);?printf("\n");}30.刪除反復字符背景:輸入一個長度不超過100的字符串,刪除串中的反復字符。輸入:輸入要檢查的字符串,長度不超過100個字符。例如:abacaeedabcdcd。輸出:刪除反復字符后的字符串。例如:abced。程序:#include<stdio.h>#include<string.h>#defineN100intmain(){?chara[N],t;?inti,j,k;?scanf("%s",a);?for(i=0;i<strlen(a);i++) {? for(j=i+1;j<strlen(a);j++) {???if(a[i]==a[j])???{????for(k=j;k<strlen(a);k++)???? a[k]=a[k+1];? ??j--; ??} ?} }?printf("%s\n",a);?return0;}H11:五年級小學生的題目(選做)那兩個小朋友在不斷進步,他們已經學會了負數和多位數,于是他們又開始進行游戲了。小明給出一堆整數和運算規(guī)定(+、-、*、/、%),小麗要找出這些整數中的最大值和最小值,然后按照小明的規(guī)定算出最大數與最小數進行算術運算的結果。輸入:用逗號分隔的整數序列,及其運算符和等號輸出:最大數op最小數=結果說明:本題目應當可以不使用數組就可以完畢,關鍵是如何解決負數和減法程序:#include<stdio.h>#include<string.h>pow(inta,intb)//a^b{?intresult=1;?for(inti=0;i<b;i++)??result=result*a;?returnresult;}structdate{?intmax; intmin;?charop;?intr;};structdatefunction(charp[],intn){?structdateresult;?n=n-4; intmax=-10000;?intmin=10000;?intcount=0;//needbackto0?intx[10]={0};//needbackto0?inttemp=0;//needbackto0 intsign=1;//needbackto1?for(inti=0;i<=n;i++)?{??if(p[i]==',')//meet,meansendcaculatethevalueandcomparewithmaxandmin??{? ?for(intk=0;k<count;k++)????temp=temp+x[k]*intpow(10,count-1-k); ??temp=temp*sign;???if(temp>max)max=temp;? if(temp<min)min=temp;???count=0;temp=0;sign=1; ? continue; ?}?? ?if(p[i]=='-')??{ ??sign=-1;???continue;??} ?else? {??x[count]=p[i]-'0';? count++;??}?}?charopp;?opp=p[n+1];????if(opp=='+')?{result.r=max+min;result.op='+';}elseif(opp=='-')?{result.r=max-min;result.op='-';}elseif(opp=='*')?{result.r=max*min;result.op='*';}elseif(opp=='/')?{ ?if(min==0)? result.r=0;??else {???result.r=max/min;??}??result.op='/';?}elseif(opp=='%')?{result.r=max%min;result.op='%';}?result.max=max; result.min=min; returnresult;}intmain(){?charw[100]; gets(w);?intl=strlen(w);?structdatecc=function(w,l);?if(cc.op=='/'&&cc.min==0)??printf("Error!");?else {??if(cc.max<0)? ?printf("(%d)",cc.max);? else???printf("%d",cc.max); ?printf("%c",cc.op);??if(cc.min<0)???printf("(%d)",cc.min);? else???printf("%d",cc.min); ?printf("=");? printf("%d",cc.r);printf("\n");?}}H12:掃雷(選做)輸入輸入中將涉及一系列的地圖,每個地圖的第一行有兩個整數n和m(0<n,m<=100),它們表達了地圖的行數和列數。下面的n行每行都有m個字符,其中"."表達安全而"*"表達地雷。假如地圖的n和m都為0,則表達輸入結束。輸出針對每一個地圖,一方面輸出一行:Field#x:其中x是當前地圖的編號(從1開始)。下面的n行則將地圖中的"."以數字表達,該數字表達該方格周邊有多少顆地雷。程序:#include<stdio.h>#defineN110voidmain(){ chara[N][N];?intn,m,t,i,j,k=1; staticintb[N][N];?for(n=m=1;n!=0&&m?。?;)?{??for(i=0;i<N;i++)??{?? for(j=0;j<N;j++)???b[i][j]=0; ?} ?scanf("%d%d",&n,&m);??for(t=n;t>0;t--)???scanf("%s",a[n-t]); for(i=0;i<n;i++)??{???for(j=0;j<m;j++)?? { ???if(a[i][j]=='*')? ??{??? ?b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]++;? ?}?? } ?}? if(n!=0&&k>1){printf("\nField#%d:\n",k);k++;} elseif(n!=0){printf("Field#%d:\n",k);k++;} for(i=0;i<n;i++,printf("\n")) ?{? ?for(j=0;j<m;j++)? ?{??? if(a[i][j]=='*')printf("*"); ?elseprintf("%d",b[i+1][j+1]);?? }??}?}}31.合并字符串輸入兩個已經按從小到大順序排列好的字符串,編寫一個合并兩個字符串的函數,使合并后的字符串,仍然是從小到大排列。輸入:?兩個已經排好順序(升序)的兩個字符串輸出:

一個合并在一起的有序(升序)的字符串規(guī)定:?設計一個效率盡量高的算法,對每個字符串只掃描一遍就可以了。

假如采用先進行串連接,然后再進行排序的算法,則效率太低了。程序:#include<stdio.h>intmain(){chara[100],b[100],c[200];inti=0,j=0,k=0;gets(a);gets(b);while(i<strlen(a)&&j<strlen(b)){if(a[i]<b[j]){c[k++]=a[i++];}else{c[k++]=b[j++];}}while(i<strlen(a)){c[k++]=a[i++];}while(j<strlen(b)){c[k++]=b[j++];}c[k]='\0';printf("%s\n",c);return0;}32.串的減法輸入字符串s和t(串長不超過80個字符),將在字符串s中出現,但未在字符串t中出現的字符組成一個新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉反復字符,輸出u。例如:當s="112345",t="2467"時,u="1135"。輸入:

第一行為串s?第二行為串t輸出:?串u程序:#include<stdio.h>#include<string.h>main(){?chars[800],t[800];?staticinta[500]={0}; inti,k,m,n;gets(s);gets(t);m=strlen(s); n=strlen(t); for(i=0;i<=n-1;i++)?{??k=t[i];??a[k]=1;?}?for(i=0;i<=m-1;i++)?{ k=s[i]; ?if(a[k]==0)? printf("%c",s[i]);?}?printf("\n");return0;}33.單詞排序輸入5個單詞,將它們按從大到小的順序排列后輸出。輸入:5個單詞輸出:排序后的順序程序:#include<stdio.h>#include<string.h>main(){ chara[5][25],b[5][25];?inti,j,k; for(i=0;i<5;i++)??scanf("%s",&a[i]); for(i=0;i<5;i++)??{?? for(k=0,j=0;j<5;j++)? if(strcmp(a[i],a[j])<0)k++;

溫馨提示

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

評論

0/150

提交評論