第一篇:中國(guó)MOOC, C 語(yǔ)言代碼和實(shí)驗(yàn)報(bào)告總結(jié)
遞歸法計(jì)算游戲人員的年齡(4分)題目?jī)?nèi)容:
有n個(gè)人圍坐在一起,問(wèn)第n個(gè)人多大年紀(jì),他說(shuō)比第n-1個(gè)人大2歲;問(wèn)第n-1個(gè)人,他說(shuō)比第n-2個(gè)人大2歲,.....,問(wèn)第3個(gè)人,他說(shuō)比第2個(gè)人大2歲;問(wèn)第2個(gè)人,他說(shuō)比第1個(gè)人大2歲。第1個(gè)人說(shuō)自己10歲,問(wèn)第n個(gè)人多大年紀(jì)。遞歸函數(shù)原型:unsigned int ComputeAge(unsigned int n);提示: 遞歸公式
輸入格式: “%u” 輸出格式:
“The person's age is %un”
輸入樣例1: 5↙
輸出樣例1:
The_person's_age_is_18 輸入樣例2: 10↙
輸出樣例2:
The_person's_age_is_28 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
(注意:在輸出中,“_”代表空格,如果直接將上段示例粘貼到代碼中,應(yīng)將其替換為空格。)
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int main(){ unsigned int a,b;scanf(“%u”,&a);b=10+(a-1)*2;printf(“The person's age is %un”,b);
return 0;} 魔術(shù)師猜數(shù)(4分)題目?jī)?nèi)容:
在一種室內(nèi)互動(dòng)游戲中,魔術(shù)師要每位觀(guān)眾心里想一個(gè)三位數(shù)abc(a、b、c分別是百位、十位和個(gè)位數(shù)字),然后魔術(shù)師讓觀(guān)眾心中記下acb、bac、bca、cab、cba五個(gè)數(shù)以及這5個(gè)數(shù)的和值。只要觀(guān)眾說(shuō)出這個(gè)和是多少,則魔術(shù)師一定能猜出觀(guān)眾心里想的原數(shù)abc是多少。例如,觀(guān)眾甲說(shuō)他計(jì)算的和值是1999,則魔術(shù)師立即說(shuō)出他想的數(shù)是443,而觀(guān)眾乙說(shuō)他計(jì)算的和值是1998,則魔術(shù)師說(shuō):“你算錯(cuò)了!”。請(qǐng)編程模擬這個(gè)數(shù)字魔術(shù)游戲。要求用函數(shù)實(shí)現(xiàn),函數(shù)原型:int Magic(int m);其中形參m代表觀(guān)眾計(jì)算的和值。輸入格式: “%d” 輸出格式:
觀(guān)眾計(jì)算錯(cuò)誤,魔術(shù)師給出的結(jié)論:“The sum you calculated is wrong!n” 觀(guān)眾計(jì)算正確,魔術(shù)師給出的結(jié)論:“The number is %dn” 輸入樣例1: 1998↙
輸出樣例1:
The_sum_you_calculated_is_wrong!輸入樣例2: 1999↙
輸出樣例2:
The_number_is_443 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
(注意:在輸出中,“_”代表空格,如果直接將上段示例粘貼到代碼中,應(yīng)將其替換為空格。)
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int is(int i,int k){ int j=0,ii=i;while(ii){j+=ii%10;ii/=10;} if(j*222==k+i)return 1;else return 0;} int main(){ int i,j,k,sum;scanf(“%d”,&sum);k=0;for(i=100;i<=999;i++)if(is(i,sum)){k=i;break;} if(k==0)printf(“The sum you calculated is wrong!n”);else printf(“The number is %dn”,k);
return 0;} 尋找中位數(shù)v1.0(4分)題目?jī)?nèi)容:
編寫(xiě)一個(gè)函數(shù)返回三個(gè)整數(shù)中的中間數(shù)。函數(shù)原型:int mid(int a, int b, int c);功能是返回a,b,c三數(shù)中大小位于中間的一個(gè)數(shù)。輸入格式: “%d%d%d” 輸出格式:
“The result is %dn” 輸入樣例1: 12 6 18↙ 輸出樣例1: The_result_is_12 輸入樣例2:-9 7-2↙
輸出樣例2: The_result_is_-2 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
(注意:在輸出中,“_”代表空格,如果直接將上段示例粘貼到代碼中,應(yīng)將其替換為空格。)
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int main(){ int a[4],max,min,ans,i;scanf(“%d%d%d”,&a[1],&a[2],&a[3]);max=1;for(i=1;i<=3;i++)if(a[i]>a[max])max=i;min=1;for(i=1;i<=3;i++)if(a[i]< a[min])min=i;ans=6-max-min;printf(“The result is %dn”,a[ans]);
return 0;} 還原算術(shù)表達(dá)式(4分)題目?jī)?nèi)容: 編寫(xiě)程序求以下算式中XYZ的值。
輸入格式: 輸出格式:“X=%d,Y=%d,Z=%dn” 輸入樣例: 輸出樣例: X=3,Y=2,Z=1 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
時(shí)間限制:500ms內(nèi)存限制:31kb
#include “stdio.h” int main(){ int x,y,z;for(x=0;x<=9;x++)for(y=0;y<=9;y++)for(z=0;z<=9;z++)if(x*100+y*110+z*12==532)printf(“X=%d,Y=%d,Z=%dn”,x,y,z);
return 0;} 計(jì)算禮炮聲響次數(shù)(4分)題目?jī)?nèi)容:
在海軍節(jié)開(kāi)幕式上,有A、B、C三艘軍艦要同時(shí)開(kāi)始鳴放禮炮各21響。已知A艦每隔5秒放1次,B艦每隔6秒放1次,C艦每隔7秒放1次。假設(shè)各炮手對(duì)時(shí)間的掌握非常準(zhǔn)確,請(qǐng)編程計(jì)算觀(guān)眾總共可以聽(tīng)到幾次禮炮聲。輸入格式:無(wú) 輸出格式: n=%d 輸入樣例: 輸出樣例:
注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” main(){ int n=0,t;for(t=0;t<=20*7;t++){ if(t%5 == 0 && t <=20*5){ n++;continue;} if(t%6 == 0 && t <=20*6){ n++;continue;} if(t%7 == 0){ n++;} } printf(“n=%dn”, n);} 兔子生崽問(wèn)題(4分)題目?jī)?nèi)容:
假設(shè)一對(duì)小兔的成熟期是一個(gè)月,即一個(gè)月可長(zhǎng)成成兔,那么如果每對(duì)成兔每個(gè)月都可以生一對(duì)小兔,一對(duì)新生的小兔從第二個(gè)月起就開(kāi)始生兔子,試問(wèn)從一對(duì)兔子開(kāi)始繁殖,一年以后可有多少對(duì)兔子(即當(dāng)年12月份總計(jì)有多少對(duì)兔子,含成兔和小兔)?請(qǐng)編程求解該問(wèn)題。
參考答案:依題意,兔子的繁殖情況如圖所示。圖中實(shí)線(xiàn)表示成兔仍是成兔或者小兔長(zhǎng)成成兔;虛線(xiàn)表示成兔生小兔。觀(guān)察分析此圖可發(fā)現(xiàn)如下規(guī)律:(1)每月小兔對(duì)數(shù) = 上個(gè)月成兔對(duì)數(shù)。
(2)每月成兔對(duì)數(shù) = 上個(gè)月成兔對(duì)數(shù) + 上個(gè)月小兔對(duì)數(shù)。綜合(1)和(2)有:每月成兔對(duì)數(shù) = 前兩個(gè)月成兔對(duì)數(shù)之和。
用fn(n=1,2,?)表示第n個(gè)月成兔對(duì)數(shù),于是可將上述規(guī)律表示為如下遞推公式:
輸入格式:無(wú) 輸出格式:
每個(gè)月兔子對(duì)數(shù)的輸出格式: “% 4d” 第12個(gè)月的兔子總數(shù)的輸出格式: “nTotal=%dn” 輸入樣例: 輸出樣例:
注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include“stdio.h” int main(){ int i,a[13];a[1]=1;a[0]=1;for(i=2;i<=12;i++)a[i]=a[i-1]+a[i-2];for(i=1;i<=12;i++)printf(“% 4d”,a[i]);printf(“nTotal=%dn”,a[12]);
return 0;} 抓交通肇事犯(4分)題目?jī)?nèi)容:
一輛卡車(chē)違犯交通規(guī)則,撞人后逃跑?,F(xiàn)場(chǎng)有三人目擊事件,但都沒(méi)記住車(chē)號(hào),只記下車(chē)號(hào)的一些特征。甲說(shuō):牌照的前兩位數(shù)字是相同的;乙說(shuō):牌照的后兩位數(shù)字是相同的,但與前兩位不同;丙是位數(shù)學(xué)家,他說(shuō):四位的車(chē)號(hào)剛好是一個(gè)整數(shù)的平方?,F(xiàn)在請(qǐng)根據(jù)以上線(xiàn)索幫助警方找出車(chē)號(hào)以便盡快破案。
[提示]:假設(shè)這個(gè)4位數(shù)的前兩位數(shù)字都是i,后兩位數(shù)字都是j,則這個(gè)可能的4位數(shù) k = 1000*i + 100*i + 10*j + j 式中,i和j都在0~9變化。此外,還應(yīng)使k=m*m,m是整數(shù)。由于k是一個(gè)4位數(shù),所以m值不可能小于31。輸入格式:無(wú)
輸出格式:“k=%d,m=%dn” 輸入樣例: 輸出樣例:
注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include“stdio.h” int main(){ int i,m,ans;for(m=31;m<=100;m++){ ans=m*m;if(((ans/100)%11==0)&&((ans%100)%11==0))printf(“k=%d,m=%dn”,ans,m);}
return 0;} 檢驗(yàn)并打印幻方矩陣。(4分)題目?jī)?nèi)容:
幻方矩陣是指該矩陣中每一行、每一列、每一對(duì)角線(xiàn)上的元素之和都是相等的。從鍵盤(pán)輸入一個(gè)5×5的矩陣并將其存入一個(gè)二維整型數(shù)組中,檢驗(yàn)其是否為幻方矩陣,并將其按指定格式顯示到屏幕上。輸入格式: “%d” 輸出格式:
如果是幻方矩陣,輸出提示信息: “It is a magic square!n” 矩陣元素的輸出: “% 4d”(換行使用“n”)
如果不是幻方矩陣,輸出提示信息: “It is not a magic square!n” 輸入樣例1: 17_24_1_8_15 23_5_7_14_16 4_6_13_20_22 10_12_19_21_3 11_18_25_2_9(輸人樣例中“_”代表空格)輸出樣例1:
It is a magic square!**17**24***1**8**15 **23***5***7**14**16 ***4***6**13**20**22 **10**12**19**21***3 **11**18**25***2***9(輸出樣例中“*”代表空格)輸入樣例2: 1_0_1_6_1 3_1_1_1_1 1_1_1_1_2 1_1_1_1_1 9_1_7_1_1(輸人樣例中“_”代表空格)輸出樣例2:
It is not a magic square!注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!
(輸人樣例中“_”代表空格,輸出樣例中“*”代表空格)時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int main(){ int a[6][6];int i,j;for(i=1;i<=5;i++)for(j=1;j<=5;j++)scanf(“%d”,&a[i][j]);for(i=1;i<=5;i++){ a[i][0]=0;for(j=1;j<=5;j++)a[i][0]+=a[i][j];if(a[i][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} } for(i=1;i<=5;i++){ a[0][i]=0;for(j=1;j<=5;j++)a[0][i]+=a[j][i];if(a[0][i]!=a[0][1]){printf(“It is not a magic square!n”);return 0;} } if(a[1][0]!=a[0][1]){printf(“It is not a magic square!n”);return 0;} a[0][0]=0;for(i=1;i<=5;i++)a[0][0]+=a[i][i];if(a[0][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} a[0][0]=0;for(i=1;i<=5;i++)a[0][0]+=a[i][6-i];if(a[0][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} printf(“It is a magic square!n”);for(i=1;i<=5;i++){ for(j=1;j<=5;j++)printf(“% 4d”,a[i][j]);printf(“n”);}
return 0;} ISBN識(shí)別碼判斷(4分)題目?jī)?nèi)容:
每一本正式出版的圖書(shū)都有一個(gè)ISBN號(hào)碼與之對(duì)應(yīng),ISBN碼包括9位數(shù)字、1位識(shí)別碼和3位分隔符,其規(guī)定格式如“x-xxx-xxxxx-x”,其中符號(hào)“-”就是分隔符(鍵盤(pán)上的減號(hào)),最后一位是識(shí)別碼,例如0-670-82162-4就是一個(gè)標(biāo)準(zhǔn)的ISBN碼。ISBN碼的首位數(shù)字表示書(shū)籍的出版語(yǔ)言,例如0代表英語(yǔ);第一個(gè)分隔符“-”之后的三位數(shù)字代表出版社,例如670代表維京出版社;第二個(gè)分隔符后的五位數(shù)字代表該書(shū)在該出版社的編號(hào);最后一位為識(shí)別碼。
識(shí)別碼的計(jì)算方法如下:
首位數(shù)字乘以1加上次位數(shù)字乘以2??以此類(lèi)推,用所得的結(jié)果mod 11,所得的余數(shù)即為識(shí)別碼,如果余數(shù)為10,則識(shí)別碼為大寫(xiě)字母X。例如ISBN號(hào)碼0-670-82162-4中的識(shí)別碼4是這樣得到的:對(duì)067082162這9個(gè)數(shù)字,從左至右,分別乘以1,2,...,9,再求和,即0×1+6×2+??+2×9=158,然后取158 mod 11的結(jié)果4作為識(shí)別碼。
你的任務(wù)是編寫(xiě)程序判斷輸入的ISBN號(hào)碼中識(shí)別碼是否正確,如果正確,則僅輸出“Right”;如果錯(cuò)誤,則輸出你認(rèn)為是正確的ISBN號(hào)碼。程序運(yùn)行結(jié)果示例1: 0-123-41562-4↙ Right 程序運(yùn)行結(jié)果示例2: 0-123-41562-7↙ 0-123-41562-4 輸入格式: 用gets()輸入字符串 輸入只有一行,是一個(gè)字符序列,表示一本書(shū)的ISBN號(hào)碼(保證輸入符合ISBN的格式要求)。輸出格式:
輸入的ISBN號(hào)碼的識(shí)別碼正確,輸出信息: “Right” 輸入的ISBN號(hào)碼的識(shí)別碼錯(cuò)誤,按照規(guī)定的格式,輸出正確的ISBN號(hào)碼(包括分隔符“-”),輸出格式:“%s” 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!輸入樣例: 輸入樣例:
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int xg(char *s,int k){ if(k==10)*(s+12)='X';else *(s+12)='0'+k;} int main(){ char s[14];int a[10],i,ans=0;gets(s);a[1]=s[0]-'0';a[2]=s[2]-'0';a[3]=s[3]-'0';a[4]=s[4]-'0';a[5]=s[6]-'0';a[6]=s[7]-'0';a[7]=s[8]-'0';a[8]=s[9]-'0';a[9]=s[10]-'0';for(i=1;i<=9;i++)ans+=a[i]*i;ans%=11;if(ans+'0'==s[12]||(ans==10&&s[12]=='X'))printf(“Right”);else {xg(s,ans);printf(“%s”,s);}
return 0;} 摘蘋(píng)果(4分)題目?jī)?nèi)容:
陶陶家的院子里有一棵蘋(píng)果樹(shù),每到秋天樹(shù)上就會(huì)結(jié)出10個(gè)蘋(píng)果。蘋(píng)果成熟的時(shí)候,陶陶就會(huì)跑去摘蘋(píng)果。陶陶有個(gè)30厘米高的板凳,當(dāng)她不能直接用手摘到蘋(píng)果的時(shí)候,就會(huì)踩到板凳上再試試?,F(xiàn)在已知10個(gè)蘋(píng)果到地面的高度,以及陶陶把手伸直的時(shí)候能夠達(dá)到的最大高度,請(qǐng)幫陶陶算一下她能夠摘到的蘋(píng)果的數(shù)目。假設(shè)她碰到蘋(píng)果,蘋(píng)果就會(huì)掉下來(lái)。程序運(yùn)行結(jié)果示例1:
200 140 150 156 187 197 149↙ 110↙ 4 程序運(yùn)行結(jié)果示例2:
210 102 153 147 110 130 182 88 113↙ 100↙ 6 輸入格式: “%d” 輸入包括兩行數(shù)據(jù):
第1行包含10個(gè)100到200之間的整數(shù)(包括100和200,以厘米為單位),分別表示10個(gè)蘋(píng)果到地面的高度。兩個(gè)相鄰的整數(shù)之間用一個(gè)空格隔開(kāi)。
第2行只包括一個(gè)100到120之間的整數(shù)(包含100和120,以厘米為單位),表示陶陶把手伸直的時(shí)候能夠達(dá)到的最大高度。輸出格式: “%d” 注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!輸入樣例: 輸出樣例:
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int main(){ int app[11],i,ans=0,h;for(i=1;i<=10;i++)scanf(“%d”,app+i);scanf(“%d”,&h);for(i=1;i<=10;i++)if(app[i]<=h+30)ans++;printf(“%d”,ans);
return 0;} 求最大素?cái)?shù)(4分)題目?jī)?nèi)容:
求500以?xún)?nèi)的10個(gè)最大素?cái)?shù)及其和,并分別輸出這10個(gè)最大素?cái)?shù)及其和。要求10個(gè)素?cái)?shù)按從大到小的順序輸出。輸入格式: 無(wú) 輸出格式:
10個(gè)最大素?cái)?shù)的輸出格式:“% 6d” 總和的輸出格式:“nsum=%dn” 輸入樣例: 輸出樣例:
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” int ss[96];int is(int k){ int i=1;while(ss[i]*ss[i]<=k){ if(k%ss[i]==0)return 0;i++;}
return 1;} int main(){ int n=2,i,sum=0;ss[1]=2;ss[2]=3;for(i=4;i<=500;i++)if(is(i))ss[++n]=i;for(i=n;i>=n-9;i--){ printf(“% 6d”,ss[i]);sum+=ss[i];} printf(“nsum=%dn”,sum);
return 0;} 字符串逆序(4分)題目?jī)?nèi)容:
用字符數(shù)組作函數(shù)參數(shù)編程,利用一個(gè)數(shù)組實(shí)現(xiàn)字符串(允許輸入帶空格的字符串)的逆序存放。要求如下:
(1)在主函數(shù)中從鍵盤(pán)輸入字符串,字符串的最大長(zhǎng)度為80個(gè)字符。
調(diào)用Inverse()函數(shù)將字符串逆序存放,然后在主函數(shù)中輸出逆序后的字符串。(2)在子函數(shù)Inverse()中實(shí)現(xiàn)字符串的逆序存放。函數(shù)原型為: void Inverse(char str[]);程序運(yùn)行結(jié)果示例1: Input a string: abcde↙
Inversed results: edcba 程序運(yùn)行結(jié)果示例2: Input a string: hello↙
Inversed results: olleh 輸入格式: 用gets()輸入字符串 輸出格式:
輸入提示信息:“Input a string:n” 輸出提示信息:“Inversed results:n” 用puts()輸出字符串
注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!輸入樣例: 輸出樣例:
時(shí)間限制:500ms內(nèi)存限制:32000kb
#include “stdio.h” #include “string.h” int dh(char *s,int len){ int i;char c;for(i=0;i<=len/2;i++){ c=*(s+i);*(s+i)=*(s+len-i);*(s+len-i)=c;} } int main(){ char s[80],len=0;printf(“Input a string:n”);gets(s);while(s[len]!='