哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx
- 文档编号:17709907
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:60
- 大小:31.83KB
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx
《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx》由会员分享,可在线阅读,更多相关《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx(60页珍藏版)》请在冰点文库上搜索。
哈工大C语言程序设计精髓MOOC慕课612周编程题答案
6。
1"/*下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:
如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出Inputerror!
并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。
目前程序存在错误,请将其修改正确。
并按照下面给出的运行示例检查程序。
*/
#include h〉 #include〈string。 h> intmain() { charscore[100]; intflag=0,i,s; chargrade; printf(””Pleaseinputscore: \n"”); while (1) { flag=0; scanf(""%s”",score); for(i=0;i〈strlen(score);i++) { if(score[i]〉='0’&&score[i]〈='9’) { continue; } else { flag=1; break; } } s=atoi(score); if(s〈0||s〉100||flag==1) { printf(""Inputerror! \n"”); printf(””Pleaseinputscore: \n”"); continue; } else{ break; } } s=atoi(score); if(s〉=90) { grade=’A’; } elseif(s>=80) { grade=’B’; } elseif(s〉=70) { grade='C'; } elseif(s>=60) { grade=’D'; } else { grade='E'; } printf(""grade: %c\n"",grade); return0; }” 6.2"#include #include〈math.h> intmain() { intn,a,i,j; doublep=0,q=0; printf(””Inputa,n: \n”"); scanf(”"%d,%d"",&a,&n); for(i=1;i<=n;i++) { for(j=0,p=0;j { p=p+a*pow(10,j); } q=p+q; } printf(””sum=%。 0f\n"”,q); return0; }” 6。 3”/* n块砖(27 请用穷举法编程求解,n的值要求从键盘输入。 输出结果按照男人数量升序给出(见下面示例3)。 程序的运行结果示例1: Inputn(27〈n〈=77): 28↙ men=0,women=4,children=32 程序的运行结果示例2: Inputn(27 36↙ men=3,women=3,children=30 程序的运行结果示例3: Inputn(27〈n<=77): 60↙ men=2,women=14,children=20 men=7,women=7,children=22 men=12,women=0,children=24 输入提示: ””Inputn(27〈n〈=77): \n"” 输入格式: ””%d"” 输出格式: ""men=%d,women=%d,children=%d\n"" */ #include”"stdio。 h"” main() { printf(””Inputn(27 \n""); longn,i,t,s=0; scanf(”"%d"",&n); inta,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=%d\n"”,a,b,c); } }" 6.4"#include〈stdio.h> intmain() {intyear,month,day; printf(""Inputyear,month: \n””); scanf(""%d,%d"",&year,&month); switch(month) { case1: day=31;break; case2: day=28;break; case3: day=31;break; case4: day=30;break; case5: day=31;break; case6: day=30;break; case7: day=31;break; case8: day=31;break; case9: day=30;break; case10: day=31;break; case11: day=30;break; case12: day=31;break; default: day=—1;printf("”Inputerror! \n”"); } if((year%4==0&&year%100! =0||year%400==0)&&month==2)day=29; if(day! =-1) printf(”"%ddays\n””,day); return0; }” 7.1”#include〈stdio.h> unsignedintComputeAge(unsignedintn){ } main() { inti,j,k,s=23,n,c,age; scanf(""%d”",&n); printf(””Theperson'sageis%u\n"”,8+2*n); }” 7。 2"#include intgys(inta,intb) { intr; r=a%b; if(r==0)returnb; elsereturngys(b,r); } main() { printf(”"Inputa,b: "”); inta,b; scanf(”"%d,%d"",&a,&b); if(a<=0||b〈=0){ printf("”Inputerror! \n”"); } else printf(”"%d\n"”,gys(a,b)); }" 7.3"#include〈stdio.h〉 intmedian(inta,intb,intc) { if(a { if(b〈c){returnb;} else{returna〈c? c: a;}//a c〈a } else { if(c>a){returna;}//c〉a〉b else{returnc〉b? c: b;}//a〉c>b: a>b〉c } } main() { inta,b,c; scanf(”"%d%d%d"",&a,&b,&c); printf(""Theresultis%d\n"",median(a,b,c)); }" 7。 4"#include h〉 main() { printf(””Inputn(n<1000): \n””); inta,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=%d\n”",a,b,c); elseprintf(””Invalid\n"”); }" 8。 1"/*用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。 其中,n的值不超过10,n的值由用户从键盘输入。 程序运行结果示例1: Inputn: 3↙ Input3*3matrix: 123 456 789 Thetransposedmatrixis: 147 258 369 程序运行结果示例2: Inputn: 2↙ Input2*2matrix: 12↙ 45↙ Thetransposedmatrixis: 14 25 输入提示信息: 提示输入矩阵的阶数: ”"Inputn: ”" 提示输入矩阵数据: ”"Input%d*%dmatrix: \n"” 输入格式: "”%d"" 输出提示信息: ”"Thetransposedmatrixis: \n"" 输出格式: ””%4d”"*/ #include〈stdio.h〉 intmain(){ printf("”Inputn: ””); intn; scanf(””%d"”,&n); printf(”"Input%d*%dmatrix: \n"”,n,n); intm[n][n],i,j; for(i=0;i for(j=0;j scanf(””%d"",&m[i][j]); } } printf("”Thetransposedmatrixis: \n””); for(i=0;i〈n;i++){ for(j=0;j printf(”"%4d"”,m[j][i]); } printf(""\n””); } return0; }" 8.2”/*用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。 其中,n的值不超过10,n的值由用户从键盘输入。 程序运行结果示例1: Inputn: 3↙ Input3*3matrix: 123 456 789 Thetransposedmatrixis: 147 258 369 程序运行结果示例2: Inputn: 2↙ Input2*2matrix: 12↙ 45↙ Thetransposedmatrixis: 14 25 输入提示信息: 提示输入矩阵的阶数: ””Inputn: ”" 提示输入矩阵数据: ”"Input%d*%dmatrix: \n"” 输入格式: ””%d"” 输出提示信息: "”Thetransposedmatrixis: \n”" 输出格式: ""%4d”"*/ #include〈stdio.h〉 intmain(){ printf(""Inputn(n<=12): \n”"); intn,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=%d\n"”,s+b); return0; }” 8。 3"/* 一辆卡车违犯交通规则,撞人后逃跑。 现场有三人目击事件,但都没记住车号,只记下车号的一些特征。 甲说: 牌照的前两位数字是相同的;乙说: 牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说: 四位的车号刚好是一个整数的平方。 现在请根据以上线索帮助警方找出车号以便尽快破案。 [提示]: 假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数 k=1000*i+100*i+10*j+j 式中,i和j都在0~9变化.此外,还应使k=m*m,m是整数。 由于k是一个4位数,所以m值不可能小于31。 输入格式: 无 输出格式: "”k=%d,m=%d\n"" */ #include〈stdio。 h> intmain(){ inti,j,k,m,tk,tm; for(i=0;i〈=9;i++){ for(j=0;j〈=9;j++){ for(m=31;m<100;m++){ k=1000*i+100*i+10*j+j; if(i! =j&&m*m==k){ tm=m; tk=k; break; } } } } printf(””k=%d,m=%d\n"",tk,tm); return0; }" 8。 4"/* 幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。 从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。 输入格式: ”"%d"” 输出格式: 如果是幻方矩阵,输出提示信息: "”Itisamagicsquare! \n"" 矩阵元素的输出: "”%4d""(换行使用””\n"") 如果不是幻方矩阵,输出提示信息: "”Itisnotamagicsquare! \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: Itisamagicsquare! **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: Itisnotamagicsquare! 注意: 为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! (输人样例中“_"代表空格,输出样例中“*"代表空格) */ #include intmain() { inta[5][5],i,j,t,row[5]={0},col[5]={0},dl1=0,dl2=0,flag=1; for(i=0;i<5;i++){ for(j=0;j<5;j++){ scanf(””%d"”,&a[i][j]); } } for(i=0;i〈5;i++){ for(j=0;j<5;j++){ row[i]+=a[i][j]; } } for(i=0;i〈5;i++){ for(j=0;j<5;j++){ col[i]+=a[j][i]; } } for(i=0;i〈5;i++){ dl1+=a[i][i]; dl2+=a[4—i][4—i]; } for(i=0;i<4;i++){ if(col[i]! =col[i+1]){ flag=0; break; } if(row[i]! =row[i+1]){ flag=0; break; } } if(col[1]! =row[1]){ flag=0; } if(dl1! =dl2){ flag=0; } if(dl1! =col[1]){ flag=0; } if(flag){ printf(””Itisamagicsquare! \n”"); for(i=0;i<5;i++){ for(j=0;j〈5;j++){ printf(”"%4d”",a[i][j]); } printf(""\n""); } } else{ printf("”Itisnotamagicsquare! \n”"); } return0; }” 9.1”/* 从键盘输入一个数,检查这个数中是否有重复出现的数字。 如果这个数中有重复出现的数字,则显示“Repeateddigit! ”;否则显示“Norepeateddigit! ”. 已知函数原型: intCountRepeatNum(intcount[],intn); 若有重复数字,则该函数返回重复出现的数字;否则返回-1. 程序运行结果示例1: Inputn: 28212 Repeateddigit! 程序运行结果示例2: Inputn: 12345↙ Norepeateddigit! 输入提示: ””Inputn: \n”” 输入格式: ””%ld”” 输出格式: 有重复数字,输出信息: "”Repeateddigit! \n”" 没有重复数字,输出信息: ””Norepeateddigit! \n"" */ #include〈stdio.h〉 intmain() { intlog[10]={0},a[100]; intb,i=0,n,c,d; printf("”Inputn: \n""); scanf(””%d"”,&n); while(n! =0) { b=n%10; n/=10; a[i]=b; i++; } a[i]=n; intflag=0; for(c=0;c for(d=c+1;d〈i;d++) { if(a[c]==a[d]) { flag=1; break; } } //if(a[0]==a[i—1]||a[0]==a[1])flag=1; if(flag)printf("”Repeateddigit! \n””); elseprintf(""Norepeateddigit! \n""); }” 9。 2"/* 教授正在为一个有N个学生的班级讲授离散数学课。 他对某些学生缺乏纪律性很不满意,于是决定: 如果课程开始后上课的人数小于K,就取消这门课程。 从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。 如果该门课程被取消,则输出“Yes”,否则输出“No”。 假设教授在时刻0开始上课。 如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。 如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。 如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。 假设到达时间的绝对值不超过100,学生数N不超过1000。 要求在输入学生的到达时间之前,先输入N和K. 已知函数原型: //函数功能: 根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0 intIsCancel(inta[],intn,intk); 程序运行结果示例1: Inputn,k: 4,3↙ -1—342↙ YES 程序运行结果示例2: Inputn,k: 5,3↙ -1—2—304↙ NO 输入提示: "”Inputn,k: \n”" 输入格式: "”%d,%d”" ""%d”” 输入包括两行数据: 第1行是n,k的值. 第2行是学生的到达时间。 输出格式: 课程被取消,输出”"YES”" 课程不取消,输出""NO"" */ #include〈stdio。 h> intIsCancel(inta[],intn,intk){ inti,s=0; for(i=0;i if(a[i]<=0){ s++; } } if(s return1; } elsereturn0; } intmain() { inta[100]; inti,n,k; printf(""Inputn,k: \n””); scanf(””%d,%d”",&n,&k); for(i=0;i〈n;i++){ scanf(””%d””,&a[i]); } if(IsCancel(a,n,k))printf(""YES"”); elseprintf(””NO””); }" 9。 3”/* 请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。 如果矩阵中没有鞍点,则输出“Nosaddlepoint! ” 已知函数原型: voidFindSaddlePoint(inta[][N],intm,intn); 在该函数中输出有无鞍点的信息。 程序运行结果示例1: Inputm,n: 3,3↙ Inputmatrix: 123 456 789 a[0][2]is3 程序运行结果示例2: Inputm,n: 3,4↙ Inputmatrix: 3475 0182 9326 Nosaddlepoint! 输入提示: ””Inputm,n: \n"” “Inputmatrix: \n"” 输入格式: 输入矩阵大小: "”%d,%d”" 输入矩阵元素: ”"%d”" 输出格式: 找到鞍点的输出格式: ""a[%d][%d]is%d\n”" 没找到鞍点的输出格式: ””Nosaddlepoint! \n”” */ #include〈stdio。 h〉 #include main() { inta[100][100],m; intn,i,j,k,max,flag=0,shit=0,l; printf("”Inputm,n: \n””); scanf(””%d,%d””,&n,&l); printf(””Inputmatrix: \n"”); for(i=0;i〈n;i++) for(j=0;j scanf(”"%d"”,&a[i][j]); for(i=0;i〈n;i++) { flag=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案 语言程序设计 精髓 MOOC 慕课 612 编程 答案