哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx
《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx》由会员分享,可在线阅读,更多相关《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx(60页珍藏版)》请在冰豆网上搜索。
哈工大C语言程序设计精髓MOOC慕课612周编程题答案
6。
1"/*下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:
如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出Inputerror!
并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。
目前程序存在错误,请将其修改正确。
并按照下面给出的运行示例检查程序。
*/
#includeh〉
#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(2736↙
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;}//ac〈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"#includeh〉
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;ifor(j=0;jscanf(””%d"",&m[i][j]);
}
}
printf("”Thetransposedmatrixis:
\n””);
for(i=0;i〈n;i++){
for(j=0;jprintf(”"%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!
注意:
为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输人样例中“_"代表空格,输出样例中“*"代表空格)
*/
#includeintmain()
{
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;iif(a[i]<=0){
s++;
}
}
if(sreturn1;
}
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〉
#includemain()
{
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;jscanf(”"%d"”,&a[i][j]);
for(i=0;i〈n;i++)
{
flag=0;