哈工大 C語言程序設(shè)計(jì)精髓 MOOC慕課 6-12周編程題答案.doc_第1頁
哈工大 C語言程序設(shè)計(jì)精髓 MOOC慕課 6-12周編程題答案.doc_第2頁
哈工大 C語言程序設(shè)計(jì)精髓 MOOC慕課 6-12周編程題答案.doc_第3頁
哈工大 C語言程序設(shè)計(jì)精髓 MOOC慕課 6-12周編程題答案.doc_第4頁
哈工大 C語言程序設(shè)計(jì)精髓 MOOC慕課 6-12周編程題答案.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余31頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

6.1/*下面代碼的功能是將百分制成績(jī)轉(zhuǎn)換為5分制成績(jī),具體功能是:如果用戶輸入的是非法字符或者不在合理區(qū)間內(nèi)的數(shù)據(jù)(例如輸入的是a,或者102,或-45等),則程序輸出 Input error!,并允許用戶重新輸入,直到輸入合法數(shù)據(jù)為止,并將其轉(zhuǎn)換為5分制輸出。目前程序存在錯(cuò)誤,請(qǐng)將其修改正確。并按照下面給出的運(yùn)行示例檢查程序。*/#include#include int main() char score100; int flag = 0, i, s; char grade; printf(Please input score:n); while (1) flag=0; scanf(%s, score); for (i = 0; i = 0 & scorei = 9) continue; else flag = 1; break; s = atoi(score); if (s 100 | flag = 1) printf(Input error!n); printf(Please input score:n); continue; else break; s = atoi(score); if (s = 90) grade = A; else if (s = 80) grade = B; else if (s = 70) grade = C; else if (s = 60) grade = D; else grade = E; printf(grade: %cn, grade); return 0;6.2#include#includeint main() int n,a,i,j; double p=0,q=0; printf(Input a,n:n); scanf( %d,%d,&a,&n); for(i=1;i=n;i+) for(j=0,p=0;ji;j+) p=p+a*pow(10,j); q=p+q; printf(sum=%.0fn,q); return 0;6.3/*n塊磚( 27n=77 ),36人搬,男搬4,女搬3,兩個(gè)小孩抬一塊磚,要求一次搬完,問男人、女人和小孩各需多少人?請(qǐng)用窮舉法編程求解,n的值要求從鍵盤輸入。輸出結(jié)果按照男人數(shù)量升序給出(見下面示例3)。程序的運(yùn)行結(jié)果示例1:Input n(27n=77):28men=0,women=4,children=32程序的運(yùn)行結(jié)果示例2:Input n(27n=77):36men=3,women=3,children=30程序的運(yùn)行結(jié)果示例3:Input n(27n=77):60men=2,women=14,children=20men=7,women=7,children=22men=12,women=0,children=24輸入提示: Input n(27n=77):n輸入格式: %d輸出格式:men=%d,women=%d,children=%dn*/#include stdio.hmain() printf(Input n(27n=77):n); long n, i, t, s = 0; scanf(%d, &n); int a, b, c; for (a = 0; 4 * a = n; a+) for (b = 0; 4 * a + 3 * b = n; b+) for (c = 0; 4 * a + 3 * b + c / 2 = n; c += 2) if (4 * a + 3 * b + c / 2 = n & c%2 = 0 & a+b+c=36) printf(men=%d,women=%d,children=%dn, a, b, c); 6.4#includeint main()int year,month,day;printf(Input year,month:n);scanf(%d,%d,&year,&month);switch(month) case 1: day=31;break; case 2: day=28;break; case 3: day=31;break; case 4: day=30;break; case 5: day=31;break; case 6: day=30;break; case 7: day=31;break; case 8: day=31;break; case 9: day=30;break; case 10: day=31;break; case 11: day=30;break; case 12: day=31;break;default:day=-1;printf(Input error!n);if(year%4=0&year%100!=0|year%400=0)&month=2) day=29;if (day!=-1)printf(%d daysn,day);return 0;7.1#include unsigned int ComputeAge(unsigned int n)main() int i, j, k, s = 23, n, c, age; scanf(%d, &n); printf(The persons age is %un,8+2*n);7.2#include int gys(int a,int b) int r; r=a%b; if(r=0) return b; else return gys(b,r);main() printf(Input a,b:); int a,b; scanf(%d,%d, &a,&b); if (a=0 | b=0) printf(Input error!n); else printf(%dn,gys(a,b);7.3#include int median(int a, int b, int c) if(ab) if(bc)return b; elsereturn ac? c: a;/acb: caa)return a;/cab elsereturn cb? c: b;/acb: abc main() int a,b,c; scanf(%d%d%d, &a,&b,&c); printf(The result is %dn,median (a,b,c);7.4#include main()printf(Input n(n1000):n); int a,b,c,n,s,x,y,z,flag=0; scanf(%d, &n); for (x=1;x=9;x+) for (y=1;y=9;y+) for (z=0;z=9;z+) if (x*100+y*10+z+y*100+z*11 = n) flag=1; a=x,b=y,c=z; break; if (flag) printf(X=%d,Y=%d,Z=%dn,a,b,c); else printf(Invalidn);8.1/*用二維數(shù)組作為函數(shù)參數(shù),編程計(jì)算并輸出nn階矩陣的轉(zhuǎn)置矩陣。其中,n的值不超過10,n的值由用戶從鍵盤輸入。程序運(yùn)行結(jié)果示例1:Input n:3Input 3*3 matrix:1 2 34 5 67 8 9The transposed matrix is: 1 4 7 2 5 8 3 6 9程序運(yùn)行結(jié)果示例2:Input n:2Input 2*2 matrix:1 24 5The transposed matrix is: 1 4 2 5輸入提示信息:提示輸入矩陣的階數(shù):Input n:提示輸入矩陣數(shù)據(jù):Input %d*%d matrix:n輸入格式: %d輸出提示信息:The transposed matrix is:n輸出格式:%4d*/#include int main() printf(Input n:); int n; scanf(%d,&n); printf(Input %d*%d matrix:n,n,n); int mnn,i,j; for (i=0;in;i+) for (j=0;jn;j+) scanf(%d,&mij); printf(The transposed matrix is:n); for (i=0;in;i+) for (j=0;jn;j+) printf(%4d,mji); printf(n); return 0;8.2/*用二維數(shù)組作為函數(shù)參數(shù),編程計(jì)算并輸出nn階矩陣的轉(zhuǎn)置矩陣。其中,n的值不超過10,n的值由用戶從鍵盤輸入。程序運(yùn)行結(jié)果示例1:Input n:3Input 3*3 matrix:1 2 34 5 67 8 9The transposed matrix is: 1 4 7 2 5 8 3 6 9程序運(yùn)行結(jié)果示例2:Input n:2Input 2*2 matrix:1 24 5The transposed matrix is: 1 4 2 5輸入提示信息:提示輸入矩陣的階數(shù):Input n:提示輸入矩陣數(shù)據(jù):Input %d*%d matrix:n輸入格式: %d輸出提示信息:The transposed matrix is:n輸出格式:%4d*/#include int main() printf(Input n(n=12):n); int n,total=0,i,s=0,b=1,t; scanf(%d,&n); printf(%4d,1); for (i=2;i=n;i+) t=s; s=b; b=b+t; printf(%4d,s+b); printf(nTotal=%dn,s+b); return 0;8.3/*一輛卡車違犯交通規(guī)則,撞人后逃跑?,F(xiàn)場(chǎng)有三人目擊事件,但都沒記住車號(hào),只記下車號(hào)的一些特征。甲說:牌照的前兩位數(shù)字是相同的;乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同;丙是位數(shù)學(xué)家,他說:四位的車號(hào)剛好是一個(gè)整數(shù)的平方?,F(xiàn)在請(qǐng)根據(jù)以上線索幫助警方找出車號(hào)以便盡快破案。提示:假設(shè)這個(gè)4位數(shù)的前兩位數(shù)字都是i,后兩位數(shù)字都是j,則這個(gè)可能的4位數(shù)k = 1000*i + 100*i + 10*j + j式中,i和j都在09變化。此外,還應(yīng)使k=m*m,m是整數(shù)。由于k是一個(gè)4位數(shù),所以m值不可能小于31。輸入格式: 無輸出格式:k=%d,m=%dn*/#include int main() int i,j,k,m,tk,tm; for (i=0;i=9;i+) for (j=0;j=9;j+) for (m=31;m100;m+) k = 1000*i + 100*i + 10*j + j; if (i!=j & m*m=k) tm=m; tk=k; break; printf(k=%d,m=%dn,tk,tm); return 0;8.4/*幻方矩陣是指該矩陣中每一行、每一列、每一對(duì)角線上的元素之和都是相等的。從鍵盤輸入一個(gè)55的矩陣并將其存入一個(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_1523_5_7_14_164_6_13_20_2210_12_19_21_311_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_13_1_1_1_11_1_1_1_21_1_1_1_19_1_7_1_1(輸人樣例中“_”代表空格)輸出樣例2:It is not a magic square!注意:為避免出現(xiàn)格式錯(cuò)誤,請(qǐng)直接拷貝粘貼上面給出的輸入、輸出提示信息和格式控制字符串!(輸人樣例中“_”代表空格,輸出樣例中“*”代表空格)*/#include int main() int a55,i,j,t,row5=0,col5=0,dl1=0,dl2=0,flag=1; for (i=0;i5;i+) for (j=0;j5;j+) scanf(%d,&aij); for (i=0;i5;i+) for (j=0;j5;j+) rowi+=aij; for (i=0;i5;i+) for (j=0;j5;j+) coli+=aji; for (i=0;i5;i+) dl1+=aii; dl2+=a4-i4-i; for (i=0;i4;i+) if (coli!=coli+1) flag=0; break; if (rowi!=rowi+1) flag=0; break; if (col1!=row1) flag=0; if (dl1!=dl2) flag=0; if (dl1!=col1) flag=0; if (flag) printf(It is a magic square!n); for (i=0;i5;i+) for (j=0;j5;j+) printf(%4d,aij); printf(n); else printf(It is not a magic square!n); return 0;9.1/*從鍵盤輸入一個(gè)數(shù),檢查這個(gè)數(shù)中是否有重復(fù)出現(xiàn)的數(shù)字。如果這個(gè)數(shù)中有重復(fù)出現(xiàn)的數(shù)字,則顯示“Repeated digit!”;否則顯示“No repeated digit!”。已知函數(shù)原型:int CountRepeatNum(int count, int n);若有重復(fù)數(shù)字,則該函數(shù)返回重復(fù)出現(xiàn)的數(shù)字;否則返回-1.程序運(yùn)行結(jié)果示例1:Input n:28212Repeated digit!程序運(yùn)行結(jié)果示例2:Input n:12345No repeated digit!輸入提示:Input n:n輸入格式: %ld輸出格式:有重復(fù)數(shù)字,輸出信息: Repeated digit!n沒有重復(fù)數(shù)字,輸出信息: No repeated digit!n*/#include int main() int log10= 0,a100; int b,i=0,n,c,d; printf(Input n:n); scanf(%d,&n); while(n!=0) b=n%10; n/=10; ai=b; i+; ai=n; int flag=0; for(c=0; ci; c+) for(d=c+1; di; d+) if(ac=ad) flag=1; break; /if (a0 = ai-1|a0 = a1) flag=1;if(flag) printf(Repeated digit!n);else printf(No repeated digit!n);9.2/*教授正在為一個(gè)有N個(gè)學(xué)生的班級(jí)講授離散數(shù)學(xué)課。他對(duì)某些學(xué)生缺乏紀(jì)律性很不滿意,于是決定:如果課程開始后上課的人數(shù)小于K,就取消這門課程。從鍵盤輸入每個(gè)學(xué)生的到達(dá)時(shí)間,請(qǐng)編程確定該課程是否被取消。如果該門課程被取消,則輸出“Yes”,否則輸出“No”。假設(shè)教授在時(shí)刻0開始上課。如果一個(gè)學(xué)生的到達(dá)時(shí)間是非正整數(shù),則表示該學(xué)生在上課前進(jìn)入教室。如果一個(gè)學(xué)生的到達(dá)時(shí)間是正整數(shù),則表示該學(xué)生在上課后進(jìn)入教室。如果一個(gè)學(xué)生在時(shí)刻0進(jìn)入教室,也被認(rèn)為是在上課前進(jìn)入教室。假設(shè)到達(dá)時(shí)間的絕對(duì)值不超過100,學(xué)生數(shù)N不超過1000。要求在輸入學(xué)生的到達(dá)時(shí)間之前,先輸入N和K。已知函數(shù)原型:/函數(shù)功能:根據(jù)數(shù)組a中記錄的學(xué)生到達(dá)時(shí)間確定課程是否被取消,取消則返回1,否則返回0int IsCancel(int a, int n, int k);程序運(yùn)行結(jié)果示例1:Input n,k:4,3-1 -3 4 2YES程序運(yùn)行結(jié)果示例2:Input n,k:5,3-1 -2 -3 0 4NO輸入提示:Input n,k:n輸入格式:%d,%d%d輸入包括兩行數(shù)據(jù): 第1行是n,k的值。 第2行是學(xué)生的到達(dá)時(shí)間。輸出格式:課程被取消,輸出YES課程不取消,輸出NO*/#include int IsCancel(int a, int n, int k) int i,s=0; for (i=0;in;i+) if (ai=0) s+; if (sk) return 1; else return 0;int main() int a100; int i,n,k; printf(Input n,k:n); scanf(%d,%d,&n,&k); for (i=0;in;i+) scanf(%d,&ai); if(IsCancel(a,n,k) printf(YES);else printf(NO);9.3/*請(qǐng)編程找出一個(gè)M*N矩陣中的鞍點(diǎn),即該位置上的元素是該行上的最大值,是該列上的最小值。如果矩陣中沒有鞍點(diǎn),則輸出“No saddle point!”已知函數(shù)原型:void FindSaddlePoint(int aN, int m, int n);在該函數(shù)中輸出有無鞍點(diǎn)的信息。程序運(yùn)行結(jié)果示例1:Input m,n:3,3Input matrix:1 2 34 5 67 8 9a02 is 3程序運(yùn)行結(jié)果示例2:Input m,n:3,4Input matrix:3 4 7 50 1 8 29 3 2 6No saddle point!輸入提示: Input m,n:n “Input matrix:n輸入格式:輸入矩陣大?。?%d,%d輸入矩陣元素: %d輸出格式:找到鞍點(diǎn)的輸出格式:a%d%d is %dn沒找到鞍點(diǎn)的輸出格式:No saddle point!n*/#include#includemain() int a100100,m; int n,i,j,k,max,flag=0,shit=0,l; printf(Input m,n:n); scanf(%d,%d,&n,&l); printf(Input matrix:n); for(i=0; in; i+) for(j=0; jl; j+) scanf(%d,&aij); for(i=0; in; i+) flag=0; m=ai0; for(j=0; jm) m=aij; max=j; for(k=0; kn; k+) if(akmax=m & k!=i) flag=1; break; if(flag=0) printf(a%d%d is %dn,i,max,m);shit=1;break; if (shit=0) printf(No saddle point!n);9.4/*輸入一串字符(字符數(shù)小于80),以回車表示輸入結(jié)束,編程計(jì)算并輸出這串字符中連續(xù)重復(fù)次數(shù)最多的字符和重復(fù)次數(shù)。如果重復(fù)次數(shù)最多的字符有兩個(gè),則輸出最后出現(xiàn)的那一個(gè)。已知函數(shù)原型:/函數(shù)功能:統(tǒng)計(jì)字符串中連續(xù)重復(fù)次數(shù)最多的字符及其重復(fù)的次數(shù)/函數(shù)參數(shù):str指向待統(tǒng)計(jì)的字符串,指針形參tag返回重復(fù)字符最后出現(xiàn)的下標(biāo)位置/函數(shù)返回值:返回字符重復(fù)的次數(shù)int CountRepeatStr(char str, int *tag);求解思路:設(shè)置一個(gè)計(jì)數(shù)器,遍歷字符串中的所有字符,若stri = stri+1,則計(jì)數(shù)器加1,同時(shí)判斷計(jì)數(shù)器的值是否大于記錄的最大重復(fù)次數(shù)max,若大于,則用計(jì)數(shù)器的值更新max,并記錄該字符最后出現(xiàn)的位置i+1.若stri != stri+1,則計(jì)數(shù)器重新初始化為1。遍歷結(jié)束時(shí),函數(shù)返回max的值。程序運(yùn)行結(jié)果示例1:Input a string:23444555555:5程序運(yùn)行結(jié)果示例2:Input a string:sgf2222572:4輸入提示信息:Input a string:n輸入格式: 用gets()輸入字符串輸出格式:%c:%dn*/#include #include int main() char a80; int b, i,j,t=1,tl,num=0; printf(Input a string:n); gets(a); for (i=0;istrlen(a);i+) t=1; for (j=i+1;jtl) tl=t; num=i; printf(%c:%dn, anum,tl);10.1/*從鍵盤輸入一串字符(假設(shè)字符數(shù)少于8個(gè)),以回車表示輸入結(jié)束,編程將其中的數(shù)字部分轉(zhuǎn)換為整型數(shù)并以整型的形式輸出。函數(shù)原型為 int Myatoi(char str);其中,形參數(shù)組str對(duì)應(yīng)用戶輸入的字符串,函數(shù)返回值為轉(zhuǎn)換后的整型數(shù)。解題思路的關(guān)鍵是:1)判斷字符串中的字符是否是數(shù)字字符;2)如何將數(shù)字字符轉(zhuǎn)換為其對(duì)應(yīng)的數(shù)字值;3)如何將每一個(gè)轉(zhuǎn)換后的數(shù)字值加起來形成一個(gè)整型數(shù)。程序運(yùn)行結(jié)果示例1:Input a string:7hg09y709程序運(yùn)行結(jié)果示例2:Input a string:9w2k7m09270程序運(yùn)行結(jié)果示例3:Input a string:happy0輸入提示信息:Input a string:輸入格式: %7s輸出格式:%dn*/#include #include #include int Myatoi(char str) int i,j; for (i=0,j=0;stri!=0;i+) if (stri =0 & stri=9) strj=stri; j+; strj=0; return atoi(str);int main() char s7; printf(Input a string:); scanf(%7s, s); printf(%d, Myatoi(s); printf(n); return 0;10.2/*輸入n個(gè)整數(shù)(n從鍵盤輸入,假設(shè)n的值不超過100),按奇偶數(shù)分成兩組并輸出。輸出兩行,第一行為所有奇數(shù),第二行為所有偶數(shù),保持?jǐn)?shù)據(jù)的相對(duì)順序與輸入順序相同。函數(shù)原型如下所示:void Seperate(int a, int n);/數(shù)組a存放用戶輸入的n個(gè)整數(shù)解題思路:用兩個(gè)循環(huán)分別輸出奇數(shù)和偶數(shù),在輸出第一個(gè)數(shù)時(shí)用%d格式字符,在輸出其余數(shù)時(shí)用,%d格式字符,用標(biāo)志變量記錄和判斷是否是第一個(gè)奇數(shù)或偶數(shù)。程序運(yùn)行結(jié)果示例1:Input n:7Input numbers:5 9 47 82 0 6 75,9,47,782,0,6程序運(yùn)行結(jié)果示例2:Input n:8Input numbers:-2 3 5 0 23 62 79 833,5,23,79,83-2,0,62輸入提示信息:Input n: Input numbers:輸入格式: %d每行第一個(gè)數(shù)據(jù)的輸出格式:%d每行第二個(gè)及以后數(shù)據(jù)的輸出格式:,%d*/#include #include int main() int n, i, j, k, o, e; printf(Input n:); scanf(%d, &n); printf(Input numbers:); char sn, oddn, evenn; for (i = 0, j = 0, k = 0; i n; i+) scanf(%d, &si); if (si % 2 = 0) /even evenk+ = si; e = k; else oddj+ = si; o = j; evene = 0; oddo = 0; for (i = 0; i o; i+) if (i = 0) printf(%d, oddi); else printf(,%d, oddi); printf(n); for (i = 0; i e; i+) if (i = 0) printf(%d, eveni); else printf(,%d, eveni); return 0;10.3/*從鍵盤輸入一個(gè)句子(假設(shè)字符數(shù)小于100個(gè)),句子中的單詞之間用空格分隔,句子必須以一個(gè)標(biāo)點(diǎn)符號(hào)作為結(jié)尾,句子開頭和末尾標(biāo)點(diǎn)符號(hào)前均沒有空格,以回車表示輸入結(jié)束,請(qǐng)編程顛倒句中的單詞順序并輸出。函數(shù)原型:int Inverse(char str1, char str2N)函數(shù)功能:將str1中的單詞顛倒順序后分別存入str2的每一行,返回str1中的單詞數(shù)。程序運(yùn)行結(jié)果示例1:Input a sentence:you can cage a swallow cant you?you cant swallow a cage can you?程序運(yùn)行結(jié)果示例2:Input a string:you are my sunshine!sunshine my are you!程序運(yùn)行結(jié)果示例3:Input a sentence:I

溫馨提示

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

評(píng)論

0/150

提交評(píng)論