哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx

上传人:b****6 文档编号:3395151 上传时间:2022-11-22 格式:DOCX 页数:49 大小:27.41KB
下载 相关 举报
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx_第1页
第1页 / 共49页
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx_第2页
第2页 / 共49页
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx_第3页
第3页 / 共49页
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx_第4页
第4页 / 共49页
哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx

《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx》由会员分享,可在线阅读,更多相关《哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx(49页珍藏版)》请在冰豆网上搜索。

哈工大 C语言程序设计精髓 MOOC慕课 612周编程题答案.docx

哈工大C语言程序设计精髓MOOC慕课612周编程题答案

6.1"/*下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:

如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出Inputerror!

,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。

目前程序存在错误,请将其修改正确。

并按照下面给出的运行示例检查程序。

*/

#include

#include

intmain()

{

charscore[100];

intflag=0,i,s;

chargrade;

printf(""Pleaseinputscore:

\n"");

while

(1)

{

flag=0;

scanf(""%s"",score);

for(i=0;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

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

28↙

men=0,women=4,children=32

程序的运行结果示例2:

Inputn(27

36↙

men=3,women=3,children=30

程序的运行结果示例3:

Inputn(27

60↙

men=2,women=14,children=20

men=7,women=7,children=22

men=12,women=0,children=24

输入提示:

""Inputn(27

\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

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

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

intmedian(inta,intb,intc)

{

if(a

{

if(b

else{returna

c:

a;}//a

c

}

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

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

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

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

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

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

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

{

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

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

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

#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

for(j=0;j

scanf(""%d"",&a[i][j]);

for(i=0;i

{

flag=0;

m=a[i][0];

for(j=0;j

if(a[i][j]>m)

{

m=a[i][j];

max=j;

}

for(k=0;k

if(a[k][max]<=m&&k!

=i)

{

flag=1;

break;

}

}

if(flag==0){

printf(""a[%d][%d]is%d\n"",i,max,m);shit=1;break;

}

}

if(shit==0)

printf(""Nosaddlepoint!

\n"");

}"

9.4"/*

输入一串字符(字符数小于80),以回车表示输入结束,编程计算并输出这串字符中连续重复次数最多的字符和重复次数。

如果重复次数最多的字符有两个,则输出最后出现的那一个。

已知函数原型:

//函数功能:

统计字符串中连续重复次数最多的字符及其重复的次数

//函数参数:

str指向待统计的字符串,指针形参tag返回重复字符最后出现的下标位置

//函数返回值:

返回字符重复的次数

intCountRepeatStr(charstr[],int*tag);

求解思路:

设置一个计数器,遍历字符串中的所有字符,若str[i]==str[i+1],则计数器加1,同时判断计数器的值是否大于记录的最大重复次数max,若大于,则用计数器的值更新max,并记录该字符最后出现的位置i+1.若str[i]!

=str[i+1],则计数器重新初始化为1。

遍历结束时,函数返回max的值。

程序运行结果示例1:

Inputastring:

5:

5

程序运行结果示例2:

Inputastring:

sgf222257↙

2:

4

输入提示信息:

""Inputastring:

\n""

输入格式:

用gets()输入字符串

输出格式:

""%c:

%d\n""

*/

#include

#include

intmain()

{

chara[80]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1